From be4b6f9966df4a31ca0a3f2a936fb0c931924af3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 20 Sep 2026 18:39:07 +0000 Subject: [PATCH] chore: release --- .changeset/chat-session-concurrency.md | 12 ----- .changeset/chilly-plums-pause.md | 13 ----- .../deprecate-queue-concurrency-mutations.md | 5 -- .changeset/empty-dev-env-vars.md | 6 --- .changeset/quiet-chat-stream-retries.md | 6 --- .changeset/steering-history-order.md | 5 -- .changeset/task-concurrency.md | 25 ---------- .../webhook-artifact-response-contract.md | 5 -- .../concurrency-allocation-hardening.md | 6 --- .server-changes/envvar-empty-value.md | 6 --- .../preview-branch-auto-archive.md | 6 --- .../session-transcript-inspector.md | 5 -- hosting/k8s/helm/Chart.yaml | 4 +- packages/build/CHANGELOG.md | 7 +++ packages/build/package.json | 4 +- packages/cli-v3/CHANGELOG.md | 10 ++++ packages/cli-v3/package.json | 8 +-- packages/core/CHANGELOG.md | 47 ++++++++++++++++++ packages/core/package.json | 2 +- packages/python/CHANGELOG.md | 9 ++++ packages/python/package.json | 12 ++--- packages/react-hooks/CHANGELOG.md | 29 +++++++++++ packages/react-hooks/package.json | 4 +- packages/redis-worker/CHANGELOG.md | 7 +++ packages/redis-worker/package.json | 4 +- packages/rsc/CHANGELOG.md | 7 +++ packages/rsc/package.json | 4 +- packages/schema-to-json/CHANGELOG.md | 7 +++ packages/schema-to-json/package.json | 2 +- packages/trigger-sdk/CHANGELOG.md | 49 +++++++++++++++++++ packages/trigger-sdk/package.json | 4 +- pnpm-lock.yaml | 22 ++++----- 32 files changed, 207 insertions(+), 135 deletions(-) delete mode 100644 .changeset/chat-session-concurrency.md delete mode 100644 .changeset/chilly-plums-pause.md delete mode 100644 .changeset/deprecate-queue-concurrency-mutations.md delete mode 100644 .changeset/empty-dev-env-vars.md delete mode 100644 .changeset/quiet-chat-stream-retries.md delete mode 100644 .changeset/steering-history-order.md delete mode 100644 .changeset/task-concurrency.md delete mode 100644 .changeset/webhook-artifact-response-contract.md delete mode 100644 .server-changes/concurrency-allocation-hardening.md delete mode 100644 .server-changes/envvar-empty-value.md delete mode 100644 .server-changes/preview-branch-auto-archive.md delete mode 100644 .server-changes/session-transcript-inspector.md diff --git a/.changeset/chat-session-concurrency.md b/.changeset/chat-session-concurrency.md deleted file mode 100644 index 4d2f5eca086..00000000000 --- a/.changeset/chat-session-concurrency.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -"@trigger.dev/sdk": minor -"@trigger.dev/core": minor ---- - -Chat agents can now scope concurrency per session. Pass `concurrencyKey` (for example, your chat ID or tenant ID) and trigger-time named limits via `triggerConfig.concurrency` when starting a chat session, from `chat.createStartSessionAction`, the `AgentChat` client, or a handover. Keys are never defaulted, so a session without one shares the task's keyless pool. - -```ts -const start = chat.createStartSessionAction("support-chat", { - triggerConfig: { concurrencyKey: user.id }, -}); -``` diff --git a/.changeset/chilly-plums-pause.md b/.changeset/chilly-plums-pause.md deleted file mode 100644 index 96eb4c317b1..00000000000 --- a/.changeset/chilly-plums-pause.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"@trigger.dev/sdk": minor -"@trigger.dev/core": minor ---- - -Concurrency limits can now be paused and resumed, just like queues: `concurrencyLimits.pause(name)` stops every run holding the limit from being dequeued while keeping its configured bounds, and `concurrencyLimits.resume(name)` starts them again. - -```ts -import { concurrencyLimits } from "@trigger.dev/sdk"; - -await concurrencyLimits.pause("openai"); -await concurrencyLimits.resume("openai"); -``` diff --git a/.changeset/deprecate-queue-concurrency-mutations.md b/.changeset/deprecate-queue-concurrency-mutations.md deleted file mode 100644 index 89ee740f832..00000000000 --- a/.changeset/deprecate-queue-concurrency-mutations.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@trigger.dev/sdk": patch ---- - -Deprecate `queues.overrideConcurrencyLimit` and `queues.resetConcurrencyLimit`. These operate on the legacy model where a queue carried its own concurrency limit; declare concurrency with the task `concurrency` option and manage it with `concurrencyLimits.override` and `concurrencyLimits.reset` instead. diff --git a/.changeset/empty-dev-env-vars.md b/.changeset/empty-dev-env-vars.md deleted file mode 100644 index e28169a97e3..00000000000 --- a/.changeset/empty-dev-env-vars.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"trigger.dev": patch -"@trigger.dev/core": patch ---- - -Fix stale and empty project environment values in `trigger dev`, and support empty values in `syncEnvVars()`. diff --git a/.changeset/quiet-chat-stream-retries.md b/.changeset/quiet-chat-stream-retries.md deleted file mode 100644 index 01776a1defa..00000000000 --- a/.changeset/quiet-chat-stream-retries.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -"@trigger.dev/core": patch -"@trigger.dev/sdk": patch ---- - -Chat streams now report `Stream stalled: no records received` after 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. diff --git a/.changeset/steering-history-order.md b/.changeset/steering-history-order.md deleted file mode 100644 index 9c11e6e1cda..00000000000 --- a/.changeset/steering-history-order.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@trigger.dev/sdk": patch ---- - -Steering messages now remain in context across agent steps and keep their original position in saved conversations, including custom response data written between steps. diff --git a/.changeset/task-concurrency.md b/.changeset/task-concurrency.md deleted file mode 100644 index a1ed8bfbe46..00000000000 --- a/.changeset/task-concurrency.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -"@trigger.dev/sdk": minor -"@trigger.dev/core": minor -"@trigger.dev/react-hooks": minor ---- - -Control a task's concurrency with the new `concurrency` option, 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 own `concurrency` option. - -```ts -import { concurrencyLimit, task } from "@trigger.dev/sdk"; - -export const openaiLimit = concurrencyLimit({ name: "openai", total: 25 }); - -export const generateSummary = task({ - id: "generate-summary", - concurrency: [{ perKey: 1, total: 5 }, openaiLimit], - run: async (payload) => {}, -}); -``` - -`perKey` caps each `concurrencyKey` pool and `total` caps across everything, keys or not. The queue-level `concurrencyLimit` option keeps working unchanged and is deprecated in favor of `concurrency`. Enforcement happens server-side; servers without support accept the option but do not enforce it yet. - -Manage limits at runtime with the new `concurrencyLimits` namespace: `list()` and `retrieve(name)` report each limit's bounds plus its live `running` and `queued` counts, `override(name, { perKey, total })` changes only the given bounds (overriding `total` to `0` pauses the limit), and `reset(name)` restores the declared values. - -Queue reads (`queues.list()` and `queues.retrieve()`) now report a `version` that discriminates the shape: `V1` queues keep today's fields (their own `concurrencyLimit` and its override state), while `V2` queues (tasks declared with `concurrency`) carry no queue-level concurrency, since their limits are read and overridden through `concurrencyLimits` (a task's inline limit under its derived `task/` name). Existing reads keep compiling: a `V2` queue reports `concurrencyLimit` as null and `concurrency` as undefined. diff --git a/.changeset/webhook-artifact-response-contract.md b/.changeset/webhook-artifact-response-contract.md deleted file mode 100644 index c3b0e104676..00000000000 --- a/.changeset/webhook-artifact-response-contract.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@trigger.dev/core": patch ---- - -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. diff --git a/.server-changes/concurrency-allocation-hardening.md b/.server-changes/concurrency-allocation-hardening.md deleted file mode 100644 index 9f08aed27b8..00000000000 --- a/.server-changes/concurrency-allocation-hardening.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -area: webapp -type: improvement ---- - -Allocating extra concurrency to environments now requires billing permissions, the same as purchasing it. Allocation changes are also applied atomically, so simultaneous edits can no longer exceed your purchased concurrency. diff --git a/.server-changes/envvar-empty-value.md b/.server-changes/envvar-empty-value.md deleted file mode 100644 index 892de94c810..00000000000 --- a/.server-changes/envvar-empty-value.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -area: webapp -type: fix ---- - -Support empty-string environment values across the dashboard, API, and Vercel sync behind a feature flag, disabled by default. diff --git a/.server-changes/preview-branch-auto-archive.md b/.server-changes/preview-branch-auto-archive.md deleted file mode 100644 index b2b6bf5055c..00000000000 --- a/.server-changes/preview-branch-auto-archive.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -area: webapp -type: feature ---- - -Automatically archive preview branches after a configurable period without deployments, with protected branch names and a preview of affected branches. diff --git a/.server-changes/session-transcript-inspector.md b/.server-changes/session-transcript-inspector.md deleted file mode 100644 index fe6dd1e49b5..00000000000 --- a/.server-changes/session-transcript-inspector.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -area: webapp -type: feature ---- -Download a session’s original saved transcript file from the session inspector. diff --git a/hosting/k8s/helm/Chart.yaml b/hosting/k8s/helm/Chart.yaml index 03fbd237bed..dda2d4a1e74 100644 --- a/hosting/k8s/helm/Chart.yaml +++ b/hosting/k8s/helm/Chart.yaml @@ -2,8 +2,8 @@ apiVersion: v2 name: trigger description: The official Trigger.dev Helm chart type: application -version: 4.6.3 -appVersion: v4.6.3 +version: 4.7.0 +appVersion: v4.7.0 home: https://trigger.dev sources: - https://github.com/triggerdotdev/trigger.dev diff --git a/packages/build/CHANGELOG.md b/packages/build/CHANGELOG.md index cc216fdb7f8..66753cbbf4a 100644 --- a/packages/build/CHANGELOG.md +++ b/packages/build/CHANGELOG.md @@ -1,5 +1,12 @@ # @trigger.dev/build +## 4.7.0 + +### Patch Changes + +- Updated dependencies: + - `@trigger.dev/core@4.7.0` + ## 4.6.3 ### Patch Changes diff --git a/packages/build/package.json b/packages/build/package.json index 3f6d2cb184d..4db99905584 100644 --- a/packages/build/package.json +++ b/packages/build/package.json @@ -1,6 +1,6 @@ { "name": "@trigger.dev/build", - "version": "4.6.3", + "version": "4.7.0", "description": "trigger.dev build extensions", "license": "MIT", "publishConfig": { @@ -82,7 +82,7 @@ }, "dependencies": { "@prisma/config": "^6.10.0", - "@trigger.dev/core": "workspace:4.6.3", + "@trigger.dev/core": "workspace:4.7.0", "mlly": "^1.7.1", "pkg-types": "^1.1.3", "tinyglobby": "^0.2.2", diff --git a/packages/cli-v3/CHANGELOG.md b/packages/cli-v3/CHANGELOG.md index ec866f71606..d06dfd1963a 100644 --- a/packages/cli-v3/CHANGELOG.md +++ b/packages/cli-v3/CHANGELOG.md @@ -1,5 +1,15 @@ # trigger.dev +## 4.7.0 + +### Patch Changes + +- Fix stale and empty project environment values in `trigger dev`, and support empty values in `syncEnvVars()`. ([`f384e8334`](https://github.com/triggerdotdev/trigger.dev/commit/f384e8334a8eca3266ecb33e5fae7d1fbf148d59)) +- Updated dependencies: + - `@trigger.dev/core@4.7.0` + - `@trigger.dev/build@4.7.0` + - `@trigger.dev/schema-to-json@4.7.0` + ## 4.6.3 ### Patch Changes diff --git a/packages/cli-v3/package.json b/packages/cli-v3/package.json index b4fa8f08ecd..cfc227ea92f 100644 --- a/packages/cli-v3/package.json +++ b/packages/cli-v3/package.json @@ -1,6 +1,6 @@ { "name": "trigger.dev", - "version": "4.6.3", + "version": "4.7.0", "description": "A Command-Line Interface for Trigger.dev projects", "type": "module", "license": "MIT", @@ -83,9 +83,9 @@ "@opentelemetry/api-logs": "0.219.0", "@opentelemetry/instrumentation": "0.219.0", "@s2-dev/streamstore": "^0.25.0", - "@trigger.dev/build": "workspace:4.6.3", - "@trigger.dev/core": "workspace:4.6.3", - "@trigger.dev/schema-to-json": "workspace:4.6.3", + "@trigger.dev/build": "workspace:4.7.0", + "@trigger.dev/core": "workspace:4.7.0", + "@trigger.dev/schema-to-json": "workspace:4.7.0", "ansi-escapes": "^7.0.0", "braces": "^3.0.3", "c12": "^1.11.1", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index fc5a04bb548..699141b9f10 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -1,5 +1,52 @@ # internal-platform +## 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 via `triggerConfig.concurrency` when starting a chat session, from `chat.createStartSessionAction`, the `AgentChat` client, or a handover. Keys are never defaulted, so a session without one shares the task's keyless pool. ([`ea9758117`](https://github.com/triggerdotdev/trigger.dev/commit/ea9758117bc4abb3e2d09deeab36d5c113c8496c)) + + ```ts + const start = chat.createStartSessionAction("support-chat", { + triggerConfig: { concurrencyKey: user.id }, + }); + ``` + +- Concurrency limits can now be paused and resumed, just like queues: `concurrencyLimits.pause(name)` stops every run holding the limit from being dequeued while keeping its configured bounds, and `concurrencyLimits.resume(name)` starts them again. ([`fa94febb6`](https://github.com/triggerdotdev/trigger.dev/commit/fa94febb6ee1f8ebd288698535b6b7ccaf3aa038)) + + ```ts + import { concurrencyLimits } from "@trigger.dev/sdk"; + + await concurrencyLimits.pause("openai"); + await concurrencyLimits.resume("openai"); + ``` + +- Control a task's concurrency with the new `concurrency` option, 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 own `concurrency` option. ([`ea9758117`](https://github.com/triggerdotdev/trigger.dev/commit/ea9758117bc4abb3e2d09deeab36d5c113c8496c)) + + ```ts + import { concurrencyLimit, task } from "@trigger.dev/sdk"; + + export const openaiLimit = concurrencyLimit({ name: "openai", total: 25 }); + + export const generateSummary = task({ + id: "generate-summary", + concurrency: [{ perKey: 1, total: 5 }, openaiLimit], + run: async (payload) => {}, + }); + ``` + + `perKey` caps each `concurrencyKey` pool and `total` caps across everything, keys or not. The queue-level `concurrencyLimit` option keeps working unchanged and is deprecated in favor of `concurrency`. Enforcement happens server-side; servers without support accept the option but do not enforce it yet. + + Manage limits at runtime with the new `concurrencyLimits` namespace: `list()` and `retrieve(name)` report each limit's bounds plus its live `running` and `queued` counts, `override(name, { perKey, total })` changes only the given bounds (overriding `total` to `0` pauses the limit), and `reset(name)` restores the declared values. + + Queue reads (`queues.list()` and `queues.retrieve()`) now report a `version` that discriminates the shape: `V1` queues keep today's fields (their own `concurrencyLimit` and its override state), while `V2` queues (tasks declared with `concurrency`) carry no queue-level concurrency, since their limits are read and overridden through `concurrencyLimits` (a task's inline limit under its derived `task/` name). Existing reads keep compiling: a `V2` queue reports `concurrencyLimit` as null and `concurrency` as undefined. + +### Patch Changes + +- Fix stale and empty project environment values in `trigger dev`, and support empty values in `syncEnvVars()`. ([`f384e8334`](https://github.com/triggerdotdev/trigger.dev/commit/f384e8334a8eca3266ecb33e5fae7d1fbf148d59)) +- Chat streams now report `Stream stalled: no records received` after 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](https://github.com/triggerdotdev/trigger.dev/pull/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`](https://github.com/triggerdotdev/trigger.dev/commit/5f54fb27fe9c42ddca2905a8d9d4ab9e0d086a29)) + ## 4.6.3 ### Patch Changes diff --git a/packages/core/package.json b/packages/core/package.json index a5f6ac36466..adb5cde8bfb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@trigger.dev/core", - "version": "4.6.3", + "version": "4.7.0", "description": "Core code used across the Trigger.dev SDK and platform", "license": "MIT", "publishConfig": { diff --git a/packages/python/CHANGELOG.md b/packages/python/CHANGELOG.md index f553e1d8b5c..b1c748a7e97 100644 --- a/packages/python/CHANGELOG.md +++ b/packages/python/CHANGELOG.md @@ -1,5 +1,14 @@ # @trigger.dev/python +## 4.7.0 + +### Patch Changes + +- Updated dependencies: + - `@trigger.dev/sdk@4.7.0` + - `@trigger.dev/core@4.7.0` + - `@trigger.dev/build@4.7.0` + ## 4.6.3 ### Patch Changes diff --git a/packages/python/package.json b/packages/python/package.json index 8c620687dab..7f615aafb3e 100644 --- a/packages/python/package.json +++ b/packages/python/package.json @@ -1,6 +1,6 @@ { "name": "@trigger.dev/python", - "version": "4.6.3", + "version": "4.7.0", "description": "Python runtime and build extension for Trigger.dev", "license": "MIT", "publishConfig": { @@ -45,7 +45,7 @@ "check-exports": "attw --pack ." }, "dependencies": { - "@trigger.dev/core": "workspace:4.6.3", + "@trigger.dev/core": "workspace:4.7.0", "tinyexec": "^0.3.2" }, "devDependencies": { @@ -55,12 +55,12 @@ "typescript": "catalog:", "tsx": "4.17.0", "@arethetypeswrong/cli": "^0.18.5", - "@trigger.dev/build": "workspace:4.6.3", - "@trigger.dev/sdk": "workspace:4.6.3" + "@trigger.dev/build": "workspace:4.7.0", + "@trigger.dev/sdk": "workspace:4.7.0" }, "peerDependencies": { - "@trigger.dev/sdk": "workspace:^4.6.3", - "@trigger.dev/build": "workspace:^4.6.3" + "@trigger.dev/sdk": "workspace:^4.7.0", + "@trigger.dev/build": "workspace:^4.7.0" }, "engines": { "node": ">=18.20.0" diff --git a/packages/react-hooks/CHANGELOG.md b/packages/react-hooks/CHANGELOG.md index f1c9db04acf..06d2278271c 100644 --- a/packages/react-hooks/CHANGELOG.md +++ b/packages/react-hooks/CHANGELOG.md @@ -1,5 +1,34 @@ # @trigger.dev/react-hooks +## 4.7.0 + +### Minor Changes + +- Control a task's concurrency with the new `concurrency` option, 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 own `concurrency` option. ([`ea9758117`](https://github.com/triggerdotdev/trigger.dev/commit/ea9758117bc4abb3e2d09deeab36d5c113c8496c)) + + ```ts + import { concurrencyLimit, task } from "@trigger.dev/sdk"; + + export const openaiLimit = concurrencyLimit({ name: "openai", total: 25 }); + + export const generateSummary = task({ + id: "generate-summary", + concurrency: [{ perKey: 1, total: 5 }, openaiLimit], + run: async (payload) => {}, + }); + ``` + + `perKey` caps each `concurrencyKey` pool and `total` caps across everything, keys or not. The queue-level `concurrencyLimit` option keeps working unchanged and is deprecated in favor of `concurrency`. Enforcement happens server-side; servers without support accept the option but do not enforce it yet. + + Manage limits at runtime with the new `concurrencyLimits` namespace: `list()` and `retrieve(name)` report each limit's bounds plus its live `running` and `queued` counts, `override(name, { perKey, total })` changes only the given bounds (overriding `total` to `0` pauses the limit), and `reset(name)` restores the declared values. + + Queue reads (`queues.list()` and `queues.retrieve()`) now report a `version` that discriminates the shape: `V1` queues keep today's fields (their own `concurrencyLimit` and its override state), while `V2` queues (tasks declared with `concurrency`) carry no queue-level concurrency, since their limits are read and overridden through `concurrencyLimits` (a task's inline limit under its derived `task/` name). Existing reads keep compiling: a `V2` queue reports `concurrencyLimit` as null and `concurrency` as undefined. + +### Patch Changes + +- Updated dependencies: + - `@trigger.dev/core@4.7.0` + ## 4.6.3 ### Patch Changes diff --git a/packages/react-hooks/package.json b/packages/react-hooks/package.json index 32a4b0d5dc7..b3c034d1d63 100644 --- a/packages/react-hooks/package.json +++ b/packages/react-hooks/package.json @@ -1,6 +1,6 @@ { "name": "@trigger.dev/react-hooks", - "version": "4.6.3", + "version": "4.7.0", "description": "trigger.dev react hooks", "license": "MIT", "publishConfig": { @@ -37,7 +37,7 @@ "check-exports": "attw --pack ." }, "dependencies": { - "@trigger.dev/core": "workspace:^4.6.3", + "@trigger.dev/core": "workspace:^4.7.0", "swr": "^2.2.5" }, "devDependencies": { diff --git a/packages/redis-worker/CHANGELOG.md b/packages/redis-worker/CHANGELOG.md index 22669f4e07a..7343f1aaa91 100644 --- a/packages/redis-worker/CHANGELOG.md +++ b/packages/redis-worker/CHANGELOG.md @@ -1,5 +1,12 @@ # @trigger.dev/redis-worker +## 4.7.0 + +### Patch Changes + +- Updated dependencies: + - `@trigger.dev/core@4.7.0` + ## 4.6.3 ### Patch Changes diff --git a/packages/redis-worker/package.json b/packages/redis-worker/package.json index 671696b620c..3de806ca96e 100644 --- a/packages/redis-worker/package.json +++ b/packages/redis-worker/package.json @@ -1,6 +1,6 @@ { "name": "@trigger.dev/redis-worker", - "version": "4.6.3", + "version": "4.7.0", "description": "Redis worker for trigger.dev", "license": "MIT", "publishConfig": { @@ -23,7 +23,7 @@ "test": "vitest --sequence.concurrent=false --no-file-parallelism" }, "dependencies": { - "@trigger.dev/core": "workspace:4.6.3", + "@trigger.dev/core": "workspace:4.7.0", "nanoid": "^5.1.16", "p-limit": "^6.2.0", "seedrandom": "^3.0.5", diff --git a/packages/rsc/CHANGELOG.md b/packages/rsc/CHANGELOG.md index abcb96961cc..719c37737e3 100644 --- a/packages/rsc/CHANGELOG.md +++ b/packages/rsc/CHANGELOG.md @@ -1,5 +1,12 @@ # @trigger.dev/rsc +## 4.7.0 + +### Patch Changes + +- Updated dependencies: + - `@trigger.dev/core@4.7.0` + ## 4.6.3 ### Patch Changes diff --git a/packages/rsc/package.json b/packages/rsc/package.json index 9aeab9b396c..114b09d081d 100644 --- a/packages/rsc/package.json +++ b/packages/rsc/package.json @@ -1,6 +1,6 @@ { "name": "@trigger.dev/rsc", - "version": "4.6.3", + "version": "4.7.0", "description": "trigger.dev rsc", "license": "MIT", "publishConfig": { @@ -37,7 +37,7 @@ "check-exports": "attw --pack ." }, "dependencies": { - "@trigger.dev/core": "workspace:^4.6.3", + "@trigger.dev/core": "workspace:^4.7.0", "mlly": "^1.7.1", "react": "19.0.0-rc.1", "react-dom": "19.0.0-rc.1" diff --git a/packages/schema-to-json/CHANGELOG.md b/packages/schema-to-json/CHANGELOG.md index 2a39e0f6bfb..0f1eca83cca 100644 --- a/packages/schema-to-json/CHANGELOG.md +++ b/packages/schema-to-json/CHANGELOG.md @@ -1,5 +1,12 @@ # @trigger.dev/schema-to-json +## 4.7.0 + +### Patch Changes + +- Updated dependencies: + - `@trigger.dev/core@4.7.0` + ## 4.6.3 ### Patch Changes diff --git a/packages/schema-to-json/package.json b/packages/schema-to-json/package.json index 0e0b9563ae1..0674643f282 100644 --- a/packages/schema-to-json/package.json +++ b/packages/schema-to-json/package.json @@ -1,6 +1,6 @@ { "name": "@trigger.dev/schema-to-json", - "version": "4.6.3", + "version": "4.7.0", "description": "Convert various schema validation libraries to JSON Schema", "license": "MIT", "publishConfig": { diff --git a/packages/trigger-sdk/CHANGELOG.md b/packages/trigger-sdk/CHANGELOG.md index eacf958e83d..eec905f4e28 100644 --- a/packages/trigger-sdk/CHANGELOG.md +++ b/packages/trigger-sdk/CHANGELOG.md @@ -1,5 +1,54 @@ # @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 via `triggerConfig.concurrency` when starting a chat session, from `chat.createStartSessionAction`, the `AgentChat` client, or a handover. Keys are never defaulted, so a session without one shares the task's keyless pool. ([`ea9758117`](https://github.com/triggerdotdev/trigger.dev/commit/ea9758117bc4abb3e2d09deeab36d5c113c8496c)) + + ```ts + const start = chat.createStartSessionAction("support-chat", { + triggerConfig: { concurrencyKey: user.id }, + }); + ``` + +- Concurrency limits can now be paused and resumed, just like queues: `concurrencyLimits.pause(name)` stops every run holding the limit from being dequeued while keeping its configured bounds, and `concurrencyLimits.resume(name)` starts them again. ([`fa94febb6`](https://github.com/triggerdotdev/trigger.dev/commit/fa94febb6ee1f8ebd288698535b6b7ccaf3aa038)) + + ```ts + import { concurrencyLimits } from "@trigger.dev/sdk"; + + await concurrencyLimits.pause("openai"); + await concurrencyLimits.resume("openai"); + ``` + +- Control a task's concurrency with the new `concurrency` option, 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 own `concurrency` option. ([`ea9758117`](https://github.com/triggerdotdev/trigger.dev/commit/ea9758117bc4abb3e2d09deeab36d5c113c8496c)) + + ```ts + import { concurrencyLimit, task } from "@trigger.dev/sdk"; + + export const openaiLimit = concurrencyLimit({ name: "openai", total: 25 }); + + export const generateSummary = task({ + id: "generate-summary", + concurrency: [{ perKey: 1, total: 5 }, openaiLimit], + run: async (payload) => {}, + }); + ``` + + `perKey` caps each `concurrencyKey` pool and `total` caps across everything, keys or not. The queue-level `concurrencyLimit` option keeps working unchanged and is deprecated in favor of `concurrency`. Enforcement happens server-side; servers without support accept the option but do not enforce it yet. + + Manage limits at runtime with the new `concurrencyLimits` namespace: `list()` and `retrieve(name)` report each limit's bounds plus its live `running` and `queued` counts, `override(name, { perKey, total })` changes only the given bounds (overriding `total` to `0` pauses the limit), and `reset(name)` restores the declared values. + + Queue reads (`queues.list()` and `queues.retrieve()`) now report a `version` that discriminates the shape: `V1` queues keep today's fields (their own `concurrencyLimit` and its override state), while `V2` queues (tasks declared with `concurrency`) carry no queue-level concurrency, since their limits are read and overridden through `concurrencyLimits` (a task's inline limit under its derived `task/` name). Existing reads keep compiling: a `V2` queue reports `concurrencyLimit` as null and `concurrency` as undefined. + +### Patch Changes + +- Deprecate `queues.overrideConcurrencyLimit` and `queues.resetConcurrencyLimit`. These operate on the legacy model where a queue carried its own concurrency limit; declare concurrency with the task `concurrency` option and manage it with `concurrencyLimits.override` and `concurrencyLimits.reset` instead. ([`414e5a268`](https://github.com/triggerdotdev/trigger.dev/commit/414e5a268683389bd6d66b4b7b0991bd62dd9438)) +- Chat streams now report `Stream stalled: no records received` after 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](https://github.com/triggerdotdev/trigger.dev/pull/4949)) +- 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`](https://github.com/triggerdotdev/trigger.dev/commit/5619acf266f6cd5fa1370cabf48e2da7ec468383)) +- Updated dependencies: + - `@trigger.dev/core@4.7.0` + ## 4.6.3 ### Patch Changes diff --git a/packages/trigger-sdk/package.json b/packages/trigger-sdk/package.json index 4bdb5a0c080..744e218ae5a 100644 --- a/packages/trigger-sdk/package.json +++ b/packages/trigger-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@trigger.dev/sdk", - "version": "4.6.3", + "version": "4.7.0", "description": "trigger.dev Node.JS SDK", "license": "MIT", "publishConfig": { @@ -80,7 +80,7 @@ "dependencies": { "@opentelemetry/api": "1.9.1", "@opentelemetry/semantic-conventions": "1.41.1", - "@trigger.dev/core": "workspace:4.6.3", + "@trigger.dev/core": "workspace:4.7.0", "uncrypto": "^0.1.3" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 69bcc2bf1a7..edb198c7ba8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1506,7 +1506,7 @@ importers: specifier: ^6.10.0 version: 6.19.0(magicast@0.3.5) '@trigger.dev/core': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../core mlly: specifier: ^1.7.1 @@ -1573,13 +1573,13 @@ importers: specifier: ^0.25.0 version: 0.25.0(supports-color@10.0.0) '@trigger.dev/build': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../build '@trigger.dev/core': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../core '@trigger.dev/schema-to-json': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../schema-to-json ansi-escapes: specifier: ^7.0.0 @@ -1909,7 +1909,7 @@ importers: packages/python: dependencies: '@trigger.dev/core': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../core tinyexec: specifier: ^0.3.2 @@ -1919,10 +1919,10 @@ importers: specifier: ^0.18.5 version: 0.18.5 '@trigger.dev/build': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../build '@trigger.dev/sdk': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../trigger-sdk '@types/node': specifier: 24.13.3 @@ -1943,7 +1943,7 @@ importers: packages/react-hooks: dependencies: '@trigger.dev/core': - specifier: workspace:^4.6.3 + specifier: workspace:^4.7.0 version: link:../core react: specifier: 18.3.1 @@ -1977,7 +1977,7 @@ importers: packages/redis-worker: dependencies: '@trigger.dev/core': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../core cron-parser: specifier: ^4.9.0 @@ -2023,7 +2023,7 @@ importers: packages/rsc: dependencies: '@trigger.dev/core': - specifier: workspace:^4.6.3 + specifier: workspace:^4.7.0 version: link:../core mlly: specifier: ^1.7.1 @@ -2112,7 +2112,7 @@ importers: specifier: 1.41.1 version: 1.41.1 '@trigger.dev/core': - specifier: workspace:4.6.3 + specifier: workspace:4.7.0 version: link:../core react: specifier: 18.3.1