Repository navigation
chore: release v4.8.0 - #5044
Open
github-actions[bot] wants to merge 1 commit into
Open
github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
Contributor
|
Important Review skippedBot user detected. To trigger a single review, invoke the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 21, 2026 08:49
3710e56 to
cb4fcce
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 21, 2026 09:04
cb4fcce to
7cb5a99
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 21, 2026 10:03
7cb5a99 to
19f12a1
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 21, 2026 10:58
19f12a1 to
c3500d5
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 21, 2026 11:22
c3500d5 to
cb32c2e
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 21, 2026 12:45
cb32c2e to
a9b6ea2
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 21, 2026 13:31
a9b6ea2 to
ffdd360
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 06:23
ffdd360 to
a332ad0
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 08:30
a332ad0 to
d79fe04
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 09:04
d79fe04 to
a074804
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 11:53
a074804 to
3a71251
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 13:38
3a71251 to
47215cf
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 14:22
47215cf to
e9fc1b5
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 15:48
e9fc1b5 to
8310f32
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 16:28
8310f32 to
cb66d72
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 22, 2026 16:51
cb66d72 to
f11d1ae
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
3 new features, 12 improvements, 4 bug fixes.
Improvements
Route verified webhooks into agent sessions with
chat.event({ endpoint, key }), and connect external chat surfaces withchat.channels.custom({ endpoint }). Both subscribe to a shared webhook endpoint, so an agent and your other webhook tasks can use the same provider URL. Channels support reply delivery, session binding, conversation seeding, and lifecycle reactions, and a failed turn posts a short line instead of the error (errorMessagesets it, as a string or a function of the failure). Usechat.createWatchToken()to watch a session from another surface. (d6955ee9f)A connector can also stream replies natively (
stream()), mirror the session's state into the surface (lifecycle()), show tool calls as they run (progress()), stop a running turn from the surface (onControl()), post approvals and tool controls and resume the run from a verified click, download files only the surface can read (download()), and acknowledge or fold in messages that arrive mid-turn (received(),pendingMessages).Add hosted webhooks: declare an endpoint once with
webhooks.endpoint.define({ id, source })and Trigger.dev hosts its URL, verifies every request, and routes each event to the endpoint's subscribers. Subscribe tasks withwebhook({ endpoint, filter, onEvent }), each with its own type-safe filter, and pause a run until a matching webhook arrives withwebhooks.waiter.create()andwebhooks.waiter.wait(). (d6955ee9f)Sources cover presets (
webhooks.stripe(),webhooks.github(),webhooks.svix(),webhooks.discord(), and others), named providers (webhooks.clerk(),webhooks.shopify(), and more) andwebhooks.custom<T>(config), and most carry a setup prompt an AI coding agent can follow to register the endpoint. Retries are deduplicated on the provider's own event or delivery id where it sends one. Filters, keys and waitermatchpaths share theevent.,header.andwebhook.namespaces, and filters accept== null/!= nullpresence checks andevent any (...)over a payload that is an array of events.webhook()takestask()options such asqueue,machineandretry. The HTTP API lists endpoints and deliveries, replays deliveries, and creates and cancels waiters, and both it and the MCP server can read an endpoint's setup prompt and generate or store its signing secret.The
generate_webhook_secretandset_webhook_secretMCP tools take an optionalpreviousSecretTtlSecondsto keep accepting a webhook endpoint's old signing secret while the provider switches to the new one (up to 7 days), and report when the old secret stops working. (98adb6662)Realtime streams now reconnect and resume when the stream backend reports a failed read mid-stream, instead of ending early as if the stream had finished. This affects
runs.subscribeToRunwith streams,useRealtimeRunWithStreams, and chat streams. (23730b034)HMAC webhook verifier configs accept
additionalSignatureHeaders: more headers that can carry a signature, matched as alternatives tosignatureHeader. Providers that send a second signature during a secret rotation (Hookdeck'sx-hookdeck-signature-2) keep verifying through the rotation. (08d1ddbd3)Add
webhooks.hookdeck(), a source for deliveries relayed through a Hookdeck connection. It verifies thex-hookdeck-signatureheader with the project's signing secret, keeps verifying while the secret is being rolled (Hookdeck sends the previous secret's signature inx-hookdeck-signature-2), and deduplicates retries onx-hookdeck-eventid. The event is the original provider's payload, so pass its type:webhooks.hookdeck<Stripe.Event>(). If the Hookdeck project's header prefix was changed, pass it aswebhooks.hookdeck({ headerPrefix })so retries keep deduplicating. (51b39fbc6)Add
@trigger.dev/linear: turn achat.agentinto a Linear agent. Assign it an issue or @mention it, and Linear's agent session becomes a durable Trigger.dev session: the reply posts back to Linear, tool calls show as activities,linearPlanTool()keeps the plan Linear shows as a checklist, and approvals are Approve and Deny options that resume the run. (1586c4a3f)The first turn gets the issue's context and earlier comments, images and PDFs in the issue reach the model, a Stop in Linear winds the turn down, and
errorMessagesets the text a failed turn shows.Add
@trigger.dev/slack: turn achat.agentinto a native Slack agent. Each DM or channel thread is a durable session, the reply streams into the thread with the turn's tool calls shown as a plan, approvals are Approve and Deny buttons, and Slack's stop button stops the turn. (6e715da77)startOndecides which channel messages start a session (appMentions()answers when the agent is @mentioned). Images and PDFs people share reach the model, messages sent while the agent is answering can be folded into the reply, tools can post their own buttons, andownWorkspaceOnlyignores Slack Connect guests.The
streamTextpassed to achat.agent'srun()now turns AI SDK telemetry on by default, so each model step and tool call shows up as a span in the run trace even when the agent doesn't store a prompt withchat.prompt.set(). An agent withtelemetry: { recordUserMessage: false }gets these spans without prompt and response content, including when it stores a prompt (whose variables are left out of the span metadata). Passexperimental_telemetry: { isEnabled: false }at the call site to turn them off, orrecordInputs: false/recordOutputs: falseto keep them without content. (bd7cc3525)Server changes
These changes affect the self-hosted Docker image and Trigger.dev Cloud:
KUBERNETES_POD_RESERVED_SOURCE_PORTSon the supervisor (for example50080,50081) to stop runs using those ports for outbound connections, which is useful to avoid port clashes.rotate-secretandsecretendpoints accept an optionalpreviousSecretTtlSecondsand returnpreviousSecretExpiresAt. With no value, the old secret stops working immediately, as before.TRIGGER_DASHBOARD_URLenvironment variable with the dashboard's address, so a task can link to its run (${TRIGGER_DASHBOARD_URL}/runs/${ctx.run.id}) on any Trigger.dev instance. ATRIGGER_DASHBOARD_URLyou set on the project still wins.Raw changeset output
Releases
trigger.dev@4.8.0
Minor Changes
Route verified webhooks into agent sessions with
chat.event({ endpoint, key }), and connect external chat surfaces withchat.channels.custom({ endpoint }). Both subscribe to a shared webhook endpoint, so an agent and your other webhook tasks can use the same provider URL. Channels support reply delivery, session binding, conversation seeding, and lifecycle reactions, and a failed turn posts a short line instead of the error (errorMessagesets it, as a string or a function of the failure). Usechat.createWatchToken()to watch a session from another surface. (d6955ee9f)A connector can also stream replies natively (
stream()), mirror the session's state into the surface (lifecycle()), show tool calls as they run (progress()), stop a running turn from the surface (onControl()), post approvals and tool controls and resume the run from a verified click, download files only the surface can read (download()), and acknowledge or fold in messages that arrive mid-turn (received(),pendingMessages).Add hosted webhooks: declare an endpoint once with
webhooks.endpoint.define({ id, source })and Trigger.dev hosts its URL, verifies every request, and routes each event to the endpoint's subscribers. Subscribe tasks withwebhook({ endpoint, filter, onEvent }), each with its own type-safe filter, and pause a run until a matching webhook arrives withwebhooks.waiter.create()andwebhooks.waiter.wait(). (d6955ee9f)Sources cover presets (
webhooks.stripe(),webhooks.github(),webhooks.svix(),webhooks.discord(), and others), named providers (webhooks.clerk(),webhooks.shopify(), and more) andwebhooks.custom<T>(config), and most carry a setup prompt an AI coding agent can follow to register the endpoint. Retries are deduplicated on the provider's own event or delivery id where it sends one. Filters, keys and waitermatchpaths share theevent.,header.andwebhook.namespaces, and filters accept== null/!= nullpresence checks andevent any (...)over a payload that is an array of events.webhook()takestask()options such asqueue,machineandretry. The HTTP API lists endpoints and deliveries, replays deliveries, and creates and cancels waiters, and both it and the MCP server can read an endpoint's setup prompt and generate or store its signing secret.Patch Changes
generate_webhook_secretandset_webhook_secretMCP tools take an optionalpreviousSecretTtlSecondsto keep accepting a webhook endpoint's old signing secret while the provider switches to the new one (up to 7 days), and report when the old secret stops working. (98adb6662)@trigger.dev/core@4.8.0@trigger.dev/build@4.8.0@trigger.dev/schema-to-json@4.8.0@trigger.dev/core@4.8.0
Minor Changes
Add hosted webhooks: declare an endpoint once with
webhooks.endpoint.define({ id, source })and Trigger.dev hosts its URL, verifies every request, and routes each event to the endpoint's subscribers. Subscribe tasks withwebhook({ endpoint, filter, onEvent }), each with its own type-safe filter, and pause a run until a matching webhook arrives withwebhooks.waiter.create()andwebhooks.waiter.wait(). (d6955ee9f)Sources cover presets (
webhooks.stripe(),webhooks.github(),webhooks.svix(),webhooks.discord(), and others), named providers (webhooks.clerk(),webhooks.shopify(), and more) andwebhooks.custom<T>(config), and most carry a setup prompt an AI coding agent can follow to register the endpoint. Retries are deduplicated on the provider's own event or delivery id where it sends one. Filters, keys and waitermatchpaths share theevent.,header.andwebhook.namespaces, and filters accept== null/!= nullpresence checks andevent any (...)over a payload that is an array of events.webhook()takestask()options such asqueue,machineandretry. The HTTP API lists endpoints and deliveries, replays deliveries, and creates and cancels waiters, and both it and the MCP server can read an endpoint's setup prompt and generate or store its signing secret.Patch Changes
runs.subscribeToRunwith streams,useRealtimeRunWithStreams, and chat streams. (23730b034)additionalSignatureHeaders: more headers that can carry a signature, matched as alternatives tosignatureHeader. Providers that send a second signature during a secret rotation (Hookdeck'sx-hookdeck-signature-2) keep verifying through the rotation. (08d1ddbd3)generate_webhook_secretandset_webhook_secretMCP tools take an optionalpreviousSecretTtlSecondsto keep accepting a webhook endpoint's old signing secret while the provider switches to the new one (up to 7 days), and report when the old secret stops working. (98adb6662)webhooks.hookdeck(), a source for deliveries relayed through a Hookdeck connection. It verifies thex-hookdeck-signatureheader with the project's signing secret, keeps verifying while the secret is being rolled (Hookdeck sends the previous secret's signature inx-hookdeck-signature-2), and deduplicates retries onx-hookdeck-eventid. The event is the original provider's payload, so pass its type:webhooks.hookdeck<Stripe.Event>(). If the Hookdeck project's header prefix was changed, pass it aswebhooks.hookdeck({ headerPrefix })so retries keep deduplicating. (51b39fbc6)@trigger.dev/linear@4.8.0
Minor Changes
Add
@trigger.dev/linear: turn achat.agentinto a Linear agent. Assign it an issue or @mention it, and Linear's agent session becomes a durable Trigger.dev session: the reply posts back to Linear, tool calls show as activities,linearPlanTool()keeps the plan Linear shows as a checklist, and approvals are Approve and Deny options that resume the run. (1586c4a3f)The first turn gets the issue's context and earlier comments, images and PDFs in the issue reach the model, a Stop in Linear winds the turn down, and
errorMessagesets the text a failed turn shows.Patch Changes
@trigger.dev/sdk@4.8.0@trigger.dev/core@4.8.0@trigger.dev/slack@4.8.0
Minor Changes
Add
@trigger.dev/slack: turn achat.agentinto a native Slack agent. Each DM or channel thread is a durable session, the reply streams into the thread with the turn's tool calls shown as a plan, approvals are Approve and Deny buttons, and Slack's stop button stops the turn. (6e715da77)startOndecides which channel messages start a session (appMentions()answers when the agent is @mentioned). Images and PDFs people share reach the model, messages sent while the agent is answering can be folded into the reply, tools can post their own buttons, andownWorkspaceOnlyignores Slack Connect guests.Patch Changes
@trigger.dev/sdk@4.8.0@trigger.dev/core@4.8.0@trigger.dev/sdk@4.8.0
Minor Changes
Route verified webhooks into agent sessions with
chat.event({ endpoint, key }), and connect external chat surfaces withchat.channels.custom({ endpoint }). Both subscribe to a shared webhook endpoint, so an agent and your other webhook tasks can use the same provider URL. Channels support reply delivery, session binding, conversation seeding, and lifecycle reactions, and a failed turn posts a short line instead of the error (errorMessagesets it, as a string or a function of the failure). Usechat.createWatchToken()to watch a session from another surface. (d6955ee9f)A connector can also stream replies natively (
stream()), mirror the session's state into the surface (lifecycle()), show tool calls as they run (progress()), stop a running turn from the surface (onControl()), post approvals and tool controls and resume the run from a verified click, download files only the surface can read (download()), and acknowledge or fold in messages that arrive mid-turn (received(),pendingMessages).Add hosted webhooks: declare an endpoint once with
webhooks.endpoint.define({ id, source })and Trigger.dev hosts its URL, verifies every request, and routes each event to the endpoint's subscribers. Subscribe tasks withwebhook({ endpoint, filter, onEvent }), each with its own type-safe filter, and pause a run until a matching webhook arrives withwebhooks.waiter.create()andwebhooks.waiter.wait(). (d6955ee9f)Sources cover presets (
webhooks.stripe(),webhooks.github(),webhooks.svix(),webhooks.discord(), and others), named providers (webhooks.clerk(),webhooks.shopify(), and more) andwebhooks.custom<T>(config), and most carry a setup prompt an AI coding agent can follow to register the endpoint. Retries are deduplicated on the provider's own event or delivery id where it sends one. Filters, keys and waitermatchpaths share theevent.,header.andwebhook.namespaces, and filters accept== null/!= nullpresence checks andevent any (...)over a payload that is an array of events.webhook()takestask()options such asqueue,machineandretry. The HTTP API lists endpoints and deliveries, replays deliveries, and creates and cancels waiters, and both it and the MCP server can read an endpoint's setup prompt and generate or store its signing secret.Add
@trigger.dev/slack: turn achat.agentinto a native Slack agent. Each DM or channel thread is a durable session, the reply streams into the thread with the turn's tool calls shown as a plan, approvals are Approve and Deny buttons, and Slack's stop button stops the turn. (6e715da77)startOndecides which channel messages start a session (appMentions()answers when the agent is @mentioned). Images and PDFs people share reach the model, messages sent while the agent is answering can be folded into the reply, tools can post their own buttons, andownWorkspaceOnlyignores Slack Connect guests.Add
@trigger.dev/linear: turn achat.agentinto a Linear agent. Assign it an issue or @mention it, and Linear's agent session becomes a durable Trigger.dev session: the reply posts back to Linear, tool calls show as activities,linearPlanTool()keeps the plan Linear shows as a checklist, and approvals are Approve and Deny options that resume the run. (1586c4a3f)The first turn gets the issue's context and earlier comments, images and PDFs in the issue reach the model, a Stop in Linear winds the turn down, and
errorMessagesets the text a failed turn shows.Patch Changes
streamTextpassed to achat.agent'srun()now turns AI SDK telemetry on by default, so each model step and tool call shows up as a span in the run trace even when the agent doesn't store a prompt withchat.prompt.set(). An agent withtelemetry: { recordUserMessage: false }gets these spans without prompt and response content, including when it stores a prompt (whose variables are left out of the span metadata). Passexperimental_telemetry: { isEnabled: false }at the call site to turn them off, orrecordInputs: false/recordOutputs: falseto keep them without content. (bd7cc3525)webhooks.hookdeck(), a source for deliveries relayed through a Hookdeck connection. It verifies thex-hookdeck-signatureheader with the project's signing secret, keeps verifying while the secret is being rolled (Hookdeck sends the previous secret's signature inx-hookdeck-signature-2), and deduplicates retries onx-hookdeck-eventid. The event is the original provider's payload, so pass its type:webhooks.hookdeck<Stripe.Event>(). If the Hookdeck project's header prefix was changed, pass it aswebhooks.hookdeck({ headerPrefix })so retries keep deduplicating. (51b39fbc6)@trigger.dev/core@4.8.0@trigger.dev/build@4.8.0
Patch Changes
@trigger.dev/core@4.8.0@trigger.dev/python@4.8.0
Patch Changes
@trigger.dev/sdk@4.8.0@trigger.dev/core@4.8.0@trigger.dev/build@4.8.0@trigger.dev/react-hooks@4.8.0
Patch Changes
@trigger.dev/core@4.8.0@trigger.dev/redis-worker@4.8.0
Patch Changes
@trigger.dev/core@4.8.0@trigger.dev/rsc@4.8.0
Patch Changes
@trigger.dev/core@4.8.0@trigger.dev/schema-to-json@4.8.0
Patch Changes
@trigger.dev/core@4.8.0