@agent-native/core 0.121.1 → 0.122.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +145 -0
  3. package/corpus/core/docs/content/actions.mdx +2 -2
  4. package/corpus/core/docs/content/agent-surfaces.mdx +1 -1
  5. package/corpus/core/docs/content/authentication.mdx +2 -0
  6. package/corpus/core/docs/content/deployment.mdx +36 -0
  7. package/corpus/core/docs/content/getting-started.mdx +477 -115
  8. package/corpus/core/docs/content/http-api.mdx +266 -0
  9. package/corpus/core/docs/content/syncing-template-changes.mdx +159 -0
  10. package/corpus/core/package.json +2 -1
  11. package/corpus/core/src/a2a/activity.ts +38 -27
  12. package/corpus/core/src/agent/engine/builder-engine.ts +35 -4
  13. package/corpus/core/src/agent/run-manager.ts +20 -1
  14. package/corpus/core/src/agent/run-store.ts +4 -1
  15. package/corpus/core/src/agent/types.ts +28 -8
  16. package/corpus/core/src/chat-threads/store.ts +45 -0
  17. package/corpus/core/src/checkpoints/index.ts +2 -0
  18. package/corpus/core/src/checkpoints/route-match.ts +13 -0
  19. package/corpus/core/src/cli/create.ts +105 -17
  20. package/corpus/core/src/cli/index.ts +20 -0
  21. package/corpus/core/src/cli/template-baseline.ts +410 -0
  22. package/corpus/core/src/cli/template-sync.ts +1004 -0
  23. package/corpus/core/src/cli/templates-meta.ts +1 -0
  24. package/corpus/core/src/client/AssistantChat.tsx +38 -12
  25. package/corpus/core/src/client/NewWorkspaceAppFlow.tsx +75 -10
  26. package/corpus/core/src/client/chat/message-components.tsx +127 -66
  27. package/corpus/core/src/client/chat/tool-call-display.tsx +29 -5
  28. package/corpus/core/src/client/error-format.ts +18 -0
  29. package/corpus/core/src/client/org/OrgSwitcher.tsx +30 -8
  30. package/corpus/core/src/client/org/TeamPage.tsx +7 -6
  31. package/corpus/core/src/client/sse-event-processor.ts +3 -0
  32. package/corpus/core/src/data-widgets/index.ts +41 -0
  33. package/corpus/core/src/deploy/build.ts +11 -9
  34. package/corpus/core/src/integrations/webhook-handler.ts +63 -9
  35. package/corpus/core/src/org/auto-join-domain.ts +4 -3
  36. package/corpus/core/src/org/context.ts +108 -39
  37. package/corpus/core/src/org/index.ts +5 -0
  38. package/corpus/core/src/org/service-identity.ts +60 -0
  39. package/corpus/core/src/provider-api/index.ts +22 -1
  40. package/corpus/core/src/scripts/docs/search.ts +12 -1
  41. package/corpus/core/src/server/agent-chat/context-tools.ts +9 -4
  42. package/corpus/core/src/server/agent-chat/framework-prompts.ts +38 -66
  43. package/corpus/core/src/server/agent-chat-plugin.ts +17 -10
  44. package/corpus/core/src/server/agents-bundle.ts +84 -5
  45. package/corpus/core/src/server/auth.ts +4 -3
  46. package/corpus/core/src/server/builder-browser.ts +47 -19
  47. package/corpus/core/src/server/core-routes-plugin.ts +2 -2
  48. package/corpus/core/src/server/credential-provider.ts +209 -68
  49. package/corpus/core/src/server/index.ts +3 -0
  50. package/corpus/core/src/server/prompts/framework-core-compact.ts +6 -13
  51. package/corpus/core/src/server/prompts/framework-core.ts +9 -21
  52. package/corpus/core/src/server/prompts/index.ts +0 -1
  53. package/corpus/core/src/server/prompts/shared-rules.ts +19 -11
  54. package/corpus/core/src/server/ssr-handler.ts +13 -2
  55. package/corpus/core/src/settings/user-settings.ts +13 -1
  56. package/corpus/core/src/shared/cache-control.ts +141 -0
  57. package/corpus/core/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  58. package/corpus/core/src/templates/chat/_gitignore +1 -0
  59. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  60. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  61. package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  62. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  63. package/corpus/core/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  64. package/corpus/core/src/vite/agents-bundle-plugin.ts +7 -6
  65. package/corpus/core/src/vite/client.ts +5 -0
  66. package/corpus/templates/analytics/.agents/skills/adhoc-analysis/SKILL.md +4 -5
  67. package/corpus/templates/analytics/.agents/skills/admin-surfaces/SKILL.md +55 -0
  68. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +10 -0
  69. package/corpus/templates/analytics/.agents/skills/dashboard-management/references/template-catalog-and-demo.md +62 -0
  70. package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +85 -0
  71. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +27 -2
  72. package/corpus/templates/analytics/.agents/skills/data-querying/references/inline-chart-embeds.md +139 -0
  73. package/corpus/templates/analytics/.agents/skills/monitoring/SKILL.md +77 -0
  74. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  75. package/corpus/templates/analytics/AGENTS.md +91 -563
  76. package/corpus/templates/analytics/_gitignore +1 -0
  77. package/corpus/templates/analytics/actions/bigquery.ts +12 -4
  78. package/corpus/templates/analytics/actions/generate-chart.ts +5 -5
  79. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +30 -1
  80. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +3 -0
  81. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +1 -1
  82. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +1 -0
  83. package/corpus/templates/analytics/changelog/2026-07-24-analytics-finds-saved-dashboards-and-queries-far-more-reliab.md +6 -0
  84. package/corpus/templates/analytics/changelog/2026-07-24-notion-access-errors-now-explain-that-a-page-needs-sharing-w.md +6 -0
  85. package/corpus/templates/analytics/server/lib/agent-chat-plan-mode.ts +7 -0
  86. package/corpus/templates/analytics/server/lib/analytics-query-catalog.ts +191 -30
  87. package/corpus/templates/analytics/server/lib/bigquery.ts +11 -1
  88. package/corpus/templates/analytics/server/lib/notion.ts +15 -4
  89. package/corpus/templates/analytics/server/plugins/agent-chat.ts +10 -0
  90. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  91. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  92. package/corpus/templates/brain/_gitignore +1 -0
  93. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  94. package/corpus/templates/calendar/_gitignore +1 -0
  95. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  96. package/corpus/templates/chat/_gitignore +1 -0
  97. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  98. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +34 -0
  99. package/corpus/templates/clips/AGENTS.md +5 -4
  100. package/corpus/templates/clips/_gitignore +1 -0
  101. package/corpus/templates/clips/actions/cleanup-transcript.ts +5 -0
  102. package/corpus/templates/clips/actions/get-recording-insights.ts +44 -8
  103. package/corpus/templates/clips/actions/get-recording-player-data.ts +39 -70
  104. package/corpus/templates/clips/actions/list-clip-views.ts +2 -4
  105. package/corpus/templates/clips/actions/list-recordings.ts +69 -19
  106. package/corpus/templates/clips/actions/list-viewers.ts +5 -2
  107. package/corpus/templates/clips/actions/regenerate-summary.ts +5 -1
  108. package/corpus/templates/clips/actions/request-transcript.ts +28 -1
  109. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +21 -1
  110. package/corpus/templates/clips/app/components/meetings/quick-ask-sidebar.tsx +14 -1
  111. package/corpus/templates/clips/app/components/player/insights-panel.tsx +8 -20
  112. package/corpus/templates/clips/app/components/player/recording-views-badge.tsx +335 -0
  113. package/corpus/templates/clips/app/components/player/video-player.tsx +13 -8
  114. package/corpus/templates/clips/app/components/sharing/share-ui.tsx +2 -1
  115. package/corpus/templates/clips/app/i18n/en-US.ts +13 -2
  116. package/corpus/templates/clips/app/lib/capture-permissions.ts +110 -0
  117. package/corpus/templates/clips/app/lib/recording-link.ts +32 -0
  118. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +27 -0
  119. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +46 -15
  120. package/corpus/templates/clips/app/routes/record.tsx +77 -31
  121. package/corpus/templates/clips/app/routes/share.$shareId.tsx +42 -31
  122. package/corpus/templates/clips/changelog/2026-07-24-clip-pages-now-show-a-view-count-with-viewer-avatars-next-to.md +6 -0
  123. package/corpus/templates/clips/changelog/2026-07-24-clip-summaries-read-like-a-description-you-d-write-yourself-.md +6 -0
  124. package/corpus/templates/clips/changelog/2026-07-24-clip-view-counts-now-separate-human-views-from-agent-views-s.md +6 -0
  125. package/corpus/templates/clips/changelog/2026-07-24-clips-actions-can-now-be-called-by-org-service-tokens-so-ext.md +6 -0
  126. package/corpus/templates/clips/changelog/2026-07-24-clips-no-longer-briefly-shows-a-dock-icon-while-launching.md +6 -0
  127. package/corpus/templates/clips/changelog/2026-07-24-fixed-owner-and-editor-share-links-redirecting-to-the-record.md +6 -0
  128. package/corpus/templates/clips/changelog/2026-07-24-meeting-and-note-recordings-now-start-as-a-compact-pill-on-t.md +6 -0
  129. package/corpus/templates/clips/changelog/2026-07-24-new-clips-now-copy-a-shareable-link-instead-of-the-owner-onl.md +6 -0
  130. package/corpus/templates/clips/changelog/2026-07-24-opening-a-share-link-as-the-clip-s-owner-now-goes-straight-t.md +6 -0
  131. package/corpus/templates/clips/changelog/2026-07-24-permissions-and-rewind-controls-now-use-compact-consistent-h.md +6 -0
  132. package/corpus/templates/clips/changelog/2026-07-24-quitting-the-desktop-app-no-longer-shows-a-false-macos-crash.md +6 -0
  133. package/corpus/templates/clips/changelog/2026-07-24-screen-recording-permission-errors-now-name-the-exact-app-to.md +6 -0
  134. package/corpus/templates/clips/changelog/2026-07-24-the-desktop-app-now-copies-a-new-clip-s-share-link-to-your-c.md +6 -0
  135. package/corpus/templates/clips/changelog/2026-07-24-the-recording-toolbar-now-stays-above-other-apps-including-o.md +6 -0
  136. package/corpus/templates/clips/changelog/2026-07-24-transcript-captions-now-use-real-speech-timings-instead-of-a.md +6 -0
  137. package/corpus/templates/clips/changelog/2026-07-24-video-playback-no-longer-stutters-and-replays-the-last-momen.md +6 -0
  138. package/corpus/templates/clips/chrome-extension/src/background.ts +17 -1
  139. package/corpus/templates/clips/desktop/package.json +2 -0
  140. package/corpus/templates/clips/desktop/src/app.tsx +89 -0
  141. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +9 -3
  142. package/corpus/templates/clips/desktop/src/lib/audio-meter.ts +51 -0
  143. package/corpus/templates/clips/desktop/src/lib/native-notification.ts +44 -0
  144. package/corpus/templates/clips/desktop/src/lib/recording-link.ts +67 -0
  145. package/corpus/templates/clips/desktop/src/overlays/live-audio-bars.tsx +35 -35
  146. package/corpus/templates/clips/desktop/src/overlays/live-transcript.tsx +3 -2
  147. package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +47 -46
  148. package/corpus/templates/clips/desktop/src/styles.css +127 -78
  149. package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +7 -0
  150. package/corpus/templates/clips/desktop/src-tauri/Info.plist +6 -0
  151. package/corpus/templates/clips/desktop/src-tauri/capabilities/default.json +1 -0
  152. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +7 -3
  153. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +4 -1
  154. package/corpus/templates/clips/desktop/src-tauri/src/main.rs +8 -0
  155. package/corpus/templates/clips/desktop/src-tauri/src/recording_indicator.rs +21 -10
  156. package/corpus/templates/clips/desktop/src-tauri/src/util.rs +40 -0
  157. package/corpus/templates/clips/server/db/schema.ts +25 -0
  158. package/corpus/templates/clips/server/lib/agent-views.ts +145 -0
  159. package/corpus/templates/clips/server/lib/public-agent-context.ts +7 -0
  160. package/corpus/templates/clips/server/lib/recording-share-grant.ts +79 -0
  161. package/corpus/templates/clips/server/lib/recordings.ts +51 -3
  162. package/corpus/templates/clips/server/plugins/db.ts +23 -0
  163. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +49 -17
  164. package/corpus/templates/clips/shared/recording-link.ts +43 -0
  165. package/corpus/templates/clips/shared/share-attribution.ts +4 -0
  166. package/corpus/templates/clips/shared/share-dashboard-redirect.ts +42 -0
  167. package/corpus/templates/clips/shared/view-analytics.ts +26 -0
  168. package/corpus/templates/content/.agents/skills/content/SKILL.md +5 -0
  169. package/corpus/templates/content/.agents/skills/content/references/local-file-mode.md +135 -0
  170. package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +12 -0
  171. package/corpus/templates/content/.agents/skills/document-editing/references/databases.md +238 -0
  172. package/corpus/templates/content/.agents/skills/document-editing/references/document-behavior.md +91 -0
  173. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  174. package/corpus/templates/content/AGENTS.md +62 -583
  175. package/corpus/templates/content/_gitignore +1 -0
  176. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +11 -0
  177. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +50 -8
  178. package/corpus/templates/design/.agents/skills/design-generation/references/code-layers.md +81 -0
  179. package/corpus/templates/design/.agents/skills/design-generation/references/code-workspace.md +42 -0
  180. package/corpus/templates/design/.agents/skills/design-generation/references/editor-extensions.md +34 -0
  181. package/corpus/templates/design/.agents/skills/responsive-breakpoints/SKILL.md +4 -1
  182. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  183. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +17 -0
  184. package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +8196 -0
  185. package/corpus/templates/design/.generated/bridge/embedded-wheel.generated.ts +265 -0
  186. package/corpus/templates/design/.generated/bridge/hit-test.generated.ts +642 -0
  187. package/corpus/templates/design/.generated/bridge/motion-preview.generated.ts +571 -0
  188. package/corpus/templates/design/.generated/bridge/nav.generated.ts +91 -0
  189. package/corpus/templates/design/.generated/bridge/sample.generated.ts +23 -0
  190. package/corpus/templates/design/.generated/bridge/shader-fill-preview.generated.ts +263 -0
  191. package/corpus/templates/design/.generated/bridge/shader-runtime.generated.ts +518 -0
  192. package/corpus/templates/design/.generated/bridge/tweak.generated.ts +20 -0
  193. package/corpus/templates/design/.generated/bridge/zoom.generated.ts +32 -0
  194. package/corpus/templates/design/AGENTS.md +88 -503
  195. package/corpus/templates/design/_gitignore +1 -0
  196. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  197. package/corpus/templates/dispatch/_gitignore +1 -0
  198. package/corpus/templates/dispatch/changelog/2026-07-24-signing-in-now-puts-you-in-your-companys-workspace.md +6 -0
  199. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  200. package/corpus/templates/forms/_gitignore +1 -0
  201. package/corpus/templates/forms/server/lib/public-form-ssr.ts +2 -2
  202. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  203. package/corpus/templates/macros/_gitignore +1 -0
  204. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  205. package/corpus/templates/mail/_gitignore +1 -0
  206. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  207. package/corpus/templates/plan/_gitignore +1 -0
  208. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  209. package/corpus/templates/slides/_gitignore +1 -0
  210. package/corpus/templates/slides/server/plugins/db.ts +4 -0
  211. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  212. package/corpus/templates/tasks/AGENTS.md +1 -1
  213. package/corpus/templates/tasks/_gitignore +1 -0
  214. package/dist/a2a/activity.d.ts +4 -1
  215. package/dist/a2a/activity.d.ts.map +1 -1
  216. package/dist/a2a/activity.js +27 -16
  217. package/dist/a2a/activity.js.map +1 -1
  218. package/dist/agent/engine/builder-engine.d.ts +1 -0
  219. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  220. package/dist/agent/engine/builder-engine.js +31 -4
  221. package/dist/agent/engine/builder-engine.js.map +1 -1
  222. package/dist/agent/run-manager.d.ts.map +1 -1
  223. package/dist/agent/run-manager.js +18 -1
  224. package/dist/agent/run-manager.js.map +1 -1
  225. package/dist/agent/run-store.d.ts +1 -0
  226. package/dist/agent/run-store.d.ts.map +1 -1
  227. package/dist/agent/run-store.js +2 -1
  228. package/dist/agent/run-store.js.map +1 -1
  229. package/dist/agent/types.d.ts +12 -1
  230. package/dist/agent/types.d.ts.map +1 -1
  231. package/dist/agent/types.js +21 -1
  232. package/dist/agent/types.js.map +1 -1
  233. package/dist/chat-threads/store.d.ts +10 -0
  234. package/dist/chat-threads/store.d.ts.map +1 -1
  235. package/dist/chat-threads/store.js +41 -0
  236. package/dist/chat-threads/store.js.map +1 -1
  237. package/dist/checkpoints/index.d.ts +1 -0
  238. package/dist/checkpoints/index.d.ts.map +1 -1
  239. package/dist/checkpoints/index.js +1 -0
  240. package/dist/checkpoints/index.js.map +1 -1
  241. package/dist/checkpoints/route-match.d.ts +8 -0
  242. package/dist/checkpoints/route-match.d.ts.map +1 -0
  243. package/dist/checkpoints/route-match.js +13 -0
  244. package/dist/checkpoints/route-match.js.map +1 -0
  245. package/dist/cli/create.d.ts +35 -4
  246. package/dist/cli/create.d.ts.map +1 -1
  247. package/dist/cli/create.js +69 -19
  248. package/dist/cli/create.js.map +1 -1
  249. package/dist/cli/index.js +19 -0
  250. package/dist/cli/index.js.map +1 -1
  251. package/dist/cli/template-baseline.d.ts +54 -0
  252. package/dist/cli/template-baseline.d.ts.map +1 -0
  253. package/dist/cli/template-baseline.js +334 -0
  254. package/dist/cli/template-baseline.js.map +1 -0
  255. package/dist/cli/template-sync.d.ts +57 -0
  256. package/dist/cli/template-sync.d.ts.map +1 -0
  257. package/dist/cli/template-sync.js +787 -0
  258. package/dist/cli/template-sync.js.map +1 -0
  259. package/dist/cli/templates-meta.d.ts.map +1 -1
  260. package/dist/cli/templates-meta.js +1 -0
  261. package/dist/cli/templates-meta.js.map +1 -1
  262. package/dist/client/AssistantChat.d.ts +2 -1
  263. package/dist/client/AssistantChat.d.ts.map +1 -1
  264. package/dist/client/AssistantChat.js +38 -10
  265. package/dist/client/AssistantChat.js.map +1 -1
  266. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  267. package/dist/client/NewWorkspaceAppFlow.js +32 -2
  268. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  269. package/dist/client/chat/message-components.d.ts +20 -0
  270. package/dist/client/chat/message-components.d.ts.map +1 -1
  271. package/dist/client/chat/message-components.js +81 -46
  272. package/dist/client/chat/message-components.js.map +1 -1
  273. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  274. package/dist/client/chat/tool-call-display.js +14 -6
  275. package/dist/client/chat/tool-call-display.js.map +1 -1
  276. package/dist/client/error-format.d.ts.map +1 -1
  277. package/dist/client/error-format.js +13 -0
  278. package/dist/client/error-format.js.map +1 -1
  279. package/dist/client/org/OrgSwitcher.d.ts +8 -1
  280. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  281. package/dist/client/org/OrgSwitcher.js +3 -2
  282. package/dist/client/org/OrgSwitcher.js.map +1 -1
  283. package/dist/client/org/TeamPage.d.ts.map +1 -1
  284. package/dist/client/org/TeamPage.js +1 -1
  285. package/dist/client/org/TeamPage.js.map +1 -1
  286. package/dist/client/sse-event-processor.d.ts.map +1 -1
  287. package/dist/client/sse-event-processor.js +3 -0
  288. package/dist/client/sse-event-processor.js.map +1 -1
  289. package/dist/collab/awareness.d.ts +2 -2
  290. package/dist/collab/awareness.d.ts.map +1 -1
  291. package/dist/data-widgets/index.d.ts +3 -0
  292. package/dist/data-widgets/index.d.ts.map +1 -1
  293. package/dist/data-widgets/index.js +33 -0
  294. package/dist/data-widgets/index.js.map +1 -1
  295. package/dist/deploy/build.d.ts.map +1 -1
  296. package/dist/deploy/build.js +11 -7
  297. package/dist/deploy/build.js.map +1 -1
  298. package/dist/eject/provider-api-definitions.d.ts +1 -0
  299. package/dist/eject/provider-api-definitions.d.ts.map +1 -1
  300. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  301. package/dist/integrations/webhook-handler.js +46 -9
  302. package/dist/integrations/webhook-handler.js.map +1 -1
  303. package/dist/notifications/routes.d.ts +3 -3
  304. package/dist/observability/routes.d.ts +3 -3
  305. package/dist/org/auto-join-domain.d.ts +3 -2
  306. package/dist/org/auto-join-domain.d.ts.map +1 -1
  307. package/dist/org/auto-join-domain.js +1 -1
  308. package/dist/org/auto-join-domain.js.map +1 -1
  309. package/dist/org/context.d.ts.map +1 -1
  310. package/dist/org/context.js +84 -28
  311. package/dist/org/context.js.map +1 -1
  312. package/dist/org/index.d.ts +1 -0
  313. package/dist/org/index.d.ts.map +1 -1
  314. package/dist/org/index.js +1 -0
  315. package/dist/org/index.js.map +1 -1
  316. package/dist/org/service-identity.d.ts +43 -0
  317. package/dist/org/service-identity.d.ts.map +1 -0
  318. package/dist/org/service-identity.js +34 -0
  319. package/dist/org/service-identity.js.map +1 -0
  320. package/dist/provider-api/actions/custom-provider-registration.d.ts +14 -14
  321. package/dist/provider-api/actions/provider-api.d.ts +13 -11
  322. package/dist/provider-api/actions/provider-api.d.ts.map +1 -1
  323. package/dist/provider-api/index.d.ts +4 -0
  324. package/dist/provider-api/index.d.ts.map +1 -1
  325. package/dist/provider-api/index.js +17 -1
  326. package/dist/provider-api/index.js.map +1 -1
  327. package/dist/resources/handlers.d.ts +1 -1
  328. package/dist/scripts/docs/search.d.ts.map +1 -1
  329. package/dist/scripts/docs/search.js +12 -1
  330. package/dist/scripts/docs/search.js.map +1 -1
  331. package/dist/server/agent-chat/context-tools.d.ts.map +1 -1
  332. package/dist/server/agent-chat/context-tools.js +3 -3
  333. package/dist/server/agent-chat/context-tools.js.map +1 -1
  334. package/dist/server/agent-chat/framework-prompts.d.ts +8 -3
  335. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  336. package/dist/server/agent-chat/framework-prompts.js +33 -62
  337. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  338. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  339. package/dist/server/agent-chat-plugin.js +16 -10
  340. package/dist/server/agent-chat-plugin.js.map +1 -1
  341. package/dist/server/agents-bundle.d.ts +18 -0
  342. package/dist/server/agents-bundle.d.ts.map +1 -1
  343. package/dist/server/agents-bundle.js +70 -4
  344. package/dist/server/agents-bundle.js.map +1 -1
  345. package/dist/server/auth.d.ts.map +1 -1
  346. package/dist/server/auth.js +4 -3
  347. package/dist/server/auth.js.map +1 -1
  348. package/dist/server/builder-browser.d.ts.map +1 -1
  349. package/dist/server/builder-browser.js +43 -19
  350. package/dist/server/builder-browser.js.map +1 -1
  351. package/dist/server/core-routes-plugin.js +2 -2
  352. package/dist/server/core-routes-plugin.js.map +1 -1
  353. package/dist/server/credential-provider.d.ts +38 -2
  354. package/dist/server/credential-provider.d.ts.map +1 -1
  355. package/dist/server/credential-provider.js +142 -64
  356. package/dist/server/credential-provider.js.map +1 -1
  357. package/dist/server/index.d.ts +1 -1
  358. package/dist/server/index.d.ts.map +1 -1
  359. package/dist/server/index.js +1 -1
  360. package/dist/server/index.js.map +1 -1
  361. package/dist/server/prompts/framework-core-compact.d.ts +1 -1
  362. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
  363. package/dist/server/prompts/framework-core-compact.js +7 -13
  364. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  365. package/dist/server/prompts/framework-core.d.ts +1 -1
  366. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  367. package/dist/server/prompts/framework-core.js +10 -21
  368. package/dist/server/prompts/framework-core.js.map +1 -1
  369. package/dist/server/prompts/index.d.ts +1 -1
  370. package/dist/server/prompts/index.d.ts.map +1 -1
  371. package/dist/server/prompts/index.js +1 -1
  372. package/dist/server/prompts/index.js.map +1 -1
  373. package/dist/server/prompts/shared-rules.d.ts +16 -10
  374. package/dist/server/prompts/shared-rules.d.ts.map +1 -1
  375. package/dist/server/prompts/shared-rules.js +19 -10
  376. package/dist/server/prompts/shared-rules.js.map +1 -1
  377. package/dist/server/ssr-handler.d.ts +1 -1
  378. package/dist/server/ssr-handler.d.ts.map +1 -1
  379. package/dist/server/ssr-handler.js +10 -3
  380. package/dist/server/ssr-handler.js.map +1 -1
  381. package/dist/server/transcribe-voice.d.ts +1 -1
  382. package/dist/settings/user-settings.d.ts.map +1 -1
  383. package/dist/settings/user-settings.js +13 -1
  384. package/dist/settings/user-settings.js.map +1 -1
  385. package/dist/shared/cache-control.d.ts +52 -0
  386. package/dist/shared/cache-control.d.ts.map +1 -1
  387. package/dist/shared/cache-control.js +107 -0
  388. package/dist/shared/cache-control.js.map +1 -1
  389. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  390. package/dist/templates/chat/_gitignore +1 -0
  391. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  392. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  393. package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  394. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  395. package/dist/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  396. package/dist/vite/agents-bundle-plugin.d.ts.map +1 -1
  397. package/dist/vite/agents-bundle-plugin.js +8 -7
  398. package/dist/vite/agents-bundle-plugin.js.map +1 -1
  399. package/dist/vite/client.d.ts.map +1 -1
  400. package/dist/vite/client.js +2 -0
  401. package/dist/vite/client.js.map +1 -1
  402. package/docs/content/actions.mdx +2 -2
  403. package/docs/content/agent-surfaces.mdx +1 -1
  404. package/docs/content/authentication.mdx +2 -0
  405. package/docs/content/deployment.mdx +36 -0
  406. package/docs/content/getting-started.mdx +477 -115
  407. package/docs/content/http-api.mdx +266 -0
  408. package/docs/content/syncing-template-changes.mdx +159 -0
  409. package/package.json +4 -3
  410. package/src/a2a/activity.ts +38 -27
  411. package/src/agent/engine/builder-engine.ts +35 -4
  412. package/src/agent/run-manager.ts +20 -1
  413. package/src/agent/run-store.ts +4 -1
  414. package/src/agent/types.ts +28 -8
  415. package/src/chat-threads/store.ts +45 -0
  416. package/src/checkpoints/index.ts +2 -0
  417. package/src/checkpoints/route-match.ts +13 -0
  418. package/src/cli/create.ts +105 -17
  419. package/src/cli/index.ts +20 -0
  420. package/src/cli/template-baseline.ts +410 -0
  421. package/src/cli/template-sync.ts +1004 -0
  422. package/src/cli/templates-meta.ts +1 -0
  423. package/src/client/AssistantChat.tsx +38 -12
  424. package/src/client/NewWorkspaceAppFlow.tsx +75 -10
  425. package/src/client/chat/message-components.tsx +127 -66
  426. package/src/client/chat/tool-call-display.tsx +29 -5
  427. package/src/client/error-format.ts +18 -0
  428. package/src/client/org/OrgSwitcher.tsx +30 -8
  429. package/src/client/org/TeamPage.tsx +7 -6
  430. package/src/client/sse-event-processor.ts +3 -0
  431. package/src/data-widgets/index.ts +41 -0
  432. package/src/deploy/build.ts +11 -9
  433. package/src/integrations/webhook-handler.ts +63 -9
  434. package/src/org/auto-join-domain.ts +4 -3
  435. package/src/org/context.ts +108 -39
  436. package/src/org/index.ts +5 -0
  437. package/src/org/service-identity.ts +60 -0
  438. package/src/provider-api/index.ts +22 -1
  439. package/src/scripts/docs/search.ts +12 -1
  440. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +25 -36
  441. package/src/server/agent-chat/context-tools.ts +9 -4
  442. package/src/server/agent-chat/framework-prompts.ts +38 -66
  443. package/src/server/agent-chat-plugin.ts +17 -10
  444. package/src/server/agents-bundle.ts +84 -5
  445. package/src/server/auth.ts +4 -3
  446. package/src/server/builder-browser.ts +47 -19
  447. package/src/server/core-routes-plugin.ts +2 -2
  448. package/src/server/credential-provider.ts +209 -68
  449. package/src/server/index.ts +3 -0
  450. package/src/server/prompts/framework-core-compact.ts +6 -13
  451. package/src/server/prompts/framework-core.ts +9 -21
  452. package/src/server/prompts/index.ts +0 -1
  453. package/src/server/prompts/shared-rules.ts +19 -11
  454. package/src/server/ssr-handler.ts +13 -2
  455. package/src/settings/user-settings.ts +13 -1
  456. package/src/shared/cache-control.ts +141 -0
  457. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  458. package/src/templates/chat/_gitignore +1 -0
  459. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  460. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  461. package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +19 -0
  462. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +24 -2
  463. package/src/templates/workspace-core/.agents/skills/visual-answer/SKILL.md +1 -0
  464. package/src/vite/agents-bundle-plugin.ts +7 -6
  465. package/src/vite/client.ts +5 -0
