@agent-native/core 0.84.51 → 0.84.53

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 (42) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +15 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/agent/run-store.ts +33 -6
  5. package/corpus/core/src/client/AssistantChat.tsx +84 -23
  6. package/corpus/core/src/client/agent-chat-adapter.ts +19 -0
  7. package/corpus/core/src/client/blocks/library/DiffBlock.tsx +7 -5
  8. package/corpus/core/src/client/session-replay.ts +170 -47
  9. package/corpus/core/src/client/sse-event-processor.ts +75 -14
  10. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +5 -0
  11. package/corpus/templates/analytics/changelog/2026-07-02-agent-chat-can-keep-working-through-longer-data-queries-inst.md +6 -0
  12. package/corpus/templates/analytics/changelog/2026-07-02-session-replay-playback-recovers-from-failed-snapshot-uploads.md +6 -0
  13. package/corpus/templates/analytics/netlify.toml +3 -0
  14. package/corpus/templates/analytics/server/lib/session-replay.ts +9 -5
  15. package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -0
  16. package/corpus/templates/plan/changelog/2026-07-02-agent-chat-can-keep-working-through-longer-visual-plan-updat.md +6 -0
  17. package/corpus/templates/plan/netlify.toml +3 -0
  18. package/corpus/templates/plan/server/plugins/agent-chat.ts +4 -0
  19. package/dist/agent/run-store.d.ts.map +1 -1
  20. package/dist/agent/run-store.js +30 -6
  21. package/dist/agent/run-store.js.map +1 -1
  22. package/dist/client/AssistantChat.d.ts.map +1 -1
  23. package/dist/client/AssistantChat.js +64 -13
  24. package/dist/client/AssistantChat.js.map +1 -1
  25. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  26. package/dist/client/agent-chat-adapter.js +14 -0
  27. package/dist/client/agent-chat-adapter.js.map +1 -1
  28. package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
  29. package/dist/client/blocks/library/DiffBlock.js +6 -5
  30. package/dist/client/blocks/library/DiffBlock.js.map +1 -1
  31. package/dist/client/session-replay.d.ts.map +1 -1
  32. package/dist/client/session-replay.js +134 -39
  33. package/dist/client/session-replay.js.map +1 -1
  34. package/dist/client/sse-event-processor.d.ts +25 -0
  35. package/dist/client/sse-event-processor.d.ts.map +1 -1
  36. package/dist/client/sse-event-processor.js +50 -13
  37. package/dist/client/sse-event-processor.js.map +1 -1
  38. package/dist/collab/routes.d.ts +1 -1
  39. package/dist/progress/routes.d.ts +1 -1
  40. package/dist/resources/handlers.d.ts +1 -1
  41. package/dist/server/transcribe-voice.d.ts +1 -1
  42. package/package.json +1 -1
@@ -139,12 +139,33 @@ function appendActivityTrail(trail, next) {
139
139
  trail.splice(0, trail.length - 8);
140
140
  }
141
141
  }
