@trigger.dev/sdk 4.5.0-rc.7 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/dist/commonjs/v3/ai-shared.js +1 -4
  2. package/dist/commonjs/v3/ai-shared.js.map +1 -1
  3. package/dist/commonjs/v3/ai.d.ts +7 -1
  4. package/dist/commonjs/v3/ai.js +110 -44
  5. package/dist/commonjs/v3/ai.js.map +1 -1
  6. package/dist/commonjs/v3/chat-client.js +18 -14
  7. package/dist/commonjs/v3/chat-client.js.map +1 -1
  8. package/dist/commonjs/v3/chat-react.js +1 -3
  9. package/dist/commonjs/v3/chat-react.js.map +1 -1
  10. package/dist/commonjs/v3/chat-server.d.ts +69 -1
  11. package/dist/commonjs/v3/chat-server.js +162 -14
  12. package/dist/commonjs/v3/chat-server.js.map +1 -1
  13. package/dist/commonjs/v3/chat-server.test.js +156 -12
  14. package/dist/commonjs/v3/chat-server.test.js.map +1 -1
  15. package/dist/commonjs/v3/chat.js +4 -3
  16. package/dist/commonjs/v3/chat.js.map +1 -1
  17. package/dist/commonjs/v3/chat.test.js +6 -18
  18. package/dist/commonjs/v3/chat.test.js.map +1 -1
  19. package/dist/commonjs/v3/idempotencyKeys.js.map +1 -1
  20. package/dist/commonjs/v3/prompt.js +2 -6
  21. package/dist/commonjs/v3/prompt.js.map +1 -1
  22. package/dist/commonjs/v3/promptManagement.js.map +1 -1
  23. package/dist/commonjs/v3/retry.js.map +1 -1
  24. package/dist/commonjs/v3/runs.d.ts +1 -1
  25. package/dist/commonjs/v3/sessions.js +1 -0
  26. package/dist/commonjs/v3/sessions.js.map +1 -1
  27. package/dist/commonjs/v3/shared.js.map +1 -1
  28. package/dist/commonjs/v3/skill.js.map +1 -1
  29. package/dist/commonjs/v3/streams.js +2 -3
  30. package/dist/commonjs/v3/streams.js.map +1 -1
  31. package/dist/commonjs/v3/streams.test.js.map +1 -1
  32. package/dist/commonjs/v3/test/mock-chat-agent.js +1 -4
  33. package/dist/commonjs/v3/test/mock-chat-agent.js.map +1 -1
  34. package/dist/commonjs/v3/test/test-session-handle.js.map +1 -1
  35. package/dist/commonjs/v3/triggerClient.test.js +1 -1
  36. package/dist/commonjs/v3/triggerClient.test.js.map +1 -1
  37. package/dist/commonjs/v3/triggerClient.types.test.js +11 -11
  38. package/dist/commonjs/v3/triggerClient.types.test.js.map +1 -1
  39. package/dist/commonjs/version.js +1 -1
  40. package/dist/esm/v3/ai-shared.js +1 -4
  41. package/dist/esm/v3/ai-shared.js.map +1 -1
  42. package/dist/esm/v3/ai.d.ts +7 -1
  43. package/dist/esm/v3/ai.js +110 -44
  44. package/dist/esm/v3/ai.js.map +1 -1
  45. package/dist/esm/v3/chat-client.js +18 -14
  46. package/dist/esm/v3/chat-client.js.map +1 -1
  47. package/dist/esm/v3/chat-react.js +1 -3
  48. package/dist/esm/v3/chat-react.js.map +1 -1
  49. package/dist/esm/v3/chat-server.d.ts +69 -1
  50. package/dist/esm/v3/chat-server.js +162 -14
  51. package/dist/esm/v3/chat-server.js.map +1 -1
  52. package/dist/esm/v3/chat-server.test.js +156 -12
  53. package/dist/esm/v3/chat-server.test.js.map +1 -1
  54. package/dist/esm/v3/chat.js +4 -3
  55. package/dist/esm/v3/chat.js.map +1 -1
  56. package/dist/esm/v3/chat.test.js +6 -18
  57. package/dist/esm/v3/chat.test.js.map +1 -1
  58. package/dist/esm/v3/idempotencyKeys.js +1 -1
  59. package/dist/esm/v3/idempotencyKeys.js.map +1 -1
  60. package/dist/esm/v3/prompt.js +2 -6
  61. package/dist/esm/v3/prompt.js.map +1 -1
  62. package/dist/esm/v3/promptManagement.js.map +1 -1
  63. package/dist/esm/v3/retry.js.map +1 -1
  64. package/dist/esm/v3/sessions.js +1 -0
  65. package/dist/esm/v3/sessions.js.map +1 -1
  66. package/dist/esm/v3/shared.js.map +1 -1
  67. package/dist/esm/v3/skill.js.map +1 -1
  68. package/dist/esm/v3/streams.js +2 -3
  69. package/dist/esm/v3/streams.js.map +1 -1
  70. package/dist/esm/v3/streams.test.js.map +1 -1
  71. package/dist/esm/v3/test/mock-chat-agent.js +4 -7
  72. package/dist/esm/v3/test/mock-chat-agent.js.map +1 -1
  73. package/dist/esm/v3/test/test-session-handle.js.map +1 -1
  74. package/dist/esm/v3/triggerClient.test.js +1 -1
  75. package/dist/esm/v3/triggerClient.test.js.map +1 -1
  76. package/dist/esm/v3/triggerClient.types.test.js +11 -11
  77. package/dist/esm/v3/triggerClient.types.test.js.map +1 -1
  78. package/dist/esm/version.js +1 -1
  79. package/docs/ai/prompts.mdx +0 -4
  80. package/docs/ai-chat/actions.mdx +0 -4
  81. package/docs/ai-chat/anatomy.mdx +0 -4
  82. package/docs/ai-chat/backend.mdx +0 -4
  83. package/docs/ai-chat/background-injection.mdx +0 -4
  84. package/docs/ai-chat/changelog.mdx +109 -1
  85. package/docs/ai-chat/chat-local.mdx +0 -4
  86. package/docs/ai-chat/client-protocol.mdx +0 -4
  87. package/docs/ai-chat/compaction.mdx +0 -4
  88. package/docs/ai-chat/custom-agents.mdx +32 -4
  89. package/docs/ai-chat/error-handling.mdx +0 -4
  90. package/docs/ai-chat/fast-starts.mdx +86 -4
  91. package/docs/ai-chat/frontend.mdx +0 -4
  92. package/docs/ai-chat/how-it-works.mdx +0 -4
  93. package/docs/ai-chat/lifecycle-hooks.mdx +0 -4
  94. package/docs/ai-chat/mcp.mdx +0 -4
  95. package/docs/ai-chat/overview.mdx +0 -4
  96. package/docs/ai-chat/patterns/branching-conversations.mdx +0 -4
  97. package/docs/ai-chat/patterns/code-sandbox.mdx +0 -4
  98. package/docs/ai-chat/patterns/database-persistence.mdx +0 -4
  99. package/docs/ai-chat/patterns/human-in-the-loop.mdx +9 -5
  100. package/docs/ai-chat/patterns/large-payloads.mdx +0 -4
  101. package/docs/ai-chat/patterns/oom-resilience.mdx +0 -4
  102. package/docs/ai-chat/patterns/persistence-and-replay.mdx +0 -4
  103. package/docs/ai-chat/patterns/recovery-boot.mdx +0 -4
  104. package/docs/ai-chat/patterns/skills.mdx +0 -4
  105. package/docs/ai-chat/patterns/sub-agents.mdx +0 -4
  106. package/docs/ai-chat/patterns/tool-result-auditing.mdx +0 -4
  107. package/docs/ai-chat/patterns/trusted-edge-signals.mdx +0 -4
  108. package/docs/ai-chat/patterns/version-upgrades.mdx +0 -4
  109. package/docs/ai-chat/pending-messages.mdx +0 -4
  110. package/docs/ai-chat/prompt-caching.mdx +4 -4
  111. package/docs/ai-chat/quick-start.mdx +0 -4
  112. package/docs/ai-chat/reference.mdx +1 -5
  113. package/docs/ai-chat/server-chat.mdx +0 -4
  114. package/docs/ai-chat/sessions.mdx +0 -4
  115. package/docs/ai-chat/testing.mdx +0 -4
  116. package/docs/ai-chat/tools.mdx +0 -4
  117. package/docs/ai-chat/types.mdx +0 -4
  118. package/docs/ai-chat/upgrade-guide.mdx +0 -4
  119. package/docs/building-with-ai.mdx +1 -1
  120. package/docs/deploy-environment-variables.mdx +1 -1
  121. package/docs/deployment/dev-branches.mdx +92 -0
  122. package/docs/deployment/overview.mdx +1 -1
  123. package/docs/help-slack.mdx +1 -0
  124. package/docs/how-to-reduce-your-spend.mdx +14 -7
  125. package/docs/introduction.mdx +13 -13
  126. package/docs/mcp-agent-rules.mdx +1 -1
  127. package/docs/open-source-self-hosting.mdx +1 -1
  128. package/docs/self-hosting/overview.mdx +2 -1
  129. package/docs/tasks/scheduled.mdx +2 -2
  130. package/docs/troubleshooting-debugging-in-vscode.mdx +1 -0
  131. package/docs/troubleshooting-github-issues.mdx +1 -1
  132. package/docs/troubleshooting-uptime-status.mdx +1 -0
  133. package/docs/video-walkthrough.mdx +1 -1
  134. package/docs/wait-for.mdx +1 -1
  135. package/package.json +2 -2
  136. package/docs/cli-dev.mdx +0 -8
