Visitar URL original
docs(webhooks): pricing and per-plan webhook limits by jackbridger · Pull Request #5051 · triggerdotdev/trigger.dev · GitHub
Skip to content

docs(webhooks): pricing and per-plan webhook limits - #5051

Merged
jackbridger merged 3 commits into
mainfrom
docs/webhooks-pricing
Oct 26, 2026
Merged

jackbridger merged 3 commits into
mainfrom
docs/webhooks-pricing

Conversation

@jackbridger

Copy link
Copy Markdown
Collaborator

Adds webhooks pricing and per-plan limits to the docs ahead of the webhooks launch on Mon Oct 26 (TRI-14179).

Pricing

Webhooks have no separate charge. The runs a delivery starts or resumes are billed as normal compute (Eric in #project-webhooks, Oct 20). Filtered deliveries start no run, and waiting runs are suspended, so neither uses compute.

Changes

  • docs/limits.mdx: new sections for webhook waiters, processing concurrency, delivery retention and subscribers per endpoint (values from enterprise/apps/billing/app/plans/v3.server.ts and MAX_WEBHOOK_SUBSCRIBERS_PER_ENDPOINT). The existing ingest-rate tables and the #webhook-ingest-rate-limits anchor are unchanged.
  • docs/webhooks/overview.mdx: new "Pricing and limits" section.
  • docs/webhooks/deliveries.mdx: new "Retention" section.
  • docs/webhooks/waiters.mdx: links the plan-dependent limits to the new table.
  • docs/how-to-reduce-your-spend.mdx: new tip, "Filter webhooks before they start runs".
  • trigger-cost-savings skill: one bullet on webhook filters, plus a patch changeset for @trigger.dev/sdk.

mint broken-links passes.

To confirm before merging

  • "No separate charge" holds after the beta too, not only during it.
  • The per-plan webhook limits are live on prod (the webhook-limits-backfill has run).

Webhooks have no separate charge: the runs a delivery starts are billed
as normal compute, and filtered deliveries start no run. Adds the plan
limits for webhook waiters, processing concurrency, delivery retention
and subscribers per endpoint to the limits page, links them from the
webhooks pages, and adds a webhook filter tip to the spend guide and the
bundled cost-savings skill.
@coderabbitai

coderabbitai Bot commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 7aa1cdef-d3ad-4617-8208-f71cbbceb330
Commits

Reviewing files that changed from the base of the PR and between 451d78c and d2bad11.

Files selected for processing: 7
  • .changeset/cost-skill-webhook-filters.md
  • docs/how-to-reduce-your-spend.mdx
  • docs/limits.mdx
  • docs/webhooks/deliveries.mdx
  • docs/webhooks/overview.mdx
  • docs/webhooks/waiters.mdx
  • packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md
Files skipped from review as they are similar to previous changes: 5
  • docs/webhooks/deliveries.mdx
  • docs/how-to-reduce-your-spend.mdx
  • docs/webhooks/waiters.mdx
  • docs/webhooks/overview.mdx
  • .changeset/cost-skill-webhook-filters.md

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

Recent review details
Context from checks skipped due to timeout: 16
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (4, 6)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (3, 6)
  • GitHub Check: e2e-webapp / 🧪 E2E Tests: Webapp (1, 1)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (5, 6)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (1, 6)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (2, 6)
  • GitHub Check: internal / 🧪 Unit Tests: Internal (1)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (6, 6)
  • GitHub Check: packages / 🧪 Unit Tests: Packages (3, 3)
  • GitHub Check: sdk-compat / Node.js 22.23.4 (warp-ubuntu-latest-x64-4x)
  • GitHub Check: internal / 🧪 Unit Tests: Internal (2)
  • GitHub Check: packages / 🧪 Unit Tests: Packages (1, 3)
  • GitHub Check: packages / 🧪 Unit Tests: Packages (2, 3)
  • GitHub Check: code-quality / code-quality
  • GitHub Check: Analyze (javascript-typescript)
  • GitHub Check: Build and publish previews
Additional context used
Code guidelines: 4
packages/trigger-sdk/AGENTS.md — auto-discovered
docs/AGENTS.md — auto-discovered
.claude/rules/sdk-packages.md — auto-discovered
.claude/rules/docs-writing.md — auto-discovered
Path-based instructions: 4
Source excerpt: Always import from `@trigger.dev/sdk`.

CodeRabbit inference engine (packages/trigger-sdk/AGENTS.md)

Files:

  • packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md
Applicability reference: AGENTS.md: # AGENTS.md Docs live in `docs/` as a Mintlify site (MDX format).

CodeRabbit inference engine (docs/AGENTS.md)

Files:

  • docs/limits.mdx
Source excerpt: Changes to `packages/` are **customer-facing**.

CodeRabbit inference engine (.claude/rules/sdk-packages.md)

Files:

  • packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md
Source excerpt: Use Mintlify MDX format.

CodeRabbit inference engine (.claude/rules/docs-writing.md)

Files:

  • docs/limits.mdx
SkillSpector (2.12.0)
packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md

[warning] 43: [RP1] MCP server referenced without pinned version: 'npx trigger.dev'.: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))

