发布

  • chore: release v4.5.0-rc.4 (#3788)

    frostbyte_neo 发布于 2026-06-02 08:35:14 +00:00 | 779 次提交 在此版本后已推送到 main

    Summary

    1 new feature, 5 improvements.

    Highlights

    • Mollifier mutateSnapshot now enforces a tag cap: an append_tags
      patch carrying maxTags returns "limit_exceeded" (writing nothing)
      when the deduped tag count would exceed the limit, so a buffered run
      can't accumulate more tags via the tags API than the trigger validator
      allows at creation.
      (#3756)

    Improvements

    • Mollifier buffer extensions: idempotency dedup, an atomic
      mutateSnapshot API, metadata CAS, claim primitives, and a
      MollifierSnapshot type. The buffer's Redis client now reconnects with
      jittered backoff so a fleet of clients doesn't stampede Redis in
      lockstep after a blip.
      (#3752)
    • Add onTerminalFailure callback to MollifierDrainerOptions so the
      customer's run lands a SYSTEM_FAILURE PG row even when the drainer
      exhausts maxAttempts on a retryable PG error. Previously,
      retryable-error exhaustion called buffer.fail() directly, which
      atomically marks FAILED + DELs the entry hash with no PG write — silent
      data loss when PG was unreachable across the full retry budget. The
      callback fires before buffer.fail() on any terminal path (cause: "non-retryable" or "max-attempts-exhausted"); throwing a retryable
      error from the callback causes the drainer to requeue rather than fail.
      (#3754)
    • Bump @s2-dev/streamstore to 0.22.10 to fix a
      TASK_RUN_UNCAUGHT_EXCEPTION ("Invalid state: Unable to enqueue") when
      a chat.agent turn is aborted mid-stream.
      (#3792)
    • Coerce numeric concurrencyKey values to string at the API boundary
      across tasks.trigger, tasks.batchTrigger, and the Phase-2 streaming
      batch endpoint.
      (#3789)
    • Add a tools option to chat.agent. Declaring your tools here
      threads them into the SDK's internal convertToModelMessages, so each
      tool's toModelOutput is re-applied when prior-turn history is
      re-converted.
      (#3790)
    Raw changeset output

    ⚠️⚠️⚠️⚠️⚠️⚠️

    main is currently in pre mode so this branch has prereleases
    rather than normal releases. If you want to exit prereleases, run
    changeset pre exit on main.

    ⚠️⚠️⚠️⚠️⚠️⚠️

    Releases

    @trigger.dev/redis-worker@4.5.0-rc.4

    Minor Changes

    • Mollifier buffer extensions: idempotency dedup, an atomic
      mutateSnapshot API, metadata CAS, claim primitives, and a
      MollifierSnapshot type. The buffer's Redis client now reconnects with
      jittered backoff so a fleet of clients doesn't stampede Redis in
      lockstep after a blip.
      (#3752)
    • Add onTerminalFailure callback to MollifierDrainerOptions so the
      customer's run lands a SYSTEM_FAILURE PG row even when the drainer
      exhausts maxAttempts on a retryable PG error. Previously,
      retryable-error exhaustion called buffer.fail() directly, which
      atomically marks FAILED + DELs the entry hash with no PG write — silent
      data loss when PG was unreachable across the full retry budget. The
      callback fires before buffer.fail() on any terminal path (cause: "non-retryable" or "max-attempts-exhausted"); throwing a retryable
      error from the callback causes the drainer to requeue rather than fail.
      (#3754)

    Patch Changes

    • Pipeline the per-entry HGETALL fetches in
      MollifierBuffer.listEntriesForEnv. The previous serial implementation
      issued one Redis round-trip per runId returned by LRANGE, which
      dominated stale-sweep wall-time at any meaningful backlog (at the
      sweep's default maxCount=1000, this is ~1000 RTTs per env per pass).
      Behaviour is unchanged — entries are still skipped when the entry hash
      has been torn down by a concurrent drainer ack/fail between the LRANGE
      and the HGETALL.
      (#3752)
    • Mollifier mutateSnapshot now enforces a tag cap: an append_tags
      patch carrying maxTags returns "limit_exceeded" (writing nothing)
      when the deduped tag count would exceed the limit, so a buffered run
      can't accumulate more tags via the tags API than the trigger validator
      allows at creation.
      (#3756)
    • Updated dependencies:
      • @trigger.dev/core@4.5.0-rc.4

    @trigger.dev/build@4.5.0-rc.4

    Patch Changes

    • Updated dependencies:
      • @trigger.dev/core@4.5.0-rc.4

    trigger.dev@4.5.0-rc.4

    Patch Changes

    • Bump @s2-dev/streamstore to 0.22.10 to fix a
      TASK_RUN_UNCAUGHT_EXCEPTION ("Invalid state: Unable to enqueue") when
      a chat.agent turn is aborted mid-stream.
      (#3792)
    • Updated dependencies:
      • @trigger.dev/core@4.5.0-rc.4
      • @trigger.dev/build@4.5.0-rc.4
      • @trigger.dev/schema-to-json@4.5.0-rc.4

    @trigger.dev/core@4.5.0-rc.4

    Patch Changes

    • Coerce numeric concurrencyKey values to string at the API boundary
      across tasks.trigger, tasks.batchTrigger, and the Phase-2 streaming
      batch endpoint.
      (#3789)
    • Bump @s2-dev/streamstore to 0.22.10 to fix a
      TASK_RUN_UNCAUGHT_EXCEPTION ("Invalid state: Unable to enqueue") when
      a chat.agent turn is aborted mid-stream.
      (#3792)

    @trigger.dev/plugins@4.5.0-rc.4

    Patch Changes

    • Updated dependencies:
      • @trigger.dev/core@4.5.0-rc.4

    @trigger.dev/python@4.5.0-rc.4

    Patch Changes

    • Updated dependencies:
      • @trigger.dev/sdk@4.5.0-rc.4
      • @trigger.dev/core@4.5.0-rc.4
      • @trigger.dev/build@4.5.0-rc.4

    @trigger.dev/react-hooks@4.5.0-rc.4

    Patch Changes

    • Updated dependencies:
      • @trigger.dev/core@4.5.0-rc.4

    @trigger.dev/rsc@4.5.0-rc.4

    Patch Changes

    • Updated dependencies:
      • @trigger.dev/core@4.5.0-rc.4

    @trigger.dev/schema-to-json@4.5.0-rc.4

    Patch Changes

    • Updated dependencies:
      • @trigger.dev/core@4.5.0-rc.4

    @trigger.dev/sdk@4.5.0-rc.4

    Patch Changes

    • Add a tools option to chat.agent. Declaring your tools here
      threads them into the SDK's internal convertToModelMessages, so each
      tool's toModelOutput is re-applied when prior-turn history is
      re-converted.
      (#3790)

      chat.agent({
        tools: { readFile, search },
        run: async ({ messages, tools, signal }) =>
          streamText({ model, messages, tools, abortSignal: signal }),
      });
      

    Also exports InferChatUIMessageFromTools<typeof tools> to derive the
    chat UIMessage type (typed tool parts) directly from a tool set.

    • Updated dependencies:
      • @trigger.dev/core@4.5.0-rc.4

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

    下载附件