142
+ function refreshPreparingToolEntry(state, tool) {
143
+ const remainingEntries = [...(state.entries?.values() ?? [])].filter((entry) => entry.tool === tool);
144
+ if (remainingEntries.length === 0) {
145
+ state.toolEntries?.delete(tool);
146
+ return;
147
+ }
148
+ const deadlineBasis = (entry) => entry.lastProgressAt ?? entry.startedAt ?? Number.POSITIVE_INFINITY;
149
+ const oldestEntry = remainingEntries.reduce((oldest, entry) => deadlineBasis(entry) < deadlineBasis(oldest) ? entry : oldest);
150
+ const lastProgressBytes = remainingEntries.reduce((max, entry) => entry.lastProgressBytes === undefined
151
+ ? max
152
+ : Math.max(max ?? 0, entry.lastProgressBytes), undefined);
153
+ const toolEntries = state.toolEntries ?? new Map();
154
+ state.toolEntries = toolEntries;
155
+ toolEntries.set(tool, {
156
+ tool,
157
+ startedAt: oldestEntry.startedAt,
158
+ lastProgressAt: oldestEntry.lastProgressAt,
159
+ lastProgressBytes,
160
+ });
161
+ }
142
162
  function updatePreparingActionState(state, ev, now) {
143
163
  if (ev.type === "activity" && isPreparingActionActivity(ev)) {
144
164
  const tool = ev.tool?.trim() || undefined;
145
165
  if (!tool)
146
166
  return false;
147
- const key = ev.id?.trim() || tool;
167
+ const id = ev.id?.trim();
168
+ const key = id || tool;
148
169
  const entries = state.entries ?? new Map();
149
170
  state.entries = entries;
150
171
  let entry = entries.get(key);
@@ -157,22 +178,31 @@ function updatePreparingActionState(state, ev, now) {
157
178
  };
158
179
  entries.set(key, entry);
159
180
  }
181
+ const toolEntries = state.toolEntries ?? new Map();
182
+ state.toolEntries = toolEntries;
183
+ let toolEntry = toolEntries.get(tool);
184
+ if (!toolEntry) {
185
+ toolEntry = {
186
+ tool,
187
+ startedAt: now,
188
+ lastProgressAt: undefined,
189
+ lastProgressBytes: undefined,
190
+ };
191
+ toolEntries.set(tool, toolEntry);
192
+ }
160
193
  const progressBytes = activityProgressBytes(ev);
161
194
  const previousBytes = entry.lastProgressBytes ?? 0;
195
+ let madeProgress = false;
162
196
  if (progressBytes !== undefined) {
163
197
  entry.lastProgressBytes = Math.max(previousBytes, progressBytes);
198
+ toolEntry.lastProgressBytes = Math.max(toolEntry.lastProgressBytes ?? 0, progressBytes);
199
+ madeProgress = id ? progressBytes > previousBytes : progressBytes > 0;
164
200
  }
165
- if (!ev.id?.trim()) {
166
- if (progressBytes !== undefined && progressBytes > 0) {
167
- entry.lastProgressAt = now;
168
- return true;
169
- }
170
- return false;
171
- }
172
- if (progressBytes !== undefined && progressBytes > previousBytes) {
201
+ if (madeProgress) {
173
202
  // A byte increase is proof the model is still streaming this action's
174
203
  // argument. Repeated zero-byte prep activity is only a heartbeat.
175
204
  entry.lastProgressAt = now;
205
+ toolEntry.lastProgressAt = now;
176
206
  return true;
177
207
  }
178
208
  return false;
@@ -188,13 +218,17 @@ function updatePreparingActionState(state, ev, now) {
188
218
  const tool = ev.tool?.trim();
189
219
  const id = ev.id?.trim();
190
220
  for (const [key, entry] of state.entries ?? []) {
191
- if ((id && key === id) || (!id && entry.tool === tool)) {
221
+ if ((id && key === id) || (!id && tool && entry.tool === tool)) {
192
222
  state.entries?.delete(key);
193
223
  }
194
224
  }
225
+ if (tool) {
226
+ refreshPreparingToolEntry(state, tool);
227
+ }
195
228
  }
196
229
  else {
197
230
  state.entries?.clear();
231
+ state.toolEntries?.clear();
198
232
  }
199
233
  }
200
234
  return undefined;
@@ -205,7 +239,10 @@ function hasStalledPreparingAction(state, now) {
205
239
  // streaming for a long time. `lastProgressAt` advances on every delta
206
240
  // heartbeat, so an actively-streaming large output keeps resetting this and
207
241
  // survives; a genuinely stuck prep (keepalive-only, no deltas) trips it.
208
- for (const entry of state.entries?.values() ?? []) {
242
+ for (const entry of [
243
+ ...(state.toolEntries?.values() ?? []),
244
+ ...(state.entries?.values() ?? []),
245
+ ]) {
209
246
  if (entry.startedAt !== undefined &&
210
247
  now - (entry.lastProgressAt ?? entry.startedAt) >=
211
248
  SSE_ACTION_PREPARATION_STALL_TIMEOUT_MS) {
@@ -935,7 +972,7 @@ export async function* readSSEStream(body, content, toolCallCounter, tabId, onSe
935
972
  let buf = "";
936
973
  let lastMeaningfulEventAt = Date.now();
937
974
  const activityTrail = [];
938
- const preparingActionState = {};
975
+ const preparingActionState = options?.preparingActionState ?? {};
939
976
  const processEventState = {
940
977
  completedToolsAfterLastAssistantText: new Set(),
941
978
  };
@@ -1098,7 +1135,7 @@ export async function readSSEStreamRaw(body, content, toolCallCounter, tabId, on
1098
1135
  let buf = "";
1099
1136
  let lastMeaningfulEventAt = Date.now();
1100
1137
  const activityTrail = [];
1101
- const preparingActionState = {};
1138
+ const preparingActionState = options?.preparingActionState ?? {};
1102
1139
  const processEventState = {
1103
1140
  completedToolsAfterLastAssistantText: new Set(),
1104
1141
  };
@@ -1 +1 @@
1
- {"version":3,"file":"sse-event-processor.js","sourceRoot":"","sources":["../../src/client/sse-event-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelRunResult } from \"@assistant-ui/react\";\n\nimport type { ActionChatUIConfig } from \"../action-ui.js\";\nimport {\n LLM_MISSING_CREDENTIALS_ERROR_CODE,\n LLM_MISSING_CREDENTIALS_MESSAGE,\n} from \"../agent/engine/credential-errors.js\";\nimport type { AgentMcpAppPayload } from \"../mcp-client/app-result.js\";\nimport { formatChatErrorText, normalizeChatError } from \"./error-format.js\";\nimport {\n humanizeToolLabelText,\n humanizeToolName,\n runningToolLabel,\n} from \"./tool-display.js\";\n\nexport type ContentPart =\n | { type: \"text\"; text: string }\n | {\n type: \"tool-call\";\n toolCallId: string;\n toolName: string;\n argsText: string;\n args: Record<string, string>;\n result?: string;\n isError?: boolean;\n completedSideEffect?: boolean;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n activity?: boolean;\n repeatCount?: number;\n /**\n * Set when the server emitted an `approval_required` event for this tool\n * call (opt-in `needsApproval` actions). The action did NOT run; the UI\n * renders an Approve/Deny affordance. `approvalKey` is echoed back in\n * `approvedToolCalls` to approve, `dismissed` records a local Deny.\n */\n approval?: { approvalKey: string; dismissed?: boolean };\n /**\n * Structured metadata from the coding-tools executor side-channel.\n * Present only on code-agent tool calls from executors new enough to\n * emit it. The `toolKind` discriminant identifies the shape.\n */\n structuredMeta?: Record<string, unknown>;\n };\n\nexport interface SSEEvent {\n type: string;\n text?: string;\n tool?: string;\n /** Server-assigned call identifier emitted on tool_start / tool_done events. */\n id?: string;\n label?: string;\n progressBytes?: number;\n input?: Record<string, string>;\n result?: string;\n isError?: boolean;\n completedSideEffect?: boolean;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n /** Stable key the client echoes back in `approvedToolCalls` to approve a\n * paused `needsApproval` tool call. Present on `approval_required` events. */\n approvalKey?: string;\n error?: string;\n seq?: number;\n agent?: string;\n status?: string;\n reason?: string;\n // Agent task fields\n taskId?: string;\n threadId?: string;\n description?: string;\n preview?: string;\n currentStep?: string;\n summary?: string;\n // Structured error metadata — Builder gateway sets these on quota/auth/setup\n // failures so the UI can render a CTA alongside the error text.\n errorCode?: string;\n upgradeUrl?: string;\n details?: string;\n recoverable?: boolean;\n maxIterations?: number;\n}\n\nexport type AgentAutoContinueReason =\n | \"run_timeout\"\n | \"loop_limit\"\n | \"no_progress\"\n | \"stream_ended\"\n | \"stale_run\";\n\nexport type AgentActivityTrailEntry = { label: string; tool?: string };\n\nexport interface AgentAutoContinueErrorInfo {\n message: string;\n details?: string;\n errorCode?: string;\n recoverable?: boolean;\n upgradeUrl?: string;\n}\n\nconst INTERRUPTED_TOOL_RESULT =\n \"Interrupted before this tool returned a result.\";\nconst INTERRUPTED_ACTIVITY_RESULT = \"Stopped before this action started.\";\n\nexport function settleInterruptedToolCalls(\n content: ContentPart[],\n result = INTERRUPTED_TOOL_RESULT,\n options?: { includeActivity?: boolean; activityResult?: string },\n): boolean {\n let changed = false;\n for (const part of content) {\n if (\n part.type === \"tool-call\" &&\n part.result === undefined &&\n (part.activity !== true || options?.includeActivity === true)\n ) {\n part.result =\n part.activity === true\n ? (options?.activityResult ?? INTERRUPTED_ACTIVITY_RESULT)\n : result;\n changed = true;\n }\n }\n return changed;\n}\n\nexport class AgentAutoContinueSignal extends Error {\n readonly reason: AgentAutoContinueReason;\n readonly maxIterations?: number;\n readonly activityTrail: AgentActivityTrailEntry[];\n readonly errorInfo?: AgentAutoContinueErrorInfo;\n\n constructor(options: {\n reason: AgentAutoContinueReason;\n maxIterations?: number;\n activityTrail?: AgentActivityTrailEntry[];\n errorInfo?: AgentAutoContinueErrorInfo;\n }) {\n super(`Agent run needs automatic continuation: ${options.reason}`);\n this.name = \"AgentAutoContinueSignal\";\n this.reason = options.reason;\n this.maxIterations = options.maxIterations;\n this.activityTrail = options.activityTrail ?? [];\n this.errorInfo = options.errorInfo;\n }\n}\n\nexport const SSE_NO_PROGRESS_TIMEOUT_MS = 75_000;\nexport const SSE_ACTION_PREPARATION_STALL_TIMEOUT_MS = 90_000;\n\nexport interface SSEStreamOptions {\n /**\n * Durable background runs have their own server-side liveness budget and\n * heartbeat. While one is active, generic keepalive-only periods keep the\n * client attached. Tool-input preparation is stricter: real byte progress\n * keeps long payloads alive, but zero-byte/silent preparation still recovers\n * so one stuck action cannot pin the chat forever.\n */\n durableBackgroundRun?: boolean;\n}\n\ntype ActivityTrailEntry = AgentActivityTrailEntry;\n\ntype PreparingActionEntry = {\n tool: string;\n startedAt?: number;\n lastProgressBytes?: number;\n /**\n * Timestamp of the last real streaming progress for the in-preparation tool\n * input. The server emits a throttled `activity` heartbeat per\n * `tool-input-delta`, so while the model is actively streaming a (possibly\n * very large) tool argument this keeps advancing. The stall guard measures\n * silence from HERE — not from `startedAt` — so a legitimately large, still-\n * streaming input is never aborted; only genuine silence (keepalive-only, no\n * further deltas) can trip it.\n */\n lastProgressAt?: number;\n};\n\ntype PreparingActionState = {\n entries?: Map<string, PreparingActionEntry>;\n};\n\nfunction formatProgressBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction activityProgressBytes(ev: SSEEvent): number | undefined {\n return typeof ev.progressBytes === \"number\" &&\n Number.isFinite(ev.progressBytes) &&\n ev.progressBytes >= 0\n ? Math.floor(ev.progressBytes)\n : undefined;\n}\n\nfunction isPreparingActionActivity(ev: SSEEvent): boolean {\n if (ev.type !== \"activity\") return false;\n const label = (ev.label ?? \"\").trim().toLowerCase();\n return label.startsWith(\"preparing \") && label.includes(\" action\");\n}\n\nfunction isMeaningfulProgressEvent(\n ev: SSEEvent,\n actionPreparationProgress?: boolean,\n options?: SSEStreamOptions,\n): boolean {\n if (ev.type === \"stream_keepalive\") {\n return options?.durableBackgroundRun === true;\n }\n if (ev.type === \"activity\" && isPreparingActionActivity(ev)) {\n if (options?.durableBackgroundRun === true) return true;\n return actionPreparationProgress === true;\n }\n return true;\n}\n\nfunction baseActivityLabel(ev: SSEEvent, tool?: string): string {\n return humanizeToolLabelText(ev.label ?? \"Working\", tool);\n}\n\nfunction preparationActivityLabel(\n tool: string | undefined,\n progressBytes: number | undefined,\n): string {\n const action = humanizeToolName(tool);\n if (progressBytes === undefined) {\n return `Starting ${action}...`;\n }\n if (progressBytes <= 0) {\n return `Preparing ${action}...`;\n }\n return `Writing ${action}... (${formatProgressBytes(progressBytes)} prepared)`;\n}\n\nfunction visibleActivityLabel(ev: SSEEvent, tool?: string): string {\n const progressBytes = activityProgressBytes(ev);\n if (isPreparingActionActivity(ev)) {\n return preparationActivityLabel(tool, progressBytes);\n }\n return baseActivityLabel(ev, tool);\n}\n\nfunction findPendingToolCallIndex(\n content: ContentPart[],\n toolName: string,\n toolCallId?: string,\n): number {\n // Prefer id-based match when the event carries an id: parallel same-name\n // calls can be in flight simultaneously, and name-only matching would\n // attach a result to the wrong call.\n if (toolCallId) {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolCallId === toolCallId &&\n part.result === undefined\n ) {\n return i;\n }\n }\n // Fall through to name-matching: the start event may have arrived before\n // the server started emitting ids (e.g. older server build), so the\n // stored toolCallId is the locally-generated \"tc_N\" value rather than the\n // server-assigned one. In that case match by name as a fallback.\n }\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === toolName &&\n part.result === undefined\n ) {\n return i;\n }\n }\n return -1;\n}\n\nfunction findCompletedToolCallIndex(\n content: ContentPart[],\n toolCallId?: string,\n): number {\n if (!toolCallId) return -1;\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolCallId === toolCallId &&\n part.result !== undefined\n ) {\n return i;\n }\n }\n return -1;\n}\n\nfunction appendActivityTrail(\n trail: ActivityTrailEntry[],\n next: ActivityTrailEntry,\n) {\n const label = next.label.trim();\n if (!label) return;\n const tool = next.tool?.trim();\n const last = trail[trail.length - 1];\n if (last?.label === label && last.tool === tool) return;\n trail.push({ label, ...(tool ? { tool } : {}) });\n if (trail.length > 8) {\n trail.splice(0, trail.length - 8);\n }\n}\n\nfunction updatePreparingActionState(\n state: PreparingActionState,\n ev: SSEEvent,\n now: number,\n): boolean | undefined {\n if (ev.type === \"activity\" && isPreparingActionActivity(ev)) {\n const tool = ev.tool?.trim() || undefined;\n if (!tool) return false;\n const key = ev.id?.trim() || tool;\n const entries = state.entries ?? new Map<string, PreparingActionEntry>();\n state.entries = entries;\n let entry = entries.get(key);\n if (!entry) {\n entry = {\n tool,\n startedAt: now,\n lastProgressAt: undefined,\n lastProgressBytes: undefined,\n };\n entries.set(key, entry);\n }\n const progressBytes = activityProgressBytes(ev);\n const previousBytes = entry.lastProgressBytes ?? 0;\n if (progressBytes !== undefined) {\n entry.lastProgressBytes = Math.max(previousBytes, progressBytes);\n }\n if (!ev.id?.trim()) {\n if (progressBytes !== undefined && progressBytes > 0) {\n entry.lastProgressAt = now;\n return true;\n }\n return false;\n }\n if (progressBytes !== undefined && progressBytes > previousBytes) {\n // A byte increase is proof the model is still streaming this action's\n // argument. Repeated zero-byte prep activity is only a heartbeat.\n entry.lastProgressAt = now;\n return true;\n }\n return false;\n }\n\n if (\n ev.type === \"clear\" ||\n ev.type === \"text\" ||\n ev.type === \"tool_start\" ||\n ev.type === \"tool_done\" ||\n ev.type === \"done\" ||\n ev.type === \"error\" ||\n ev.type === \"missing_api_key\"\n ) {\n if (ev.type === \"tool_start\" || ev.type === \"tool_done\") {\n const tool = ev.tool?.trim();\n const id = ev.id?.trim();\n for (const [key, entry] of state.entries ?? []) {\n if ((id && key === id) || (!id && entry.tool === tool)) {\n state.entries?.delete(key);\n }\n }\n } else {\n state.entries?.clear();\n }\n }\n return undefined;\n}\n\nfunction hasStalledPreparingAction(state: PreparingActionState, now: number) {\n // Fire only when a tool input has gone SILENT — no further streaming deltas\n // for the whole window — never merely because a large input has been\n // streaming for a long time. `lastProgressAt` advances on every delta\n // heartbeat, so an actively-streaming large output keeps resetting this and\n // survives; a genuinely stuck prep (keepalive-only, no deltas) trips it.\n for (const entry of state.entries?.values() ?? []) {\n if (\n entry.startedAt !== undefined &&\n now - (entry.lastProgressAt ?? entry.startedAt) >=\n SSE_ACTION_PREPARATION_STALL_TIMEOUT_MS\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function readChunkWithProgressTimeout(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n lastMeaningfulEventAt: number,\n): Promise<ReadableStreamReadResult<Uint8Array>> {\n const elapsed = Date.now() - lastMeaningfulEventAt;\n const timeoutMs = Math.max(0, SSE_NO_PROGRESS_TIMEOUT_MS - elapsed);\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const readPromise = reader.read();\n // If the timeout wins and cancellation causes the pending read to reject,\n // swallow that rejection because the generator is already recovering.\n void readPromise.catch(() => {});\n\n const timeoutPromise = new Promise<\"timeout\">((resolve) => {\n timeoutId = setTimeout(() => resolve(\"timeout\"), timeoutMs);\n });\n const result = await Promise.race([readPromise, timeoutPromise]);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (result === \"timeout\") {\n await reader.cancel(\"no_progress\").catch(() => {});\n throw new AgentAutoContinueSignal({ reason: \"no_progress\" });\n }\n return result;\n}\n\nfunction isAutoRecoverableError(ev: SSEEvent, errMsg: string): boolean {\n const code = String(ev.errorCode ?? \"\").toLowerCase();\n const msg = errMsg.toLowerCase();\n\n if (\n code === \"context_length_exceeded\" ||\n code === \"input_too_long\" ||\n code.startsWith(\"credits-limit\") ||\n code === \"billing_error\" ||\n code === \"unauthorized\" ||\n code === \"authentication_error\" ||\n code === \"permission_error\" ||\n code === \"http_401\" ||\n code === \"http_403\" ||\n code === \"rate_limit_exceeded\" ||\n code === \"gateway_not_enabled\" ||\n code === \"missing_api_key\" ||\n code === \"missing_credentials\" ||\n code === \"invalid_request_error\" ||\n code === \"request_too_large\" ||\n code === \"not_found_error\" ||\n code === \"model_not_found\" ||\n code === \"provider_rate_limited\" ||\n // `builder_gateway_error` is the no-detail fallback the Builder engine\n // emits when the gateway returns `{type:\"stop\",reason:\"error\"}` with no\n // explanation — almost always the upstream provider giving up (model\n // quota hit, account misconfiguration, opaque downstream failure). The\n // production-agent already retries this synchronously up to MAX_RETRIES\n // before the error escapes to the SSE stream, so by the time the client\n // sees it, retrying again with another POST /agent-chat will hit the\n // same wall. This used to send the chat into a 32-continuation runaway\n // (each turn cleared+regenerated visible content) for users hitting a\n // misbehaving Builder route. Surface the error instead.\n code === \"builder_gateway_error\" ||\n // The hosted run exhausted its in-invocation continuation budget without\n // finishing (run-loop-with-resume.ts). It's flagged `recoverable: true` so\n // the recovery banner reads \"stopped before finishing\", but it must NOT\n // auto-continue: another POST would hit the same ~40s wall and churn. The\n // user retries deliberately (ideally as a single bulk action).\n code === \"run_budget_exhausted\"\n ) {\n return false;\n }\n\n if (\n code === \"builder_gateway_network_error\" ||\n code === \"builder_gateway_timeout\" ||\n code === \"stale_run\" ||\n code === \"timeout\" ||\n code === \"timeout_error\" ||\n code === \"http_408\" ||\n code === \"http_429\" ||\n code === \"http_500\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"rate_limited\" ||\n code === \"too_many_concurrent_requests\" ||\n code === \"overloaded_error\"\n ) {\n return true;\n }\n\n if (ev.recoverable === true) return true;\n\n if (msg.includes(\"daily gateway request cap\")) return false;\n\n // \"gateway error\" intentionally absent — that's the no-detail Builder\n // gateway fallback and the production-agent already retries it\n // synchronously up to MAX_RETRIES before the error escapes here. Treating\n // it as auto-recoverable on top of that produced a 32-continuation\n // runaway in production for users hitting a misbehaving Builder route.\n // (See `code === \"builder_gateway_error\"` in the not-recoverable list.)\n return (\n msg.includes(\"overloaded\") ||\n msg.includes(\"rate_limit\") ||\n msg.includes(\"too many requests\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"socket hang up\") ||\n msg.includes(\"connection reset\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"network\") ||\n msg.includes(\"stream closed\") ||\n msg.includes(\"stream ended\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isMissingCredentialText(message: string, errorCode?: string): boolean {\n const code = String(errorCode ?? \"\").toLowerCase();\n const msg = message.toLowerCase();\n return (\n code === \"missing_api_key\" ||\n code === \"missing_credentials\" ||\n msg.includes(\"apikey\") ||\n msg.includes(\"authtoken\") ||\n msg.includes(\"anthropic_api_key\") ||\n msg.includes(\"missing_api_key\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"missing credentials\") ||\n msg.includes(\"no llm provider\") ||\n msg.includes(\"llm provider is connected\")\n );\n}\n\nfunction dispatchActivityClear(tabId: string | undefined) {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:activity-clear\", {\n detail: { tabId },\n }),\n );\n}\n\nfunction pendingToolNames(content: ContentPart[]): {\n activity: string[];\n running: string[];\n} {\n const activity = new Set<string>();\n const running = new Set<string>();\n for (const part of content) {\n if (part.type === \"tool-call\" && part.result === undefined) {\n if (part.activity === true) {\n activity.add(part.toolName);\n } else {\n running.add(part.toolName);\n }\n }\n }\n return { activity: [...activity], running: [...running] };\n}\n\nfunction contentSnapshot(content: ContentPart[]): ContentPart[] {\n return content.map((part) => {\n if (part.type === \"text\") return { ...part };\n return {\n ...part,\n args: { ...part.args },\n ...(part.mcpApp ? { mcpApp: { ...part.mcpApp } } : {}),\n ...(part.chatUI ? { chatUI: { ...part.chatUI } } : {}),\n ...(part.approval ? { approval: { ...part.approval } } : {}),\n ...(part.structuredMeta\n ? { structuredMeta: { ...part.structuredMeta } }\n : {}),\n };\n });\n}\n\nfunction repeatSignatureValue(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value ?? \"\");\n }\n}\n\nfunction completedToolRepeatSignature(\n part: Extract<ContentPart, { type: \"tool-call\" }>,\n): string | null {\n if (\n part.result === undefined ||\n part.activity === true ||\n part.approval ||\n part.mcpApp ||\n part.chatUI ||\n part.structuredMeta\n ) {\n return null;\n }\n return [\n part.toolName,\n part.argsText,\n repeatSignatureValue(part.args),\n part.result,\n part.isError === true ? \"error\" : \"\",\n part.completedSideEffect === true ? \"side-effect\" : \"\",\n ].join(\"\\u0000\");\n}\n\nfunction coalesceCompletedToolRepeat(\n content: ContentPart[],\n completedIndex: number,\n): void {\n const current = content[completedIndex];\n const previous = content[completedIndex - 1];\n if (\n !current ||\n !previous ||\n current.type !== \"tool-call\" ||\n previous.type !== \"tool-call\"\n ) {\n return;\n }\n\n const currentSignature = completedToolRepeatSignature(current);\n if (\n !currentSignature ||\n currentSignature !== completedToolRepeatSignature(previous)\n ) {\n return;\n }\n\n previous.repeatCount =\n (previous.repeatCount ?? 1) + (current.repeatCount ?? 1);\n content.splice(completedIndex, 1);\n}\n\nfunction formatToolNames(tools: string[]): string {\n const names = tools.map(humanizeToolName);\n if (names.length === 0) return \"the promised action\";\n if (names.length === 1) return `the ${names[0]} action`;\n return `these actions: ${names.join(\", \")}`;\n}\n\nfunction interruptedToolMessage(pending: {\n activity: string[];\n running: string[];\n}): string {\n if (pending.running.length > 0) {\n return `The agent stopped before ${formatToolNames(pending.running)} returned a result. The requested changes may not have been made.`;\n }\n const actionLabel = formatToolNames(pending.activity);\n return `The agent stopped before starting ${actionLabel}. No tool result was returned, so the requested changes were not made.`;\n}\n\nfunction lastAssistantTextIndex(content: ContentPart[]): number {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (part.type === \"text\" && part.text.trim().length > 0) return i;\n }\n return -1;\n}\n\nfunction completedToolNamesAfterLastAssistantText(\n content: ContentPart[],\n): string[] {\n const lastTextIndex = lastAssistantTextIndex(content);\n const names = new Set<string>();\n for (let i = lastTextIndex + 1; i < content.length; i++) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.activity !== true &&\n part.result !== undefined &&\n part.isError !== true\n ) {\n names.add(part.toolName);\n }\n }\n return [...names];\n}\n\nfunction completedToolOnlyMessage(toolNames: string[]): string | null {\n if (toolNames.length === 0) return null;\n const label = formatToolNames(toolNames);\n return `The agent completed ${label}, but stopped before sending a final message. Review the completed tool card above or ask the agent to continue.`;\n}\n\ninterface ProcessEventState {\n completedToolsAfterLastAssistantText: Set<string>;\n}\n\nfunction markAssistantText(state: ProcessEventState | undefined) {\n state?.completedToolsAfterLastAssistantText.clear();\n}\n\nfunction markCompletedToolAfterAssistantText(\n state: ProcessEventState | undefined,\n toolName: string,\n) {\n state?.completedToolsAfterLastAssistantText.add(toolName);\n}\n\nfunction resetProcessEventState(state: ProcessEventState | undefined) {\n state?.completedToolsAfterLastAssistantText.clear();\n}\n\n/**\n * Process a single SSE event and update the content accumulator.\n * Returns: \"continue\" to keep going, \"done\" to stop, or a yield-ready result.\n */\nexport function processEvent(\n ev: SSEEvent,\n content: ContentPart[],\n toolCallCounter: { value: number },\n tabId: string | undefined,\n state?: ProcessEventState,\n): {\n action:\n | \"continue\"\n | \"done\"\n | \"yield\"\n | \"error\"\n | \"missing_api_key\"\n | \"auto_continue\";\n result?: ChatModelRunResult;\n autoContinue?: {\n reason: AgentAutoContinueReason;\n maxIterations?: number;\n errorInfo?: AgentAutoContinueErrorInfo;\n };\n} {\n if (ev.type === \"clear\") {\n // Server is retrying — discard rejected draft text and unfinished tool\n // output while keeping completed tool results visible.\n clearAssistantDraftContent(content);\n resetProcessEventState(state);\n dispatchActivityClear(tabId);\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"text\") {\n // Visible output means the run is plainly not hanging — drop any running\n // activity label so a transient \"Contacting model\" / \"Still generating\n // image\" doesn't linger beside streamed text. Idempotent (clears once, then\n // no-ops) so per-token text deltas stay cheap.\n if (ev.text) dispatchActivityClear(tabId);\n if (ev.text?.trim()) markAssistantText(state);\n const lastPart = content[content.length - 1];\n if (lastPart && lastPart.type === \"text\") {\n lastPart.text += ev.text ?? \"\";\n } else {\n content.push({ type: \"text\", text: ev.text ?? \"\" });\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"stream_keepalive\") {\n return { action: \"continue\" };\n }\n\n if (ev.type === \"activity\") {\n const tool = ev.tool?.trim() || undefined;\n const label = visibleActivityLabel(ev, tool);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:activity\", {\n detail: {\n label,\n ...(tool ? { tool } : {}),\n tabId,\n },\n }),\n );\n }\n if (!tool) return { action: \"continue\" };\n\n const pendingToolCallIndex = findPendingToolCallIndex(content, tool);\n if (pendingToolCallIndex === -1) {\n content.push({\n type: \"tool-call\",\n toolCallId: `tc_${++toolCallCounter.value}`,\n toolName: tool,\n argsText: \"\",\n args: {},\n activity: true,\n });\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"tool_start\") {\n const args = (ev.input ?? {}) as Record<string, string>;\n const tool = ev.tool ?? \"unknown\";\n if (findCompletedToolCallIndex(content, ev.id) >= 0) {\n return { action: \"continue\" };\n }\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-native:tool-start\", {\n detail: { tool, input: args },\n }),\n );\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:activity\", {\n detail: {\n label: runningToolLabel(tool),\n tool,\n tabId,\n },\n }),\n );\n }\n // Pass the server-assigned id so we upgrade the pending activity card\n // using id-match when available (parallel same-name calls stay separate).\n const pendingToolCallIndex = findPendingToolCallIndex(content, tool, ev.id);\n const pendingToolCall =\n pendingToolCallIndex >= 0 ? content[pendingToolCallIndex] : undefined;\n if (\n pendingToolCall &&\n pendingToolCall.type === \"tool-call\" &&\n pendingToolCall.activity === true &&\n pendingToolCall.argsText === \"\" &&\n Object.keys(pendingToolCall.args).length === 0\n ) {\n // Upgrade the pending activity card in place. Prefer the server-assigned\n // id so the subsequent tool_done can match it precisely (parallel\n // same-name calls each carry their own id). Fall back to the\n // locally-generated id already on the card.\n content[pendingToolCallIndex] = {\n type: \"tool-call\",\n toolCallId: ev.id ?? pendingToolCall.toolCallId,\n toolName: tool,\n argsText: JSON.stringify(args),\n args,\n };\n } else {\n content.push({\n type: \"tool-call\",\n toolCallId: ev.id ?? `tc_${++toolCallCounter.value}`,\n toolName: tool,\n argsText: JSON.stringify(args),\n args,\n });\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"approval_required\") {\n // Opt-in `needsApproval` gate: the server emitted `tool_start` immediately\n // before this, so the matching tool-call part already exists. Mark it as\n // awaiting approval so the UI can render the Approve/Deny affordance. The\n // action did NOT execute; a paused `tool_done` follows.\n const approvalTool = ev.tool ?? \"unknown\";\n const approvalKey = ev.approvalKey;\n if (approvalKey) {\n const idx = findPendingToolCallIndex(content, approvalTool, ev.id);\n if (idx >= 0) {\n const part = content[idx];\n if (part.type === \"tool-call\") {\n part.approval = { approvalKey };\n }\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"tool_done\") {\n // Normalize identically to tool_start (which stores `ev.tool ?? \"unknown\"`)\n // so a tool_done frame with an undefined tool name still matches its\n // pending tool-call entry instead of leaving it forever unresolved.\n const doneTool = ev.tool ?? \"unknown\";\n if (findCompletedToolCallIndex(content, ev.id) >= 0) {\n return { action: \"continue\" };\n }\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-native:tool-done\", {\n detail: { tool: doneTool, result: ev.result },\n }),\n );\n }\n // Clear any sticky running-activity label (e.g. \"Still generating image\"):\n // the tool that was emitting activity heartbeats has finished, so the label\n // must not linger while the model streams its follow-up text or reasoning.\n dispatchActivityClear(tabId);\n // Use id-based lookup when available so parallel same-name tool calls\n // get their results correctly assigned; fall back to name-matching.\n const doneIdx = findPendingToolCallIndex(content, doneTool, ev.id);\n if (doneIdx >= 0) {\n const part = content[doneIdx];\n if (part.type === \"tool-call\") {\n part.result = ev.result ?? \"\";\n if (ev.isError !== undefined) part.isError = ev.isError;\n if (ev.completedSideEffect !== undefined) {\n part.completedSideEffect = ev.completedSideEffect;\n }\n if (ev.mcpApp) part.mcpApp = ev.mcpApp;\n if (ev.chatUI) part.chatUI = ev.chatUI;\n if (part.activity !== true && part.isError !== true) {\n markCompletedToolAfterAssistantText(state, part.toolName);\n }\n coalesceCompletedToolRepeat(content, doneIdx);\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"agent_call\") {\n const agentName = ev.agent ?? \"agent\";\n if (ev.status === \"start\") {\n const toolCallId = `tc_${++toolCallCounter.value}`;\n content.push({\n type: \"tool-call\",\n toolCallId,\n toolName: `agent:${agentName}`,\n argsText: \"\",\n args: {},\n });\n } else if (ev.status === \"done\" || ev.status === \"error\") {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === `agent:${agentName}` &&\n part.result === undefined\n ) {\n part.result = ev.status === \"error\" ? \"Error calling agent\" : \"Done\";\n break;\n }\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"agent_call_text\") {\n const agentName = ev.agent ?? \"agent\";\n // Find the in-progress agent tool-call and append streaming text to argsText\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === `agent:${agentName}` &&\n part.result === undefined\n ) {\n part.argsText += ev.text ?? \"\";\n break;\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n // ─── Agent task events (sub-agent chips) ─────────────────────────\n // These events are dispatched as CustomEvents so AgentTaskCard components\n // can listen for updates to their specific taskId.\n if (\n ev.type === \"agent_task\" ||\n ev.type === \"agent_task_update\" ||\n ev.type === \"agent_task_complete\"\n ) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"agent-task-event\", { detail: ev }));\n }\n // Don't add to content — the agent-teams tool call handles rendering\n return { action: \"continue\" };\n }\n\n if (ev.type === \"missing_api_key\") {\n const errMsg = LLM_MISSING_CREDENTIALS_MESSAGE;\n const errorCode = LLM_MISSING_CREDENTIALS_ERROR_CODE;\n const runError = {\n message: normalizeChatError(errMsg, errorCode).message,\n errorCode,\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n settleInterruptedToolCalls(content, undefined, { includeActivity: true });\n content.push({\n type: \"text\",\n text: formatChatErrorText(errMsg, undefined, errorCode),\n });\n return {\n action: \"missing_api_key\",\n result: {\n content: contentSnapshot(content),\n status: { type: \"incomplete\" as const, reason: \"error\" as const },\n metadata: { custom: { runError } },\n } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"loop_limit\") {\n const maxIterations =\n typeof ev.maxIterations === \"number\" ? ev.maxIterations : undefined;\n return {\n action: \"auto_continue\",\n autoContinue: {\n reason: \"loop_limit\",\n ...(maxIterations ? { maxIterations } : {}),\n },\n };\n }\n\n if (ev.type === \"auto_continue\") {\n const reason =\n ev.reason === \"stream_ended\" ||\n ev.reason === \"loop_limit\" ||\n ev.reason === \"no_progress\" ||\n ev.reason === \"run_timeout\"\n ? ev.reason\n : ev.errorCode === \"stream_ended\" ||\n ev.errorCode === \"loop_limit\" ||\n ev.errorCode === \"no_progress\" ||\n ev.errorCode === \"run_timeout\"\n ? ev.errorCode\n : ev.error === \"stream_ended\" ||\n ev.error === \"loop_limit\" ||\n ev.error === \"no_progress\" ||\n ev.error === \"run_timeout\"\n ? ev.error\n : ev.status === \"stream_ended\" ||\n ev.status === \"loop_limit\" ||\n ev.status === \"no_progress\" ||\n ev.status === \"run_timeout\"\n ? ev.status\n : \"run_timeout\";\n return {\n action: \"auto_continue\",\n autoContinue: {\n reason,\n ...(typeof ev.maxIterations === \"number\"\n ? { maxIterations: ev.maxIterations }\n : {}),\n },\n };\n }\n\n if (ev.type === \"error\") {\n const errMsg = ev.error ?? \"Unknown error\";\n if (\n (ev.errorCode === \"run_timeout\" && ev.recoverable) ||\n isAutoRecoverableError(ev, errMsg)\n ) {\n const normalized = normalizeChatError(errMsg, ev.errorCode);\n return {\n action: \"auto_continue\",\n autoContinue: {\n reason:\n ev.errorCode === \"stale_run\"\n ? \"stale_run\"\n : ev.errorCode === \"builder_gateway_timeout\" ||\n ev.errorCode === \"run_timeout\" ||\n errMsg.toLowerCase().includes(\"timeout\")\n ? \"run_timeout\"\n : \"stream_ended\",\n errorInfo: {\n message: normalized.message,\n ...(ev.details || normalized.details\n ? { details: ev.details ?? normalized.details }\n : {}),\n ...(ev.errorCode ? { errorCode: ev.errorCode } : {}),\n recoverable: ev.recoverable ?? true,\n ...(ev.upgradeUrl ? { upgradeUrl: ev.upgradeUrl } : {}),\n },\n },\n };\n }\n const normalized = normalizeChatError(errMsg, ev.errorCode);\n if (isMissingCredentialText(errMsg, ev.errorCode)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n }\n const runError = {\n message: normalized.message,\n ...(normalized.details || ev.details\n ? { details: ev.details ?? normalized.details }\n : {}),\n ...(ev.errorCode ? { errorCode: ev.errorCode } : {}),\n ...(ev.recoverable ? { recoverable: ev.recoverable } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n settleInterruptedToolCalls(content, undefined, { includeActivity: true });\n content.push({\n type: \"text\",\n text: formatChatErrorText(errMsg, ev.upgradeUrl, ev.errorCode),\n });\n return {\n action: \"error\",\n result: {\n content: contentSnapshot(content),\n status: { type: \"incomplete\" as const, reason: \"error\" as const },\n metadata: { custom: { runError } },\n } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"done\") {\n const interruptedTools = pendingToolNames(content);\n const allInterruptedTools = [\n ...interruptedTools.running,\n ...interruptedTools.activity,\n ];\n if (allInterruptedTools.length > 0) {\n settleInterruptedToolCalls(content, undefined, { includeActivity: true });\n const message = interruptedToolMessage(interruptedTools);\n const runError = {\n message,\n details: `interrupted_actions: ${allInterruptedTools.join(\", \")}`,\n errorCode: \"action_not_started\",\n recoverable: true,\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: formatChatErrorText(message, undefined, runError.errorCode),\n });\n return {\n action: \"error\",\n result: {\n content: contentSnapshot(content),\n status: { type: \"incomplete\" as const, reason: \"error\" as const },\n metadata: { custom: { runError } },\n } as ChatModelRunResult,\n };\n }\n const toolOnlyMessage = completedToolOnlyMessage(\n state\n ? [...state.completedToolsAfterLastAssistantText]\n : completedToolNamesAfterLastAssistantText(content),\n );\n if (toolOnlyMessage) {\n content.push({\n type: \"text\",\n text: toolOnlyMessage,\n });\n return {\n action: \"done\",\n result: {\n content: contentSnapshot(content),\n status: { type: \"complete\" as const, reason: \"stop\" as const },\n metadata: {\n custom: {\n runWarning: {\n message: toolOnlyMessage,\n errorCode: \"final_response_missing_after_tool\",\n recoverable: true,\n },\n },\n },\n } as ChatModelRunResult,\n };\n }\n return {\n action: \"done\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n return { action: \"continue\" };\n}\n\nfunction clearAssistantDraftContent(content: ContentPart[]): void {\n for (let index = content.length - 1; index >= 0; index--) {\n const part = content[index];\n if (!part) continue;\n if (part.type === \"text\") {\n content.splice(index, 1);\n continue;\n }\n if (part.type === \"tool-call\" && part.result === undefined) {\n content.splice(index, 1);\n }\n }\n}\n\n/**\n * Read and process SSE events from a ReadableStream response body.\n * Yields ChatModelRunResult for each meaningful event.\n *\n * When `runId` is provided, every yielded result carries\n * `metadata.custom.runId` so the UI can expose the trace ID via\n * \"Copy Request ID\" — including mid-stream, so users can grab it before\n * the run completes (or if the run hangs / ends prematurely).\n */\nexport async function* readSSEStream(\n body: ReadableStream<Uint8Array>,\n content: ContentPart[],\n toolCallCounter: { value: number },\n tabId: string | undefined,\n onSeq?: (seq: number) => void,\n runId?: string | null,\n options?: SSEStreamOptions,\n): AsyncGenerator<ChatModelRunResult> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buf = \"\";\n let lastMeaningfulEventAt = Date.now();\n const activityTrail: ActivityTrailEntry[] = [];\n const preparingActionState: PreparingActionState = {};\n const processEventState: ProcessEventState = {\n completedToolsAfterLastAssistantText: new Set(),\n };\n\n const withStreamMetadata = (r: ChatModelRunResult): ChatModelRunResult => {\n if (!runId && activityTrail.length === 0) return r;\n const metadata = (r.metadata ?? {}) as Record<string, unknown>;\n const custom =\n metadata.custom && typeof metadata.custom === \"object\"\n ? (metadata.custom as Record<string, unknown>)\n : {};\n const runError =\n runId && custom.runError && typeof custom.runError === \"object\"\n ? {\n ...(custom.runError as Record<string, unknown>),\n runId,\n }\n : custom.runError;\n return {\n ...r,\n metadata: {\n ...metadata,\n custom: {\n ...custom,\n ...(runId ? { runId } : {}),\n ...(runError ? { runError } : {}),\n ...(activityTrail.length > 0\n ? { activityTrail: [...activityTrail] }\n : {}),\n },\n },\n };\n };\n\n try {\n while (true) {\n let readResult: ReadableStreamReadResult<Uint8Array>;\n try {\n readResult = await readChunkWithProgressTimeout(\n reader,\n lastMeaningfulEventAt,\n );\n } catch (err) {\n if (err instanceof AgentAutoContinueSignal) {\n throw new AgentAutoContinueSignal({\n reason: err.reason,\n maxIterations: err.maxIterations,\n activityTrail: [...activityTrail],\n errorInfo: err.errorInfo,\n });\n }\n throw err;\n }\n const { done, value } = readResult;\n if (done) break;\n\n buf += decoder.decode(value, { stream: true });\n const lines = buf.split(\"\\n\");\n buf = lines.pop() ?? \"\";\n let sawProgressEvent = false;\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const raw = line.slice(6).trim();\n if (!raw) continue;\n\n let ev: SSEEvent;\n try {\n ev = JSON.parse(raw);\n } catch {\n continue;\n }\n const now = Date.now();\n const actionPreparationProgress = updatePreparingActionState(\n preparingActionState,\n ev,\n now,\n );\n if (isMeaningfulProgressEvent(ev, actionPreparationProgress, options)) {\n sawProgressEvent = true;\n lastMeaningfulEventAt = now;\n }\n\n // Track sequence number for reconnection\n if (ev.seq !== undefined && onSeq) {\n onSeq(ev.seq);\n }\n\n if (ev.type === \"clear\") {\n activityTrail.length = 0;\n } else if (ev.type === \"activity\") {\n const tool = ev.tool?.trim() || undefined;\n appendActivityTrail(activityTrail, {\n label: baseActivityLabel(ev, tool),\n ...(tool ? { tool } : {}),\n });\n } else if (ev.type === \"tool_start\") {\n const tool = ev.tool ?? \"unknown\";\n appendActivityTrail(activityTrail, {\n label: runningToolLabel(tool),\n tool,\n });\n } else if (ev.type === \"tool_done\") {\n const tool = ev.tool ?? \"unknown\";\n for (let i = activityTrail.length - 1; i >= 0; i--) {\n if (activityTrail[i]?.tool === tool) {\n activityTrail.splice(i, 1);\n }\n }\n }\n\n const { action, result, autoContinue } = processEvent(\n ev,\n content,\n toolCallCounter,\n tabId,\n processEventState,\n );\n\n if (result) yield withStreamMetadata(result);\n if (hasStalledPreparingAction(preparingActionState, Date.now())) {\n throw new AgentAutoContinueSignal({\n reason: \"no_progress\",\n activityTrail: [...activityTrail],\n });\n }\n if (action === \"auto_continue\") {\n throw new AgentAutoContinueSignal(\n autoContinue\n ? { ...autoContinue, activityTrail: [...activityTrail] }\n : { reason: \"stream_ended\", activityTrail: [...activityTrail] },\n );\n }\n if (\n action === \"done\" ||\n action === \"error\" ||\n action === \"missing_api_key\"\n ) {\n return;\n }\n }\n\n if (\n !sawProgressEvent &&\n Date.now() - lastMeaningfulEventAt >= SSE_NO_PROGRESS_TIMEOUT_MS\n ) {\n throw new AgentAutoContinueSignal({\n reason: \"no_progress\",\n activityTrail: [...activityTrail],\n });\n }\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n // The timeout path cancels the stream before unwinding; some runtimes\n // still consider the pending read active for a tick.\n }\n }\n\n // Stream ended without explicit done event. Even an empty content array is\n // abnormal here: a healthy run emits a terminal `done` event. Treat this as\n // recoverable so the adapter can first reconnect to the run, then continue\n // from durable history if the producer is gone.\n throw new AgentAutoContinueSignal({\n reason: \"stream_ended\",\n activityTrail: [...activityTrail],\n });\n}\n\n/**\n * Read raw SSE events from a ReadableStream and process them into ContentPart[].\n * Unlike readSSEStream, this doesn't yield ChatModelRunResult — it updates the\n * content array in-place and calls onUpdate for each meaningful change.\n * Designed for reconnection scenarios where we render outside assistant-ui's runtime.\n */\nexport async function readSSEStreamRaw(\n body: ReadableStream<Uint8Array>,\n content: ContentPart[],\n toolCallCounter: { value: number },\n tabId: string | undefined,\n onUpdate: (content: ContentPart[]) => void,\n onSeq?: (seq: number) => void,\n options?: SSEStreamOptions,\n): Promise<void> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buf = \"\";\n let lastMeaningfulEventAt = Date.now();\n const activityTrail: ActivityTrailEntry[] = [];\n const preparingActionState: PreparingActionState = {};\n const processEventState: ProcessEventState = {\n completedToolsAfterLastAssistantText: new Set(),\n };\n // Tracks whether the most recent content state was already pushed via\n // onUpdate inside the loop, so the post-loop flush below doesn't emit the\n // identical content a second time when the stream closes without a terminal\n // event.\n let emittedLatestContent = false;\n\n try {\n while (true) {\n let readResult: ReadableStreamReadResult<Uint8Array>;\n try {\n readResult = await readChunkWithProgressTimeout(\n reader,\n lastMeaningfulEventAt,\n );\n } catch (err) {\n if (err instanceof AgentAutoContinueSignal) {\n throw new AgentAutoContinueSignal({\n reason: err.reason,\n maxIterations: err.maxIterations,\n activityTrail: [...activityTrail],\n errorInfo: err.errorInfo,\n });\n }\n throw err;\n }\n const { done, value } = readResult;\n if (done) break;\n\n buf += decoder.decode(value, { stream: true });\n const lines = buf.split(\"\\n\");\n buf = lines.pop() ?? \"\";\n\n let sawProgressEvent = false;\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const raw = line.slice(6).trim();\n if (!raw) continue;\n\n let ev: SSEEvent;\n try {\n ev = JSON.parse(raw);\n } catch {\n continue;\n }\n const now = Date.now();\n const actionPreparationProgress = updatePreparingActionState(\n preparingActionState,\n ev,\n now,\n );\n if (isMeaningfulProgressEvent(ev, actionPreparationProgress, options)) {\n sawProgressEvent = true;\n lastMeaningfulEventAt = now;\n }\n\n if (ev.seq !== undefined && onSeq) {\n onSeq(ev.seq);\n }\n\n if (ev.type === \"clear\") {\n activityTrail.length = 0;\n } else if (ev.type === \"activity\") {\n const tool = ev.tool?.trim() || undefined;\n appendActivityTrail(activityTrail, {\n label: baseActivityLabel(ev, tool),\n ...(tool ? { tool } : {}),\n });\n } else if (ev.type === \"tool_start\") {\n const tool = ev.tool ?? \"unknown\";\n appendActivityTrail(activityTrail, {\n label: runningToolLabel(tool),\n tool,\n });\n } else if (ev.type === \"tool_done\") {\n const tool = ev.tool ?? \"unknown\";\n for (let i = activityTrail.length - 1; i >= 0; i--) {\n if (activityTrail[i]?.tool === tool) {\n activityTrail.splice(i, 1);\n }\n }\n }\n\n const { action, autoContinue } = processEvent(\n ev,\n content,\n toolCallCounter,\n tabId,\n processEventState,\n );\n\n if (\n action === \"yield\" ||\n action === \"done\" ||\n action === \"error\" ||\n action === \"missing_api_key\"\n ) {\n onUpdate(contentSnapshot(content));\n emittedLatestContent = true;\n }\n if (action === \"auto_continue\") {\n onUpdate(contentSnapshot(content));\n emittedLatestContent = true;\n throw new AgentAutoContinueSignal(\n autoContinue\n ? { ...autoContinue, activityTrail: [...activityTrail] }\n : { reason: \"stream_ended\", activityTrail: [...activityTrail] },\n );\n }\n if (hasStalledPreparingAction(preparingActionState, Date.now())) {\n onUpdate(contentSnapshot(content));\n throw new AgentAutoContinueSignal({\n reason: \"no_progress\",\n activityTrail: [...activityTrail],\n });\n }\n if (\n action === \"done\" ||\n action === \"error\" ||\n action === \"missing_api_key\"\n ) {\n return;\n }\n }\n\n if (\n !sawProgressEvent &&\n Date.now() - lastMeaningfulEventAt >= SSE_NO_PROGRESS_TIMEOUT_MS\n ) {\n throw new AgentAutoContinueSignal({\n reason: \"no_progress\",\n activityTrail: [...activityTrail],\n });\n }\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n // See readSSEStream: cancellation may race lock release in browsers.\n }\n }\n if (content.length > 0 && !emittedLatestContent) {\n onUpdate(contentSnapshot(content));\n }\n throw new AgentAutoContinueSignal({ reason: \"stream_ended\" });\n}\n"]}
1
+ {"version":3,"file":"sse-event-processor.js","sourceRoot":"","sources":["../../src/client/sse-event-processor.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelRunResult } from \"@assistant-ui/react\";\n\nimport type { ActionChatUIConfig } from \"../action-ui.js\";\nimport {\n LLM_MISSING_CREDENTIALS_ERROR_CODE,\n LLM_MISSING_CREDENTIALS_MESSAGE,\n} from \"../agent/engine/credential-errors.js\";\nimport type { AgentMcpAppPayload } from \"../mcp-client/app-result.js\";\nimport { formatChatErrorText, normalizeChatError } from \"./error-format.js\";\nimport {\n humanizeToolLabelText,\n humanizeToolName,\n runningToolLabel,\n} from \"./tool-display.js\";\n\nexport type ContentPart =\n | { type: \"text\"; text: string }\n | {\n type: \"tool-call\";\n toolCallId: string;\n toolName: string;\n argsText: string;\n args: Record<string, string>;\n result?: string;\n isError?: boolean;\n completedSideEffect?: boolean;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n activity?: boolean;\n repeatCount?: number;\n /**\n * Set when the server emitted an `approval_required` event for this tool\n * call (opt-in `needsApproval` actions). The action did NOT run; the UI\n * renders an Approve/Deny affordance. `approvalKey` is echoed back in\n * `approvedToolCalls` to approve, `dismissed` records a local Deny.\n */\n approval?: { approvalKey: string; dismissed?: boolean };\n /**\n * Structured metadata from the coding-tools executor side-channel.\n * Present only on code-agent tool calls from executors new enough to\n * emit it. The `toolKind` discriminant identifies the shape.\n */\n structuredMeta?: Record<string, unknown>;\n };\n\nexport interface SSEEvent {\n type: string;\n text?: string;\n tool?: string;\n /** Server-assigned call identifier emitted on tool_start / tool_done events. */\n id?: string;\n label?: string;\n progressBytes?: number;\n input?: Record<string, string>;\n result?: string;\n isError?: boolean;\n completedSideEffect?: boolean;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n /** Stable key the client echoes back in `approvedToolCalls` to approve a\n * paused `needsApproval` tool call. Present on `approval_required` events. */\n approvalKey?: string;\n error?: string;\n seq?: number;\n agent?: string;\n status?: string;\n reason?: string;\n // Agent task fields\n taskId?: string;\n threadId?: string;\n description?: string;\n preview?: string;\n currentStep?: string;\n summary?: string;\n // Structured error metadata — Builder gateway sets these on quota/auth/setup\n // failures so the UI can render a CTA alongside the error text.\n errorCode?: string;\n upgradeUrl?: string;\n details?: string;\n recoverable?: boolean;\n maxIterations?: number;\n}\n\nexport type AgentAutoContinueReason =\n | \"run_timeout\"\n | \"loop_limit\"\n | \"no_progress\"\n | \"stream_ended\"\n | \"stale_run\";\n\nexport type AgentActivityTrailEntry = { label: string; tool?: string };\n\nexport interface AgentAutoContinueErrorInfo {\n message: string;\n details?: string;\n errorCode?: string;\n recoverable?: boolean;\n upgradeUrl?: string;\n}\n\nconst INTERRUPTED_TOOL_RESULT =\n \"Interrupted before this tool returned a result.\";\nconst INTERRUPTED_ACTIVITY_RESULT = \"Stopped before this action started.\";\n\nexport function settleInterruptedToolCalls(\n content: ContentPart[],\n result = INTERRUPTED_TOOL_RESULT,\n options?: { includeActivity?: boolean; activityResult?: string },\n): boolean {\n let changed = false;\n for (const part of content) {\n if (\n part.type === \"tool-call\" &&\n part.result === undefined &&\n (part.activity !== true || options?.includeActivity === true)\n ) {\n part.result =\n part.activity === true\n ? (options?.activityResult ?? INTERRUPTED_ACTIVITY_RESULT)\n : result;\n changed = true;\n }\n }\n return changed;\n}\n\nexport class AgentAutoContinueSignal extends Error {\n readonly reason: AgentAutoContinueReason;\n readonly maxIterations?: number;\n readonly activityTrail: AgentActivityTrailEntry[];\n readonly errorInfo?: AgentAutoContinueErrorInfo;\n\n constructor(options: {\n reason: AgentAutoContinueReason;\n maxIterations?: number;\n activityTrail?: AgentActivityTrailEntry[];\n errorInfo?: AgentAutoContinueErrorInfo;\n }) {\n super(`Agent run needs automatic continuation: ${options.reason}`);\n this.name = \"AgentAutoContinueSignal\";\n this.reason = options.reason;\n this.maxIterations = options.maxIterations;\n this.activityTrail = options.activityTrail ?? [];\n this.errorInfo = options.errorInfo;\n }\n}\n\nexport const SSE_NO_PROGRESS_TIMEOUT_MS = 75_000;\nexport const SSE_ACTION_PREPARATION_STALL_TIMEOUT_MS = 90_000;\n\nexport interface SSEStreamOptions {\n /**\n * Durable background runs have their own server-side liveness budget and\n * heartbeat. While one is active, generic keepalive-only periods keep the\n * client attached. Tool-input preparation is stricter: real byte progress\n * keeps long payloads alive, but zero-byte/silent preparation still recovers\n * so one stuck action cannot pin the chat forever.\n */\n durableBackgroundRun?: boolean;\n /**\n * Optional caller-owned preparation watchdog state. Passing the same object\n * across reconnect reads keeps a stuck action preparation from getting a\n * fresh stall budget every time the browser reattaches to the same run.\n */\n preparingActionState?: PreparingActionState;\n}\n\ntype ActivityTrailEntry = AgentActivityTrailEntry;\n\ntype PreparingActionEntry = {\n tool: string;\n startedAt?: number;\n lastProgressBytes?: number;\n /**\n * Timestamp of the last real streaming progress for the in-preparation tool\n * input. The server emits a throttled `activity` heartbeat per\n * `tool-input-delta`, so while the model is actively streaming a (possibly\n * very large) tool argument this keeps advancing. The stall guard measures\n * silence from HERE — not from `startedAt` — so a legitimately large, still-\n * streaming input is never aborted; only genuine silence (keepalive-only, no\n * further deltas) can trip it.\n */\n lastProgressAt?: number;\n};\n\nexport type PreparingActionState = {\n entries?: Map<string, PreparingActionEntry>;\n toolEntries?: Map<string, PreparingActionEntry>;\n};\n\nfunction formatProgressBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction activityProgressBytes(ev: SSEEvent): number | undefined {\n return typeof ev.progressBytes === \"number\" &&\n Number.isFinite(ev.progressBytes) &&\n ev.progressBytes >= 0\n ? Math.floor(ev.progressBytes)\n : undefined;\n}\n\nfunction isPreparingActionActivity(ev: SSEEvent): boolean {\n if (ev.type !== \"activity\") return false;\n const label = (ev.label ?? \"\").trim().toLowerCase();\n return label.startsWith(\"preparing \") && label.includes(\" action\");\n}\n\nfunction isMeaningfulProgressEvent(\n ev: SSEEvent,\n actionPreparationProgress?: boolean,\n options?: SSEStreamOptions,\n): boolean {\n if (ev.type === \"stream_keepalive\") {\n return options?.durableBackgroundRun === true;\n }\n if (ev.type === \"activity\" && isPreparingActionActivity(ev)) {\n if (options?.durableBackgroundRun === true) return true;\n return actionPreparationProgress === true;\n }\n return true;\n}\n\nfunction baseActivityLabel(ev: SSEEvent, tool?: string): string {\n return humanizeToolLabelText(ev.label ?? \"Working\", tool);\n}\n\nfunction preparationActivityLabel(\n tool: string | undefined,\n progressBytes: number | undefined,\n): string {\n const action = humanizeToolName(tool);\n if (progressBytes === undefined) {\n return `Starting ${action}...`;\n }\n if (progressBytes <= 0) {\n return `Preparing ${action}...`;\n }\n return `Writing ${action}... (${formatProgressBytes(progressBytes)} prepared)`;\n}\n\nfunction visibleActivityLabel(ev: SSEEvent, tool?: string): string {\n const progressBytes = activityProgressBytes(ev);\n if (isPreparingActionActivity(ev)) {\n return preparationActivityLabel(tool, progressBytes);\n }\n return baseActivityLabel(ev, tool);\n}\n\nfunction findPendingToolCallIndex(\n content: ContentPart[],\n toolName: string,\n toolCallId?: string,\n): number {\n // Prefer id-based match when the event carries an id: parallel same-name\n // calls can be in flight simultaneously, and name-only matching would\n // attach a result to the wrong call.\n if (toolCallId) {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolCallId === toolCallId &&\n part.result === undefined\n ) {\n return i;\n }\n }\n // Fall through to name-matching: the start event may have arrived before\n // the server started emitting ids (e.g. older server build), so the\n // stored toolCallId is the locally-generated \"tc_N\" value rather than the\n // server-assigned one. In that case match by name as a fallback.\n }\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === toolName &&\n part.result === undefined\n ) {\n return i;\n }\n }\n return -1;\n}\n\nfunction findCompletedToolCallIndex(\n content: ContentPart[],\n toolCallId?: string,\n): number {\n if (!toolCallId) return -1;\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolCallId === toolCallId &&\n part.result !== undefined\n ) {\n return i;\n }\n }\n return -1;\n}\n\nfunction appendActivityTrail(\n trail: ActivityTrailEntry[],\n next: ActivityTrailEntry,\n) {\n const label = next.label.trim();\n if (!label) return;\n const tool = next.tool?.trim();\n const last = trail[trail.length - 1];\n if (last?.label === label && last.tool === tool) return;\n trail.push({ label, ...(tool ? { tool } : {}) });\n if (trail.length > 8) {\n trail.splice(0, trail.length - 8);\n }\n}\n\nfunction refreshPreparingToolEntry(state: PreparingActionState, tool: string) {\n const remainingEntries = [...(state.entries?.values() ?? [])].filter(\n (entry) => entry.tool === tool,\n );\n if (remainingEntries.length === 0) {\n state.toolEntries?.delete(tool);\n return;\n }\n const deadlineBasis = (entry: PreparingActionEntry) =>\n entry.lastProgressAt ?? entry.startedAt ?? Number.POSITIVE_INFINITY;\n const oldestEntry = remainingEntries.reduce((oldest, entry) =>\n deadlineBasis(entry) < deadlineBasis(oldest) ? entry : oldest,\n );\n const lastProgressBytes = remainingEntries.reduce<number | undefined>(\n (max, entry) =>\n entry.lastProgressBytes === undefined\n ? max\n : Math.max(max ?? 0, entry.lastProgressBytes),\n undefined,\n );\n const toolEntries =\n state.toolEntries ?? new Map<string, PreparingActionEntry>();\n state.toolEntries = toolEntries;\n toolEntries.set(tool, {\n tool,\n startedAt: oldestEntry.startedAt,\n lastProgressAt: oldestEntry.lastProgressAt,\n lastProgressBytes,\n });\n}\n\nfunction updatePreparingActionState(\n state: PreparingActionState,\n ev: SSEEvent,\n now: number,\n): boolean | undefined {\n if (ev.type === \"activity\" && isPreparingActionActivity(ev)) {\n const tool = ev.tool?.trim() || undefined;\n if (!tool) return false;\n const id = ev.id?.trim();\n const key = id || tool;\n const entries = state.entries ?? new Map<string, PreparingActionEntry>();\n state.entries = entries;\n let entry = entries.get(key);\n if (!entry) {\n entry = {\n tool,\n startedAt: now,\n lastProgressAt: undefined,\n lastProgressBytes: undefined,\n };\n entries.set(key, entry);\n }\n const toolEntries =\n state.toolEntries ?? new Map<string, PreparingActionEntry>();\n state.toolEntries = toolEntries;\n let toolEntry = toolEntries.get(tool);\n if (!toolEntry) {\n toolEntry = {\n tool,\n startedAt: now,\n lastProgressAt: undefined,\n lastProgressBytes: undefined,\n };\n toolEntries.set(tool, toolEntry);\n }\n const progressBytes = activityProgressBytes(ev);\n const previousBytes = entry.lastProgressBytes ?? 0;\n let madeProgress = false;\n if (progressBytes !== undefined) {\n entry.lastProgressBytes = Math.max(previousBytes, progressBytes);\n toolEntry.lastProgressBytes = Math.max(\n toolEntry.lastProgressBytes ?? 0,\n progressBytes,\n );\n madeProgress = id ? progressBytes > previousBytes : progressBytes > 0;\n }\n if (madeProgress) {\n // A byte increase is proof the model is still streaming this action's\n // argument. Repeated zero-byte prep activity is only a heartbeat.\n entry.lastProgressAt = now;\n toolEntry.lastProgressAt = now;\n return true;\n }\n return false;\n }\n\n if (\n ev.type === \"clear\" ||\n ev.type === \"text\" ||\n ev.type === \"tool_start\" ||\n ev.type === \"tool_done\" ||\n ev.type === \"done\" ||\n ev.type === \"error\" ||\n ev.type === \"missing_api_key\"\n ) {\n if (ev.type === \"tool_start\" || ev.type === \"tool_done\") {\n const tool = ev.tool?.trim();\n const id = ev.id?.trim();\n for (const [key, entry] of state.entries ?? []) {\n if ((id && key === id) || (!id && tool && entry.tool === tool)) {\n state.entries?.delete(key);\n }\n }\n if (tool) {\n refreshPreparingToolEntry(state, tool);\n }\n } else {\n state.entries?.clear();\n state.toolEntries?.clear();\n }\n }\n return undefined;\n}\n\nfunction hasStalledPreparingAction(state: PreparingActionState, now: number) {\n // Fire only when a tool input has gone SILENT — no further streaming deltas\n // for the whole window — never merely because a large input has been\n // streaming for a long time. `lastProgressAt` advances on every delta\n // heartbeat, so an actively-streaming large output keeps resetting this and\n // survives; a genuinely stuck prep (keepalive-only, no deltas) trips it.\n for (const entry of [\n ...(state.toolEntries?.values() ?? []),\n ...(state.entries?.values() ?? []),\n ]) {\n if (\n entry.startedAt !== undefined &&\n now - (entry.lastProgressAt ?? entry.startedAt) >=\n SSE_ACTION_PREPARATION_STALL_TIMEOUT_MS\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function readChunkWithProgressTimeout(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n lastMeaningfulEventAt: number,\n): Promise<ReadableStreamReadResult<Uint8Array>> {\n const elapsed = Date.now() - lastMeaningfulEventAt;\n const timeoutMs = Math.max(0, SSE_NO_PROGRESS_TIMEOUT_MS - elapsed);\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const readPromise = reader.read();\n // If the timeout wins and cancellation causes the pending read to reject,\n // swallow that rejection because the generator is already recovering.\n void readPromise.catch(() => {});\n\n const timeoutPromise = new Promise<\"timeout\">((resolve) => {\n timeoutId = setTimeout(() => resolve(\"timeout\"), timeoutMs);\n });\n const result = await Promise.race([readPromise, timeoutPromise]);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (result === \"timeout\") {\n await reader.cancel(\"no_progress\").catch(() => {});\n throw new AgentAutoContinueSignal({ reason: \"no_progress\" });\n }\n return result;\n}\n\nfunction isAutoRecoverableError(ev: SSEEvent, errMsg: string): boolean {\n const code = String(ev.errorCode ?? \"\").toLowerCase();\n const msg = errMsg.toLowerCase();\n\n if (\n code === \"context_length_exceeded\" ||\n code === \"input_too_long\" ||\n code.startsWith(\"credits-limit\") ||\n code === \"billing_error\" ||\n code === \"unauthorized\" ||\n code === \"authentication_error\" ||\n code === \"permission_error\" ||\n code === \"http_401\" ||\n code === \"http_403\" ||\n code === \"rate_limit_exceeded\" ||\n code === \"gateway_not_enabled\" ||\n code === \"missing_api_key\" ||\n code === \"missing_credentials\" ||\n code === \"invalid_request_error\" ||\n code === \"request_too_large\" ||\n code === \"not_found_error\" ||\n code === \"model_not_found\" ||\n code === \"provider_rate_limited\" ||\n // `builder_gateway_error` is the no-detail fallback the Builder engine\n // emits when the gateway returns `{type:\"stop\",reason:\"error\"}` with no\n // explanation — almost always the upstream provider giving up (model\n // quota hit, account misconfiguration, opaque downstream failure). The\n // production-agent already retries this synchronously up to MAX_RETRIES\n // before the error escapes to the SSE stream, so by the time the client\n // sees it, retrying again with another POST /agent-chat will hit the\n // same wall. This used to send the chat into a 32-continuation runaway\n // (each turn cleared+regenerated visible content) for users hitting a\n // misbehaving Builder route. Surface the error instead.\n code === \"builder_gateway_error\" ||\n // The hosted run exhausted its in-invocation continuation budget without\n // finishing (run-loop-with-resume.ts). It's flagged `recoverable: true` so\n // the recovery banner reads \"stopped before finishing\", but it must NOT\n // auto-continue: another POST would hit the same ~40s wall and churn. The\n // user retries deliberately (ideally as a single bulk action).\n code === \"run_budget_exhausted\"\n ) {\n return false;\n }\n\n if (\n code === \"builder_gateway_network_error\" ||\n code === \"builder_gateway_timeout\" ||\n code === \"stale_run\" ||\n code === \"timeout\" ||\n code === \"timeout_error\" ||\n code === \"http_408\" ||\n code === \"http_429\" ||\n code === \"http_500\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"rate_limited\" ||\n code === \"too_many_concurrent_requests\" ||\n code === \"overloaded_error\"\n ) {\n return true;\n }\n\n if (ev.recoverable === true) return true;\n\n if (msg.includes(\"daily gateway request cap\")) return false;\n\n // \"gateway error\" intentionally absent — that's the no-detail Builder\n // gateway fallback and the production-agent already retries it\n // synchronously up to MAX_RETRIES before the error escapes here. Treating\n // it as auto-recoverable on top of that produced a 32-continuation\n // runaway in production for users hitting a misbehaving Builder route.\n // (See `code === \"builder_gateway_error\"` in the not-recoverable list.)\n return (\n msg.includes(\"overloaded\") ||\n msg.includes(\"rate_limit\") ||\n msg.includes(\"too many requests\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"socket hang up\") ||\n msg.includes(\"connection reset\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"network\") ||\n msg.includes(\"stream closed\") ||\n msg.includes(\"stream ended\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isMissingCredentialText(message: string, errorCode?: string): boolean {\n const code = String(errorCode ?? \"\").toLowerCase();\n const msg = message.toLowerCase();\n return (\n code === \"missing_api_key\" ||\n code === \"missing_credentials\" ||\n msg.includes(\"apikey\") ||\n msg.includes(\"authtoken\") ||\n msg.includes(\"anthropic_api_key\") ||\n msg.includes(\"missing_api_key\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"missing credentials\") ||\n msg.includes(\"no llm provider\") ||\n msg.includes(\"llm provider is connected\")\n );\n}\n\nfunction dispatchActivityClear(tabId: string | undefined) {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:activity-clear\", {\n detail: { tabId },\n }),\n );\n}\n\nfunction pendingToolNames(content: ContentPart[]): {\n activity: string[];\n running: string[];\n} {\n const activity = new Set<string>();\n const running = new Set<string>();\n for (const part of content) {\n if (part.type === \"tool-call\" && part.result === undefined) {\n if (part.activity === true) {\n activity.add(part.toolName);\n } else {\n running.add(part.toolName);\n }\n }\n }\n return { activity: [...activity], running: [...running] };\n}\n\nfunction contentSnapshot(content: ContentPart[]): ContentPart[] {\n return content.map((part) => {\n if (part.type === \"text\") return { ...part };\n return {\n ...part,\n args: { ...part.args },\n ...(part.mcpApp ? { mcpApp: { ...part.mcpApp } } : {}),\n ...(part.chatUI ? { chatUI: { ...part.chatUI } } : {}),\n ...(part.approval ? { approval: { ...part.approval } } : {}),\n ...(part.structuredMeta\n ? { structuredMeta: { ...part.structuredMeta } }\n : {}),\n };\n });\n}\n\nfunction repeatSignatureValue(value: unknown): string {\n try {\n return JSON.stringify(value);\n } catch {\n return String(value ?? \"\");\n }\n}\n\nfunction completedToolRepeatSignature(\n part: Extract<ContentPart, { type: \"tool-call\" }>,\n): string | null {\n if (\n part.result === undefined ||\n part.activity === true ||\n part.approval ||\n part.mcpApp ||\n part.chatUI ||\n part.structuredMeta\n ) {\n return null;\n }\n return [\n part.toolName,\n part.argsText,\n repeatSignatureValue(part.args),\n part.result,\n part.isError === true ? \"error\" : \"\",\n part.completedSideEffect === true ? \"side-effect\" : \"\",\n ].join(\"\\u0000\");\n}\n\nfunction coalesceCompletedToolRepeat(\n content: ContentPart[],\n completedIndex: number,\n): void {\n const current = content[completedIndex];\n const previous = content[completedIndex - 1];\n if (\n !current ||\n !previous ||\n current.type !== \"tool-call\" ||\n previous.type !== \"tool-call\"\n ) {\n return;\n }\n\n const currentSignature = completedToolRepeatSignature(current);\n if (\n !currentSignature ||\n currentSignature !== completedToolRepeatSignature(previous)\n ) {\n return;\n }\n\n previous.repeatCount =\n (previous.repeatCount ?? 1) + (current.repeatCount ?? 1);\n content.splice(completedIndex, 1);\n}\n\nfunction formatToolNames(tools: string[]): string {\n const names = tools.map(humanizeToolName);\n if (names.length === 0) return \"the promised action\";\n if (names.length === 1) return `the ${names[0]} action`;\n return `these actions: ${names.join(\", \")}`;\n}\n\nfunction interruptedToolMessage(pending: {\n activity: string[];\n running: string[];\n}): string {\n if (pending.running.length > 0) {\n return `The agent stopped before ${formatToolNames(pending.running)} returned a result. The requested changes may not have been made.`;\n }\n const actionLabel = formatToolNames(pending.activity);\n return `The agent stopped before starting ${actionLabel}. No tool result was returned, so the requested changes were not made.`;\n}\n\nfunction lastAssistantTextIndex(content: ContentPart[]): number {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (part.type === \"text\" && part.text.trim().length > 0) return i;\n }\n return -1;\n}\n\nfunction completedToolNamesAfterLastAssistantText(\n content: ContentPart[],\n): string[] {\n const lastTextIndex = lastAssistantTextIndex(content);\n const names = new Set<string>();\n for (let i = lastTextIndex + 1; i < content.length; i++) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.activity !== true &&\n part.result !== undefined &&\n part.isError !== true\n ) {\n names.add(part.toolName);\n }\n }\n return [...names];\n}\n\nfunction completedToolOnlyMessage(toolNames: string[]): string | null {\n if (toolNames.length === 0) return null;\n const label = formatToolNames(toolNames);\n return `The agent completed ${label}, but stopped before sending a final message. Review the completed tool card above or ask the agent to continue.`;\n}\n\ninterface ProcessEventState {\n completedToolsAfterLastAssistantText: Set<string>;\n}\n\nfunction markAssistantText(state: ProcessEventState | undefined) {\n state?.completedToolsAfterLastAssistantText.clear();\n}\n\nfunction markCompletedToolAfterAssistantText(\n state: ProcessEventState | undefined,\n toolName: string,\n) {\n state?.completedToolsAfterLastAssistantText.add(toolName);\n}\n\nfunction resetProcessEventState(state: ProcessEventState | undefined) {\n state?.completedToolsAfterLastAssistantText.clear();\n}\n\n/**\n * Process a single SSE event and update the content accumulator.\n * Returns: \"continue\" to keep going, \"done\" to stop, or a yield-ready result.\n */\nexport function processEvent(\n ev: SSEEvent,\n content: ContentPart[],\n toolCallCounter: { value: number },\n tabId: string | undefined,\n state?: ProcessEventState,\n): {\n action:\n | \"continue\"\n | \"done\"\n | \"yield\"\n | \"error\"\n | \"missing_api_key\"\n | \"auto_continue\";\n result?: ChatModelRunResult;\n autoContinue?: {\n reason: AgentAutoContinueReason;\n maxIterations?: number;\n errorInfo?: AgentAutoContinueErrorInfo;\n };\n} {\n if (ev.type === \"clear\") {\n // Server is retrying — discard rejected draft text and unfinished tool\n // output while keeping completed tool results visible.\n clearAssistantDraftContent(content);\n resetProcessEventState(state);\n dispatchActivityClear(tabId);\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"text\") {\n // Visible output means the run is plainly not hanging — drop any running\n // activity label so a transient \"Contacting model\" / \"Still generating\n // image\" doesn't linger beside streamed text. Idempotent (clears once, then\n // no-ops) so per-token text deltas stay cheap.\n if (ev.text) dispatchActivityClear(tabId);\n if (ev.text?.trim()) markAssistantText(state);\n const lastPart = content[content.length - 1];\n if (lastPart && lastPart.type === \"text\") {\n lastPart.text += ev.text ?? \"\";\n } else {\n content.push({ type: \"text\", text: ev.text ?? \"\" });\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"stream_keepalive\") {\n return { action: \"continue\" };\n }\n\n if (ev.type === \"activity\") {\n const tool = ev.tool?.trim() || undefined;\n const label = visibleActivityLabel(ev, tool);\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:activity\", {\n detail: {\n label,\n ...(tool ? { tool } : {}),\n tabId,\n },\n }),\n );\n }\n if (!tool) return { action: \"continue\" };\n\n const pendingToolCallIndex = findPendingToolCallIndex(content, tool);\n if (pendingToolCallIndex === -1) {\n content.push({\n type: \"tool-call\",\n toolCallId: `tc_${++toolCallCounter.value}`,\n toolName: tool,\n argsText: \"\",\n args: {},\n activity: true,\n });\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"tool_start\") {\n const args = (ev.input ?? {}) as Record<string, string>;\n const tool = ev.tool ?? \"unknown\";\n if (findCompletedToolCallIndex(content, ev.id) >= 0) {\n return { action: \"continue\" };\n }\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-native:tool-start\", {\n detail: { tool, input: args },\n }),\n );\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:activity\", {\n detail: {\n label: runningToolLabel(tool),\n tool,\n tabId,\n },\n }),\n );\n }\n // Pass the server-assigned id so we upgrade the pending activity card\n // using id-match when available (parallel same-name calls stay separate).\n const pendingToolCallIndex = findPendingToolCallIndex(content, tool, ev.id);\n const pendingToolCall =\n pendingToolCallIndex >= 0 ? content[pendingToolCallIndex] : undefined;\n if (\n pendingToolCall &&\n pendingToolCall.type === \"tool-call\" &&\n pendingToolCall.activity === true &&\n pendingToolCall.argsText === \"\" &&\n Object.keys(pendingToolCall.args).length === 0\n ) {\n // Upgrade the pending activity card in place. Prefer the server-assigned\n // id so the subsequent tool_done can match it precisely (parallel\n // same-name calls each carry their own id). Fall back to the\n // locally-generated id already on the card.\n content[pendingToolCallIndex] = {\n type: \"tool-call\",\n toolCallId: ev.id ?? pendingToolCall.toolCallId,\n toolName: tool,\n argsText: JSON.stringify(args),\n args,\n };\n } else {\n content.push({\n type: \"tool-call\",\n toolCallId: ev.id ?? `tc_${++toolCallCounter.value}`,\n toolName: tool,\n argsText: JSON.stringify(args),\n args,\n });\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"approval_required\") {\n // Opt-in `needsApproval` gate: the server emitted `tool_start` immediately\n // before this, so the matching tool-call part already exists. Mark it as\n // awaiting approval so the UI can render the Approve/Deny affordance. The\n // action did NOT execute; a paused `tool_done` follows.\n const approvalTool = ev.tool ?? \"unknown\";\n const approvalKey = ev.approvalKey;\n if (approvalKey) {\n const idx = findPendingToolCallIndex(content, approvalTool, ev.id);\n if (idx >= 0) {\n const part = content[idx];\n if (part.type === \"tool-call\") {\n part.approval = { approvalKey };\n }\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"tool_done\") {\n // Normalize identically to tool_start (which stores `ev.tool ?? \"unknown\"`)\n // so a tool_done frame with an undefined tool name still matches its\n // pending tool-call entry instead of leaving it forever unresolved.\n const doneTool = ev.tool ?? \"unknown\";\n if (findCompletedToolCallIndex(content, ev.id) >= 0) {\n return { action: \"continue\" };\n }\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-native:tool-done\", {\n detail: { tool: doneTool, result: ev.result },\n }),\n );\n }\n // Clear any sticky running-activity label (e.g. \"Still generating image\"):\n // the tool that was emitting activity heartbeats has finished, so the label\n // must not linger while the model streams its follow-up text or reasoning.\n dispatchActivityClear(tabId);\n // Use id-based lookup when available so parallel same-name tool calls\n // get their results correctly assigned; fall back to name-matching.\n const doneIdx = findPendingToolCallIndex(content, doneTool, ev.id);\n if (doneIdx >= 0) {\n const part = content[doneIdx];\n if (part.type === \"tool-call\") {\n part.result = ev.result ?? \"\";\n if (ev.isError !== undefined) part.isError = ev.isError;\n if (ev.completedSideEffect !== undefined) {\n part.completedSideEffect = ev.completedSideEffect;\n }\n if (ev.mcpApp) part.mcpApp = ev.mcpApp;\n if (ev.chatUI) part.chatUI = ev.chatUI;\n if (part.activity !== true && part.isError !== true) {\n markCompletedToolAfterAssistantText(state, part.toolName);\n }\n coalesceCompletedToolRepeat(content, doneIdx);\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"agent_call\") {\n const agentName = ev.agent ?? \"agent\";\n if (ev.status === \"start\") {\n const toolCallId = `tc_${++toolCallCounter.value}`;\n content.push({\n type: \"tool-call\",\n toolCallId,\n toolName: `agent:${agentName}`,\n argsText: \"\",\n args: {},\n });\n } else if (ev.status === \"done\" || ev.status === \"error\") {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === `agent:${agentName}` &&\n part.result === undefined\n ) {\n part.result = ev.status === \"error\" ? \"Error calling agent\" : \"Done\";\n break;\n }\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"agent_call_text\") {\n const agentName = ev.agent ?? \"agent\";\n // Find the in-progress agent tool-call and append streaming text to argsText\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === `agent:${agentName}` &&\n part.result === undefined\n ) {\n part.argsText += ev.text ?? \"\";\n break;\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n // ─── Agent task events (sub-agent chips) ─────────────────────────\n // These events are dispatched as CustomEvents so AgentTaskCard components\n // can listen for updates to their specific taskId.\n if (\n ev.type === \"agent_task\" ||\n ev.type === \"agent_task_update\" ||\n ev.type === \"agent_task_complete\"\n ) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new CustomEvent(\"agent-task-event\", { detail: ev }));\n }\n // Don't add to content — the agent-teams tool call handles rendering\n return { action: \"continue\" };\n }\n\n if (ev.type === \"missing_api_key\") {\n const errMsg = LLM_MISSING_CREDENTIALS_MESSAGE;\n const errorCode = LLM_MISSING_CREDENTIALS_ERROR_CODE;\n const runError = {\n message: normalizeChatError(errMsg, errorCode).message,\n errorCode,\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n settleInterruptedToolCalls(content, undefined, { includeActivity: true });\n content.push({\n type: \"text\",\n text: formatChatErrorText(errMsg, undefined, errorCode),\n });\n return {\n action: \"missing_api_key\",\n result: {\n content: contentSnapshot(content),\n status: { type: \"incomplete\" as const, reason: \"error\" as const },\n metadata: { custom: { runError } },\n } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"loop_limit\") {\n const maxIterations =\n typeof ev.maxIterations === \"number\" ? ev.maxIterations : undefined;\n return {\n action: \"auto_continue\",\n autoContinue: {\n reason: \"loop_limit\",\n ...(maxIterations ? { maxIterations } : {}),\n },\n };\n }\n\n if (ev.type === \"auto_continue\") {\n const reason =\n ev.reason === \"stream_ended\" ||\n ev.reason === \"loop_limit\" ||\n ev.reason === \"no_progress\" ||\n ev.reason === \"run_timeout\"\n ? ev.reason\n : ev.errorCode === \"stream_ended\" ||\n ev.errorCode === \"loop_limit\" ||\n ev.errorCode === \"no_progress\" ||\n ev.errorCode === \"run_timeout\"\n ? ev.errorCode\n : ev.error === \"stream_ended\" ||\n ev.error === \"loop_limit\" ||\n ev.error === \"no_progress\" ||\n ev.error === \"run_timeout\"\n ? ev.error\n : ev.status === \"stream_ended\" ||\n ev.status === \"loop_limit\" ||\n ev.status === \"no_progress\" ||\n ev.status === \"run_timeout\"\n ? ev.status\n : \"run_timeout\";\n return {\n action: \"auto_continue\",\n autoContinue: {\n reason,\n ...(typeof ev.maxIterations === \"number\"\n ? { maxIterations: ev.maxIterations }\n : {}),\n },\n };\n }\n\n if (ev.type === \"error\") {\n const errMsg = ev.error ?? \"Unknown error\";\n if (\n (ev.errorCode === \"run_timeout\" && ev.recoverable) ||\n isAutoRecoverableError(ev, errMsg)\n ) {\n const normalized = normalizeChatError(errMsg, ev.errorCode);\n return {\n action: \"auto_continue\",\n autoContinue: {\n reason:\n ev.errorCode === \"stale_run\"\n ? \"stale_run\"\n : ev.errorCode === \"builder_gateway_timeout\" ||\n ev.errorCode === \"run_timeout\" ||\n errMsg.toLowerCase().includes(\"timeout\")\n ? \"run_timeout\"\n : \"stream_ended\",\n errorInfo: {\n message: normalized.message,\n ...(ev.details || normalized.details\n ? { details: ev.details ?? normalized.details }\n : {}),\n ...(ev.errorCode ? { errorCode: ev.errorCode } : {}),\n recoverable: ev.recoverable ?? true,\n ...(ev.upgradeUrl ? { upgradeUrl: ev.upgradeUrl } : {}),\n },\n },\n };\n }\n const normalized = normalizeChatError(errMsg, ev.errorCode);\n if (isMissingCredentialText(errMsg, ev.errorCode)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n }\n const runError = {\n message: normalized.message,\n ...(normalized.details || ev.details\n ? { details: ev.details ?? normalized.details }\n : {}),\n ...(ev.errorCode ? { errorCode: ev.errorCode } : {}),\n ...(ev.recoverable ? { recoverable: ev.recoverable } : {}),\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n settleInterruptedToolCalls(content, undefined, { includeActivity: true });\n content.push({\n type: \"text\",\n text: formatChatErrorText(errMsg, ev.upgradeUrl, ev.errorCode),\n });\n return {\n action: \"error\",\n result: {\n content: contentSnapshot(content),\n status: { type: \"incomplete\" as const, reason: \"error\" as const },\n metadata: { custom: { runError } },\n } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"done\") {\n const interruptedTools = pendingToolNames(content);\n const allInterruptedTools = [\n ...interruptedTools.running,\n ...interruptedTools.activity,\n ];\n if (allInterruptedTools.length > 0) {\n settleInterruptedToolCalls(content, undefined, { includeActivity: true });\n const message = interruptedToolMessage(interruptedTools);\n const runError = {\n message,\n details: `interrupted_actions: ${allInterruptedTools.join(\", \")}`,\n errorCode: \"action_not_started\",\n recoverable: true,\n };\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:run-error\", {\n detail: { ...runError, tabId },\n }),\n );\n }\n content.push({\n type: \"text\",\n text: formatChatErrorText(message, undefined, runError.errorCode),\n });\n return {\n action: \"error\",\n result: {\n content: contentSnapshot(content),\n status: { type: \"incomplete\" as const, reason: \"error\" as const },\n metadata: { custom: { runError } },\n } as ChatModelRunResult,\n };\n }\n const toolOnlyMessage = completedToolOnlyMessage(\n state\n ? [...state.completedToolsAfterLastAssistantText]\n : completedToolNamesAfterLastAssistantText(content),\n );\n if (toolOnlyMessage) {\n content.push({\n type: \"text\",\n text: toolOnlyMessage,\n });\n return {\n action: \"done\",\n result: {\n content: contentSnapshot(content),\n status: { type: \"complete\" as const, reason: \"stop\" as const },\n metadata: {\n custom: {\n runWarning: {\n message: toolOnlyMessage,\n errorCode: \"final_response_missing_after_tool\",\n recoverable: true,\n },\n },\n },\n } as ChatModelRunResult,\n };\n }\n return {\n action: \"done\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n return { action: \"continue\" };\n}\n\nfunction clearAssistantDraftContent(content: ContentPart[]): void {\n for (let index = content.length - 1; index >= 0; index--) {\n const part = content[index];\n if (!part) continue;\n if (part.type === \"text\") {\n content.splice(index, 1);\n continue;\n }\n if (part.type === \"tool-call\" && part.result === undefined) {\n content.splice(index, 1);\n }\n }\n}\n\n/**\n * Read and process SSE events from a ReadableStream response body.\n * Yields ChatModelRunResult for each meaningful event.\n *\n * When `runId` is provided, every yielded result carries\n * `metadata.custom.runId` so the UI can expose the trace ID via\n * \"Copy Request ID\" — including mid-stream, so users can grab it before\n * the run completes (or if the run hangs / ends prematurely).\n */\nexport async function* readSSEStream(\n body: ReadableStream<Uint8Array>,\n content: ContentPart[],\n toolCallCounter: { value: number },\n tabId: string | undefined,\n onSeq?: (seq: number) => void,\n runId?: string | null,\n options?: SSEStreamOptions,\n): AsyncGenerator<ChatModelRunResult> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buf = \"\";\n let lastMeaningfulEventAt = Date.now();\n const activityTrail: ActivityTrailEntry[] = [];\n const preparingActionState: PreparingActionState =\n options?.preparingActionState ?? {};\n const processEventState: ProcessEventState = {\n completedToolsAfterLastAssistantText: new Set(),\n };\n\n const withStreamMetadata = (r: ChatModelRunResult): ChatModelRunResult => {\n if (!runId && activityTrail.length === 0) return r;\n const metadata = (r.metadata ?? {}) as Record<string, unknown>;\n const custom =\n metadata.custom && typeof metadata.custom === \"object\"\n ? (metadata.custom as Record<string, unknown>)\n : {};\n const runError =\n runId && custom.runError && typeof custom.runError === \"object\"\n ? {\n ...(custom.runError as Record<string, unknown>),\n runId,\n }\n : custom.runError;\n return {\n ...r,\n metadata: {\n ...metadata,\n custom: {\n ...custom,\n ...(runId ? { runId } : {}),\n ...(runError ? { runError } : {}),\n ...(activityTrail.length > 0\n ? { activityTrail: [...activityTrail] }\n : {}),\n },\n },\n };\n };\n\n try {\n while (true) {\n let readResult: ReadableStreamReadResult<Uint8Array>;\n try {\n readResult = await readChunkWithProgressTimeout(\n reader,\n lastMeaningfulEventAt,\n );\n } catch (err) {\n if (err instanceof AgentAutoContinueSignal) {\n throw new AgentAutoContinueSignal({\n reason: err.reason,\n maxIterations: err.maxIterations,\n activityTrail: [...activityTrail],\n errorInfo: err.errorInfo,\n });\n }\n throw err;\n }\n const { done, value } = readResult;\n if (done) break;\n\n buf += decoder.decode(value, { stream: true });\n const lines = buf.split(\"\\n\");\n buf = lines.pop() ?? \"\";\n let sawProgressEvent = false;\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const raw = line.slice(6).trim();\n if (!raw) continue;\n\n let ev: SSEEvent;\n try {\n ev = JSON.parse(raw);\n } catch {\n continue;\n }\n const now = Date.now();\n const actionPreparationProgress = updatePreparingActionState(\n preparingActionState,\n ev,\n now,\n );\n if (isMeaningfulProgressEvent(ev, actionPreparationProgress, options)) {\n sawProgressEvent = true;\n lastMeaningfulEventAt = now;\n }\n\n // Track sequence number for reconnection\n if (ev.seq !== undefined && onSeq) {\n onSeq(ev.seq);\n }\n\n if (ev.type === \"clear\") {\n activityTrail.length = 0;\n } else if (ev.type === \"activity\") {\n const tool = ev.tool?.trim() || undefined;\n appendActivityTrail(activityTrail, {\n label: baseActivityLabel(ev, tool),\n ...(tool ? { tool } : {}),\n });\n } else if (ev.type === \"tool_start\") {\n const tool = ev.tool ?? \"unknown\";\n appendActivityTrail(activityTrail, {\n label: runningToolLabel(tool),\n tool,\n });\n } else if (ev.type === \"tool_done\") {\n const tool = ev.tool ?? \"unknown\";\n for (let i = activityTrail.length - 1; i >= 0; i--) {\n if (activityTrail[i]?.tool === tool) {\n activityTrail.splice(i, 1);\n }\n }\n }\n\n const { action, result, autoContinue } = processEvent(\n ev,\n content,\n toolCallCounter,\n tabId,\n processEventState,\n );\n\n if (result) yield withStreamMetadata(result);\n if (hasStalledPreparingAction(preparingActionState, Date.now())) {\n throw new AgentAutoContinueSignal({\n reason: \"no_progress\",\n activityTrail: [...activityTrail],\n });\n }\n if (action === \"auto_continue\") {\n throw new AgentAutoContinueSignal(\n autoContinue\n ? { ...autoContinue, activityTrail: [...activityTrail] }\n : { reason: \"stream_ended\", activityTrail: [...activityTrail] },\n );\n }\n if (\n action === \"done\" ||\n action === \"error\" ||\n action === \"missing_api_key\"\n ) {\n return;\n }\n }\n\n if (\n !sawProgressEvent &&\n Date.now() - lastMeaningfulEventAt >= SSE_NO_PROGRESS_TIMEOUT_MS\n ) {\n throw new AgentAutoContinueSignal({\n reason: \"no_progress\",\n activityTrail: [...activityTrail],\n });\n }\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n // The timeout path cancels the stream before unwinding; some runtimes\n // still consider the pending read active for a tick.\n }\n }\n\n // Stream ended without explicit done event. Even an empty content array is\n // abnormal here: a healthy run emits a terminal `done` event. Treat this as\n // recoverable so the adapter can first reconnect to the run, then continue\n // from durable history if the producer is gone.\n throw new AgentAutoContinueSignal({\n reason: \"stream_ended\",\n activityTrail: [...activityTrail],\n });\n}\n\n/**\n * Read raw SSE events from a ReadableStream and process them into ContentPart[].\n * Unlike readSSEStream, this doesn't yield ChatModelRunResult — it updates the\n * content array in-place and calls onUpdate for each meaningful change.\n * Designed for reconnection scenarios where we render outside assistant-ui's runtime.\n */\nexport async function readSSEStreamRaw(\n body: ReadableStream<Uint8Array>,\n content: ContentPart[],\n toolCallCounter: { value: number },\n tabId: string | undefined,\n onUpdate: (content: ContentPart[]) => void,\n onSeq?: (seq: number) => void,\n options?: SSEStreamOptions,\n): Promise<void> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buf = \"\";\n let lastMeaningfulEventAt = Date.now();\n const activityTrail: ActivityTrailEntry[] = [];\n const preparingActionState: PreparingActionState =\n options?.preparingActionState ?? {};\n const processEventState: ProcessEventState = {\n completedToolsAfterLastAssistantText: new Set(),\n };\n // Tracks whether the most recent content state was already pushed via\n // onUpdate inside the loop, so the post-loop flush below doesn't emit the\n // identical content a second time when the stream closes without a terminal\n // event.\n let emittedLatestContent = false;\n\n try {\n while (true) {\n let readResult: ReadableStreamReadResult<Uint8Array>;\n try {\n readResult = await readChunkWithProgressTimeout(\n reader,\n lastMeaningfulEventAt,\n );\n } catch (err) {\n if (err instanceof AgentAutoContinueSignal) {\n throw new AgentAutoContinueSignal({\n reason: err.reason,\n maxIterations: err.maxIterations,\n activityTrail: [...activityTrail],\n errorInfo: err.errorInfo,\n });\n }\n throw err;\n }\n const { done, value } = readResult;\n if (done) break;\n\n buf += decoder.decode(value, { stream: true });\n const lines = buf.split(\"\\n\");\n buf = lines.pop() ?? \"\";\n\n let sawProgressEvent = false;\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const raw = line.slice(6).trim();\n if (!raw) continue;\n\n let ev: SSEEvent;\n try {\n ev = JSON.parse(raw);\n } catch {\n continue;\n }\n const now = Date.now();\n const actionPreparationProgress = updatePreparingActionState(\n preparingActionState,\n ev,\n now,\n );\n if (isMeaningfulProgressEvent(ev, actionPreparationProgress, options)) {\n sawProgressEvent = true;\n lastMeaningfulEventAt = now;\n }\n\n if (ev.seq !== undefined && onSeq) {\n onSeq(ev.seq);\n }\n\n if (ev.type === \"clear\") {\n activityTrail.length = 0;\n } else if (ev.type === \"activity\") {\n const tool = ev.tool?.trim() || undefined;\n appendActivityTrail(activityTrail, {\n label: baseActivityLabel(ev, tool),\n ...(tool ? { tool } : {}),\n });\n } else if (ev.type === \"tool_start\") {\n const tool = ev.tool ?? \"unknown\";\n appendActivityTrail(activityTrail, {\n label: runningToolLabel(tool),\n tool,\n });\n } else if (ev.type === \"tool_done\") {\n const tool = ev.tool ?? \"unknown\";\n for (let i = activityTrail.length - 1; i >= 0; i--) {\n if (activityTrail[i]?.tool === tool) {\n activityTrail.splice(i, 1);\n }\n }\n }\n\n const { action, autoContinue } = processEvent(\n ev,\n content,\n toolCallCounter,\n tabId,\n processEventState,\n );\n\n if (\n action === \"yield\" ||\n action === \"done\" ||\n action === \"error\" ||\n action === \"missing_api_key\"\n ) {\n onUpdate(contentSnapshot(content));\n emittedLatestContent = true;\n }\n if (action === \"auto_continue\") {\n onUpdate(contentSnapshot(content));\n emittedLatestContent = true;\n throw new AgentAutoContinueSignal(\n autoContinue\n ? { ...autoContinue, activityTrail: [...activityTrail] }\n : { reason: \"stream_ended\", activityTrail: [...activityTrail] },\n );\n }\n if (hasStalledPreparingAction(preparingActionState, Date.now())) {\n onUpdate(contentSnapshot(content));\n throw new AgentAutoContinueSignal({\n reason: \"no_progress\",\n activityTrail: [...activityTrail],\n });\n }\n if (\n action === \"done\" ||\n action === \"error\" ||\n action === \"missing_api_key\"\n ) {\n return;\n }\n }\n\n if (\n !sawProgressEvent &&\n Date.now() - lastMeaningfulEventAt >= SSE_NO_PROGRESS_TIMEOUT_MS\n ) {\n throw new AgentAutoContinueSignal({\n reason: \"no_progress\",\n activityTrail: [...activityTrail],\n });\n }\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {\n // See readSSEStream: cancellation may race lock release in browsers.\n }\n }\n if (content.length > 0 && !emittedLatestContent) {\n onUpdate(contentSnapshot(content));\n }\n throw new AgentAutoContinueSignal({ reason: \"stream_ended\" });\n}\n"]}
@@ -41,9 +41,9 @@ export declare const postCollabUpdate: import("h3").EventHandlerWithFetch<import
41
41
  * Body: { text: string, fieldName?: string, requestSource?: string }
42
42
  */
43
43
  export declare const postCollabText: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
44
+ text?: undefined;
44
45
  ok?: undefined;
45
46
  error: string;
46
- text?: undefined;
47
47
  } | {
48
48
  error?: undefined;
49
49
  ok: boolean;
@@ -15,7 +15,7 @@ export declare function createProgressHandler(): import("h3").EventHandlerWithFe
15
15
  error: string;
16
16
  ok?: undefined;
17
17
  } | {
18
- error?: undefined;
19
18
  ok: boolean;
19
+ error?: undefined;
20
20
  }>>;
21
21
  //# sourceMappingURL=routes.d.ts.map
@@ -49,8 +49,8 @@ export declare function handleUpdateResource(event: any): Promise<import("./stor
49
49
  }>;
50
50
  /** DELETE /_agent-native/resources/:id — delete a resource */
51
51
  export declare function handleDeleteResource(event: any): Promise<{
52
- ok?: undefined;
53
52
  error: string;
53
+ ok?: undefined;
54
54
  } | {
55
55
  error?: undefined;
56
56
  ok: boolean;