Additional comments: 2
packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md: 1

108-108: LGTM!

docs/limits.mdx: 1

187-190: 🗄️ Data Integrity & Integration

The comment's mechanism is accurate, but the finding does not establish a defect in the reviewed change. The concern depends on whether the webhook-limits-backfill has populated production organizations. That state is not in the repository, and the PR already lists this check as a pre-merge task. The docs change itself has no source-established error.

The resolver does fall back to defaults when an organization has no override. resolveWebhookLimits returns overrides.<field> ?? defaults.<field> for each limit. An organization without stored values therefore gets the environment defaults, not the tier values in the table. The repository does not show whether those defaults match the published tier values, and it does not show whether the backfill ran. A search for webhook-limits-backfill returned no matches in the checkout. The docs therefore cannot be shown to be wrong. The requested action, verifying production state, is an operational check the author already owns, not a change to this diff.

Walkthrough

The changes add webhook pricing and filtering guidance. They document that unmatched deliveries start no run and that webhook receipt has no separate charge. They also describe plan-based limits for waiters, processing concurrency, delivery retention, and subscribers.

Priority: Normal

Merge Risk: Moderate · up to d2bad

Confirm post-beta pricing and that existing organizations have the published plan limits before merging. Without that confirmation, customers could rely on billing or limit information that does not apply to them.

Pre-merge checks: Passed 5
Check name Status Explanation
Title check Passed The title clearly and concisely describes the main documentation changes for webhook pricing and per-plan limits.
Description check Passed The description explains the pricing, affected documentation, testing performed, and remaining merge checks. It does not follow the template exactly because it omits a Closes issue line, the standard …
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Description check

Explanation

The description explains the pricing, affected documentation, testing performed, and remaining merge checks. It does not follow the template exactly because it omits a Closes issue line, the standard checklist, and a Screenshots section, but it is sufficiently complete and directly relevant.

Full details: Docstring Coverage

Explanation

No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (7 skipped: 7 unsupported.)

Finishing Touches
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

devin-ai-integration[bot]

This comment was marked as resolved.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7


ℹ️ Review info
⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 735eb1fe-95d4-45b6-9a5e-bc1f29b5101a
📥 Commits

Reviewing files that changed from the base of the PR and between d9bf563 and 451d78c.

📒 Files selected for processing: 7
  • .changeset/cost-skill-webhook-filters.md
  • docs/how-to-reduce-your-spend.mdx
  • docs/limits.mdx
  • docs/webhooks/deliveries.mdx
  • docs/webhooks/overview.mdx
  • docs/webhooks/waiters.mdx
  • packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review.

📜 Review details
⏰ Context from checks skipped due to timeout: 12
  • GitHub Check: sdk-compat / Node.js 20.20 (warp-ubuntu-latest-x64-4x)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (2, 6)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (6, 6)
  • GitHub Check: sdk-compat / Node.js 26.12.1 (warp-ubuntu-latest-x64-4x)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (3, 6)
  • GitHub Check: webapp / 🧪 Unit Tests: Webapp (1, 6)
  • GitHub Check: internal / 🧪 Unit Tests: Internal (1)
  • GitHub Check: packages / 🧪 Unit Tests: Packages (2, 3)
  • GitHub Check: internal / 🧪 Unit Tests: Internal (2)
  • GitHub Check: e2e-webapp / 🧪 E2E Tests: Webapp (1, 1)
  • GitHub Check: packages / 🧪 Unit Tests: Packages (3, 3)
  • GitHub Check: Analyze (javascript-typescript)
🧰 Additional context used
📚 Code guidelines: 4
packages/trigger-sdk/AGENTS.md — auto-discovered
.claude/rules/sdk-packages.md — auto-discovered
.claude/rules/docs-writing.md — auto-discovered
docs/AGENTS.md — auto-discovered
📓 Path-based instructions: 4
Source excerpt: Always import from `@trigger.dev/sdk`.

📄 CodeRabbit inference engine (packages/trigger-sdk/AGENTS.md)

Files:

  • packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md
Source excerpt: Changes to `packages/` are **customer-facing**.

📄 CodeRabbit inference engine (.claude/rules/sdk-packages.md)

Files:

  • packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md
Source excerpt: Use Mintlify MDX format.

📄 CodeRabbit inference engine (.claude/rules/docs-writing.md)

Files:

  • docs/webhooks/deliveries.mdx
  • docs/webhooks/waiters.mdx
  • docs/how-to-reduce-your-spend.mdx
  • docs/limits.mdx
  • docs/webhooks/overview.mdx
Applicability reference: AGENTS.md: # AGENTS.md Docs live in `docs/` as a Mintlify site (MDX format).

📄 CodeRabbit inference engine (docs/AGENTS.md)

Files:

  • docs/webhooks/deliveries.mdx
  • docs/webhooks/waiters.mdx
  • docs/how-to-reduce-your-spend.mdx
  • docs/limits.mdx
  • docs/webhooks/overview.mdx
🪛 SkillSpector (2.12.0)
packages/trigger-sdk/skills/trigger-cost-savings/SKILL.md

