Skip to content

chore: release v4.7.0 - #4947

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

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 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)

    const start = chat.createStartSessionAction("support-chat", {
    triggerConfig: { concurrencyKey: user.id },
    });
  • 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)

    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/<task-id> name). Existing reads keep compiling: a V2 queue reports concurrencyLimit as null and concurrency as undefined.

  • 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)

  • 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

  • Fix stale and empty project environment values in trigger dev, and support empty values in syncEnvVars(). (f384e8334)

Server changes

These changes affect the self-hosted Docker image and Trigger.dev Cloud:

  • Automatically archive preview branches after a configurable period without deployments, with protected branch names and a preview of affected branches.
  • Support empty-string environment values across the dashboard, API, and Vercel sync behind a feature flag, disabled by default.
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 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)

    const start = chat.createStartSessionAction("support-chat", {
      triggerConfig: { concurrencyKey: user.id },
    });
  • 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)

    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/<task-id> 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)
  • 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)
  • 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)

@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)

    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/<task-id> 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

@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)

    const start = chat.createStartSessionAction("support-chat", {
      triggerConfig: { concurrencyKey: user.id },
    });
  • 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)

    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/<task-id> name). Existing reads keep compiling: a V2 queue reports concurrencyLimit as null and concurrency as undefined.

Patch Changes

  • 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)
  • 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)
  • Updated dependencies:
    • @trigger.dev/core@4.7.0

@trigger.dev/build@4.7.0

Patch Changes

  • Updated dependencies:
    • @trigger.dev/core@4.7.0

trigger.dev@4.7.0

Patch Changes

  • Fix stale and empty project environment values in trigger dev, and support empty values in syncEnvVars(). (f384e8334)
  • Updated dependencies:
    • @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

  • Updated dependencies:
    • @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

  • Updated dependencies:
    • @trigger.dev/core@4.7.0

@trigger.dev/rsc@4.7.0

Patch Changes

  • Updated dependencies:
    • @trigger.dev/core@4.7.0

@trigger.dev/schema-to-json@4.7.0

Patch Changes

  • Updated dependencies:
    • @trigger.dev/core@4.7.0

@github-actions github-actions Bot changed the title chore: release chore: release v4.6.4 Sep 17, 2026
@coderabbitai

coderabbitai Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Bot user detected.

To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Advanced

Run ID: b7f2f13e-8a6d-4d58-ba36-7242cec8c99d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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 devin-ai-integration 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.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

@github-actions github-actions Bot changed the title chore: release v4.6.4 chore: release Sep 17, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 169b3de to bd3f9a6 Compare September 17, 2026 14:18
@github-actions github-actions Bot changed the title chore: release chore: release v4.6.4 Sep 17, 2026
@github-actions github-actions Bot changed the title chore: release v4.6.4 chore: release Sep 17, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from bd3f9a6 to fca2622 Compare September 17, 2026 15:04
@github-actions github-actions Bot changed the title chore: release chore: release v4.6.4 Sep 17, 2026
@github-actions github-actions Bot changed the title chore: release v4.6.4 chore: release Sep 17, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from fca2622 to ae1a3b8 Compare September 17, 2026 22:14
@github-actions github-actions Bot changed the title chore: release chore: release v4.6.4 Sep 17, 2026
@github-actions github-actions Bot changed the title chore: release v4.6.4 chore: release Sep 18, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from ae1a3b8 to eeb077a Compare September 18, 2026 10:05
@github-actions github-actions Bot changed the title chore: release chore: release v4.7.0 Sep 18, 2026
@github-actions github-actions Bot changed the title chore: release v4.7.0 chore: release Sep 18, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from eeb077a to 3d2240c Compare September 18, 2026 10:34
@github-actions github-actions Bot changed the title chore: release chore: release v4.7.0 Sep 18, 2026
@github-actions github-actions Bot changed the title chore: release v4.7.0 chore: release Sep 18, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 3d2240c to 5425e2b Compare September 18, 2026 13:08
@github-actions github-actions Bot changed the title chore: release chore: release v4.7.0 Sep 18, 2026
@github-actions github-actions Bot changed the title chore: release v4.7.0 chore: release Sep 18, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 5425e2b to 776d715 Compare September 18, 2026 17:52
@github-actions github-actions Bot changed the title chore: release chore: release v4.7.0 Sep 18, 2026
@github-actions github-actions Bot changed the title chore: release v4.7.0 chore: release Sep 18, 2026
@github-actions
github-actions Bot force-pushed the changeset-release/main branch from 776d715 to dedb058 Compare September 18, 2026 20:44
@github-actions github-actions Bot changed the title chore: release chore: release v4.7.0 Sep 18, 2026
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.

0 participants