@@ -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 { A2AAgentActivitySnapshot } from \"../a2a/activity.js\";\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 /**\n * Model chain-of-thought / extended-thinking prose. Streamed from\n * server `thinking` SSE events (and code-agent thinking transcript\n * items). Rendered as a collapsible plain-English cell — not a tool\n * call.\n */\n type: \"reasoning\";\n text: string;\n }\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 state?: string;\n elapsedSeconds?: number;\n detail?: string;\n agentCallId?: string;\n durationMs?: number;\n snapshot?: A2AAgentActivitySnapshot;\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 AgentCallProgress {\n state: string;\n elapsedSeconds: number;\n detail?: string;\n}\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\n/**\n * Maximum number of assistant-ui repository updates we deliver in one browser\n * event-loop turn. Durable-run replay can put hundreds of SSE frames into the\n * stream queue before the client attaches; draining all of them through\n * assistant-ui without a macrotask boundary synchronously nests React external\n * store notifications until React throws \"Maximum update depth exceeded.\"\n *\n * A timer scheduled on the first result resets the count when the stream is\n * naturally idle between network chunks. We only await it when results are\n * arriving densely enough to hit this bound, so normal live token streaming\n * keeps its existing latency while replay bursts yield cooperatively.\n */\nconst SSE_RENDER_UPDATES_PER_EVENT_LOOP_TURN = 20;\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 part.isError = true;\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/**\n * Widened client watchdog windows for durable background runs. The SERVER is\n * the recovery brain for these runs: its run-manager no-progress backstop\n * emits `auto_continue` over the same stream the client is already reading,\n * and its unclaimed-run sweep reaps dead workers into loud terminal errors.\n * The client watchdogs therefore sit ABOVE the server's durable-background\n * backstop so a healthy background run never trips them — the server's own\n * recovery event arrives first over the wire. When one does fire, the thrown\n * signal only means \"reattach the read\" (the adapter's background follow loop\n * re-polls /runs/active); it never escalates to a client-declared error or a\n * synthetic continuation POST. Progress ACCOUNTING (what counts as a\n * meaningful event) is unchanged — only the client-initiated recovery timing\n * is relaxed.\n */\nexport const SSE_DURABLE_NO_PROGRESS_TIMEOUT_MS = 13 * 60_000;\nexport const SSE_DURABLE_ACTION_PREPARATION_STALL_TIMEOUT_MS = 13 * 60_000;\n\nexport function sseNoProgressTimeoutMs(options?: SSEStreamOptions): number {\n return options?.durableBackgroundRun === true\n ? SSE_DURABLE_NO_PROGRESS_TIMEOUT_MS\n : SSE_NO_PROGRESS_TIMEOUT_MS;\n}\n\nfunction sseActionPreparationStallTimeoutMs(\n options?: SSEStreamOptions,\n): number {\n return options?.durableBackgroundRun === true\n ? SSE_DURABLE_ACTION_PREPARATION_STALL_TIMEOUT_MS\n : SSE_ACTION_PREPARATION_STALL_TIMEOUT_MS;\n}\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 — just on the wider\n * durable windows above (behind the server's own 150s backstop) instead of\n * the tight foreground 75s/90s windows.\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 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}...`;\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 const exactIndex = findPendingToolCallIndexById(content, toolCallId);\n if (exactIndex >= 0) return exactIndex;\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 findPendingToolCallIndexById(\n content: ContentPart[],\n toolCallId: string,\n): number {\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 findOldestPendingActivityToolCallIndex(\n content: ContentPart[],\n toolName: string,\n): number {\n for (let i = 0; i < content.length; i += 1) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === toolName &&\n part.activity === true &&\n part.result === undefined\n ) {\n return i;\n }\n }\n return -1;\n}\n\nfunction findPendingActivityToolCallIndex(\n content: ContentPart[],\n toolName: string,\n toolCallId?: string,\n): number {\n if (!toolCallId) {\n return findPendingToolCallIndex(content, toolName);\n }\n\n // Activity events emitted while the model is assembling tool input already\n // carry the engine's stable call id. Match that id exactly so repeated\n // progress for one call updates one placeholder while parallel same-name\n // calls retain separate cards.\n const exactIndex = findPendingToolCallIndexById(content, toolCallId);\n if (exactIndex >= 0) return exactIndex;\n\n // Older activity events may omit the id before a later progress event adds\n // it. Upgrade one unambiguous reader-local placeholder instead of painting a\n // second card for the same logical call.\n const readerLocalCandidates: number[] = [];\n for (let i = 0; i < content.length; i += 1) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === toolName &&\n part.activity === true &&\n part.result === undefined &&\n /^tc_\\d+$/.test(part.toolCallId)\n ) {\n readerLocalCandidates.push(i);\n }\n }\n return readerLocalCandidates.length === 1 ? readerLocalCandidates[0] : -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(\n state: PreparingActionState,\n now: number,\n stallTimeoutMs: number,\n) {\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 // Durable background reads pass the wider durable window so the server's\n // own 150s no-progress backstop gets first chance to recover the stall.\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) >= stallTimeoutMs\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function readChunkWithProgressTimeout(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n lastMeaningfulEventAt: number,\n noProgressTimeoutMs: number,\n): Promise<ReadableStreamReadResult<Uint8Array>> {\n const elapsed = Date.now() - lastMeaningfulEventAt;\n const timeoutMs = Math.max(0, noProgressTimeoutMs - 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 === \"provider_network_error\" ||\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\n// Fires once per chunk (see ProcessEventState.streamProgressDispatched) the\n// moment a chunk produces real model output (visible text or a reasoning\n// delta). Unlike `agent-chat:activity-clear` — which also fires for\n// old-chunk `tool_done` replays and server-retry `clear` events, and so\n// cannot be used to detect genuine forward progress — this event exists\n// solely so listeners can distinguish \"the run is actually producing new\n// output\" from those replay/retry cases.\nfunction dispatchStreamProgress(tabId: string | undefined) {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:stream-progress\", {\n detail: { tabId },\n }),\n );\n}\n\nfunction dispatchMissingApiKey(tabId: string | undefined) {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:missing-api-key\", {\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\" || part.type === \"reasoning\") 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\n/**\n * Result prefixes the server emits when a tool_start/tool_done pair is a\n * REPLAY of a call that already executed in an earlier interrupted chunk of\n * this turn (tool-call journal hard-block and zombie-ledger recovery in\n * production-agent.ts). These are not new calls — rendering them as separate\n * cards produces the \"same tool twice, one spinning / one done\" duplicate.\n */\nconst JOURNAL_RECOVERY_RESULT_PREFIXES = [\n \"(Already completed in an earlier interrupted attempt\",\n \"(Recovered from prior interrupted chunk\",\n] as const;\n\nfunction isJournalRecoveryResult(result: unknown): boolean {\n return (\n typeof result === \"string\" &&\n JOURNAL_RECOVERY_RESULT_PREFIXES.some((prefix) => result.startsWith(prefix))\n );\n}\n\n/**\n * Merge a journal/ledger-recovered tool_done into the earlier card for the\n * same logical call instead of leaving a duplicate pair. Two shapes occur:\n *\n * 1. The original card already completed (reconnect/continuation replay): the\n * recovery card at `completedIndex` is redundant — drop it, keeping the\n * original result.\n * 2. The recovery result attached to the ORIGINAL still-pending card (the\n * id-less replay tool_done name-matches the earliest pending card): the\n * replay's own tool_start pushed a second pending card AFTER it that no\n * tool_done will ever resolve — remove that stuck-spinner artifact.\n *\n * Gated strictly on the recovery result markers so genuinely repeated\n * identical calls are never collapsed. Returns true when it spliced the card\n * at `completedIndex` (callers must not reuse the index afterwards).\n */\nfunction coalesceJournalRecoveredTool(\n content: ContentPart[],\n completedIndex: number,\n): boolean {\n const current = content[completedIndex];\n if (!current || current.type !== \"tool-call\") return false;\n if (!isJournalRecoveryResult(current.result)) return false;\n const matchesCurrentCall = (\n part: ContentPart,\n ): part is Extract<ContentPart, { type: \"tool-call\" }> =>\n part.type === \"tool-call\" &&\n part.activity !== true &&\n part.toolName === current.toolName &&\n part.argsText === current.argsText;\n\n for (let i = completedIndex - 1; i >= 0; i--) {\n const prior = content[i];\n if (!matchesCurrentCall(prior)) continue;\n if (prior.result === undefined) {\n // The original was interrupted mid-flight (spinner) — resolve it with\n // the recovered result instead of showing a second card.\n prior.result = current.result;\n if (current.isError !== undefined) prior.isError = current.isError;\n if (current.completedSideEffect !== undefined) {\n prior.completedSideEffect = current.completedSideEffect;\n }\n if (current.mcpApp) prior.mcpApp = current.mcpApp;\n if (current.chatUI) prior.chatUI = current.chatUI;\n }\n content.splice(completedIndex, 1);\n return true;\n }\n\n // No earlier card — the recovery result landed on the original pending card\n // itself. Remove any later still-pending replay-start artifact for the same\n // call so it doesn't spin forever.\n for (let i = content.length - 1; i > completedIndex; i--) {\n const later = content[i];\n if (\n later.type === \"tool-call\" &&\n matchesCurrentCall(later) &&\n later.result === undefined\n ) {\n content.splice(i, 1);\n }\n }\n return false;\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\nfunction hasCompletedCustomUi(content: ContentPart[]): boolean {\n const lastTextIndex = lastAssistantTextIndex(content);\n let lastCompletedToolIsCustomUi = false;\n let hasCompletedTool = false;\n for (let index = lastTextIndex + 1; index < content.length; index++) {\n const part = content[index];\n if (\n part?.type !== \"tool-call\" ||\n part.activity === true ||\n part.result === undefined ||\n part.isError === true\n ) {\n continue;\n }\n hasCompletedTool = true;\n lastCompletedToolIsCustomUi =\n part.chatUI !== undefined || part.mcpApp !== undefined;\n }\n return hasCompletedTool && lastCompletedToolIsCustomUi;\n}\n\nexport function appendMissingFinalResponseWarning(\n content: ContentPart[],\n completedToolNames?: Iterable<string>,\n): { message: string; errorCode: string; recoverable: true } | null {\n const lastTextIndex = lastAssistantTextIndex(content);\n const successfulToolNames = [\n ...new Set(\n completedToolNames ?? completedToolNamesAfterLastAssistantText(content),\n ),\n ];\n let lastToolIndex = -1;\n const materializedToolNames = new Set<string>();\n for (let index = lastTextIndex + 1; index < content.length; index++) {\n const part = content[index];\n if (\n part.type === \"tool-call\" &&\n part.activity !== true &&\n part.result !== undefined\n ) {\n lastToolIndex = index;\n materializedToolNames.add(part.toolName);\n }\n }\n if (hasCompletedCustomUi(content)) return null;\n if (successfulToolNames.length === 0 && lastTextIndex > lastToolIndex) {\n return null;\n }\n const completedToolMessage = completedToolOnlyMessage(successfulToolNames);\n const message = completedToolMessage\n ? completedToolMessage\n : materializedToolNames.size > 0\n ? `The agent stopped after ${formatToolNames([...materializedToolNames])} without sending a final message. Review the tool card above or ask the agent to continue.`\n : \"The agent stopped without sending a final message. Ask the agent to continue or retry.\";\n if (!content.some((part) => part.type === \"text\" && part.text === message)) {\n content.push({ type: \"text\", text: message });\n }\n return {\n message,\n errorCode:\n successfulToolNames.length > 0 || materializedToolNames.size > 0\n ? \"final_response_missing_after_tool\"\n : \"final_response_missing\",\n recoverable: true,\n };\n}\n\ninterface ProcessEventState {\n completedToolsAfterLastAssistantText: Set<string>;\n /** Set once `agent-chat:stream-progress` has been dispatched for the\n * current chunk, so a burst of per-token text/reasoning deltas only fires\n * it once. Cleared by `resetProcessEventState` on a server `clear` retry\n * so the next batch of real output re-arms it. */\n streamProgressDispatched: boolean;\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 if (state) state.streamProgressDispatched = false;\n}\n\n// Returns true the first time it's called for a given state (or every time\n// when state is unavailable, since there is nothing to dedupe against) and\n// false on subsequent calls until `resetProcessEventState` re-arms it.\nfunction shouldDispatchStreamProgress(\n state: ProcessEventState | undefined,\n): boolean {\n if (state?.streamProgressDispatched) return false;\n if (state) state.streamProgressDispatched = true;\n return true;\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) {\n dispatchActivityClear(tabId);\n // Real output resumed — let listeners (e.g. the auto-resume \"Resuming…\"\n // indicator) clear state that must NOT be cleared by activity-clear\n // alone, since activity-clear also fires for old-chunk/retry replays.\n if (shouldDispatchStreamProgress(state)) dispatchStreamProgress(tabId);\n }\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 === \"thinking\" || ev.type === \"reasoning\") {\n // Model chain-of-thought. Coalesce consecutive deltas into one reasoning\n // part so the UI can render a single collapsible \"Thinking\" cell.\n const delta = ev.text ?? \"\";\n if (!delta) return { action: \"continue\" };\n if (shouldDispatchStreamProgress(state)) dispatchStreamProgress(tabId);\n const lastPart = content[content.length - 1];\n if (lastPart && lastPart.type === \"reasoning\") {\n lastPart.text += delta;\n } else {\n content.push({ type: \"reasoning\", text: delta });\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 = findPendingActivityToolCallIndex(\n content,\n tool,\n ev.id,\n );\n if (pendingToolCallIndex >= 0 && ev.id) {\n const pending = content[pendingToolCallIndex];\n if (pending?.type === \"tool-call\" && pending.toolCallId !== ev.id) {\n content[pendingToolCallIndex] = { ...pending, toolCallId: ev.id };\n }\n }\n if (pendingToolCallIndex === -1) {\n // Only surface a placeholder spinner when this tool has no card yet. A\n // trailing activity heartbeat that arrives after the matching tool_done\n // (e.g. reordered reconnect replay) must NOT resurrect a spinner for an\n // already-completed call — that is the \"pop back to an older state\"\n // flicker. The real card reappears on the next tool_start regardless.\n const hasCompletedSameTool = content.some(\n (part) =>\n part.type === \"tool-call\" &&\n part.toolName === tool &&\n part.result !== undefined &&\n (!ev.id || part.toolCallId === ev.id),\n );\n if (!hasCompletedSameTool) {\n content.push({\n type: \"tool-call\",\n toolCallId: ev.id ?? `tc_${++toolCallCounter.value}`,\n toolName: tool,\n argsText: \"\",\n args: {},\n activity: true,\n });\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 = ev.id\n ? findPendingActivityToolCallIndex(content, tool, ev.id)\n : findOldestPendingActivityToolCallIndex(content, tool);\n const pendingToolCall =\n pendingToolCallIndex >= 0 ? content[pendingToolCallIndex] : undefined;\n const pendingIsActivityPlaceholder =\n pendingToolCall?.type === \"tool-call\" &&\n pendingToolCall.activity === true &&\n pendingToolCall.argsText === \"\" &&\n Object.keys(pendingToolCall.args).length === 0;\n // A re-emitted start for the SAME id — a retry/auto-continue clear that\n // keeps the in-flight card mounted, or a reconnect replay — must update the\n // existing card in place instead of pushing a duplicate. Matching on id\n // keeps genuinely parallel same-name calls, which carry distinct ids,\n // separate.\n const pendingIsSameIdReplay =\n pendingToolCall?.type === \"tool-call\" &&\n ev.id !== undefined &&\n pendingToolCall.toolCallId === ev.id;\n if (\n pendingToolCall &&\n pendingToolCall.type === \"tool-call\" &&\n (pendingIsActivityPlaceholder || pendingIsSameIdReplay)\n ) {\n // Upgrade the pending card in place. Prefer the server-assigned id so the\n // subsequent tool_done can match it precisely (parallel same-name calls\n // each carry their own id). Fall back to the locally-generated id.\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 // Journal/ledger replay merge first (may splice the card at doneIdx —\n // when it does, the adjacent-repeat coalesce below must not run on the\n // stale index).\n if (!coalesceJournalRecoveredTool(content, doneIdx)) {\n coalesceCompletedToolRepeat(content, doneIdx);\n }\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 = ev.agentCallId ?? `tc_${++toolCallCounter.value}`;\n content.push({\n type: \"tool-call\",\n toolCallId,\n toolName: `agent:${agentName}`,\n argsText: \"\",\n args: {},\n activity: true,\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 (!ev.agentCallId || part.toolCallId === ev.agentCallId) &&\n part.result === undefined\n ) {\n part.result = ev.status === \"error\" ? \"Error calling agent\" : \"Done\";\n part.structuredMeta = {\n ...part.structuredMeta,\n ...(ev.durationMs != null\n ? { agentDurationMs: ev.durationMs }\n : {}),\n };\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 (!ev.agentCallId || part.toolCallId === ev.agentCallId) &&\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 if (ev.type === \"agent_call_progress\") {\n const agentName = ev.agent ?? \"agent\";\n if (typeof ev.state !== \"string\") {\n return { action: \"continue\" };\n }\n const elapsedSeconds =\n typeof ev.elapsedSeconds === \"number\" &&\n Number.isFinite(ev.elapsedSeconds) &&\n ev.elapsedSeconds >= 0\n ? ev.elapsedSeconds\n : 0;\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 (!ev.agentCallId || part.toolCallId === ev.agentCallId) &&\n part.result === undefined\n ) {\n part.structuredMeta = {\n ...part.structuredMeta,\n agentProgress: {\n state: ev.state,\n elapsedSeconds,\n ...(ev.detail ? { detail: ev.detail } : {}),\n } satisfies AgentCallProgress,\n };\n break;\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"agent_call_activity\" && ev.snapshot) {\n const agentName = ev.agent ?? \"agent\";\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 (!ev.agentCallId || part.toolCallId === ev.agentCallId)\n ) {\n const previous = part.structuredMeta?.agentActivity as\n | A2AAgentActivitySnapshot\n | undefined;\n if (!previous || ev.snapshot.sequence >= previous.sequence) {\n part.structuredMeta = {\n ...part.structuredMeta,\n agentActivity: ev.snapshot,\n };\n }\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 dispatchMissingApiKey(tabId);\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 dispatchMissingApiKey(tabId);\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 runWarning = appendMissingFinalResponseWarning(\n content,\n state ? state.completedToolsAfterLastAssistantText : undefined,\n );\n if (runWarning) {\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 },\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\" || part.type === \"reasoning\") {\n content.splice(index, 1);\n continue;\n }\n if (part.type === \"tool-call\" && part.result === undefined) {\n // Only drop ephemeral placeholders. Materialized in-flight tool cards\n // (real args from tool_start) stay mounted so a retry/auto-continue clear\n // does not hide→show the same call when the next chunk re-emits it.\n const isEphemeral =\n part.activity === true ||\n part.argsText === \"\" ||\n Object.keys(part.args ?? {}).length === 0;\n if (isEphemeral) 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 noProgressTimeoutMs = sseNoProgressTimeoutMs(options);\n const preparationStallTimeoutMs = sseActionPreparationStallTimeoutMs(options);\n const activityTrail: ActivityTrailEntry[] = [];\n const preparingActionState: PreparingActionState =\n options?.preparingActionState ?? {};\n const processEventState: ProcessEventState = {\n completedToolsAfterLastAssistantText: new Set(),\n streamProgressDispatched: false,\n };\n let renderUpdatesThisTurn = 0;\n let nextEventLoopTurn: Promise<void> | null = null;\n\n const paceRenderUpdate = async (): Promise<void> => {\n renderUpdatesThisTurn += 1;\n if (!nextEventLoopTurn) {\n nextEventLoopTurn = new Promise<void>((resolve) => {\n setTimeout(() => {\n renderUpdatesThisTurn = 0;\n nextEventLoopTurn = null;\n resolve();\n }, 0);\n });\n }\n if (renderUpdatesThisTurn >= SSE_RENDER_UPDATES_PER_EVENT_LOOP_TURN) {\n await nextEventLoopTurn;\n }\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 noProgressTimeoutMs,\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) {\n await paceRenderUpdate();\n yield withStreamMetadata(result);\n }\n if (\n hasStalledPreparingAction(\n preparingActionState,\n Date.now(),\n preparationStallTimeoutMs,\n )\n ) {\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 >= noProgressTimeoutMs\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 noProgressTimeoutMs = sseNoProgressTimeoutMs(options);\n const preparationStallTimeoutMs = sseActionPreparationStallTimeoutMs(options);\n const activityTrail: ActivityTrailEntry[] = [];\n const preparingActionState: PreparingActionState =\n options?.preparingActionState ?? {};\n const processEventState: ProcessEventState = {\n completedToolsAfterLastAssistantText: new Set(),\n streamProgressDispatched: false,\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 noProgressTimeoutMs,\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 (\n hasStalledPreparingAction(\n preparingActionState,\n Date.now(),\n preparationStallTimeoutMs,\n )\n ) {\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 >= noProgressTimeoutMs\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 { A2AAgentActivitySnapshot } from \"../a2a/activity.js\";\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 /**\n * Model chain-of-thought / extended-thinking prose. Streamed from\n * server `thinking` SSE events (and code-agent thinking transcript\n * items). Rendered as a collapsible plain-English cell — not a tool\n * call.\n */\n type: \"reasoning\";\n text: string;\n }\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 state?: string;\n elapsedSeconds?: number;\n detail?: string;\n agentCallId?: string;\n durationMs?: number;\n snapshot?: A2AAgentActivitySnapshot;\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 AgentCallProgress {\n state: string;\n elapsedSeconds: number;\n detail?: string;\n}\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\n/**\n * Maximum number of assistant-ui repository updates we deliver in one browser\n * event-loop turn. Durable-run replay can put hundreds of SSE frames into the\n * stream queue before the client attaches; draining all of them through\n * assistant-ui without a macrotask boundary synchronously nests React external\n * store notifications until React throws \"Maximum update depth exceeded.\"\n *\n * A timer scheduled on the first result resets the count when the stream is\n * naturally idle between network chunks. We only await it when results are\n * arriving densely enough to hit this bound, so normal live token streaming\n * keeps its existing latency while replay bursts yield cooperatively.\n */\nconst SSE_RENDER_UPDATES_PER_EVENT_LOOP_TURN = 20;\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 part.isError = true;\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/**\n * Widened client watchdog windows for durable background runs. The SERVER is\n * the recovery brain for these runs: its run-manager no-progress backstop\n * emits `auto_continue` over the same stream the client is already reading,\n * and its unclaimed-run sweep reaps dead workers into loud terminal errors.\n * The client watchdogs therefore sit ABOVE the server's durable-background\n * backstop so a healthy background run never trips them — the server's own\n * recovery event arrives first over the wire. When one does fire, the thrown\n * signal only means \"reattach the read\" (the adapter's background follow loop\n * re-polls /runs/active); it never escalates to a client-declared error or a\n * synthetic continuation POST. Progress ACCOUNTING (what counts as a\n * meaningful event) is unchanged — only the client-initiated recovery timing\n * is relaxed.\n */\nexport const SSE_DURABLE_NO_PROGRESS_TIMEOUT_MS = 13 * 60_000;\nexport const SSE_DURABLE_ACTION_PREPARATION_STALL_TIMEOUT_MS = 13 * 60_000;\n\nexport function sseNoProgressTimeoutMs(options?: SSEStreamOptions): number {\n return options?.durableBackgroundRun === true\n ? SSE_DURABLE_NO_PROGRESS_TIMEOUT_MS\n : SSE_NO_PROGRESS_TIMEOUT_MS;\n}\n\nfunction sseActionPreparationStallTimeoutMs(\n options?: SSEStreamOptions,\n): number {\n return options?.durableBackgroundRun === true\n ? SSE_DURABLE_ACTION_PREPARATION_STALL_TIMEOUT_MS\n : SSE_ACTION_PREPARATION_STALL_TIMEOUT_MS;\n}\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 — just on the wider\n * durable windows above (behind the server's own 150s backstop) instead of\n * the tight foreground 75s/90s windows.\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 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}...`;\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 const exactIndex = findPendingToolCallIndexById(content, toolCallId);\n if (exactIndex >= 0) return exactIndex;\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 findPendingToolCallIndexById(\n content: ContentPart[],\n toolCallId: string,\n): number {\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 findOldestPendingActivityToolCallIndex(\n content: ContentPart[],\n toolName: string,\n): number {\n for (let i = 0; i < content.length; i += 1) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === toolName &&\n part.activity === true &&\n part.result === undefined\n ) {\n return i;\n }\n }\n return -1;\n}\n\nfunction findPendingActivityToolCallIndex(\n content: ContentPart[],\n toolName: string,\n toolCallId?: string,\n): number {\n if (!toolCallId) {\n return findPendingToolCallIndex(content, toolName);\n }\n\n // Activity events emitted while the model is assembling tool input already\n // carry the engine's stable call id. Match that id exactly so repeated\n // progress for one call updates one placeholder while parallel same-name\n // calls retain separate cards.\n const exactIndex = findPendingToolCallIndexById(content, toolCallId);\n if (exactIndex >= 0) return exactIndex;\n\n // Older activity events may omit the id before a later progress event adds\n // it. Upgrade one unambiguous reader-local placeholder instead of painting a\n // second card for the same logical call.\n const readerLocalCandidates: number[] = [];\n for (let i = 0; i < content.length; i += 1) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === toolName &&\n part.activity === true &&\n part.result === undefined &&\n /^tc_\\d+$/.test(part.toolCallId)\n ) {\n readerLocalCandidates.push(i);\n }\n }\n return readerLocalCandidates.length === 1 ? readerLocalCandidates[0] : -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(\n state: PreparingActionState,\n now: number,\n stallTimeoutMs: number,\n) {\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 // Durable background reads pass the wider durable window so the server's\n // own 150s no-progress backstop gets first chance to recover the stall.\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) >= stallTimeoutMs\n ) {\n return true;\n }\n }\n return false;\n}\n\nasync function readChunkWithProgressTimeout(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n lastMeaningfulEventAt: number,\n noProgressTimeoutMs: number,\n): Promise<ReadableStreamReadResult<Uint8Array>> {\n const elapsed = Date.now() - lastMeaningfulEventAt;\n const timeoutMs = Math.max(0, noProgressTimeoutMs - 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 === \"builder_auth_error\" ||\n // The account cannot use this model; another POST picks the same one.\n code === \"builder_model_unauthorized\" ||\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 === \"provider_network_error\" ||\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\n// Fires once per chunk (see ProcessEventState.streamProgressDispatched) the\n// moment a chunk produces real model output (visible text or a reasoning\n// delta). Unlike `agent-chat:activity-clear` — which also fires for\n// old-chunk `tool_done` replays and server-retry `clear` events, and so\n// cannot be used to detect genuine forward progress — this event exists\n// solely so listeners can distinguish \"the run is actually producing new\n// output\" from those replay/retry cases.\nfunction dispatchStreamProgress(tabId: string | undefined) {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:stream-progress\", {\n detail: { tabId },\n }),\n );\n}\n\nfunction dispatchMissingApiKey(tabId: string | undefined) {\n if (typeof window === \"undefined\") return;\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:missing-api-key\", {\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\" || part.type === \"reasoning\") 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\n/**\n * Result prefixes the server emits when a tool_start/tool_done pair is a\n * REPLAY of a call that already executed in an earlier interrupted chunk of\n * this turn (tool-call journal hard-block and zombie-ledger recovery in\n * production-agent.ts). These are not new calls — rendering them as separate\n * cards produces the \"same tool twice, one spinning / one done\" duplicate.\n */\nconst JOURNAL_RECOVERY_RESULT_PREFIXES = [\n \"(Already completed in an earlier interrupted attempt\",\n \"(Recovered from prior interrupted chunk\",\n] as const;\n\nfunction isJournalRecoveryResult(result: unknown): boolean {\n return (\n typeof result === \"string\" &&\n JOURNAL_RECOVERY_RESULT_PREFIXES.some((prefix) => result.startsWith(prefix))\n );\n}\n\n/**\n * Merge a journal/ledger-recovered tool_done into the earlier card for the\n * same logical call instead of leaving a duplicate pair. Two shapes occur:\n *\n * 1. The original card already completed (reconnect/continuation replay): the\n * recovery card at `completedIndex` is redundant — drop it, keeping the\n * original result.\n * 2. The recovery result attached to the ORIGINAL still-pending card (the\n * id-less replay tool_done name-matches the earliest pending card): the\n * replay's own tool_start pushed a second pending card AFTER it that no\n * tool_done will ever resolve — remove that stuck-spinner artifact.\n *\n * Gated strictly on the recovery result markers so genuinely repeated\n * identical calls are never collapsed. Returns true when it spliced the card\n * at `completedIndex` (callers must not reuse the index afterwards).\n */\nfunction coalesceJournalRecoveredTool(\n content: ContentPart[],\n completedIndex: number,\n): boolean {\n const current = content[completedIndex];\n if (!current || current.type !== \"tool-call\") return false;\n if (!isJournalRecoveryResult(current.result)) return false;\n const matchesCurrentCall = (\n part: ContentPart,\n ): part is Extract<ContentPart, { type: \"tool-call\" }> =>\n part.type === \"tool-call\" &&\n part.activity !== true &&\n part.toolName === current.toolName &&\n part.argsText === current.argsText;\n\n for (let i = completedIndex - 1; i >= 0; i--) {\n const prior = content[i];\n if (!matchesCurrentCall(prior)) continue;\n if (prior.result === undefined) {\n // The original was interrupted mid-flight (spinner) — resolve it with\n // the recovered result instead of showing a second card.\n prior.result = current.result;\n if (current.isError !== undefined) prior.isError = current.isError;\n if (current.completedSideEffect !== undefined) {\n prior.completedSideEffect = current.completedSideEffect;\n }\n if (current.mcpApp) prior.mcpApp = current.mcpApp;\n if (current.chatUI) prior.chatUI = current.chatUI;\n }\n content.splice(completedIndex, 1);\n return true;\n }\n\n // No earlier card — the recovery result landed on the original pending card\n // itself. Remove any later still-pending replay-start artifact for the same\n // call so it doesn't spin forever.\n for (let i = content.length - 1; i > completedIndex; i--) {\n const later = content[i];\n if (\n later.type === \"tool-call\" &&\n matchesCurrentCall(later) &&\n later.result === undefined\n ) {\n content.splice(i, 1);\n }\n }\n return false;\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\nfunction hasCompletedCustomUi(content: ContentPart[]): boolean {\n const lastTextIndex = lastAssistantTextIndex(content);\n let lastCompletedToolIsCustomUi = false;\n let hasCompletedTool = false;\n for (let index = lastTextIndex + 1; index < content.length; index++) {\n const part = content[index];\n if (\n part?.type !== \"tool-call\" ||\n part.activity === true ||\n part.result === undefined ||\n part.isError === true\n ) {\n continue;\n }\n hasCompletedTool = true;\n lastCompletedToolIsCustomUi =\n part.chatUI !== undefined || part.mcpApp !== undefined;\n }\n return hasCompletedTool && lastCompletedToolIsCustomUi;\n}\n\nexport function appendMissingFinalResponseWarning(\n content: ContentPart[],\n completedToolNames?: Iterable<string>,\n): { message: string; errorCode: string; recoverable: true } | null {\n const lastTextIndex = lastAssistantTextIndex(content);\n const successfulToolNames = [\n ...new Set(\n completedToolNames ?? completedToolNamesAfterLastAssistantText(content),\n ),\n ];\n let lastToolIndex = -1;\n const materializedToolNames = new Set<string>();\n for (let index = lastTextIndex + 1; index < content.length; index++) {\n const part = content[index];\n if (\n part.type === \"tool-call\" &&\n part.activity !== true &&\n part.result !== undefined\n ) {\n lastToolIndex = index;\n materializedToolNames.add(part.toolName);\n }\n }\n if (hasCompletedCustomUi(content)) return null;\n if (successfulToolNames.length === 0 && lastTextIndex > lastToolIndex) {\n return null;\n }\n const completedToolMessage = completedToolOnlyMessage(successfulToolNames);\n const message = completedToolMessage\n ? completedToolMessage\n : materializedToolNames.size > 0\n ? `The agent stopped after ${formatToolNames([...materializedToolNames])} without sending a final message. Review the tool card above or ask the agent to continue.`\n : \"The agent stopped without sending a final message. Ask the agent to continue or retry.\";\n if (!content.some((part) => part.type === \"text\" && part.text === message)) {\n content.push({ type: \"text\", text: message });\n }\n return {\n message,\n errorCode:\n successfulToolNames.length > 0 || materializedToolNames.size > 0\n ? \"final_response_missing_after_tool\"\n : \"final_response_missing\",\n recoverable: true,\n };\n}\n\ninterface ProcessEventState {\n completedToolsAfterLastAssistantText: Set<string>;\n /** Set once `agent-chat:stream-progress` has been dispatched for the\n * current chunk, so a burst of per-token text/reasoning deltas only fires\n * it once. Cleared by `resetProcessEventState` on a server `clear` retry\n * so the next batch of real output re-arms it. */\n streamProgressDispatched: boolean;\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 if (state) state.streamProgressDispatched = false;\n}\n\n// Returns true the first time it's called for a given state (or every time\n// when state is unavailable, since there is nothing to dedupe against) and\n// false on subsequent calls until `resetProcessEventState` re-arms it.\nfunction shouldDispatchStreamProgress(\n state: ProcessEventState | undefined,\n): boolean {\n if (state?.streamProgressDispatched) return false;\n if (state) state.streamProgressDispatched = true;\n return true;\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) {\n dispatchActivityClear(tabId);\n // Real output resumed — let listeners (e.g. the auto-resume \"Resuming…\"\n // indicator) clear state that must NOT be cleared by activity-clear\n // alone, since activity-clear also fires for old-chunk/retry replays.\n if (shouldDispatchStreamProgress(state)) dispatchStreamProgress(tabId);\n }\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 === \"thinking\" || ev.type === \"reasoning\") {\n // Model chain-of-thought. Coalesce consecutive deltas into one reasoning\n // part so the UI can render a single collapsible \"Thinking\" cell.\n const delta = ev.text ?? \"\";\n if (!delta) return { action: \"continue\" };\n if (shouldDispatchStreamProgress(state)) dispatchStreamProgress(tabId);\n const lastPart = content[content.length - 1];\n if (lastPart && lastPart.type === \"reasoning\") {\n lastPart.text += delta;\n } else {\n content.push({ type: \"reasoning\", text: delta });\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 = findPendingActivityToolCallIndex(\n content,\n tool,\n ev.id,\n );\n if (pendingToolCallIndex >= 0 && ev.id) {\n const pending = content[pendingToolCallIndex];\n if (pending?.type === \"tool-call\" && pending.toolCallId !== ev.id) {\n content[pendingToolCallIndex] = { ...pending, toolCallId: ev.id };\n }\n }\n if (pendingToolCallIndex === -1) {\n // Only surface a placeholder spinner when this tool has no card yet. A\n // trailing activity heartbeat that arrives after the matching tool_done\n // (e.g. reordered reconnect replay) must NOT resurrect a spinner for an\n // already-completed call — that is the \"pop back to an older state\"\n // flicker. The real card reappears on the next tool_start regardless.\n const hasCompletedSameTool = content.some(\n (part) =>\n part.type === \"tool-call\" &&\n part.toolName === tool &&\n part.result !== undefined &&\n (!ev.id || part.toolCallId === ev.id),\n );\n if (!hasCompletedSameTool) {\n content.push({\n type: \"tool-call\",\n toolCallId: ev.id ?? `tc_${++toolCallCounter.value}`,\n toolName: tool,\n argsText: \"\",\n args: {},\n activity: true,\n });\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 = ev.id\n ? findPendingActivityToolCallIndex(content, tool, ev.id)\n : findOldestPendingActivityToolCallIndex(content, tool);\n const pendingToolCall =\n pendingToolCallIndex >= 0 ? content[pendingToolCallIndex] : undefined;\n const pendingIsActivityPlaceholder =\n pendingToolCall?.type === \"tool-call\" &&\n pendingToolCall.activity === true &&\n pendingToolCall.argsText === \"\" &&\n Object.keys(pendingToolCall.args).length === 0;\n // A re-emitted start for the SAME id — a retry/auto-continue clear that\n // keeps the in-flight card mounted, or a reconnect replay — must update the\n // existing card in place instead of pushing a duplicate. Matching on id\n // keeps genuinely parallel same-name calls, which carry distinct ids,\n // separate.\n const pendingIsSameIdReplay =\n pendingToolCall?.type === \"tool-call\" &&\n ev.id !== undefined &&\n pendingToolCall.toolCallId === ev.id;\n if (\n pendingToolCall &&\n pendingToolCall.type === \"tool-call\" &&\n (pendingIsActivityPlaceholder || pendingIsSameIdReplay)\n ) {\n // Upgrade the pending card in place. Prefer the server-assigned id so the\n // subsequent tool_done can match it precisely (parallel same-name calls\n // each carry their own id). Fall back to the locally-generated id.\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 // Journal/ledger replay merge first (may splice the card at doneIdx —\n // when it does, the adjacent-repeat coalesce below must not run on the\n // stale index).\n if (!coalesceJournalRecoveredTool(content, doneIdx)) {\n coalesceCompletedToolRepeat(content, doneIdx);\n }\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 = ev.agentCallId ?? `tc_${++toolCallCounter.value}`;\n content.push({\n type: \"tool-call\",\n toolCallId,\n toolName: `agent:${agentName}`,\n argsText: \"\",\n args: {},\n activity: true,\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 (!ev.agentCallId || part.toolCallId === ev.agentCallId) &&\n part.result === undefined\n ) {\n part.result = ev.status === \"error\" ? \"Error calling agent\" : \"Done\";\n part.structuredMeta = {\n ...part.structuredMeta,\n ...(ev.durationMs != null\n ? { agentDurationMs: ev.durationMs }\n : {}),\n };\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 (!ev.agentCallId || part.toolCallId === ev.agentCallId) &&\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 if (ev.type === \"agent_call_progress\") {\n const agentName = ev.agent ?? \"agent\";\n if (typeof ev.state !== \"string\") {\n return { action: \"continue\" };\n }\n const elapsedSeconds =\n typeof ev.elapsedSeconds === \"number\" &&\n Number.isFinite(ev.elapsedSeconds) &&\n ev.elapsedSeconds >= 0\n ? ev.elapsedSeconds\n : 0;\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 (!ev.agentCallId || part.toolCallId === ev.agentCallId) &&\n part.result === undefined\n ) {\n part.structuredMeta = {\n ...part.structuredMeta,\n agentProgress: {\n state: ev.state,\n elapsedSeconds,\n ...(ev.detail ? { detail: ev.detail } : {}),\n } satisfies AgentCallProgress,\n };\n break;\n }\n }\n return {\n action: \"yield\",\n result: { content: contentSnapshot(content) } as ChatModelRunResult,\n };\n }\n\n if (ev.type === \"agent_call_activity\" && ev.snapshot) {\n const agentName = ev.agent ?? \"agent\";\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 (!ev.agentCallId || part.toolCallId === ev.agentCallId)\n ) {\n const previous = part.structuredMeta?.agentActivity as\n | A2AAgentActivitySnapshot\n | undefined;\n if (!previous || ev.snapshot.sequence >= previous.sequence) {\n part.structuredMeta = {\n ...part.structuredMeta,\n agentActivity: ev.snapshot,\n };\n }\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 dispatchMissingApiKey(tabId);\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 dispatchMissingApiKey(tabId);\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 runWarning = appendMissingFinalResponseWarning(\n content,\n state ? state.completedToolsAfterLastAssistantText : undefined,\n );\n if (runWarning) {\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 },\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\" || part.type === \"reasoning\") {\n content.splice(index, 1);\n continue;\n }\n if (part.type === \"tool-call\" && part.result === undefined) {\n // Only drop ephemeral placeholders. Materialized in-flight tool cards\n // (real args from tool_start) stay mounted so a retry/auto-continue clear\n // does not hide→show the same call when the next chunk re-emits it.\n const isEphemeral =\n part.activity === true ||\n part.argsText === \"\" ||\n Object.keys(part.args ?? {}).length === 0;\n if (isEphemeral) 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 noProgressTimeoutMs = sseNoProgressTimeoutMs(options);\n const preparationStallTimeoutMs = sseActionPreparationStallTimeoutMs(options);\n const activityTrail: ActivityTrailEntry[] = [];\n const preparingActionState: PreparingActionState =\n options?.preparingActionState ?? {};\n const processEventState: ProcessEventState = {\n completedToolsAfterLastAssistantText: new Set(),\n streamProgressDispatched: false,\n };\n let renderUpdatesThisTurn = 0;\n let nextEventLoopTurn: Promise<void> | null = null;\n\n const paceRenderUpdate = async (): Promise<void> => {\n renderUpdatesThisTurn += 1;\n if (!nextEventLoopTurn) {\n nextEventLoopTurn = new Promise<void>((resolve) => {\n setTimeout(() => {\n renderUpdatesThisTurn = 0;\n nextEventLoopTurn = null;\n resolve();\n }, 0);\n });\n }\n if (renderUpdatesThisTurn >= SSE_RENDER_UPDATES_PER_EVENT_LOOP_TURN) {\n await nextEventLoopTurn;\n }\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 noProgressTimeoutMs,\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) {\n await paceRenderUpdate();\n yield withStreamMetadata(result);\n }\n if (\n hasStalledPreparingAction(\n preparingActionState,\n Date.now(),\n preparationStallTimeoutMs,\n )\n ) {\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 >= noProgressTimeoutMs\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 noProgressTimeoutMs = sseNoProgressTimeoutMs(options);\n const preparationStallTimeoutMs = sseActionPreparationStallTimeoutMs(options);\n const activityTrail: ActivityTrailEntry[] = [];\n const preparingActionState: PreparingActionState =\n options?.preparingActionState ?? {};\n const processEventState: ProcessEventState = {\n completedToolsAfterLastAssistantText: new Set(),\n streamProgressDispatched: false,\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 noProgressTimeoutMs,\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 (\n hasStalledPreparingAction(\n preparingActionState,\n Date.now(),\n preparationStallTimeoutMs,\n )\n ) {\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 >= noProgressTimeoutMs\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"]}