chore: release v4.7.0 - #4947
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 configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: 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
September 17, 2026 14:18
169b3de to
bd3f9a6
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 17, 2026 15:04
bd3f9a6 to
fca2622
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 17, 2026 22:14
fca2622 to
ae1a3b8
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 18, 2026 10:05
ae1a3b8 to
eeb077a
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 18, 2026 10:34
eeb077a to
3d2240c
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 18, 2026 13:08
3d2240c to
5425e2b
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 18, 2026 17:52
5425e2b to
776d715
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
September 18, 2026 20:44
776d715 to
dedb058
Compare
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
1 new feature, 5 improvements, 2 bug fixes.
Improvements
Chat agents can now scope concurrency per session. Pass
concurrencyKey(for example, your chat ID or tenant ID) and trigger-time named limits viatriggerConfig.concurrencywhen starting a chat session, fromchat.createStartSessionAction, theAgentChatclient, or a handover. Keys are never defaulted, so a session without one shares the task's keyless pool. (ea9758117)Control a task's concurrency with the new
concurrencyoption, and share limits across tasks with named concurrency limits. An inline shape caps the task itself;concurrencyLimit()declares a limit any task can hold (up to two named limits per task), and a trigger call can switch a run's named limits with its ownconcurrencyoption. (ea9758117)perKeycaps eachconcurrencyKeypool andtotalcaps across everything, keys or not. The queue-levelconcurrencyLimitoption keeps working unchanged and is deprecated in favor ofconcurrency. Enforcement happens server-side; servers without support accept the option but do not enforce it yet.Manage limits at runtime with the new
concurrencyLimitsnamespace:list()andretrieve(name)report each limit's bounds plus its liverunningandqueuedcounts,override(name, { perKey, total })changes only the given bounds (overridingtotalto0pauses the limit), andreset(name)restores the declared values.Queue reads (
queues.list()andqueues.retrieve()) now report aversionthat discriminates the shape:V1queues keep today's fields (their ownconcurrencyLimitand its override state), whileV2queues (tasks declared withconcurrency) carry no queue-level concurrency, since their limits are read and overridden throughconcurrencyLimits(a task's inline limit under its derivedtask/<task-id>name). Existing reads keep compiling: aV2queue reportsconcurrencyLimitas null andconcurrencyas undefined.Chat streams now report
Stream stalled: no records receivedafter five retries of a connected stream that sends no records. Network failures and browser wakeups retain automatic recovery. Healthy tool calls with no records for about six minutes also reach this silence limit. Watch subscriptions remain unlimited, and caller cancellation still closes cleanly. (#4949)Webhook verifier artifacts can now declare the provider's response contract as data: a handshake
respondStatus, the status codes returned for accepted deliveries and rejected signatures, and a GET verification flow (getHandshake) for providers that confirm a callback URL with a challenge. HMAC verifiers can read the timestamp from a body field, which the Linear provider config uses for its replay window, and the dashboard's test-send re-signs a recorded sample as of now so it passes that window. (5f54fb27f)Steering messages now remain in context across agent steps and keep their original position in saved conversations, including custom response data written between steps. (
5619acf26)Bug fixes
trigger dev, and support empty values insyncEnvVars(). (f384e8334)Server changes
These changes affect the self-hosted Docker image and Trigger.dev Cloud:
Raw changeset output
Releases
@trigger.dev/core@4.7.0
Minor Changes
Chat agents can now scope concurrency per session. Pass
concurrencyKey(for example, your chat ID or tenant ID) and trigger-time named limits viatriggerConfig.concurrencywhen starting a chat session, fromchat.createStartSessionAction, theAgentChatclient, or a handover. Keys are never defaulted, so a session without one shares the task's keyless pool. (ea9758117)Control a task's concurrency with the new
concurrencyoption, and share limits across tasks with named concurrency limits. An inline shape caps the task itself;concurrencyLimit()declares a limit any task can hold (up to two named limits per task), and a trigger call can switch a run's named limits with its ownconcurrencyoption. (ea9758117)perKeycaps eachconcurrencyKeypool andtotalcaps across everything, keys or not. The queue-levelconcurrencyLimitoption keeps working unchanged and is deprecated in favor ofconcurrency. Enforcement happens server-side; servers without support accept the option but do not enforce it yet.Manage limits at runtime with the new
concurrencyLimitsnamespace:list()andretrieve(name)report each limit's bounds plus its liverunningandqueuedcounts,override(name, { perKey, total })changes only the given bounds (overridingtotalto0pauses the limit), andreset(name)restores the declared values.Queue reads (
queues.list()andqueues.retrieve()) now report aversionthat discriminates the shape:V1queues keep today's fields (their ownconcurrencyLimitand its override state), whileV2queues (tasks declared withconcurrency) carry no queue-level concurrency, since their limits are read and overridden throughconcurrencyLimits(a task's inline limit under its derivedtask/<task-id>name). Existing reads keep compiling: aV2queue reportsconcurrencyLimitas null andconcurrencyas undefined.Patch Changes
trigger dev, and support empty values insyncEnvVars(). (f384e8334)Stream stalled: no records receivedafter five retries of a connected stream that sends no records. Network failures and browser wakeups retain automatic recovery. Healthy tool calls with no records for about six minutes also reach this silence limit. Watch subscriptions remain unlimited, and caller cancellation still closes cleanly. (#4949)respondStatus, the status codes returned for accepted deliveries and rejected signatures, and a GET verification flow (getHandshake) for providers that confirm a callback URL with a challenge. HMAC verifiers can read the timestamp from a body field, which the Linear provider config uses for its replay window, and the dashboard's test-send re-signs a recorded sample as of now so it passes that window. (5f54fb27f)@trigger.dev/react-hooks@4.7.0
Minor Changes
Control a task's concurrency with the new
concurrencyoption, and share limits across tasks with named concurrency limits. An inline shape caps the task itself;concurrencyLimit()declares a limit any task can hold (up to two named limits per task), and a trigger call can switch a run's named limits with its ownconcurrencyoption. (ea9758117)perKeycaps eachconcurrencyKeypool andtotalcaps across everything, keys or not. The queue-levelconcurrencyLimitoption keeps working unchanged and is deprecated in favor ofconcurrency. Enforcement happens server-side; servers without support accept the option but do not enforce it yet.Manage limits at runtime with the new
concurrencyLimitsnamespace:list()andretrieve(name)report each limit's bounds plus its liverunningandqueuedcounts,override(name, { perKey, total })changes only the given bounds (overridingtotalto0pauses the limit), andreset(name)restores the declared values.Queue reads (
queues.list()andqueues.retrieve()) now report aversionthat discriminates the shape:V1queues keep today's fields (their ownconcurrencyLimitand its override state), whileV2queues (tasks declared withconcurrency) carry no queue-level concurrency, since their limits are read and overridden throughconcurrencyLimits(a task's inline limit under its derivedtask/<task-id>name). Existing reads keep compiling: aV2queue reportsconcurrencyLimitas null andconcurrencyas undefined.Patch Changes
@trigger.dev/core@4.7.0@trigger.dev/sdk@4.7.0
Minor Changes
Chat agents can now scope concurrency per session. Pass
concurrencyKey(for example, your chat ID or tenant ID) and trigger-time named limits viatriggerConfig.concurrencywhen starting a chat session, fromchat.createStartSessionAction, theAgentChatclient, or a handover. Keys are never defaulted, so a session without one shares the task's keyless pool. (ea9758117)Control a task's concurrency with the new
concurrencyoption, and share limits across tasks with named concurrency limits. An inline shape caps the task itself;concurrencyLimit()declares a limit any task can hold (up to two named limits per task), and a trigger call can switch a run's named limits with its ownconcurrencyoption. (ea9758117)perKeycaps eachconcurrencyKeypool andtotalcaps across everything, keys or not. The queue-levelconcurrencyLimitoption keeps working unchanged and is deprecated in favor ofconcurrency. Enforcement happens server-side; servers without support accept the option but do not enforce it yet.Manage limits at runtime with the new
concurrencyLimitsnamespace:list()andretrieve(name)report each limit's bounds plus its liverunningandqueuedcounts,override(name, { perKey, total })changes only the given bounds (overridingtotalto0pauses the limit), andreset(name)restores the declared values.Queue reads (
queues.list()andqueues.retrieve()) now report aversionthat discriminates the shape:V1queues keep today's fields (their ownconcurrencyLimitand its override state), whileV2queues (tasks declared withconcurrency) carry no queue-level concurrency, since their limits are read and overridden throughconcurrencyLimits(a task's inline limit under its derivedtask/<task-id>name). Existing reads keep compiling: aV2queue reportsconcurrencyLimitas null andconcurrencyas undefined.Patch Changes
Stream stalled: no records receivedafter five retries of a connected stream that sends no records. Network failures and browser wakeups retain automatic recovery. Healthy tool calls with no records for about six minutes also reach this silence limit. Watch subscriptions remain unlimited, and caller cancellation still closes cleanly. (#4949)5619acf26)@trigger.dev/core@4.7.0@trigger.dev/build@4.7.0
Patch Changes
@trigger.dev/core@4.7.0trigger.dev@4.7.0
Patch Changes
trigger dev, and support empty values insyncEnvVars(). (f384e8334)@trigger.dev/core@4.7.0@trigger.dev/build@4.7.0@trigger.dev/schema-to-json@4.7.0@trigger.dev/python@4.7.0
Patch Changes
@trigger.dev/sdk@4.7.0@trigger.dev/core@4.7.0@trigger.dev/build@4.7.0@trigger.dev/redis-worker@4.7.0
Patch Changes
@trigger.dev/core@4.7.0@trigger.dev/rsc@4.7.0
Patch Changes
@trigger.dev/core@4.7.0@trigger.dev/schema-to-json@4.7.0
Patch Changes
@trigger.dev/core@4.7.0