@@ -55,45 +55,45 @@ const client = new triggerClient_js_1.TriggerClient({ accessToken: "tr_x" });
55
55
  (0, vitest_1.it)("instance.tasks drops inside-task-only and definition-time helpers", () => {
56
56
  (0, vitest_1.expectTypeOf)().toEqualTypeOf();
57
57
  // @ts-expect-error — triggerAndWait is not on the instance surface.
58
- client.tasks.triggerAndWait;
58
+ void client.tasks.triggerAndWait;
59
59
  // @ts-expect-error — batchTriggerAndWait is not on the instance surface.
60
- client.tasks.batchTriggerAndWait;
60
+ void client.tasks.batchTriggerAndWait;
61
61
  // @ts-expect-error — triggerAndSubscribe requires a task context; not on the instance surface.
62
- client.tasks.triggerAndSubscribe;
62
+ void client.tasks.triggerAndSubscribe;
63
63
  // @ts-expect-error — hooks like onStart are task-definition-time, not on the client.
64
- client.tasks.onStart;
64
+ void client.tasks.onStart;
65
65
  });
66
66
  (0, vitest_1.it)("instance.batch drops the *AndWait variants that depend on the runtime", () => {
67
67
  (0, vitest_1.expectTypeOf)().toEqualTypeOf();
68
68
  // @ts-expect-error
69
- client.batch.triggerAndWait;
69
+ void client.batch.triggerAndWait;
70
70
  // @ts-expect-error
71
- client.batch.triggerByTaskAndWait;
71
+ void client.batch.triggerByTaskAndWait;
72
72
  // The module-level export still has them — sanity check we didn't change that.
73
73
  (0, vitest_1.expectTypeOf)(batch_js_1.batch).toHaveProperty("triggerAndWait");
74
74
  });
75
75
  (0, vitest_1.it)("instance.schedules drops `task` definition helper and `timezones` stateless helper", () => {
76
76
  (0, vitest_1.expectTypeOf)().toEqualTypeOf();
77
77
  // @ts-expect-error
78
- client.schedules.task;
78
+ void client.schedules.task;
79
79
  // @ts-expect-error
80
- client.schedules.timezones;
80
+ void client.schedules.timezones;
81
81
  // Module-level export still has them.
82
82
  (0, vitest_1.expectTypeOf)(schedules).toHaveProperty("task");
83
83
  (0, vitest_1.expectTypeOf)(schedules).toHaveProperty("timezones");
84
84
  });
85
85
  (0, vitest_1.it)("instance.prompts drops `define`", () => {
86
86
  // @ts-expect-error
87
- client.prompts.define;
87
+ void client.prompts.define;
88
88
  // Module-level export still has it.
89
89
  (0, vitest_1.expectTypeOf)(prompts).toHaveProperty("define");
90
90
  });
91
91
  (0, vitest_1.it)("instance.auth is the public-token subset only (no configure/withAuth)", () => {
92
92
  (0, vitest_1.expectTypeOf)().toEqualTypeOf();
93
93
  // @ts-expect-error — configure is global-only, not on the instance.
94
- client.auth.configure;
94
+ void client.auth.configure;
95
95
  // @ts-expect-error — withAuth is global-only.
96
- client.auth.withAuth;
96
+ void client.auth.withAuth;
97
97
  // Module-level export still has them.
98
98
  (0, vitest_1.expectTypeOf)(auth_js_1.auth).toHaveProperty("configure");
99
99
  (0, vitest_1.expectTypeOf)(auth_js_1.auth).toHaveProperty("withAuth");
@@ -1 +1 @@
1
- {"version":3,"file":"triggerClient.types.test.js","sourceRoot":"","sources":["../../../src/v3/triggerClient.types.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triggerClient.types.test.js","sourceRoot":"","sources":["../../../src/v3/triggerClient.types.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
- exports.VERSION = "4.5.0-rc.7";
4
+ exports.VERSION = "4.5.0";
5
5
  //# sourceMappingURL=version.js.map
@@ -123,10 +123,7 @@ export function slimSubmitMessageForWire(message) {
123
123
  if (message.role !== "assistant")
124
124
  return message;
125
125
  const parts = (message.parts ?? []);
126
- const advancedToolParts = parts.filter((p) => p &&
127
- typeof p === "object" &&
128
- isToolPartType(p.type) &&
129
- isWireAdvanceableToolState(p.state));
126
+ const advancedToolParts = parts.filter((p) => p && typeof p === "object" && isToolPartType(p.type) && isWireAdvanceableToolState(p.state));
130
127
  if (advancedToolParts.length === 0)
131
128
  return message;
132
129
  const slimParts = advancedToolParts.map((p) => {
@@ -1 +1 @@
1
- {"version":3,"file":"ai-shared.js","sourceRoot":"","sources":["../../../src/v3/ai-shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-shared.js","sourceRoot":"","sources":["../../../src/v3/ai-shared.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { AnyTask, type MachinePresetName, type RealtimeDefinedInputStream, type RealtimeDefinedStream, Task, type inferSchemaIn, type inferSchemaOut, type TaskIdentifier, type TaskOptions, type TaskSchema, type TaskRunContext, type TaskWithSchema } from "@trigger.dev/core/v3";
1
+ import { AnyTask, type MachinePresetName, type RealtimeDefinedInputStream, type RealtimeDefinedStream, type ApiClientConfiguration, Task, type inferSchemaIn, type inferSchemaOut, type TaskIdentifier, type TaskOptions, type TaskSchema, type TaskRunContext, type TaskWithSchema } from "@trigger.dev/core/v3";
2
2
  import type { FinishReason, LanguageModelUsage, ModelMessage, ProviderMetadata, Tool, ToolSet, UIMessage, UIMessageChunk, UIMessageStreamOptions } from "ai";
3
3
  type ToolCallOptions = {
4
4
  toolCallId: string;
@@ -2839,6 +2839,12 @@ export type CreateChatStartSessionActionOptions = {
2839
2839
  * custom retry. Applies to both session-create and JWT-claims POSTs.
2840
2840
  */
2841
2841
  fetch?: ChatStartSessionFetchOverride;
2842
+ /**
2843
+ * API client config (baseURL / accessToken) to scope this action to a specific
2844
+ * environment, for callers that can't set a global `TRIGGER_SECRET_KEY`. The
2845
+ * returned action runs under this config.
2846
+ */
2847
+ apiClient?: ApiClientConfiguration;
2842
2848
  };
2843
2849
  /**
2844
2850
  * Params for the function returned by {@link createChatStartSessionAction}.
package/dist/esm/v3/ai.js CHANGED
@@ -141,7 +141,9 @@ async function seedSessionInResumeCursorForCustomLoop(payload) {
141
141
  }
142
142
  }
143
143
  catch (error) {
144
- logger.warn("chat session: session.in resume cursor lookup failed; old messages may replay", { error: error instanceof Error ? error.message : String(error) });
144
+ logger.warn("chat session: session.in resume cursor lookup failed; old messages may replay", {
145
+ error: error instanceof Error ? error.message : String(error),
146
+ });
145
147
  }
146
148
  }
147
149
  let readChatSnapshotImpl;
@@ -1227,8 +1229,7 @@ const handoverInput = {
1227
1229
  const result = await getChatSession().in.waitWithIdleTimeout(options);
1228
1230
  if (!result.ok)
1229
1231
  return result;
1230
- if (result.output.kind === "handover" ||
1231
- result.output.kind === "handover-skip") {
1232
+ if (result.output.kind === "handover" || result.output.kind === "handover-skip") {
1232
1233
  return { ok: true, output: result.output };
1233
1234
  }
1234
1235
  // Other kinds (message, stop) are not expected during handover-prepare.
@@ -1939,6 +1940,55 @@ function isStepBoundarySafe(step) {
1939
1940
  .map((p) => p.toolCallId));
1940
1941
  return ![...callIds].some((id) => !settledIds.has(id));
1941
1942
  }
1943
+ /**
1944
+ * True when a model message is a `tool` message carrying a
1945
+ * `tool-approval-response` part — the trailing row a head-start handover
1946
+ * reshapes a pending first-turn tool call into. AI SDK's `collectToolApprovals`
1947
+ * only inspects the conversation's last message, so this row must survive to
1948
+ * `streamText` intact for the agent to execute the handed-over call.
1949
+ * @internal
1950
+ */
1951
+ function hasToolApprovalResponse(message) {
1952
+ return (message?.role === "tool" &&
1953
+ Array.isArray(message.content) &&
1954
+ message.content.some((part) => part != null &&
1955
+ typeof part === "object" &&
1956
+ part.type === "tool-approval-response"));
1957
+ }
1958
+ /**
1959
+ * Keep a head-start handover's tool-approval tail intact across `prepareMessages`.
1960
+ *
1961
+ * The handover reshapes the warm step-1's pending tool call into AI SDK's
1962
+ * tool-approval round: a `tool-approval-request` on the assistant plus a
1963
+ * trailing `tool` message with `tool-approval-response { approved: true }`. The
1964
+ * agent's next `streamText` runs `collectToolApprovals`, which ONLY looks at the
1965
+ * last message — so that tool row must stay last and unmodified for the pending
1966
+ * call to execute. A user `prepareMessages` hook that rewrites or drops the last
1967
+ * message (e.g. rolling a provider cache breakpoint onto it) silently breaks the
1968
+ * resume: the agent sends a bare `tool_use` and the turn dies with
1969
+ * "tool_use ids were found without tool_result". If the hook's input ended with
1970
+ * that approval tail, re-assert the original tail as the last message.
1971
+ *
1972
+ * No-op for every normal turn — only fires when the input genuinely ended with a
1973
+ * pending tool-approval response (i.e. a head-start resume).
1974
+ * @internal
1975
+ */
1976
+ function preserveToolApprovalTail(original, prepared) {
1977
+ const originalTail = original[original.length - 1];
1978
+ if (!hasToolApprovalResponse(originalTail))
1979
+ return prepared;
1980
+ // Hook left the exact tail object in place — nothing to do.
1981
+ if (prepared[prepared.length - 1] === originalTail)
1982
+ return prepared;
1983
+ // Otherwise drop only the trailing approval tail the hook produced (the
1984
+ // original moved, or a rewritten copy) and re-append the original so it is
1985
+ // last and intact. Older approval rounds deeper in history must survive.
1986
+ const withoutMovedOriginal = prepared.filter((m) => m !== originalTail);
1987
+ while (hasToolApprovalResponse(withoutMovedOriginal[withoutMovedOriginal.length - 1])) {
1988
+ withoutMovedOriginal.pop();
1989
+ }
1990
+ return [...withoutMovedOriginal, originalTail];
1991
+ }
1942
1992
  /**
1943
1993
  * Apply the prepareMessages hook if one is set in locals.
1944
1994
  * @internal
@@ -1948,7 +1998,7 @@ async function applyPrepareMessages(messages, reason) {
1948
1998
  if (!hook)
1949
1999
  return messages;
1950
2000
  const turnCtx = locals.get(chatTurnContextKey);
1951
- return tracer.startActiveSpan("prepareMessages()", async () => {
2001
+ const prepared = await tracer.startActiveSpan("prepareMessages()", async () => {
1952
2002
  return hook({
1953
2003
  messages,
1954
2004
  reason,
@@ -1964,6 +2014,9 @@ async function applyPrepareMessages(messages, reason) {
1964
2014
  "chat.prepareMessages.messageCount": messages.length,
1965
2015
  },
1966
2016
  });
2017
+ // A user hook must never be able to break the head-start handover resume by
2018
+ // disturbing the trailing tool-approval row (see preserveToolApprovalTail).
2019
+ return preserveToolApprovalTail(messages, prepared);
1967
2020
  }
1968
2021
  /**
1969
2022
  * Resolve the `tools` option into a concrete `ToolSet` and cache it in locals so
@@ -2912,7 +2965,9 @@ function chatAgent(options) {
2912
2965
  const replayOutPhase = async () => {
2913
2966
  const replayOutStart = Date.now();
2914
2967
  try {
2915
- const replayResult = await replaySessionOutTail(sessionIdForSnapshot, { lastEventId: bootSnapshot?.lastOutEventId });
2968
+ const replayResult = await replaySessionOutTail(sessionIdForSnapshot, {
2969
+ lastEventId: bootSnapshot?.lastOutEventId,
2970
+ });
2916
2971
  replayedSettled = replayResult.settled;
2917
2972
  replayedPartial = replayResult.partial;
2918
2973
  replayedPartialRaw = replayResult.partialRaw;
@@ -3009,9 +3064,7 @@ function chatAgent(options) {
3009
3064
  // crashed / was canceled / requested upgrade
3010
3065
  // - Snapshot exists at all (catches edge cases where the wire
3011
3066
  // didn't set `continuation` but a snapshot indicates prior turns)
3012
- const needsResumeCursor = ctx.attempt.number > 1 ||
3013
- payload.continuation === true ||
3014
- bootSnapshot !== undefined;
3067
+ const needsResumeCursor = ctx.attempt.number > 1 || payload.continuation === true || bootSnapshot !== undefined;
3015
3068
  if (needsResumeCursor) {
3016
3069
  try {
3017
3070
  // Reuse the cursor the boot block already resolved (snapshot
@@ -3358,9 +3411,7 @@ function chatAgent(options) {
3358
3411
  // Wait for the first real message — task-level idle settings win over
3359
3412
  // `transport.preload(..., { idleTimeoutInSeconds })` / wire payload so
3360
3413
  // `chat.agent({ idleTimeoutInSeconds, preloadIdleTimeoutInSeconds })` is authoritative.
3361
- const effectivePreloadIdleTimeout = preloadIdleTimeoutInSeconds ??
3362
- idleTimeoutInSeconds ??
3363
- payload.idleTimeoutInSeconds;
3414
+ const effectivePreloadIdleTimeout = preloadIdleTimeoutInSeconds ?? idleTimeoutInSeconds ?? payload.idleTimeoutInSeconds;
3364
3415
  const effectivePreloadTimeout = metadata.get(TURN_TIMEOUT_METADATA_KEY) ??
3365
3416
  preloadTimeout ??
3366
3417
  turnTimeout;
@@ -3605,7 +3656,9 @@ function chatAgent(options) {
3605
3656
  if (lastUserMessage) {
3606
3657
  turnAttributes["chat.user_message"] = lastUserMessage;
3607
3658
  // Show a truncated preview of the user message as an accessory
3608
- const preview = lastUserMessage.length > 80 ? lastUserMessage.slice(0, 80) + "..." : lastUserMessage;
3659
+ const preview = lastUserMessage.length > 80
3660
+ ? lastUserMessage.slice(0, 80) + "..."
3661
+ : lastUserMessage;
3609
3662
  Object.assign(turnAttributes, accessoryAttributes({
3610
3663
  items: [{ text: preview, variant: "normal" }],
3611
3664
  style: "codepath",
@@ -3892,8 +3945,7 @@ function chatAgent(options) {
3892
3945
  if (currentWirePayload.trigger === "submit-message" &&
3893
3946
  cleanedUIMessages.length > 0) {
3894
3947
  const lastUI = cleanedUIMessages[cleanedUIMessages.length - 1];
3895
- const matchedExisting = lastUI.id !== undefined &&
3896
- previouslyKnownMessageIds.has(lastUI.id);
3948
+ const matchedExisting = lastUI.id !== undefined && previouslyKnownMessageIds.has(lastUI.id);
3897
3949
  if (!matchedExisting) {
3898
3950
  turnNewUIMessages.push(lastUI);
3899
3951
  const lastModel = (await toModelMessages([lastUI]))[0];
@@ -4228,7 +4280,8 @@ function chatAgent(options) {
4228
4280
  // We call toUIMessageStream ourselves to attach onFinish for response capture.
4229
4281
  // Pass originalMessages so the AI SDK reuses message IDs across turns
4230
4282
  // (e.g. for tool approval continuations / HITL flows).
4231
- if ((locals.get(chatPipeCountKey) ?? 0) === 0 && isUIMessageStreamable(runResult)) {
4283
+ if ((locals.get(chatPipeCountKey) ?? 0) === 0 &&
4284
+ isUIMessageStreamable(runResult)) {
4232
4285
  onFinishAttached = true;
4233
4286
  const resolvedOptions = resolveUIMessageStreamOptions();
4234
4287
  // For action turns, don't pass originalMessages: the response
@@ -4241,9 +4294,7 @@ function chatAgent(options) {
4241
4294
  // Pass originalMessages so the AI SDK reuses message IDs across
4242
4295
  // turns (e.g. for tool approval continuations / HITL flows).
4243
4296
  // Omit for action turns to force a fresh response ID.
4244
- ...(isActionTurn
4245
- ? {}
4246
- : { originalMessages: accumulatedUIMessages }),
4297
+ ...(isActionTurn ? {} : { originalMessages: accumulatedUIMessages }),
4247
4298
  // Always provide generateMessageId so the start chunk carries a
4248
4299
  // messageId. Without this, the frontend and backend generate IDs
4249
4300
  // independently and they won't match for ID-based dedup.
@@ -4254,7 +4305,10 @@ function chatAgent(options) {
4254
4305
  resolveOnFinish();
4255
4306
  },
4256
4307
  });
4257
- await pipeChat(uiStream, { signal: combinedSignal, spanName: "stream response" });
4308
+ await pipeChat(uiStream, {
4309
+ signal: combinedSignal,
4310
+ spanName: "stream response",
4311
+ });
4258
4312
  }
4259
4313
  }
4260
4314
  catch (error) {
@@ -4289,7 +4343,8 @@ function chatAgent(options) {
4289
4343
  // never reports final usage), which would block the turn loop
4290
4344
  // from ever firing onTurnComplete / writeTurnComplete.
4291
4345
  let turnUsage;
4292
- if (runResult != null && typeof runResult.totalUsage?.then === "function") {
4346
+ if (runResult != null &&
4347
+ typeof runResult.totalUsage?.then === "function") {
4293
4348
  try {
4294
4349
  turnUsage = (await Promise.race([
4295
4350
  runResult.totalUsage,
@@ -4375,7 +4430,10 @@ function chatAgent(options) {
4375
4430
  // may produce a message with an empty ID since IDs are normally
4376
4431
  // assigned by the frontend's useChat).
4377
4432
  if (!capturedResponseMessage.id) {
4378
- capturedResponseMessage = { ...capturedResponseMessage, id: generateMessageId() };
4433
+ capturedResponseMessage = {
4434
+ ...capturedResponseMessage,
4435
+ id: generateMessageId(),
4436
+ };
4379
4437
  }
4380
4438
  // Append any non-transient data parts queued via chat.response or writer.write()
4381
4439
  const queuedParts = locals.get(chatResponsePartsKey);
@@ -4676,7 +4734,9 @@ function chatAgent(options) {
4676
4734
  ? { "gen_ai.usage.total_tokens": turnUsage.totalTokens }
4677
4735
  : {}),
4678
4736
  ...(cumulativeUsage.totalTokens != null
4679
- ? { "gen_ai.usage.cumulative_total_tokens": cumulativeUsage.totalTokens }
4737
+ ? {
4738
+ "gen_ai.usage.cumulative_total_tokens": cumulativeUsage.totalTokens,
4739
+ }
4680
4740
  : {}),
4681
4741
  },
4682
4742
  });
@@ -4708,9 +4768,7 @@ function chatAgent(options) {
4708
4768
  savedAt: Date.now(),
4709
4769
  messages: accumulatedUIMessages,
4710
4770
  lastOutEventId: turnCompleteResult?.lastEventId,
4711
- lastInEventId: snapshotInCursor !== undefined
4712
- ? String(snapshotInCursor)
4713
- : undefined,
4771
+ lastInEventId: snapshotInCursor !== undefined ? String(snapshotInCursor) : undefined,
4714
4772
  });
4715
4773
  }, {
4716
4774
  attributes: {
@@ -4752,8 +4810,7 @@ function chatAgent(options) {
4752
4810
  // chat.requestUpgrade() was called — exit the loop so the
4753
4811
  // transport triggers a new run on the latest version.
4754
4812
  // chat.endRun() — same exit, no upgrade semantics.
4755
- if (locals.get(chatUpgradeRequestedKey) ||
4756
- locals.get(chatEndRunRequestedKey)) {
4813
+ if (locals.get(chatUpgradeRequestedKey) || locals.get(chatEndRunRequestedKey)) {
4757
4814
  return "exit";
4758
4815
  }
4759
4816
  // Wait for the next message — stay idle briefly, then suspend
@@ -4833,7 +4890,9 @@ function chatAgent(options) {
4833
4890
  // Turn error handler: write an error chunk + turn-complete to the stream
4834
4891
  // so the client sees the error, then wait for the next message instead
4835
4892
  // of killing the entire run. This keeps the conversation alive.
4836
- if (turnError instanceof Error && turnError.name === "AbortError" && runSignal.aborted) {
4893
+ if (turnError instanceof Error &&
4894
+ turnError.name === "AbortError" &&
4895
+ runSignal.aborted) {
4837
4896
  // Full run cancellation — exit immediately
4838
4897
  throw turnError;
4839
4898
  }
@@ -4929,9 +4988,7 @@ function chatAgent(options) {
4929
4988
  savedAt: Date.now(),
4930
4989
  messages: erroredUIMessages,
4931
4990
  lastOutEventId: errorTurnCompleteResult?.lastEventId,
4932
- lastInEventId: errorSnapshotInCursor !== undefined
4933
- ? String(errorSnapshotInCursor)
4934
- : undefined,
4991
+ lastInEventId: errorSnapshotInCursor !== undefined ? String(errorSnapshotInCursor) : undefined,
4935
4992
  });
4936
4993
  }
4937
4994
  catch (error) {
@@ -4942,8 +4999,7 @@ function chatAgent(options) {
4942
4999
  }
4943
5000
  }
4944
5001
  // chat.requestUpgrade() / chat.endRun() — exit after error turn too
4945
- if (locals.get(chatUpgradeRequestedKey) ||
4946
- locals.get(chatEndRunRequestedKey)) {
5002
+ if (locals.get(chatUpgradeRequestedKey) || locals.get(chatEndRunRequestedKey)) {
4947
5003
  return;
4948
5004
  }
4949
5005
  // Drain remaining recovered turns before idling — a thrown
@@ -4976,7 +5032,7 @@ function chatAgent(options) {
4976
5032
  // cleanup so a missing subscription doesn't throw.
4977
5033
  stopSub?.off();
4978
5034
  }
4979
- }
5035
+ },
4980
5036
  });
4981
5037
  // Register clientDataSchema so the CLI converts it to JSONSchema
4982
5038
  // and stores it as payloadSchema — used by the Playground UI
@@ -5068,7 +5124,7 @@ function createChatBuilder(config) {
5068
5124
  agent(options) {
5069
5125
  const mergedUiStream = config.uiStreamOptions && options.uiMessageStreamOptions
5070
5126
  ? { ...config.uiStreamOptions, ...options.uiMessageStreamOptions }
5071
- : options.uiMessageStreamOptions ?? config.uiStreamOptions;
5127
+ : (options.uiMessageStreamOptions ?? config.uiStreamOptions);
5072
5128
  return chatAgent({
5073
5129
  ...options,
5074
5130
  ...(config.clientDataSchema ? { clientDataSchema: config.clientDataSchema } : {}),
@@ -5896,7 +5952,9 @@ function createChatSession(payload, options) {
5896
5952
  if (turn === 0 && currentPayload.trigger === "handover-prepare") {
5897
5953
  const signal = await waitForHandover({
5898
5954
  payload: currentPayload,
5899
- idleTimeoutInSeconds: sessionIdleTimeoutOpt ?? currentPayload.idleTimeoutInSeconds ?? idleTimeoutInSeconds,
5955
+ idleTimeoutInSeconds: sessionIdleTimeoutOpt ??
5956
+ currentPayload.idleTimeoutInSeconds ??
5957
+ idleTimeoutInSeconds,
5900
5958
  timeout,
5901
5959
  });
5902
5960
  if (!signal || signal.kind === "handover-skip" || runSignal.aborted) {
@@ -5915,7 +5973,8 @@ function createChatSession(payload, options) {
5915
5973
  // arrive with the sticky boot-payload fields stripped, so running
5916
5974
  // a turn immediately would invoke the model with no user input.
5917
5975
  const isMessagelessContinuationBoot = currentPayload.continuation === true && !currentPayload.message;
5918
- if (turn === 0 && (currentPayload.trigger === "preload" || isMessagelessContinuationBoot)) {
5976
+ if (turn === 0 &&
5977
+ (currentPayload.trigger === "preload" || isMessagelessContinuationBoot)) {
5919
5978
  const result = await messagesInput.waitWithIdleTimeout({
5920
5979
  idleTimeoutInSeconds: sessionIdleTimeoutOpt ?? currentPayload.idleTimeoutInSeconds ?? 30,
5921
5980
  timeout,
@@ -5939,8 +5998,7 @@ function createChatSession(payload, options) {
5939
5998
  // Subsequent turns: wait for the next message
5940
5999
  if (turn > 0) {
5941
6000
  // chat.requestUpgrade() / chat.endRun() — exit before waiting
5942
- if (locals.get(chatUpgradeRequestedKey) ||
5943
- locals.get(chatEndRunRequestedKey)) {
6001
+ if (locals.get(chatUpgradeRequestedKey) || locals.get(chatEndRunRequestedKey)) {
5944
6002
  stop.cleanup();
5945
6003
  return { done: true, value: undefined };
5946
6004
  }
@@ -6187,7 +6245,8 @@ function createChatSession(payload, options) {
6187
6245
  },
6188
6246
  ];
6189
6247
  if (sessionCompaction.compactUIMessages) {
6190
- accumulator.uiMessages = await sessionCompaction.compactUIMessages(compactEvent);
6248
+ accumulator.uiMessages =
6249
+ await sessionCompaction.compactUIMessages(compactEvent);
6191
6250
  }
6192
6251
  }
6193
6252
  }
@@ -6199,7 +6258,10 @@ function createChatSession(payload, options) {
6199
6258
  // Append any non-transient data parts queued via chat.response or writer.write()
6200
6259
  const queuedParts = locals.get(chatResponsePartsKey);
6201
6260
  if (queuedParts && queuedParts.length > 0) {
6202
- response = { ...response, parts: [...(response.parts ?? []), ...queuedParts] };
6261
+ response = {
6262
+ ...response,
6263
+ parts: [...(response.parts ?? []), ...queuedParts],
6264
+ };
6203
6265
  locals.set(chatResponsePartsKey, []);
6204
6266
  }
6205
6267
  await accumulator.addResponse(response);
@@ -6468,6 +6530,12 @@ function createChatStartSessionAction(taskId, options) {
6468
6530
  if (!params.chatId) {
6469
6531
  throw new Error("chat.createStartSessionAction: params.chatId is required — used as the session externalId.");
6470
6532
  }
6533
+ // Scope the action to `apiClient`'s env: re-enter without it so the body
6534
+ // runs once, under that config (read via apiClientManager.accessToken/.baseURL).
6535
+ if (options?.apiClient) {
6536
+ const { apiClient, ...rest } = options;
6537
+ return apiClientManager.runWithConfig(apiClient, () => createChatStartSessionAction(taskId, rest)(params));
6538
+ }
6471
6539
  // The first run boots before the user's first message lands on
6472
6540
  // `.in/append`, so it sees an empty `messages` array and `trigger:
6473
6541
  // "preload"`. This matches the pre-Sessions preload semantics:
@@ -6575,9 +6643,7 @@ function createChatStartSessionAction(taskId, options) {
6575
6643
  }
6576
6644
  function resolveChatStartBaseURL(endpoint, chatId, option) {
6577
6645
  const fallback = apiClientManager.baseURL ?? "https://api.trigger.dev";
6578
- const raw = typeof option === "function"
6579
- ? option({ endpoint, chatId })
6580
- : option ?? fallback;
6646
+ const raw = typeof option === "function" ? option({ endpoint, chatId }) : (option ?? fallback);
6581
6647
  return raw.replace(/\/$/, "");
6582
6648
  }
6583
6649
  function overrideRequestHeaders(accessToken) {