[warning] 43: [RP1] MCP server referenced without pinned version: 'npx trigger.dev'.: npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Remediation: Pin the version: npx @scope/server@1.2.3

(MCP Rug Pull (RP1))

🔇 Additional comments: 2
docs/webhooks/overview.mdx: 1

92-92: 🗄️ Data Integrity & Integration

Confirm the webhook-limit rollout before publishing these values.

The page presents the plan limits as active behavior. The implementation resolves limits from organization configuration over environment defaults, but the available source does not show which production organizations have these values or whether webhook-limits-backfill has run. Confirm the deployed configuration and backfill state. Otherwise, label the limits as planned or beta.

docs/limits.mdx: 1

185-190: 🗄️ Data Integrity & Integration

The active Cloud values and webhook-limits-backfill status cannot be determined from the repository. The resolver reads environment defaults and organization overrides, but no deployed Cloud configuration or backfill record is present. The publication concern therefore remains undecidable from the available evidence.

Comment thread docs/limits.mdx Resolved
Comment thread docs/limits.mdx Resolved
Comment thread docs/limits.mdx Resolved
Comment thread docs/webhooks/deliveries.mdx Resolved
Comment thread docs/webhooks/overview.mdx Resolved
Comment thread docs/webhooks/waiters.mdx Resolved
- Filters only skip subscribers: a waiting run still resumes
- Runs are billed an invocation cost plus compute
- Enterprise rows for processing concurrency and delivery retention
- Qualify the 30-day storage claim for strict retention
- Scope the waiter table's live-waiter defaults to self-hosted
- Grammar fixes in limits and the changeset
@changeset-bot

changeset-bot Bot commented Oct 26, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: d2bad11

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 30 packages
Name Type
@trigger.dev/sdk Patch
@trigger.dev/linear Patch
@trigger.dev/python Patch
@trigger.dev/slack Patch
@internal/dashboard-agent Patch
@trigger.dev/build Patch
trigger.dev Patch
@trigger.dev/core Patch
@trigger.dev/react-hooks Patch
@trigger.dev/redis-worker Patch
@trigger.dev/rsc Patch
@trigger.dev/schema-to-json Patch
@trigger.dev/billing Patch
@trigger.dev/database Patch
@trigger.dev/otlp-importer Patch
@trigger.dev/rbac Patch
@trigger.dev/sso Patch
@internal/clickhouse Patch
@internal/llm-model-catalog Patch
@internal/metrics-pipeline Patch
@internal/redis Patch
@internal/replication Patch
@internal/run-engine Patch
@internal/run-store Patch
@internal/schedule-engine Patch
@internal/tracing Patch
@internal/webhook-engine Patch
@internal/webhook-sources Patch
@internal/testcontainers Patch
@internal/cache Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@pkg-pr-new

pkg-pr-new Bot commented Oct 26, 2026

Copy link
Copy Markdown

Open in StackBlitz

@trigger.dev/build

npm i https://pkg.pr.new/@trigger.dev/build@d2bad11

trigger.dev

npm i https://pkg.pr.new/trigger.dev@d2bad11

@trigger.dev/core

npm i https://pkg.pr.new/@trigger.dev/core@d2bad11

@trigger.dev/linear

npm i https://pkg.pr.new/@trigger.dev/linear@d2bad11

@trigger.dev/python

npm i https://pkg.pr.new/@trigger.dev/python@d2bad11

@trigger.dev/react-hooks

npm i https://pkg.pr.new/@trigger.dev/react-hooks@d2bad11

@trigger.dev/redis-worker

npm i https://pkg.pr.new/@trigger.dev/redis-worker@d2bad11

@trigger.dev/rsc

npm i https://pkg.pr.new/@trigger.dev/rsc@d2bad11

@trigger.dev/schema-to-json

npm i https://pkg.pr.new/@trigger.dev/schema-to-json@d2bad11

@trigger.dev/slack

npm i https://pkg.pr.new/@trigger.dev/slack@d2bad11

@trigger.dev/sdk

npm i https://pkg.pr.new/@trigger.dev/sdk@d2bad11

commit: d2bad11

@jackbridger
jackbridger added this pull request to the merge queue Oct 26, 2026
Merged via the queue into main with commit 4ae1b8b Oct 26, 2026
75 checks passed
@jackbridger
jackbridger deleted the docs/webhooks-pricing branch October 26, 2026 17:45
@github-actions github-actions Bot mentioned this pull request Oct 26, 2026
deven065 pushed a commit to deven065/trigger.dev that referenced this pull request Oct 29, 2026
## 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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@a8a8785))
- Add an experimental Convex component for triggering tasks
transactionally and reading their status and results through reactive
queries, without configuring webhooks.
([`3c1cf656c`](triggerdotdev@3c1cf65))
- Run metadata operations now reject JSON-path keys that use escaped
dots to reach `__proto__`, `constructor` or `prototype`.
([`dce5048a8`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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.
([triggerdotdev#5051](triggerdotdev#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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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.
([triggerdotdev#5051](triggerdotdev#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`](triggerdotdev@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`](triggerdotdev@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`](triggerdotdev@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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants