Skip to content

Commit 4451f4d

Browse files
chore: release v4.8.2 (#5073)
## Summary 5 new features, 19 improvements, 23 bug fixes. ## Breaking changes - Query dashboard APIs reject run tokens and public access tokens without user delegation. Existing API key access, including restricted keys with the required query scopes, is unchanged. MCP dashboard access remains supported through delegated tokens for current organization members. - The legacy `clickhouse` event store is retired: task events now go to `clickhouse_v2`. If you self-host with `EVENT_REPOSITORY_DEFAULT_STORE=clickhouse`, switch it to `clickhouse_v2` and follow the self-hosting guide to copy older events, which no longer show until you do. ## Improvements - Deployed tasks now keep a valid short-lived run token for their whole run: the token is refreshed during long runs and before a run resumes from a checkpoint. A warm-started task no longer keeps the previous run's token when the next run has none, and run credentials are left out of runner debug logs. ([`aa9de9d94`](aa9de9d)) - Upgrade `socket.io-client` to 4.8.4 so projects using the SDK and CLI install `ws` 8.21 instead of 8.17.1, which has published advisories (GHSA-96hv-2xvq-fx4p, GHSA-58qx-3vcg-4xpx). The old pin blocked upgrading `ws` without a package manager override. ([`2df9860b4`](2df9860)) - Adds the `bun-1.4` runtime. `runtime: "bun-1.4"` deploys on Bun 1.4.4 in a Bun-only image with no Node.js binary, and the run controller itself runs under Bun. `runtime: "bun"` is unchanged (Bun 1.3 with Node.js alongside it); `bun-legacy` is accepted as an explicit spelling of the same runtime. On Bun 1.4 the worker no longer crashes at startup on the `--no-warnings=ExperimentalWarning` flag. ([`a8a87850b`](a8a8785)) - Add an experimental Convex component for triggering tasks transactionally and reading their status and results through reactive queries, without configuring webhooks. ([`3c1cf656c`](3c1cf65)) - Run metadata operations now reject JSON-path keys that use escaped dots to reach `__proto__`, `constructor` or `prototype`. ([`dce5048a8`](dce5048)) - Use short-lived run tokens for supported SDK operations inside deployed tasks when available, retaining environment-key compatibility for unsupported operations and missing or expired tokens. Explicit credentials still take precedence. Public-token helpers use server-side minting with run tokens rather than signing locally. ([`5a1c14239`](5a1c142)) Project and organization queries, and branch overrides targeting another PREVIEW or DEVELOPMENT environment, keep using compatibility credentials. Branch headers do not change credential selection in STAGING or PRODUCTION. Chat subscriptions reread implicit credentials for each connection. - `runs.subscribeToRun` now ends after the run completes. The `for await` loop exits right after the update with the final status, and the subscription stops its connection, so a script that subscribes to a run exits on its own. Pass `stopOnCompletion: false` to keep the subscription open after completion. ([`485ab83aa`](485ab83)) - Add `SupervisorHttpClient.releaseRun`, which gives back a dequeued run the worker never started so the platform requeues it at once instead of after the pending execution timeout. ([`ba51e5573`](ba51e55)) - The supervisor keeps its run notification subscriptions across reconnects to the webapp, and reconnects when the webapp turns its handshake away, so cancellations and resolved waits keep reaching running tasks after a webapp restart or deploy. ([`a9e69ab7d`](a9e69ab)) - Asymmetric webhook sources can now verify ECDSA P-384 signatures (`algorithm: "ecdsa-p384"`, SHA-384) and providers that sign a SHA-256 digest of the signing string (`prehash: "sha256"`). ECDSA signatures are accepted in DER or raw `r||s` form. ([`4ed2e3780`](4ed2e37)) - The bundled `trigger-cost-savings` skill now notes that a webhook delivery starts no run when no subscriber's filter matches, so it costs no compute. ([#5051](#5051)) - Stream a sub-agent's reply through a parent tool call with `chat.forwardSubAgent`. Each chunk is written to the parent chat once and the tool resolves with the sub-agent's final message, so streaming a sub-agent costs bytes in proportion to its reply. Yielding `stream.messages()` snapshots resends the whole message on every chunk, which grows with the square of the reply. ([`bdc994c4d`](bdc994c)) ```ts execute: async ({ topic }, { toolCallId, abortSignal }) => { const stream = await researcher.sendMessage(topic, { abortSignal }); return await chat.forwardSubAgent(stream, { toolCallId }); }, ``` Render it while it runs with `useSubAgentMessages()` from `@trigger.dev/sdk/chat/react` (or `createSubAgentMessages()` outside React). ## Bug fixes - Fix `chat.inject` messages added from a tool mid-turn being saved before the assistant's response. They now stay after the tool result, where the model saw them, so the next turn keeps the same prompt prefix. If you roll `@trigger.dev/sdk` back to an earlier version, chats saved by this version lose these mid-turn `chat.inject` messages from the model's context, though the chat history shown in the UI keeps them. ([`fc33769a5`](fc33769)) - Fix a `chat.agent` turn failing after a head start that ended with two or more parallel tool calls. When those tools finished out of call order, the agent sent their results to the model twice on the next step, and the provider rejected the request (Anthropic: "each tool_use must have a single result"). Each handed-over tool result is now sent once. ([`d06ee5825`](d06ee58)) ## Server changes These changes affect the self-hosted Docker image and Trigger.dev Cloud: - Add "Ignored paths" to the Git settings: pushes and pull request updates that only change files matching these patterns no longer create a deployment. Ignored paths don't apply while the Vercel integration is connected. - The `metrics` query table now includes queue size (`queue.size.*`) and webhook limit metrics (`webhook.waiters.*`, `webhook.processing.*`, `webhook.ingress.*`), so you can chart and alert on queue capacity and webhook rate limits. - New Limits alerts: watch the limits that can interrupt or degrade runtime flow, one at a time or combined into a single alert with "any" or "all" and the signals you choose (limit reached or approaching), in the dashboard, the API and the agent. - Expand short-lived run-token support to task APIs, with permission checks for packets, metadata, streams and waits. Run tokens last one hour independently of root-key rotation and cannot be individually revoked. They can mint public access tokens for up to 30 days; those tokens may outlive the run token that minted them. - Hosted webhook endpoints can verify ECDSA P-384 (SHA-384) signatures, ECDSA signatures in raw `r||s` form, and RSA signatures made over a SHA-256 digest of the signing string (`prehash: "sha256"`). - Older runs now load their trace, span details and run events faster. A span that finishes more than a week after its run shows as still in progress. - The run page now loads large traces progressively and updates live runs incrementally, so big traces open faster and open run pages no longer reload the whole trace while a run is executing. The run trace API can also page large traces. - Query alerts now accept queries whose columns are computed from other aggregate columns, such as a percentage of two aggregates. When a query can't be watched, the Watch button stays visible but disabled and explains why. - Archiving unused queues from the Concurrency page is now available on all instances, including self-hosted. - Runs whose container or pod could not be created, or whose pod failed before the run started, can now be requeued straight away instead of waiting for the pending execution timeout. Both are off by default: set `RELEASE_UNSTARTED_RUNS_ENABLED=true` on a supervisor for creates that fail, and `RELEASE_FAILED_POD_RUNS_ENABLED=true` for pods that fail. - Session external ids can no longer contain a `/channels` path segment (for example `chat-1/channels/support`) or end in `:channels`, since both forms name a session's channels. Creating a session with one now returns a 422 validation error. - Selecting a span that started a session now shows a link to that session in the span panel, so you can jump from an orchestrator's run to its sub-agents. - Fix the batch results API returning an empty list of items for completed batches. It now returns every run's result in trigger order. - Fix the batch results API returning "Batch not found" for some batches that the batch retrieve API could see. - Fix the run page continuing to live-update forever for some cancelled runs. These runs now show as finished, and loading their trace is faster. - Fix fetching the trace of a child run through the API sometimes being very slow or failing. These requests now return quickly. - Run metadata changes sent with an attempt's completion, such as increments and appends, are no longer applied a second time when a completion that already went through is retried. - Changing your email address now requires clicking a confirmation button after opening the emailed link. - Fix intermittent read and subscription errors when multiple clients first open the same realtime stream. - Fix intermittent subscription failures and missed records when reading newly created realtime streams. - Fix the dashboard's task list and task filters occasionally going stale when several `trigger dev` sessions register at the same time. - Deleting an organization now cancels its billing subscription. - Fix the dashboard agent's suggested threshold and window being dropped when it prefills a query alert. - Queries now reject an alias that reuses a table's alias in the same SELECT, unless the aliased expression contains an aggregate or window function (`count() AS runs FROM runs` still works). - Queries using `WITH <expression> AS <name>` now run instead of failing with a syntax error, and the name can be used in the rest of the query. The name can't reuse a table alias used anywhere in the query. - Fix a rare case where clock skew between run engine instances could leave a run executing after its task finished, or stop a wait from ever resuming. A run's state changes are now always ordered in the order they happened, regardless of clock skew. - A run whose attempt start was interrupted no longer gets stuck executing without its task ever running, then failing as stalled. - Fixed dropdowns sometimes picking an option by themselves when typing with some on-screen keyboards or autofill. - New runs a session starts are now always linked to their session, so their Agent tab no longer fails to load because the link was missing. - Runs no longer lose their worker's token when the cluster answers the worker's create with a 408, so the worker starts instead of waiting for a requeue. - Runs no longer lose their worker's token when a concurrent delivery or a lost answer leaves a failed worker create's token behind: the worker that took the name keeps it, and a token nothing will use is cleaned up instead of being kept. - Deleting an organization now uninstalls its Vercel integration. A Vercel installation disabled on Vercel's side is reported as such instead of as an expired connection, and removing it no longer reports success. - Promoting or rolling back a deployment now updates your webhook endpoints to match the deployment that's now current. <details> <summary>Raw changeset output</summary> # Releases ## @trigger.dev/build@4.8.2 ### Patch Changes - Updated dependencies: - `@trigger.dev/core@4.8.2` ## trigger.dev@4.8.2 ### Patch Changes - Deployed tasks now keep a valid short-lived run token for their whole run: the token is refreshed during long runs and before a run resumes from a checkpoint. A warm-started task no longer keeps the previous run's token when the next run has none, and run credentials are left out of runner debug logs. ([`aa9de9d94`](aa9de9d)) - Upgrade `socket.io-client` to 4.8.4 so projects using the SDK and CLI install `ws` 8.21 instead of 8.17.1, which has published advisories (GHSA-96hv-2xvq-fx4p, GHSA-58qx-3vcg-4xpx). The old pin blocked upgrading `ws` without a package manager override. ([`2df9860b4`](2df9860)) - Adds the `bun-1.4` runtime. `runtime: "bun-1.4"` deploys on Bun 1.4.4 in a Bun-only image with no Node.js binary, and the run controller itself runs under Bun. `runtime: "bun"` is unchanged (Bun 1.3 with Node.js alongside it); `bun-legacy` is accepted as an explicit spelling of the same runtime. On Bun 1.4 the worker no longer crashes at startup on the `--no-warnings=ExperimentalWarning` flag. ([`a8a87850b`](a8a8785)) - Updated dependencies: - `@trigger.dev/core@4.8.2` - `@trigger.dev/build@4.8.2` - `@trigger.dev/schema-to-json@4.8.2` ## @trigger.dev/convex@4.8.2 ### Patch Changes - Add an experimental Convex component for triggering tasks transactionally and reading their status and results through reactive queries, without configuring webhooks. ([`3c1cf656c`](3c1cf65)) ## @trigger.dev/core@4.8.2 ### Patch Changes - Run metadata operations now reject JSON-path keys that use escaped dots to reach `__proto__`, `constructor` or `prototype`. ([`dce5048a8`](dce5048)) - Deployed tasks now keep a valid short-lived run token for their whole run: the token is refreshed during long runs and before a run resumes from a checkpoint. A warm-started task no longer keeps the previous run's token when the next run has none, and run credentials are left out of runner debug logs. ([`aa9de9d94`](aa9de9d)) - Use short-lived run tokens for supported SDK operations inside deployed tasks when available, retaining environment-key compatibility for unsupported operations and missing or expired tokens. Explicit credentials still take precedence. Public-token helpers use server-side minting with run tokens rather than signing locally. ([`5a1c14239`](5a1c142)) Project and organization queries, and branch overrides targeting another PREVIEW or DEVELOPMENT environment, keep using compatibility credentials. Branch headers do not change credential selection in STAGING or PRODUCTION. Chat subscriptions reread implicit credentials for each connection. - Upgrade `socket.io-client` to 4.8.4 so projects using the SDK and CLI install `ws` 8.21 instead of 8.17.1, which has published advisories (GHSA-96hv-2xvq-fx4p, GHSA-58qx-3vcg-4xpx). The old pin blocked upgrading `ws` without a package manager override. ([`2df9860b4`](2df9860)) - `runs.subscribeToRun` now ends after the run completes. The `for await` loop exits right after the update with the final status, and the subscription stops its connection, so a script that subscribes to a run exits on its own. Pass `stopOnCompletion: false` to keep the subscription open after completion. ([`485ab83aa`](485ab83)) - Add `SupervisorHttpClient.releaseRun`, which gives back a dequeued run the worker never started so the platform requeues it at once instead of after the pending execution timeout. ([`ba51e5573`](ba51e55)) - The supervisor keeps its run notification subscriptions across reconnects to the webapp, and reconnects when the webapp turns its handshake away, so cancellations and resolved waits keep reaching running tasks after a webapp restart or deploy. ([`a9e69ab7d`](a9e69ab)) - Adds the `bun-1.4` runtime. `runtime: "bun-1.4"` deploys on Bun 1.4.4 in a Bun-only image with no Node.js binary, and the run controller itself runs under Bun. `runtime: "bun"` is unchanged (Bun 1.3 with Node.js alongside it); `bun-legacy` is accepted as an explicit spelling of the same runtime. On Bun 1.4 the worker no longer crashes at startup on the `--no-warnings=ExperimentalWarning` flag. ([`a8a87850b`](a8a8785)) - Asymmetric webhook sources can now verify ECDSA P-384 signatures (`algorithm: "ecdsa-p384"`, SHA-384) and providers that sign a SHA-256 digest of the signing string (`prehash: "sha256"`). ECDSA signatures are accepted in DER or raw `r||s` form. ([`4ed2e3780`](4ed2e37)) ## @trigger.dev/linear@4.8.2 ### Patch Changes - Updated dependencies: - `@trigger.dev/sdk@4.8.2` - `@trigger.dev/core@4.8.2` ## @trigger.dev/python@4.8.2 ### Patch Changes - Updated dependencies: - `@trigger.dev/sdk@4.8.2` - `@trigger.dev/core@4.8.2` - `@trigger.dev/build@4.8.2` ## @trigger.dev/react-hooks@4.8.2 ### Patch Changes - Updated dependencies: - `@trigger.dev/core@4.8.2` ## @trigger.dev/redis-worker@4.8.2 ### Patch Changes - Updated dependencies: - `@trigger.dev/core@4.8.2` ## @trigger.dev/rsc@4.8.2 ### Patch Changes - Adds the `bun-1.4` runtime. `runtime: "bun-1.4"` deploys on Bun 1.4.4 in a Bun-only image with no Node.js binary, and the run controller itself runs under Bun. `runtime: "bun"` is unchanged (Bun 1.3 with Node.js alongside it); `bun-legacy` is accepted as an explicit spelling of the same runtime. On Bun 1.4 the worker no longer crashes at startup on the `--no-warnings=ExperimentalWarning` flag. ([`a8a87850b`](a8a8785)) - Updated dependencies: - `@trigger.dev/core@4.8.2` ## @trigger.dev/schema-to-json@4.8.2 ### Patch Changes - Updated dependencies: - `@trigger.dev/core@4.8.2` ## @trigger.dev/slack@4.8.2 ### Patch Changes - Updated dependencies: - `@trigger.dev/sdk@4.8.2` - `@trigger.dev/core@4.8.2` ## @trigger.dev/sdk@4.8.2 ### Patch Changes - Fix `chat.inject` messages added from a tool mid-turn being saved before the assistant's response. They now stay after the tool result, where the model saw them, so the next turn keeps the same prompt prefix. If you roll `@trigger.dev/sdk` back to an earlier version, chats saved by this version lose these mid-turn `chat.inject` messages from the model's context, though the chat history shown in the UI keeps them. ([`fc33769a5`](fc33769)) - The bundled `trigger-cost-savings` skill now notes that a webhook delivery starts no run when no subscriber's filter matches, so it costs no compute. ([#5051](#5051)) - Stream a sub-agent's reply through a parent tool call with `chat.forwardSubAgent`. Each chunk is written to the parent chat once and the tool resolves with the sub-agent's final message, so streaming a sub-agent costs bytes in proportion to its reply. Yielding `stream.messages()` snapshots resends the whole message on every chunk, which grows with the square of the reply. ([`bdc994c4d`](bdc994c)) ```ts execute: async ({ topic }, { toolCallId, abortSignal }) => { const stream = await researcher.sendMessage(topic, { abortSignal }); return await chat.forwardSubAgent(stream, { toolCallId }); }, ``` Render it while it runs with `useSubAgentMessages()` from `@trigger.dev/sdk/chat/react` (or `createSubAgentMessages()` outside React). - Fix a `chat.agent` turn failing after a head start that ended with two or more parallel tool calls. When those tools finished out of call order, the agent sent their results to the model twice on the next step, and the provider rejected the request (Anthropic: "each tool_use must have a single result"). Each handed-over tool result is now sent once. ([`d06ee5825`](d06ee58)) - Use short-lived run tokens for supported SDK operations inside deployed tasks when available, retaining environment-key compatibility for unsupported operations and missing or expired tokens. Explicit credentials still take precedence. Public-token helpers use server-side minting with run tokens rather than signing locally. ([`5a1c14239`](5a1c142)) Project and organization queries, and branch overrides targeting another PREVIEW or DEVELOPMENT environment, keep using compatibility credentials. Branch headers do not change credential selection in STAGING or PRODUCTION. Chat subscriptions reread implicit credentials for each connection. - Updated dependencies: - `@trigger.dev/core@4.8.2` </details> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 48316a8 commit 4451f4d

75 files changed

Lines changed: 171 additions & 345 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.changeset/chat-inject-mid-turn-order.md‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎.changeset/convex-component.md‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎.changeset/cost-skill-webhook-filters.md‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎.changeset/forward-sub-agent.md‎

Lines changed: 0 additions & 14 deletions
This file was deleted.

‎.changeset/head-start-parallel-tool-results.md‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎.changeset/metadata-key-escaped-segments.md‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

‎.changeset/refresh-run-tokens.md‎

Lines changed: 0 additions & 6 deletions
This file was deleted.

‎.changeset/short-lived-run-api-credentials.md‎

Lines changed: 0 additions & 8 deletions
This file was deleted.

‎.changeset/socket-io-client-ws.md‎

Lines changed: 0 additions & 6 deletions
This file was deleted.

‎.changeset/subscribe-to-run-ends.md‎

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)