@agent-native/core 0.8.2 → 0.10.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 (305) hide show
  1. package/README.md +4 -4
  2. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  3. package/dist/agent/engine/builder-engine.js +5 -4
  4. package/dist/agent/engine/builder-engine.js.map +1 -1
  5. package/dist/agent/engine/registry.d.ts +6 -3
  6. package/dist/agent/engine/registry.d.ts.map +1 -1
  7. package/dist/agent/engine/registry.js +8 -17
  8. package/dist/agent/engine/registry.js.map +1 -1
  9. package/dist/agent/production-agent.d.ts +1 -1
  10. package/dist/agent/production-agent.d.ts.map +1 -1
  11. package/dist/agent/production-agent.js +28 -11
  12. package/dist/agent/production-agent.js.map +1 -1
  13. package/dist/agent/run-manager.d.ts +10 -0
  14. package/dist/agent/run-manager.d.ts.map +1 -1
  15. package/dist/agent/run-manager.js +89 -7
  16. package/dist/agent/run-manager.js.map +1 -1
  17. package/dist/agent/run-store.d.ts +4 -1
  18. package/dist/agent/run-store.d.ts.map +1 -1
  19. package/dist/agent/run-store.js +6 -5
  20. package/dist/agent/run-store.js.map +1 -1
  21. package/dist/agent/thread-data-builder.d.ts +12 -0
  22. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  23. package/dist/agent/thread-data-builder.js +96 -0
  24. package/dist/agent/thread-data-builder.js.map +1 -1
  25. package/dist/cli/create.d.ts +9 -0
  26. package/dist/cli/create.d.ts.map +1 -1
  27. package/dist/cli/create.js +29 -11
  28. package/dist/cli/create.js.map +1 -1
  29. package/dist/cli/index.js +177 -22
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/cli/workspace-dev.js +66 -5
  32. package/dist/cli/workspace-dev.js.map +1 -1
  33. package/dist/client/AgentPanel.d.ts.map +1 -1
  34. package/dist/client/AgentPanel.js +6 -20
  35. package/dist/client/AgentPanel.js.map +1 -1
  36. package/dist/client/AssistantChat.d.ts.map +1 -1
  37. package/dist/client/AssistantChat.js +146 -107
  38. package/dist/client/AssistantChat.js.map +1 -1
  39. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  40. package/dist/client/agent-chat-adapter.js +143 -22
  41. package/dist/client/agent-chat-adapter.js.map +1 -1
  42. package/dist/client/agent-sidebar-state.d.ts +3 -0
  43. package/dist/client/agent-sidebar-state.d.ts.map +1 -0
  44. package/dist/client/agent-sidebar-state.js +24 -0
  45. package/dist/client/agent-sidebar-state.js.map +1 -0
  46. package/dist/client/analytics.d.ts +39 -0
  47. package/dist/client/analytics.d.ts.map +1 -1
  48. package/dist/client/analytics.js +74 -0
  49. package/dist/client/analytics.js.map +1 -1
  50. package/dist/client/components/PresenceBar.d.ts.map +1 -1
  51. package/dist/client/components/PresenceBar.js +21 -15
  52. package/dist/client/components/PresenceBar.js.map +1 -1
  53. package/dist/client/components/ui/tooltip.d.ts +2 -1
  54. package/dist/client/components/ui/tooltip.d.ts.map +1 -1
  55. package/dist/client/components/ui/tooltip.js +9 -2
  56. package/dist/client/components/ui/tooltip.js.map +1 -1
  57. package/dist/client/composer/ComposerPlusMenu.d.ts.map +1 -1
  58. package/dist/client/composer/ComposerPlusMenu.js +51 -17
  59. package/dist/client/composer/ComposerPlusMenu.js.map +1 -1
  60. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  61. package/dist/client/composer/PromptComposer.js +30 -0
  62. package/dist/client/composer/PromptComposer.js.map +1 -1
  63. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  64. package/dist/client/composer/TiptapComposer.js +31 -5
  65. package/dist/client/composer/TiptapComposer.js.map +1 -1
  66. package/dist/client/composer/VoiceButton.d.ts.map +1 -1
  67. package/dist/client/composer/VoiceButton.js +9 -8
  68. package/dist/client/composer/VoiceButton.js.map +1 -1
  69. package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
  70. package/dist/client/dev-overlay/DevOverlay.js +4 -3
  71. package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
  72. package/dist/client/error-format.d.ts.map +1 -1
  73. package/dist/client/error-format.js +6 -0
  74. package/dist/client/error-format.js.map +1 -1
  75. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  76. package/dist/client/extensions/EmbeddedExtension.js +14 -3
  77. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  78. package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
  79. package/dist/client/extensions/ExtensionEditor.js +6 -5
  80. package/dist/client/extensions/ExtensionEditor.js.map +1 -1
  81. package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
  82. package/dist/client/extensions/ExtensionSlot.js +2 -1
  83. package/dist/client/extensions/ExtensionSlot.js.map +1 -1
  84. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  85. package/dist/client/extensions/ExtensionViewer.js +40 -19
  86. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  87. package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
  88. package/dist/client/extensions/ExtensionsSidebarSection.js +52 -51
  89. package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
  90. package/dist/client/index.d.ts +2 -1
  91. package/dist/client/index.d.ts.map +1 -1
  92. package/dist/client/index.js +2 -1
  93. package/dist/client/index.js.map +1 -1
  94. package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
  95. package/dist/client/integrations/IntegrationCard.js +2 -1
  96. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  97. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  98. package/dist/client/integrations/IntegrationsPanel.js +3 -2
  99. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  100. package/dist/client/notifications/NotificationsBell.d.ts.map +1 -1
  101. package/dist/client/notifications/NotificationsBell.js +42 -6
  102. package/dist/client/notifications/NotificationsBell.js.map +1 -1
  103. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
  104. package/dist/client/onboarding/OnboardingPanel.js +3 -2
  105. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  106. package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
  107. package/dist/client/onboarding/SetupButton.js +14 -13
  108. package/dist/client/onboarding/SetupButton.js.map +1 -1
  109. package/dist/client/org/InvitationBanner.d.ts +8 -2
  110. package/dist/client/org/InvitationBanner.d.ts.map +1 -1
  111. package/dist/client/org/InvitationBanner.js +28 -7
  112. package/dist/client/org/InvitationBanner.js.map +1 -1
  113. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  114. package/dist/client/org/OrgSwitcher.js +29 -5
  115. package/dist/client/org/OrgSwitcher.js.map +1 -1
  116. package/dist/client/org/TeamPage.d.ts.map +1 -1
  117. package/dist/client/org/TeamPage.js +9 -7
  118. package/dist/client/org/TeamPage.js.map +1 -1
  119. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  120. package/dist/client/resources/ResourceEditor.js +2 -1
  121. package/dist/client/resources/ResourceEditor.js.map +1 -1
  122. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  123. package/dist/client/resources/ResourcesPanel.js +48 -14
  124. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  125. package/dist/client/resources/use-mcp-servers.d.ts +2 -0
  126. package/dist/client/resources/use-mcp-servers.d.ts.map +1 -1
  127. package/dist/client/resources/use-mcp-servers.js +59 -3
  128. package/dist/client/resources/use-mcp-servers.js.map +1 -1
  129. package/dist/client/settings/AgentsSection.d.ts.map +1 -1
  130. package/dist/client/settings/AgentsSection.js +8 -7
  131. package/dist/client/settings/AgentsSection.js.map +1 -1
  132. package/dist/client/settings/AutomationsSection.d.ts.map +1 -1
  133. package/dist/client/settings/AutomationsSection.js +4 -3
  134. package/dist/client/settings/AutomationsSection.js.map +1 -1
  135. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  136. package/dist/client/settings/SecretsSection.js +11 -1
  137. package/dist/client/settings/SecretsSection.js.map +1 -1
  138. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  139. package/dist/client/settings/SettingsPanel.js +15 -12
  140. package/dist/client/settings/SettingsPanel.js.map +1 -1
  141. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  142. package/dist/client/settings/VoiceTranscriptionSection.js +13 -30
  143. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  144. package/dist/client/settings/index.d.ts +1 -1
  145. package/dist/client/settings/index.d.ts.map +1 -1
  146. package/dist/client/settings/index.js.map +1 -1
  147. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  148. package/dist/client/settings/useBuilderStatus.js +27 -1
  149. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  150. package/dist/client/sharing/ShareButton.d.ts +4 -0
  151. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  152. package/dist/client/sharing/ShareButton.js +5 -1
  153. package/dist/client/sharing/ShareButton.js.map +1 -1
  154. package/dist/client/sse-event-processor.d.ts +1 -1
  155. package/dist/client/sse-event-processor.d.ts.map +1 -1
  156. package/dist/client/sse-event-processor.js +59 -11
  157. package/dist/client/sse-event-processor.js.map +1 -1
  158. package/dist/client/use-db-sync.d.ts.map +1 -1
  159. package/dist/client/use-db-sync.js +100 -19
  160. package/dist/client/use-db-sync.js.map +1 -1
  161. package/dist/client/use-session.d.ts.map +1 -1
  162. package/dist/client/use-session.js +14 -2
  163. package/dist/client/use-session.js.map +1 -1
  164. package/dist/collab/client.d.ts +1 -0
  165. package/dist/collab/client.d.ts.map +1 -1
  166. package/dist/collab/client.js +18 -1
  167. package/dist/collab/client.js.map +1 -1
  168. package/dist/deploy/build.d.ts.map +1 -1
  169. package/dist/deploy/build.js +5 -0
  170. package/dist/deploy/build.js.map +1 -1
  171. package/dist/deploy/route-discovery.d.ts.map +1 -1
  172. package/dist/deploy/route-discovery.js +1 -0
  173. package/dist/deploy/route-discovery.js.map +1 -1
  174. package/dist/deploy/workspace-core.d.ts +1 -1
  175. package/dist/deploy/workspace-core.d.ts.map +1 -1
  176. package/dist/deploy/workspace-core.js +1 -0
  177. package/dist/deploy/workspace-core.js.map +1 -1
  178. package/dist/extensions/actions.d.ts.map +1 -1
  179. package/dist/extensions/actions.js +17 -3
  180. package/dist/extensions/actions.js.map +1 -1
  181. package/dist/extensions/routes.js +1 -1
  182. package/dist/extensions/routes.js.map +1 -1
  183. package/dist/extensions/schema.d.ts +14 -14
  184. package/dist/extensions/schema.d.ts.map +1 -1
  185. package/dist/extensions/schema.js +4 -4
  186. package/dist/extensions/schema.js.map +1 -1
  187. package/dist/extensions/store.d.ts.map +1 -1
  188. package/dist/extensions/store.js +23 -0
  189. package/dist/extensions/store.js.map +1 -1
  190. package/dist/extensions/theme.d.ts +8 -1
  191. package/dist/extensions/theme.d.ts.map +1 -1
  192. package/dist/extensions/theme.js +43 -34
  193. package/dist/extensions/theme.js.map +1 -1
  194. package/dist/mcp-client/routes.d.ts +1 -0
  195. package/dist/mcp-client/routes.d.ts.map +1 -1
  196. package/dist/mcp-client/routes.js +28 -1
  197. package/dist/mcp-client/routes.js.map +1 -1
  198. package/dist/org/auto-join-domain.d.ts +28 -0
  199. package/dist/org/auto-join-domain.d.ts.map +1 -0
  200. package/dist/org/auto-join-domain.js +92 -0
  201. package/dist/org/auto-join-domain.js.map +1 -0
  202. package/dist/org/index.d.ts +2 -0
  203. package/dist/org/index.d.ts.map +1 -1
  204. package/dist/org/index.js +1 -0
  205. package/dist/org/index.js.map +1 -1
  206. package/dist/scripts/db/exec.d.ts.map +1 -1
  207. package/dist/scripts/db/exec.js +27 -1
  208. package/dist/scripts/db/exec.js.map +1 -1
  209. package/dist/scripts/db/index.d.ts.map +1 -1
  210. package/dist/scripts/db/index.js +1 -0
  211. package/dist/scripts/db/index.js.map +1 -1
  212. package/dist/scripts/db/reset-dev-owner.d.ts +27 -0
  213. package/dist/scripts/db/reset-dev-owner.d.ts.map +1 -0
  214. package/dist/scripts/db/reset-dev-owner.js +225 -0
  215. package/dist/scripts/db/reset-dev-owner.js.map +1 -0
  216. package/dist/scripts/db/scoping.d.ts.map +1 -1
  217. package/dist/scripts/db/scoping.js +15 -30
  218. package/dist/scripts/db/scoping.js.map +1 -1
  219. package/dist/scripts/dev-session.d.ts +46 -0
  220. package/dist/scripts/dev-session.d.ts.map +1 -0
  221. package/dist/scripts/dev-session.js +81 -0
  222. package/dist/scripts/dev-session.js.map +1 -0
  223. package/dist/scripts/runner.d.ts.map +1 -1
  224. package/dist/scripts/runner.js +21 -0
  225. package/dist/scripts/runner.js.map +1 -1
  226. package/dist/secrets/register.d.ts +1 -1
  227. package/dist/secrets/register.d.ts.map +1 -1
  228. package/dist/secrets/register.js +4 -2
  229. package/dist/secrets/register.js.map +1 -1
  230. package/dist/secrets/routes.d.ts.map +1 -1
  231. package/dist/secrets/routes.js +32 -0
  232. package/dist/secrets/routes.js.map +1 -1
  233. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  234. package/dist/server/agent-chat-plugin.js +77 -102
  235. package/dist/server/agent-chat-plugin.js.map +1 -1
  236. package/dist/server/auth.d.ts.map +1 -1
  237. package/dist/server/auth.js +33 -0
  238. package/dist/server/auth.js.map +1 -1
  239. package/dist/server/better-auth-instance.d.ts.map +1 -1
  240. package/dist/server/better-auth-instance.js +11 -0
  241. package/dist/server/better-auth-instance.js.map +1 -1
  242. package/dist/server/builder-browser.d.ts.map +1 -1
  243. package/dist/server/builder-browser.js +169 -68
  244. package/dist/server/builder-browser.js.map +1 -1
  245. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  246. package/dist/server/core-routes-plugin.js +56 -13
  247. package/dist/server/core-routes-plugin.js.map +1 -1
  248. package/dist/server/credential-provider.d.ts +49 -6
  249. package/dist/server/credential-provider.d.ts.map +1 -1
  250. package/dist/server/credential-provider.js +133 -38
  251. package/dist/server/credential-provider.js.map +1 -1
  252. package/dist/server/design-token-utils.d.ts +13 -2
  253. package/dist/server/design-token-utils.d.ts.map +1 -1
  254. package/dist/server/design-token-utils.js +48 -16
  255. package/dist/server/design-token-utils.js.map +1 -1
  256. package/dist/server/framework-request-handler.d.ts.map +1 -1
  257. package/dist/server/framework-request-handler.js +31 -0
  258. package/dist/server/framework-request-handler.js.map +1 -1
  259. package/dist/server/google-realtime-session.d.ts.map +1 -1
  260. package/dist/server/google-realtime-session.js +19 -6
  261. package/dist/server/google-realtime-session.js.map +1 -1
  262. package/dist/server/index.d.ts +2 -0
  263. package/dist/server/index.d.ts.map +1 -1
  264. package/dist/server/index.js +2 -0
  265. package/dist/server/index.js.map +1 -1
  266. package/dist/server/onboarding-html.d.ts.map +1 -1
  267. package/dist/server/onboarding-html.js +142 -14
  268. package/dist/server/onboarding-html.js.map +1 -1
  269. package/dist/server/request-context.d.ts +17 -0
  270. package/dist/server/request-context.d.ts.map +1 -1
  271. package/dist/server/request-context.js +40 -1
  272. package/dist/server/request-context.js.map +1 -1
  273. package/dist/server/sentry-plugin.d.ts +11 -0
  274. package/dist/server/sentry-plugin.d.ts.map +1 -0
  275. package/dist/server/sentry-plugin.js +116 -0
  276. package/dist/server/sentry-plugin.js.map +1 -0
  277. package/dist/server/sentry.d.ts +92 -0
  278. package/dist/server/sentry.d.ts.map +1 -0
  279. package/dist/server/sentry.js +287 -0
  280. package/dist/server/sentry.js.map +1 -0
  281. package/dist/server/transcribe-voice.d.ts +2 -4
  282. package/dist/server/transcribe-voice.d.ts.map +1 -1
  283. package/dist/server/transcribe-voice.js +4 -16
  284. package/dist/server/transcribe-voice.js.map +1 -1
  285. package/dist/server/voice-providers-status.d.ts.map +1 -1
  286. package/dist/server/voice-providers-status.js +19 -35
  287. package/dist/server/voice-providers-status.js.map +1 -1
  288. package/dist/styles/agent-native.css +15 -0
  289. package/docs/content/cloneable-saas.md +7 -9
  290. package/docs/content/deployment.md +6 -2
  291. package/docs/content/dispatch.md +1 -1
  292. package/docs/content/extensions.md +177 -142
  293. package/docs/content/faq.md +2 -2
  294. package/docs/content/getting-started.md +13 -11
  295. package/docs/content/multi-app-workspace.md +2 -2
  296. package/docs/content/observability.md +47 -0
  297. package/docs/content/pure-agent-apps.md +1 -1
  298. package/docs/content/template-clips.md +3 -3
  299. package/docs/content/template-design.md +3 -3
  300. package/docs/content/template-dispatch.md +1 -1
  301. package/docs/content/template-forms.md +1 -1
  302. package/docs/content/template-mail.md +1 -1
  303. package/docs/content/what-is-agent-native.md +4 -4
  304. package/docs/content/workspace.md +1 -1
  305. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat-adapter.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAahF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAsJrE;;;;GAIG;AACH;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC3C,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,eAAe,GAAG,SAAS,CAAA;KAAE,CAAC;IACrD,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CACzD,GAAG,gBAAgB,CA6nBnB"}
1
+ {"version":3,"file":"agent-chat-adapter.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAahF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AA6LrE;;;;GAIG;AACH;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC3C,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;IAC5C,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,eAAe,GAAG,SAAS,CAAA;KAAE,CAAC;IACrD,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC;CACzD,GAAG,gBAAgB,CA8tBnB"}
@@ -5,7 +5,9 @@ import { normalizeChatError } from "./error-format.js";
5
5
  const AUTO_CONTINUE_PROMPT = "Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.";
6
6
  const MAX_RECONNECT_ATTEMPTS = 5;
7
7
  const MAX_STARTUP_RECOVERY_ATTEMPTS = 8;
8
- const MAX_TRANSIENT_CONTINUATIONS = 8;
8
+ const MAX_STALE_RUN_CONTINUATIONS = 3;
9
+ const MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;
10
+ const MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;
9
11
  const RETRY_BASE_DELAY_MS = 500;
10
12
  const RETRY_MAX_DELAY_MS = 8_000;
11
13
  function normalizeMentions(text) {
@@ -43,17 +45,24 @@ function combineContinuationHistory(fragments) {
43
45
  function visibleTransientContinuationContent(content) {
44
46
  return content.filter((part) => part.type === "tool-call" && part.result !== undefined);
45
47
  }
48
+ function hasContinuationProgress(content) {
49
+ return content.some((part) => part.type === "text"
50
+ ? part.text.trim().length > 0
51
+ : part.result !== undefined);
52
+ }
46
53
  function snapshotContent(content) {
47
54
  return content.map((part) => part.type === "text" ? { ...part } : { ...part, args: { ...part.args } });
48
55
  }
49
56
  function autoContinueMessage(signal) {
50
57
  const reason = signal.reason === "loop_limit"
51
58
  ? "The previous run reached an internal step budget."
52
- : signal.reason === "no_progress"
53
- ? "The previous run stopped producing progress events while the connection stayed open."
54
- : signal.reason === "stream_ended"
55
- ? "The previous stream ended before the agent sent a final completion signal."
56
- : "The previous run reached an internal execution budget.";
59
+ : signal.reason === "stale_run"
60
+ ? "The previous run stopped unexpectedly in the server runtime before it could finish."
61
+ : signal.reason === "no_progress"
62
+ ? "The previous run stopped producing progress events while the connection stayed open."
63
+ : signal.reason === "stream_ended"
64
+ ? "The previous stream ended before the agent sent a final completion signal."
65
+ : "The previous run reached an internal execution budget.";
57
66
  return `${AUTO_CONTINUE_PROMPT}\n\nInternal note: ${reason}`;
58
67
  }
59
68
  function delay(ms, abortSignal) {
@@ -115,6 +124,27 @@ function isRetryableStartupError(message) {
115
124
  msg.includes("504") ||
116
125
  msg.includes("529"));
117
126
  }
127
+ function isAuthErrorMessage(message) {
128
+ const msg = message.toLowerCase();
129
+ return (msg.includes("authentication required") ||
130
+ msg.includes("unauthorized") ||
131
+ msg.includes("not authenticated") ||
132
+ msg.includes("session expired") ||
133
+ msg.includes("401") ||
134
+ msg.includes("403") ||
135
+ msg.includes("405"));
136
+ }
137
+ function isMissingCredentialMessage(message) {
138
+ const msg = message.toLowerCase();
139
+ return (msg.includes("apikey") ||
140
+ msg.includes("authtoken") ||
141
+ msg.includes("anthropic_api_key") ||
142
+ msg.includes("missing_api_key") ||
143
+ msg.includes("missing api key") ||
144
+ msg.includes("missing credentials") ||
145
+ msg.includes("no llm provider") ||
146
+ msg.includes("llm provider is connected"));
147
+ }
118
148
  /**
119
149
  * The composer's exec mode is sent as explicit request metadata. The server
120
150
  * owns the plan-mode prompt and read-only tool filtering so the chat history
@@ -191,6 +221,9 @@ export function createAgentChatAdapter(options) {
191
221
  }
192
222
  }
193
223
  }
224
+ const userMessageText = rawMessageText.trim() || attachments.length === 0
225
+ ? rawMessageText
226
+ : "Use the attached context.";
194
227
  const history = messages
195
228
  .slice(0, -1) // exclude the latest user message
196
229
  .filter((m) => m.role === "user" || m.role === "assistant")
@@ -212,14 +245,33 @@ export function createAgentChatAdapter(options) {
212
245
  const toolCallCounter = { value: 0 };
213
246
  let runId = null;
214
247
  let lastSeq = -1;
215
- let currentMessageText = normalizeMentions(rawMessageText);
248
+ let currentMessageText = normalizeMentions(userMessageText);
216
249
  let currentHistory = history;
217
250
  let includeAttachments = attachments.length > 0;
218
251
  let includeReferences = Boolean(runConfig?.custom?.references);
219
252
  let startupRecoveryAttempts = 0;
220
- let transientContinuationAttempts = 0;
253
+ let staleRunContinuationAttempts = 0;
254
+ let stalledTransientContinuationAttempts = 0;
255
+ let totalTransientContinuationAttempts = 0;
221
256
  const continuationHistoryFragments = [];
222
257
  let visibleContinuationPrefix = [];
258
+ let lastAutoContinueReason = null;
259
+ const attemptedRunIds = [];
260
+ const connectionRecoveryDetails = () => {
261
+ return [
262
+ lastAutoContinueReason
263
+ ? `last_auto_continue_reason: ${lastAutoContinueReason}`
264
+ : "",
265
+ `stale_run_continuations: ${staleRunContinuationAttempts}`,
266
+ `stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,
267
+ `total_transient_continuations: ${totalTransientContinuationAttempts}`,
268
+ attemptedRunIds.length > 0
269
+ ? `attempted_runs: ${attemptedRunIds.join(", ")}`
270
+ : "",
271
+ ]
272
+ .filter(Boolean)
273
+ .join("\n");
274
+ };
223
275
  try {
224
276
  const headers = {
225
277
  "Content-Type": "application/json",
@@ -296,6 +348,9 @@ export function createAgentChatAdapter(options) {
296
348
  if (active?.active && active.runId) {
297
349
  const activeRunId = String(active.runId);
298
350
  runId = activeRunId;
351
+ if (!attemptedRunIds.includes(activeRunId)) {
352
+ attemptedRunIds.push(activeRunId);
353
+ }
299
354
  lastSeq = -1;
300
355
  setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });
301
356
  const reconnected = yield* reconnectCurrentRun();
@@ -323,14 +378,32 @@ export function createAgentChatAdapter(options) {
323
378
  return content;
324
379
  };
325
380
  const prepareAutoContinuation = (signal) => {
381
+ lastAutoContinueReason = signal.reason;
326
382
  const isTransient = signal.reason !== "loop_limit";
383
+ const visibleContent = visibleContentForContinuation();
384
+ const currentPartialHistory = contentToContinuationHistory(visibleContent);
385
+ const madeProgress = hasContinuationProgress(visibleContent);
327
386
  if (signal.reason === "loop_limit") {
328
- transientContinuationAttempts = 0;
387
+ stalledTransientContinuationAttempts = 0;
329
388
  }
330
- else if (++transientContinuationAttempts > MAX_TRANSIENT_CONTINUATIONS) {
331
- return { ok: false, resetVisibleContent: false };
389
+ else {
390
+ totalTransientContinuationAttempts += 1;
391
+ if (signal.reason === "stale_run") {
392
+ staleRunContinuationAttempts += 1;
393
+ if (staleRunContinuationAttempts > MAX_STALE_RUN_CONTINUATIONS) {
394
+ return { ok: false, resetVisibleContent: false };
395
+ }
396
+ }
397
+ stalledTransientContinuationAttempts = madeProgress
398
+ ? 0
399
+ : stalledTransientContinuationAttempts + 1;
400
+ if (stalledTransientContinuationAttempts >
401
+ MAX_STALLED_TRANSIENT_CONTINUATIONS ||
402
+ totalTransientContinuationAttempts >
403
+ MAX_TOTAL_TRANSIENT_CONTINUATIONS) {
404
+ return { ok: false, resetVisibleContent: false };
405
+ }
332
406
  }
333
- const currentPartialHistory = contentToContinuationHistory(visibleContentForContinuation());
334
407
  if (isTransient && currentPartialHistory) {
335
408
  continuationHistoryFragments.push(currentPartialHistory);
336
409
  }
@@ -339,7 +412,7 @@ export function createAgentChatAdapter(options) {
339
412
  : [...continuationHistoryFragments, currentPartialHistory]);
340
413
  currentHistory = [
341
414
  ...history,
342
- { role: "user", content: normalizeMentions(rawMessageText) },
415
+ { role: "user", content: normalizeMentions(userMessageText) },
343
416
  ...(partialHistory
344
417
  ? [{ role: "assistant", content: partialHistory }]
345
418
  : []),
@@ -406,6 +479,9 @@ export function createAgentChatAdapter(options) {
406
479
  if (body?.activeRunId) {
407
480
  handledConflict = true;
408
481
  runId = String(body.activeRunId);
482
+ if (!attemptedRunIds.includes(runId)) {
483
+ attemptedRunIds.push(runId);
484
+ }
409
485
  lastSeq = -1;
410
486
  if (threadId) {
411
487
  setActiveRun({ threadId, runId, lastSeq: -1 });
@@ -425,6 +501,22 @@ export function createAgentChatAdapter(options) {
425
501
  continue;
426
502
  }
427
503
  }
504
+ if (res.status === 401 || res.status === 403) {
505
+ if (typeof window !== "undefined") {
506
+ window.dispatchEvent(new CustomEvent("agent-chat:auth-error", {
507
+ detail: { reason: "auth-required" },
508
+ }));
509
+ }
510
+ content.push({ type: "text", text: "" });
511
+ yield {
512
+ content: [...content],
513
+ status: {
514
+ type: "incomplete",
515
+ reason: "error",
516
+ },
517
+ };
518
+ return;
519
+ }
428
520
  // 405 Method Not Allowed usually means the session is broken/expired
429
521
  // (e.g. a redirect to a login page that only accepts GET).
430
522
  if (res.status === 405) {
@@ -446,10 +538,23 @@ export function createAgentChatAdapter(options) {
446
538
  let errorText = `Server error: ${res.status}`;
447
539
  try {
448
540
  const body = await res.text();
449
- if (body.includes("apiKey") ||
450
- body.includes("authToken") ||
451
- body.includes("ANTHROPIC_API_KEY") ||
452
- body.includes("authentication")) {
541
+ if (isAuthErrorMessage(body)) {
542
+ if (typeof window !== "undefined") {
543
+ window.dispatchEvent(new CustomEvent("agent-chat:auth-error", {
544
+ detail: { reason: "auth-required" },
545
+ }));
546
+ }
547
+ content.push({ type: "text", text: "" });
548
+ yield {
549
+ content: [...content],
550
+ status: {
551
+ type: "incomplete",
552
+ reason: "error",
553
+ },
554
+ };
555
+ return;
556
+ }
557
+ if (isMissingCredentialMessage(body)) {
453
558
  if (typeof window !== "undefined") {
454
559
  window.dispatchEvent(new Event("agent-chat:missing-api-key"));
455
560
  }
@@ -480,6 +585,9 @@ export function createAgentChatAdapter(options) {
480
585
  }
481
586
  // Track the run ID for reconnection
482
587
  runId = res.headers.get("X-Run-Id");
588
+ if (runId && !attemptedRunIds.includes(runId)) {
589
+ attemptedRunIds.push(runId);
590
+ }
483
591
  if (runId && threadId) {
484
592
  setActiveRun({ threadId, runId, lastSeq: -1 });
485
593
  }
@@ -516,6 +624,7 @@ export function createAgentChatAdapter(options) {
516
624
  const message = "The agent connection kept failing after several automatic recovery attempts.";
517
625
  const runError = {
518
626
  message,
627
+ details: connectionRecoveryDetails(),
519
628
  errorCode: "connection_error",
520
629
  recoverable: true,
521
630
  ...(runId ? { runId } : {}),
@@ -553,11 +662,7 @@ export function createAgentChatAdapter(options) {
553
662
  continue;
554
663
  }
555
664
  const errMsg = err instanceof Error ? err.message : "Something went wrong.";
556
- const isAuthError = errMsg.includes("Unauthorized") ||
557
- errMsg.includes("Not authenticated") ||
558
- errMsg.includes("401") ||
559
- errMsg.includes("403") ||
560
- errMsg.includes("405");
665
+ const isAuthError = isAuthErrorMessage(errMsg);
561
666
  // Don't try to reconnect for auth/client errors — show error directly
562
667
  if (isAuthError) {
563
668
  if (typeof window !== "undefined") {
@@ -574,6 +679,21 @@ export function createAgentChatAdapter(options) {
574
679
  clearActiveRun();
575
680
  return;
576
681
  }
682
+ if (isMissingCredentialMessage(errMsg)) {
683
+ if (typeof window !== "undefined") {
684
+ window.dispatchEvent(new Event("agent-chat:missing-api-key"));
685
+ }
686
+ content.push({ type: "text", text: "" });
687
+ yield {
688
+ content: [...content],
689
+ status: {
690
+ type: "incomplete",
691
+ reason: "error",
692
+ },
693
+ };
694
+ clearActiveRun();
695
+ return;
696
+ }
577
697
  // Connection lost — try to reconnect to the run
578
698
  const reconnected = yield* reconnectCurrentRun();
579
699
  if (reconnected)
@@ -589,6 +709,7 @@ export function createAgentChatAdapter(options) {
589
709
  const message = "The agent connection kept failing after several automatic recovery attempts.";
590
710
  const runError = {
591
711
  message,
712
+ details: connectionRecoveryDetails(),
592
713
  errorCode: "connection_error",
593
714
  recoverable: true,
594
715
  ...(runId ? { runId } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,uBAAuB,EAEvB,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAQvD,MAAM,oBAAoB,GACxB,gOAAgO,CAAC;AACnO,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AACtC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa,EAAE,QAAgB;IAC9D,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,qBAAqB,KAAK,CAAC,MAAM,GAAG,QAAQ,mCAAmC,CAAC;AACpH,CAAC;AAED,SAAS,4BAA4B,CAAC,OAAsB;IAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QACD,MAAM,WAAW,GAAG;YAClB,SAAS,IAAI,CAAC,QAAQ,EAAE;YACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;YAC9C,IAAI,CAAC,MAAM;gBACT,CAAC,CAAC,YAAY,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;gBAC3D,CAAC,CAAC,wDAAwD;SAC7D;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,uBAAuB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAmB;IACrD,OAAO,uBAAuB,CAC5B,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EACtC,MAAM,CACP,CAAC,IAAI,EAAE,CAAC;AACX,CAAC;AAED,SAAS,mCAAmC,CAC1C,OAAsB;IAEtB,OAAO,OAAO,CAAC,MAAM,CACnB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CACjE,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,OAAsB;IAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CACzE,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA+B;IAC1D,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,YAAY;QAC5B,CAAC,CAAC,mDAAmD;QACrD,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,aAAa;YAC/B,CAAC,CAAC,sFAAsF;YACxF,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,cAAc;gBAChC,CAAC,CAAC,4EAA4E;gBAC9E,CAAC,CAAC,wDAAwD,CAAC;IACnE,OAAO,GAAG,oBAAoB,sBAAsB,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,WAAwB;IACjD,IAAI,WAAW,CAAC,OAAO;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,WAAW,CAAC,gBAAgB,CAC1B,OAAO,EACP,GAAG,EAAE;YACH,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,OAAe,EAAE,WAAwB;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,kBAAkB,EAClB,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAC3C,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC;IAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAe;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAClC,IACE,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC9B,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC9B,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC7B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QACrB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC1B,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACtB,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;QACvB,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC/B,GAAG,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAClC,GAAG,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACvC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACjC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnB,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CACpB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAQtC;IACC,MAAM,MAAM,GACV,OAAO,EAAE,MAAM,IAAI,eAAe,CAAC,2BAA2B,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAC7B,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,CAAC;IACnC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,CAAC;IAEzC,OAAO;QACL,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE;YAC7C,oEAAoE;YACpE,IAAI,WAAkD,CAAC;YACvD,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAChC,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC1B,MAAM;gBACR,CAAC;YACH,CAAC;YACD,MAAM,cAAc,GAClB,WAAW,EAAE,OAAO;iBACjB,MAAM,CAAC,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;iBACrE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,MAAM,WAAW,GACf,WAAW,EAAE,OAAO,KAAK,MAAM;gBAC7B,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,WAAW,EAAE,OAAO,KAAK,OAAO;oBAChC,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,SAAS,CAAC;YAElB,2DAA2D;YAC3D,0EAA0E;YAC1E,kEAAkE;YAClE,MAAM,WAAW,GAMX,EAAE,CAAC;YACT,IAAI,WAAW,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;gBAChD,MAAM,cAAc,GAClB,WAOD,CAAC,WAAW,CAAC;gBACd,KAAK,MAAM,GAAG,IAAI,cAAc,IAAI,EAAE,EAAE,CAAC;oBACvC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;wBAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;4BAC5D,WAAW,CAAC,IAAI,CAAC;gCACf,IAAI,EAAE,OAAO;gCACb,IAAI,EAAE,GAAG,CAAC,IAAI;gCACd,WAAW,EAAE,GAAG,CAAC,WAAW;gCAC5B,IAAI,EAAE,IAAI,CAAC,KAAK;6BACjB,CAAC,CAAC;wBACL,CAAC;6BAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BACjE,WAAW,CAAC,IAAI,CAAC;gCACf,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,GAAG,CAAC,IAAI;gCACd,WAAW,EACT,GAAG,CAAC,WAAW;oCACf,CAAC,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;wCAChC,CAAC,CAAC,IAAI,CAAC,QAAQ;wCACf,CAAC,CAAC,SAAS,CAAC;gCAChB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;oCAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;oCACrB,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;6BACzB,CAAC,CAAC;wBACL,CAAC;6BAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;4BACjE,WAAW,CAAC,IAAI,CAAC;gCACf,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,GAAG,CAAC,IAAI;gCACd,WAAW,EAAE,GAAG,CAAC,WAAW;gCAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;6BAChB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ;iBACrB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kCAAkC;iBAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC;iBAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,IAAI,EAAE,CAAC,CAAC,IAA4B;gBACpC,OAAO,EAAE,CAAC,CAAC,OAAO;qBACf,MAAM,CACL,CAAC,CAAC,EAAuC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAC9D;qBACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;qBAC5D,IAAI,CAAC,IAAI,CAAC;aACd,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAEnC,qCAAqC;YACrC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,yBAAyB,EAAE;oBACzC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;iBACnC,CAAC,CACH,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAkB,EAAE,CAAC;YAClC,MAAM,eAAe,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YACrC,IAAI,KAAK,GAAkB,IAAI,CAAC;YAChC,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;YACjB,IAAI,kBAAkB,GAAG,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,cAAc,GAA4B,OAAO,CAAC;YACtD,IAAI,kBAAkB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YAChD,IAAI,iBAAiB,GAAG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;YAC/D,IAAI,uBAAuB,GAAG,CAAC,CAAC;YAChC,IAAI,6BAA6B,GAAG,CAAC,CAAC;YACtC,MAAM,4BAA4B,GAAa,EAAE,CAAC;YAClD,IAAI,yBAAyB,GAAkB,EAAE,CAAC;YAElD,IAAI,CAAC;gBACH,MAAM,OAAO,GAA2B;oBACtC,cAAc,EAAE,kBAAkB;iBACnC,CAAC;gBACF,IAAI,CAAC;oBACH,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;oBAC5D,IAAI,EAAE;wBAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,sEAAsE;gBACxE,CAAC;gBAED,MAAM,mBAAmB,GAAG,KAAK,SAAS,CAAC;oBAKzC,IAAI,CAAC,KAAK;wBAAE,OAAO,KAAK,CAAC;oBACzB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;wBAClE,IAAI,CAAC;4BACH,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,GAAG,MAAM,SAAS,kBAAkB,CAAC,KAAK,CAAC,iBAAiB,OAAO,GAAG,CAAC,EAAE,EACzE,EAAE,MAAM,EAAE,WAAW,EAAE,CACxB,CAAC;4BACF,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI;gCAAE,MAAM;4BAElD,KAAK,CAAC,CAAC,aAAa,CAClB,YAAY,CAAC,IAAI,EACjB,OAAO,EACP,eAAe,EACf,KAAK,EACL,CAAC,GAAG,EAAE,EAAE;gCACN,OAAO,GAAG,GAAG,CAAC;gCACd,IAAI,QAAQ;oCAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;4BACxC,CAAC,EACD,KAAK,CACN,CAAC;4BACF,cAAc,EAAE,CAAC;4BACjB,OAAO,IAAI,CAAC;wBACd,CAAC;wBAAC,OAAO,YAAqB,EAAE,CAAC;4BAC/B,IACE,YAAY,YAAY,KAAK;gCAC7B,YAAY,CAAC,IAAI,KAAK,YAAY,EAClC,CAAC;gCACD,cAAc,EAAE,CAAC;gCACjB,OAAO,IAAI,CAAC;4BACd,CAAC;4BACD,IAAI,YAAY,YAAY,uBAAuB,EAAE,CAAC;gCACpD,IAAI,YAAY,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;oCAC1C,MAAM,YAAY,CAAC;gCACrB,CAAC;gCACD,OAAO,KAAK,CAAC;4BACf,CAAC;4BACD,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;wBACzC,CAAC;oBACH,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBAEF,MAAM,eAAe,GAAG,KAAK,IAAmB,EAAE;oBAChD,IAAI,CAAC,KAAK;wBAAE,OAAO;oBACnB,IAAI,CAAC;wBACH,MAAM,KAAK,CAAC,GAAG,MAAM,SAAS,kBAAkB,CAAC,KAAK,CAAC,QAAQ,EAAE;4BAC/D,MAAM,EAAE,MAAM;4BACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;4BAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;4BAC/C,MAAM,EAAE,WAAW;yBACpB,CAAC,CAAC;oBACL,CAAC;oBAAC,MAAM,CAAC;wBACP,iEAAiE;wBACjE,6DAA6D;oBAC/D,CAAC;4BAAS,CAAC;wBACT,cAAc,EAAE,CAAC;oBACnB,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,2BAA2B,GAAG,KAAK,SAAS,CAAC;oBAKjD,IAAI,CAAC,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBAC5B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;wBAClE,IAAI,CAAC;4BACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAC3B,GAAG,MAAM,yBAAyB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,EAChE,EAAE,MAAM,EAAE,WAAW,EAAE,CACxB,CAAC;4BACF,IAAI,CAAC,SAAS,CAAC,EAAE;gCAAE,OAAO,KAAK,CAAC;4BAChC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;4BACtC,IAAI,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gCACnC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCACzC,KAAK,GAAG,WAAW,CAAC;gCACpB,OAAO,GAAG,CAAC,CAAC,CAAC;gCACb,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gCAC5D,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;gCACjD,IAAI,WAAW;oCAAE,OAAO,IAAI,CAAC;4BAC/B,CAAC;4BACD,OAAO,KAAK,CAAC;wBACf,CAAC;wBAAC,OAAO,SAAkB,EAAE,CAAC;4BAC5B,IACE,SAAS,YAAY,KAAK;gCAC1B,SAAS,CAAC,IAAI,KAAK,YAAY,EAC/B,CAAC;gCACD,cAAc,EAAE,CAAC;gCACjB,OAAO,IAAI,CAAC;4BACd,CAAC;4BACD,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;wBACzC,CAAC;oBACH,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC;gBAEF,MAAM,6BAA6B,GAAG,GAAkB,EAAE;oBACxD,IACE,yBAAyB,CAAC,MAAM,GAAG,CAAC;wBACpC,yBAAyB,CAAC,KAAK,CAC7B,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CACzC,EACD,CAAC;wBACD,OAAO,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;oBACzD,CAAC;oBACD,OAAO,OAAO,CAAC;gBACjB,CAAC,CAAC;gBAEF,MAAM,uBAAuB,GAAG,CAC9B,MAA+B,EACgB,EAAE;oBACjD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC;oBACnD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;wBACnC,6BAA6B,GAAG,CAAC,CAAC;oBACpC,CAAC;yBAAM,IACL,EAAE,6BAA6B,GAAG,2BAA2B,EAC7D,CAAC;wBACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;oBACnD,CAAC;oBACD,MAAM,qBAAqB,GAAG,4BAA4B,CACxD,6BAA6B,EAAE,CAChC,CAAC;oBACF,IAAI,WAAW,IAAI,qBAAqB,EAAE,CAAC;wBACzC,4BAA4B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;oBAC3D,CAAC;oBACD,MAAM,cAAc,GAAG,0BAA0B,CAC/C,WAAW;wBACT,CAAC,CAAC,4BAA4B;wBAC9B,CAAC,CAAC,CAAC,GAAG,4BAA4B,EAAE,qBAAqB,CAAC,CAC7D,CAAC;oBACF,cAAc,GAAG;wBACf,GAAG,OAAO;wBACV,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE;wBAC5D,GAAG,CAAC,cAAc;4BAChB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAoB,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;4BAC3D,CAAC,CAAC,EAAE,CAAC;qBACR,CAAC;oBACF,kBAAkB,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;oBACjD,kBAAkB,GAAG,KAAK,CAAC;oBAC3B,iBAAiB,GAAG,KAAK,CAAC;oBAC1B,uBAAuB,GAAG,CAAC,CAAC;oBAC5B,cAAc,EAAE,CAAC;oBACjB,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC;oBAClD,CAAC;oBAED,MAAM,gBAAgB,GAAG,mCAAmC,CAAC,OAAO,CAAC,CAAC;oBACtE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC;oBACvD,yBAAyB,GAAG,gBAAgB,CAAC;oBAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;gBACjD,CAAC,CAAC;gBAEF,OAAO,IAAI,EAAE,CAAC;oBACZ,IAAI,CAAC;wBACH,KAAK,GAAG,IAAI,CAAC;wBACb,OAAO,GAAG,CAAC,CAAC,CAAC;wBACb,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;4BAC9B,MAAM,EAAE,MAAM;4BACd,OAAO;4BACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,OAAO,EAAE,kBAAkB;gCAC3B,OAAO,EAAE,cAAc;gCACvB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCACjC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC7C,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCACzD,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC5D,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC5D,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC9C,GAAG,CAAC,iBAAiB,IAAI,SAAS,EAAE,MAAM,EAAE,UAAU;oCACpD,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;oCAC7C,CAAC,CAAC,EAAE,CAAC;6BACR,CAAC;4BACF,MAAM,EAAE,WAAW;yBACpB,CAAC,CAAC;wBAEH,kFAAkF;wBAClF,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;wBAC1D,IACE,GAAG,CAAC,EAAE;4BACN,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC;4BACxC,CAAC,WAAW,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAC1C,CAAC;4BACD,IAAI,CAAC;gCACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gCAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCAChC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oCACjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gCAChC,CAAC;4BACH,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC;gCACX,IACE,CAAC,YAAY,KAAK;oCAClB,CAAC,CAAC,OAAO,KAAK,8BAA8B,EAC5C,CAAC;oCACD,MAAM,CAAC,CAAC;gCACV,CAAC;4BACH,CAAC;wBACH,CAAC;wBAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;4BACZ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gCACvB,IAAI,eAAe,GAAG,KAAK,CAAC;gCAC5B,IAAI,CAAC;oCACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;oCAC9B,IAAI,IAAI,EAAE,WAAW,EAAE,CAAC;wCACtB,eAAe,GAAG,IAAI,CAAC;wCACvB,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wCACjC,OAAO,GAAG,CAAC,CAAC,CAAC;wCACb,IAAI,QAAQ,EAAE,CAAC;4CACb,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;wCACjD,CAAC;wCACD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;wCACjD,IAAI,WAAW;4CAAE,OAAO;oCAC1B,CAAC;gCACH,CAAC;gCAAC,MAAM,CAAC;oCACP,uDAAuD;gCACzD,CAAC;gCACD,IAAI,eAAe,EAAE,CAAC;oCACpB,MAAM,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oCAC/B,IAAI,WAAW,CAAC,OAAO;wCAAE,OAAO;oCAChC,SAAS;gCACX,CAAC;4BACH,CAAC;4BAED,qEAAqE;4BACrE,2DAA2D;4BAC3D,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gCACvB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oCAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,uBAAuB,EAAE;wCACvC,MAAM,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE;qCACtC,CAAC,CACH,CAAC;gCACJ,CAAC;gCACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gCACzC,MAAM;oCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;oCACrB,MAAM,EAAE;wCACN,IAAI,EAAE,YAAqB;wCAC3B,MAAM,EAAE,OAAgB;qCACzB;iCACoB,CAAC;gCACxB,OAAO;4BACT,CAAC;4BAED,IAAI,SAAS,GAAG,iBAAiB,GAAG,CAAC,MAAM,EAAE,CAAC;4BAC9C,IAAI,CAAC;gCACH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gCAC9B,IACE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;oCACvB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;oCAC1B,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;oCAClC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAC/B,CAAC;oCACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;wCAClC,MAAM,CAAC,aAAa,CAClB,IAAI,KAAK,CAAC,4BAA4B,CAAC,CACxC,CAAC;oCACJ,CAAC;oCACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;oCACzC,MAAM;wCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;wCACrB,MAAM,EAAE;4CACN,IAAI,EAAE,YAAqB;4CAC3B,MAAM,EAAE,OAAgB;yCACzB;qCACoB,CAAC;oCACxB,OAAO;gCACT,CAAC;qCAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;oCACjD,SAAS;wCACP,8FAA8F,CAAC;gCACnG,CAAC;qCAAM,IAAI,IAAI,EAAE,CAAC;oCAChB,SAAS;wCACP,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gCAC1D,CAAC;4BACH,CAAC;4BAAC,MAAM,CAAC,CAAA,CAAC;4BACV,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;wBAC7B,CAAC;wBACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;4BACd,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;wBACtC,CAAC;wBAED,oCAAoC;wBACpC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACpC,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;4BACtB,YAAY,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;wBACjD,CAAC;wBAED,KAAK,CAAC,CAAC,aAAa,CAClB,GAAG,CAAC,IAAI,EACR,OAAO,EACP,eAAe,EACf,KAAK,EACL,CAAC,GAAG,EAAE,EAAE;4BACN,OAAO,GAAG,GAAG,CAAC;4BACd,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;gCACtB,kBAAkB,CAAC,GAAG,CAAC,CAAC;4BAC1B,CAAC;wBACH,CAAC,EACD,KAAK,CACN,CAAC;wBAEF,kDAAkD;wBAClD,cAAc,EAAE,CAAC;wBACjB,OAAO;oBACT,CAAC;oBAAC,OAAO,GAAY,EAAE,CAAC;wBACtB,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;4BACtD,wDAAwD;4BACxD,cAAc,EAAE,CAAC;4BACjB,OAAO;wBACT,CAAC;wBAED,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;4BAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gCACjC,MAAM,eAAe,EAAE,CAAC;4BAC1B,CAAC;4BACD,IAAI,GAAG,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;gCAClC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;gCACjD,IAAI,WAAW;oCAAE,OAAO;gCACxB,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,2BAA2B,EAAE,CAAC;gCAC/D,IAAI,iBAAiB;oCAAE,OAAO;4BAChC,CAAC;4BACD,MAAM,YAAY,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;4BAClD,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gCACrB,MAAM,OAAO,GACX,8EAA8E,CAAC;gCACjF,MAAM,QAAQ,GAAG;oCACf,OAAO;oCACP,SAAS,EAAE,kBAAkB;oCAC7B,WAAW,EAAE,IAAI;oCACjB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iCAC5B,CAAC;gCACF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oCAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,sBAAsB,EAAE;wCACtC,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE;qCAC/B,CAAC,CACH,CAAC;gCACJ,CAAC;gCACD,OAAO,CAAC,IAAI,CAAC;oCACX,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,yBAAyB,OAAO,EAAE;iCACzC,CAAC,CAAC;gCACH,MAAM;oCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;oCACrB,MAAM,EAAE;wCACN,IAAI,EAAE,YAAqB;wCAC3B,MAAM,EAAE,OAAgB;qCACzB;oCACD,QAAQ,EAAE;wCACR,MAAM,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE;qCAClD;iCACF,CAAC;gCACF,cAAc,EAAE,CAAC;gCACjB,OAAO;4BACT,CAAC;4BACD,IAAI,YAAY,CAAC,mBAAmB,EAAE,CAAC;gCACrC,MAAM;oCACJ,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;iCACZ,CAAC;4BAC1B,CAAC;4BACD,MAAM,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;4BAC9B,IAAI,WAAW,CAAC,OAAO;gCAAE,OAAO;4BAChC,SAAS;wBACX,CAAC;wBAED,MAAM,MAAM,GACV,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;wBAC/D,MAAM,WAAW,GACf,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;4BAC/B,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;4BACpC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;4BACtB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;4BACtB,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;wBAEzB,sEAAsE;wBACtE,IAAI,WAAW,EAAE,CAAC;4BAChB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;gCAClC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;4BAC3D,CAAC;4BACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;4BACzC,MAAM;gCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;gCACrB,MAAM,EAAE;oCACN,IAAI,EAAE,YAAqB;oCAC3B,MAAM,EAAE,OAAgB;iCACzB;6BACF,CAAC;4BACF,cAAc,EAAE,CAAC;4BACjB,OAAO;wBACT,CAAC;wBAED,gDAAgD;wBAChD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,mBAAmB,EAAE,CAAC;wBACjD,IAAI,WAAW;4BAAE,OAAO;wBACxB,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,2BAA2B,EAAE,CAAC;wBAC/D,IAAI,iBAAiB;4BAAE,OAAO;wBAE9B,iEAAiE;wBACjE,qEAAqE;wBACrE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACvB,MAAM,YAAY,GAAG,uBAAuB,CAC1C,IAAI,uBAAuB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CACxD,CAAC;4BACF,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gCACrB,MAAM,OAAO,GACX,8EAA8E,CAAC;gCACjF,MAAM,QAAQ,GAAG;oCACf,OAAO;oCACP,SAAS,EAAE,kBAAkB;oCAC7B,WAAW,EAAE,IAAI;oCACjB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iCAC5B,CAAC;gCACF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oCAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,sBAAsB,EAAE;wCACtC,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE;qCAC/B,CAAC,CACH,CAAC;gCACJ,CAAC;gCACD,OAAO,CAAC,IAAI,CAAC;oCACX,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,yBAAyB,OAAO,EAAE;iCACzC,CAAC,CAAC;gCACH,MAAM;oCACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;oCACrB,MAAM,EAAE;wCACN,IAAI,EAAE,YAAqB;wCAC3B,MAAM,EAAE,OAAgB;qCACzB;oCACD,QAAQ,EAAE;wCACR,MAAM,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE;qCAClD;iCACF,CAAC;gCACF,cAAc,EAAE,CAAC;gCACjB,OAAO;4BACT,CAAC;4BACD,IAAI,YAAY,CAAC,mBAAmB,EAAE,CAAC;gCACrC,MAAM;oCACJ,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;iCACZ,CAAC;4BAC1B,CAAC;4BACD,MAAM,KAAK,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;4BAC9B,IAAI,WAAW,CAAC,OAAO;gCAAE,OAAO;4BAChC,SAAS;wBACX,CAAC;wBAED,IACE,uBAAuB,CAAC,MAAM,CAAC;4BAC/B,uBAAuB,GAAG,6BAA6B,EACvD,CAAC;4BACD,MAAM,UAAU,CAAC,uBAAuB,EAAE,EAAE,WAAW,CAAC,CAAC;4BACzD,IAAI,WAAW,CAAC,OAAO;gCAAE,OAAO;4BAChC,SAAS;wBACX,CAAC;wBAED,mEAAmE;wBACnE,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;wBAC9C,MAAM,QAAQ,GAAG;4BACf,OAAO,EAAE,UAAU,CAAC,OAAO;4BAC3B,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC9D,SAAS,EAAE,kBAAkB;4BAC7B,WAAW,EAAE,IAAI;4BACjB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC5B,CAAC;wBACF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;4BAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,sBAAsB,EAAE;gCACtC,MAAM,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE;6BAC/B,CAAC,CACH,CAAC;wBACJ,CAAC;wBACD,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC;gCACtC,CAAC,CAAC,MAAM;gCACR,CAAC,CAAC,yBAAyB,UAAU,CAAC,OAAO,EAAE;yBAClD,CAAC,CAAC;wBACH,MAAM;4BACJ,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;4BACrB,MAAM,EAAE;gCACN,IAAI,EAAE,YAAqB;gCAC3B,MAAM,EAAE,OAAgB;6BACzB;4BACD,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE;yBAChE,CAAC;wBACF,OAAO;oBACT,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;oBAClC,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,yBAAyB,EAAE;wBACzC,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE;qBACpC,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type ContentPart,\n readSSEStream,\n} from \"./sse-event-processor.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { normalizeChatError } from \"./error-format.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\n\ntype AdapterHistoryMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\nconst AUTO_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst MAX_STARTUP_RECOVERY_ATTEMPTS = 8;\nconst MAX_TRANSIENT_CONTINUATIONS = 8;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\n\nfunction normalizeMentions(text: string): string {\n return text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\");\n}\n\nfunction truncateForContinuation(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, maxChars)}\\n\\n...[truncated ${value.length - maxChars} chars from prior partial output]`;\n}\n\nfunction contentToContinuationHistory(content: ContentPart[]): string {\n const chunks: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n if (part.text.trim()) chunks.push(part.text.trim());\n continue;\n }\n const toolSummary = [\n `Tool: ${part.toolName}`,\n part.argsText ? `Input: ${part.argsText}` : \"\",\n part.result\n ? `Result:\\n${truncateForContinuation(part.result, 8_000)}`\n : \"Result: interrupted before this tool returned a result\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n chunks.push(toolSummary);\n }\n return truncateForContinuation(chunks.join(\"\\n\\n\"), 40_000).trim();\n}\n\nfunction combineContinuationHistory(fragments: string[]): string {\n return truncateForContinuation(\n fragments.filter(Boolean).join(\"\\n\\n\"),\n 40_000,\n ).trim();\n}\n\nfunction visibleTransientContinuationContent(\n content: ContentPart[],\n): ContentPart[] {\n return content.filter(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n}\n\nfunction snapshotContent(content: ContentPart[]): ContentPart[] {\n return content.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, args: { ...part.args } },\n );\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const reason =\n signal.reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : signal.reason === \"no_progress\"\n ? \"The previous run stopped producing progress events while the connection stayed open.\"\n : signal.reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : \"The previous run reached an internal execution budget.\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\nInternal note: ${reason}`;\n}\n\nfunction delay(ms: number, abortSignal: AbortSignal): Promise<void> {\n if (abortSignal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n abortSignal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction retryDelay(attempt: number, abortSignal: AbortSignal): Promise<void> {\n const base = Math.min(\n RETRY_MAX_DELAY_MS,\n RETRY_BASE_DELAY_MS * Math.pow(2, attempt),\n );\n const jitter = base * 0.2;\n const ms = Math.max(0, base + (Math.random() * 2 - 1) * jitter);\n return delay(ms, abortSignal);\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"404\") ||\n msg.includes(\"405\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"api key\") ||\n msg.includes(\"context_length\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"credits-limit\") ||\n msg.includes(\"billing\") ||\n msg.includes(\"permission\")\n ) {\n return false;\n }\n return (\n msg.includes(\"failed to fetch\") ||\n msg.includes(\"network\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"reset\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"socket\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"server error: 408\") ||\n msg.includes(\"server error: 429\") ||\n msg.includes(\"server error: 500\") ||\n msg.includes(\"server error: 502\") ||\n msg.includes(\"server error: 503\") ||\n msg.includes(\"server error: 504\") ||\n msg.includes(\"429\") ||\n msg.includes(\"500\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\n/**\n * The composer's exec mode is sent as explicit request metadata. The server\n * owns the plan-mode prompt and read-only tool filtering so the chat history\n * stays clean and Plan mode is enforced outside the model's goodwill.\n */\n/**\n * Creates a ChatModelAdapter that connects to the agent-native\n * `/_agent-native/agent-chat` SSE endpoint. Supports reconnection via run-manager.\n */\nexport function createAgentChatAdapter(options?: {\n apiUrl?: string;\n tabId?: string;\n threadId?: string;\n modelRef?: { current: string | undefined };\n engineRef?: { current: string | undefined };\n effortRef?: { current: ReasoningEffort | undefined };\n execModeRef?: { current: \"build\" | \"plan\" | undefined };\n}): ChatModelAdapter {\n const apiUrl =\n options?.apiUrl ?? agentNativePath(\"/_agent-native/agent-chat\");\n const tabId = options?.tabId;\n const threadId = options?.threadId;\n const modelRef = options?.modelRef;\n const engineRef = options?.engineRef;\n const effortRef = options?.effortRef;\n const execModeRef = options?.execModeRef;\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n let lastUserMsg: (typeof messages)[number] | undefined;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n lastUserMsg = messages[i];\n break;\n }\n }\n const rawMessageText =\n lastUserMsg?.content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\") ?? \"\";\n const requestMode =\n execModeRef?.current === \"plan\"\n ? \"plan\"\n : execModeRef?.current === \"build\"\n ? \"act\"\n : undefined;\n\n // Extract attachments (images as base64, text as content).\n // assistant-ui puts user attachments on msg.attachments (not on content);\n // each attachment carries its own content parts from the adapter.\n const attachments: {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n }[] = [];\n if (lastUserMsg && \"attachments\" in lastUserMsg) {\n const msgAttachments = (\n lastUserMsg as {\n attachments?: readonly {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n }[];\n }\n ).attachments;\n for (const att of msgAttachments ?? []) {\n for (const part of att.content) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n data: part.image,\n });\n } else if (part.type === \"file\" && typeof part.data === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType:\n att.contentType ??\n (typeof part.mimeType === \"string\"\n ? part.mimeType\n : undefined),\n ...(part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: part.data }),\n });\n } else if (part.type === \"text\" && typeof part.text === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n text: part.text,\n });\n }\n }\n }\n }\n\n const history = messages\n .slice(0, -1) // exclude the latest user message\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content: m.content\n .filter(\n (p): p is { type: \"text\"; text: string } => p.type === \"text\",\n )\n .map((p) => p.text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\"))\n .join(\"\\n\"),\n }))\n .filter((m) => m.content.trim());\n\n // Signal that generation is starting\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: true, tabId },\n }),\n );\n }\n\n const content: ContentPart[] = [];\n const toolCallCounter = { value: 0 };\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(rawMessageText);\n let currentHistory: AdapterHistoryMessage[] = history;\n let includeAttachments = attachments.length > 0;\n let includeReferences = Boolean(runConfig?.custom?.references);\n let startupRecoveryAttempts = 0;\n let transientContinuationAttempts = 0;\n const continuationHistoryFragments: string[] = [];\n let visibleContinuationPrefix: ContentPart[] = [];\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (tz) headers[\"x-user-timezone\"] = tz;\n } catch {\n // Non-browser or Intl unavailable — tool calls will fall back to UTC.\n }\n\n const reconnectCurrentRun = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!runId) return false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const reconnectRes = await fetch(\n `${apiUrl}/runs/${encodeURIComponent(runId)}/events?after=${lastSeq + 1}`,\n { signal: abortSignal },\n );\n if (!reconnectRes.ok || !reconnectRes.body) break;\n\n yield* readSSEStream(\n reconnectRes.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (threadId) updateActiveRunSeq(seq);\n },\n runId,\n );\n clearActiveRun();\n return true;\n } catch (reconnectErr: unknown) {\n if (\n reconnectErr instanceof Error &&\n reconnectErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n if (reconnectErr instanceof AgentAutoContinueSignal) {\n if (reconnectErr.reason === \"no_progress\") {\n throw reconnectErr;\n }\n return false;\n }\n await retryDelay(attempt, abortSignal);\n }\n }\n return false;\n };\n\n const abortCurrentRun = async (): Promise<void> => {\n if (!runId) return;\n try {\n await fetch(`${apiUrl}/runs/${encodeURIComponent(runId)}/abort`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ reason: \"no_progress\" }),\n signal: abortSignal,\n });\n } catch {\n // Best effort. The follow-up POST will still reconnect or 409 if\n // the producer is alive and cannot be aborted cross-isolate.\n } finally {\n clearActiveRun();\n }\n };\n\n const reconnectActiveRunForThread = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!threadId) return false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const activeRes = await fetch(\n `${apiUrl}/runs/active?threadId=${encodeURIComponent(threadId)}`,\n { signal: abortSignal },\n );\n if (!activeRes.ok) return false;\n const active = await activeRes.json();\n if (active?.active && active.runId) {\n const activeRunId = String(active.runId);\n runId = activeRunId;\n lastSeq = -1;\n setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return true;\n }\n return false;\n } catch (activeErr: unknown) {\n if (\n activeErr instanceof Error &&\n activeErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n await retryDelay(attempt, abortSignal);\n }\n }\n return false;\n };\n\n const visibleContentForContinuation = (): ContentPart[] => {\n if (\n visibleContinuationPrefix.length > 0 &&\n visibleContinuationPrefix.every(\n (part, index) => content[index] === part,\n )\n ) {\n return content.slice(visibleContinuationPrefix.length);\n }\n return content;\n };\n\n const prepareAutoContinuation = (\n signal: AgentAutoContinueSignal,\n ): { ok: boolean; resetVisibleContent: boolean } => {\n const isTransient = signal.reason !== \"loop_limit\";\n if (signal.reason === \"loop_limit\") {\n transientContinuationAttempts = 0;\n } else if (\n ++transientContinuationAttempts > MAX_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n const currentPartialHistory = contentToContinuationHistory(\n visibleContentForContinuation(),\n );\n if (isTransient && currentPartialHistory) {\n continuationHistoryFragments.push(currentPartialHistory);\n }\n const partialHistory = combineContinuationHistory(\n isTransient\n ? continuationHistoryFragments\n : [...continuationHistoryFragments, currentPartialHistory],\n );\n currentHistory = [\n ...history,\n { role: \"user\", content: normalizeMentions(rawMessageText) },\n ...(partialHistory\n ? [{ role: \"assistant\" as const, content: partialHistory }]\n : []),\n ];\n currentMessageText = autoContinueMessage(signal);\n includeAttachments = false;\n includeReferences = false;\n startupRecoveryAttempts = 0;\n clearActiveRun();\n if (!isTransient) {\n return { ok: true, resetVisibleContent: false };\n }\n\n const preservedContent = visibleTransientContinuationContent(content);\n content.splice(0, content.length, ...preservedContent);\n visibleContinuationPrefix = preservedContent;\n return { ok: true, resetVisibleContent: true };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n history: currentHistory,\n ...(threadId ? { threadId } : {}),\n ...(requestMode ? { mode: requestMode } : {}),\n ...(modelRef?.current ? { model: modelRef.current } : {}),\n ...(engineRef?.current ? { engine: engineRef.current } : {}),\n ...(effortRef?.current ? { effort: effortRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n }),\n signal: abortSignal,\n });\n\n // Check for auth errors returned as 200 with JSON (common with middleware issues)\n const contentType = res.headers.get(\"content-type\") || \"\";\n if (\n res.ok &&\n contentType.includes(\"application/json\") &&\n !contentType.includes(\"text/event-stream\")\n ) {\n try {\n const body = await res.text();\n const parsed = JSON.parse(body);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n if (\n e instanceof Error &&\n e.message !== \"Unexpected end of JSON input\"\n ) {\n throw e;\n }\n }\n }\n\n if (!res.ok) {\n if (res.status === 409) {\n let handledConflict = false;\n try {\n const body = await res.json();\n if (body?.activeRunId) {\n handledConflict = true;\n runId = String(body.activeRunId);\n lastSeq = -1;\n if (threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n }\n } catch {\n // Fall through to the generic response handling below.\n }\n if (handledConflict) {\n await delay(1000, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n }\n\n // 405 Method Not Allowed usually means the session is broken/expired\n // (e.g. a redirect to a login page that only accepts GET).\n if (res.status === 405) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"session-expired\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n let errorText = `Server error: ${res.status}`;\n try {\n const body = await res.text();\n if (\n body.includes(\"apiKey\") ||\n body.includes(\"authToken\") ||\n body.includes(\"ANTHROPIC_API_KEY\") ||\n body.includes(\"authentication\")\n ) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n } else if (body.includes(\"Cannot find any path\")) {\n errorText =\n \"Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.\";\n } else if (body) {\n errorText =\n body.length > 200 ? body.slice(0, 200) + \"...\" : body;\n }\n } catch {}\n throw new Error(errorText);\n }\n if (!res.body) {\n throw new Error(\"No response body\");\n }\n\n // Track the run ID for reconnection\n runId = res.headers.get(\"X-Run-Id\");\n if (runId && threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n\n yield* readSSEStream(\n res.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (runId && threadId) {\n updateActiveRunSeq(seq);\n }\n },\n runId,\n );\n\n // Run completed normally — clear active run state\n clearActiveRun();\n return;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n // User-initiated abort (Stop button) — clear active run\n clearActiveRun();\n return;\n }\n\n if (err instanceof AgentAutoContinueSignal) {\n if (err.reason === \"no_progress\") {\n await abortCurrentRun();\n }\n if (err.reason === \"stream_ended\") {\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n }\n const continuation = prepareAutoContinuation(err);\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n const runError = {\n message,\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\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: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n const errMsg =\n err instanceof Error ? err.message : \"Something went wrong.\";\n const isAuthError =\n errMsg.includes(\"Unauthorized\") ||\n errMsg.includes(\"Not authenticated\") ||\n errMsg.includes(\"401\") ||\n errMsg.includes(\"403\") ||\n errMsg.includes(\"405\");\n\n // Don't try to reconnect for auth/client errors — show error directly\n if (isAuthError) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:auth-error\"));\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n // Connection lost — try to reconnect to the run\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n\n // Reconnect failed or not possible — keep going from the partial\n // streamed content instead of surfacing a transient transport error.\n if (content.length > 0) {\n const continuation = prepareAutoContinuation(\n new AgentAutoContinueSignal({ reason: \"stream_ended\" }),\n );\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n const runError = {\n message,\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\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: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n if (\n isRetryableStartupError(errMsg) &&\n startupRecoveryAttempts < MAX_STARTUP_RECOVERY_ATTEMPTS\n ) {\n await retryDelay(startupRecoveryAttempts++, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n // No partial work exists, so this is still a real startup failure.\n const normalized = normalizeChatError(errMsg);\n const runError = {\n message: normalized.message,\n ...(normalized.details ? { details: normalized.details } : {}),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\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: errMsg.startsWith(\"Server error:\")\n ? errMsg\n : `Something went wrong: ${normalized.message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n return;\n }\n }\n } finally {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: false, tabId },\n }),\n );\n }\n }\n },\n };\n}\n"]}
1
+ {"version":3,"file":"agent-chat-adapter.js","sourceRoot":"","sources":["../../src/client/agent-chat-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ChatModelAdapter, ChatModelRunResult } from \"@assistant-ui/react\";\nimport {\n setActiveRun,\n updateActiveRunSeq,\n clearActiveRun,\n} from \"./active-run-state.js\";\nimport {\n AgentAutoContinueSignal,\n type ContentPart,\n readSSEStream,\n} from \"./sse-event-processor.js\";\nimport { agentNativePath } from \"./api-path.js\";\nimport { normalizeChatError } from \"./error-format.js\";\nimport type { ReasoningEffort } from \"../shared/reasoning-effort.js\";\n\ntype AdapterHistoryMessage = {\n role: \"user\" | \"assistant\";\n content: string;\n};\n\nconst AUTO_CONTINUE_PROMPT =\n \"Continue from where you left off and finish the user's original request. Do not repeat completed work, do not mention internal reconnects, time limits, or step limits, and continue as if this is the same uninterrupted run.\";\nconst MAX_RECONNECT_ATTEMPTS = 5;\nconst MAX_STARTUP_RECOVERY_ATTEMPTS = 8;\nconst MAX_STALE_RUN_CONTINUATIONS = 3;\nconst MAX_STALLED_TRANSIENT_CONTINUATIONS = 8;\nconst MAX_TOTAL_TRANSIENT_CONTINUATIONS = 32;\nconst RETRY_BASE_DELAY_MS = 500;\nconst RETRY_MAX_DELAY_MS = 8_000;\n\nfunction normalizeMentions(text: string): string {\n return text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\");\n}\n\nfunction truncateForContinuation(value: string, maxChars: number): string {\n if (value.length <= maxChars) return value;\n return `${value.slice(0, maxChars)}\\n\\n...[truncated ${value.length - maxChars} chars from prior partial output]`;\n}\n\nfunction contentToContinuationHistory(content: ContentPart[]): string {\n const chunks: string[] = [];\n for (const part of content) {\n if (part.type === \"text\") {\n if (part.text.trim()) chunks.push(part.text.trim());\n continue;\n }\n const toolSummary = [\n `Tool: ${part.toolName}`,\n part.argsText ? `Input: ${part.argsText}` : \"\",\n part.result\n ? `Result:\\n${truncateForContinuation(part.result, 8_000)}`\n : \"Result: interrupted before this tool returned a result\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n chunks.push(toolSummary);\n }\n return truncateForContinuation(chunks.join(\"\\n\\n\"), 40_000).trim();\n}\n\nfunction combineContinuationHistory(fragments: string[]): string {\n return truncateForContinuation(\n fragments.filter(Boolean).join(\"\\n\\n\"),\n 40_000,\n ).trim();\n}\n\nfunction visibleTransientContinuationContent(\n content: ContentPart[],\n): ContentPart[] {\n return content.filter(\n (part) => part.type === \"tool-call\" && part.result !== undefined,\n );\n}\n\nfunction hasContinuationProgress(content: ContentPart[]): boolean {\n return content.some((part) =>\n part.type === \"text\"\n ? part.text.trim().length > 0\n : part.result !== undefined,\n );\n}\n\nfunction snapshotContent(content: ContentPart[]): ContentPart[] {\n return content.map((part) =>\n part.type === \"text\" ? { ...part } : { ...part, args: { ...part.args } },\n );\n}\n\nfunction autoContinueMessage(signal: AgentAutoContinueSignal): string {\n const reason =\n signal.reason === \"loop_limit\"\n ? \"The previous run reached an internal step budget.\"\n : signal.reason === \"stale_run\"\n ? \"The previous run stopped unexpectedly in the server runtime before it could finish.\"\n : signal.reason === \"no_progress\"\n ? \"The previous run stopped producing progress events while the connection stayed open.\"\n : signal.reason === \"stream_ended\"\n ? \"The previous stream ended before the agent sent a final completion signal.\"\n : \"The previous run reached an internal execution budget.\";\n return `${AUTO_CONTINUE_PROMPT}\\n\\nInternal note: ${reason}`;\n}\n\nfunction delay(ms: number, abortSignal: AbortSignal): Promise<void> {\n if (abortSignal.aborted) return Promise.resolve();\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n abortSignal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n });\n}\n\nfunction retryDelay(attempt: number, abortSignal: AbortSignal): Promise<void> {\n const base = Math.min(\n RETRY_MAX_DELAY_MS,\n RETRY_BASE_DELAY_MS * Math.pow(2, attempt),\n );\n const jitter = base * 0.2;\n const ms = Math.max(0, base + (Math.random() * 2 - 1) * jitter);\n return delay(ms, abortSignal);\n}\n\nfunction isRetryableStartupError(message: string): boolean {\n const msg = message.toLowerCase();\n if (\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"404\") ||\n msg.includes(\"405\") ||\n msg.includes(\"missing api key\") ||\n msg.includes(\"api key\") ||\n msg.includes(\"context_length\") ||\n msg.includes(\"input_too_long\") ||\n msg.includes(\"too many tokens\") ||\n msg.includes(\"prompt is too long\") ||\n msg.includes(\"credits-limit\") ||\n msg.includes(\"billing\") ||\n msg.includes(\"permission\")\n ) {\n return false;\n }\n return (\n msg.includes(\"failed to fetch\") ||\n msg.includes(\"network\") ||\n msg.includes(\"connection\") ||\n msg.includes(\"reset\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"socket\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"server error: 408\") ||\n msg.includes(\"server error: 429\") ||\n msg.includes(\"server error: 500\") ||\n msg.includes(\"server error: 502\") ||\n msg.includes(\"server error: 503\") ||\n msg.includes(\"server error: 504\") ||\n msg.includes(\"429\") ||\n msg.includes(\"500\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\nfunction isAuthErrorMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\n msg.includes(\"authentication required\") ||\n msg.includes(\"unauthorized\") ||\n msg.includes(\"not authenticated\") ||\n msg.includes(\"session expired\") ||\n msg.includes(\"401\") ||\n msg.includes(\"403\") ||\n msg.includes(\"405\")\n );\n}\n\nfunction isMissingCredentialMessage(message: string): boolean {\n const msg = message.toLowerCase();\n return (\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\n/**\n * The composer's exec mode is sent as explicit request metadata. The server\n * owns the plan-mode prompt and read-only tool filtering so the chat history\n * stays clean and Plan mode is enforced outside the model's goodwill.\n */\n/**\n * Creates a ChatModelAdapter that connects to the agent-native\n * `/_agent-native/agent-chat` SSE endpoint. Supports reconnection via run-manager.\n */\nexport function createAgentChatAdapter(options?: {\n apiUrl?: string;\n tabId?: string;\n threadId?: string;\n modelRef?: { current: string | undefined };\n engineRef?: { current: string | undefined };\n effortRef?: { current: ReasoningEffort | undefined };\n execModeRef?: { current: \"build\" | \"plan\" | undefined };\n}): ChatModelAdapter {\n const apiUrl =\n options?.apiUrl ?? agentNativePath(\"/_agent-native/agent-chat\");\n const tabId = options?.tabId;\n const threadId = options?.threadId;\n const modelRef = options?.modelRef;\n const engineRef = options?.engineRef;\n const effortRef = options?.effortRef;\n const execModeRef = options?.execModeRef;\n\n return {\n async *run({ messages, abortSignal, runConfig }) {\n // Extract latest user message and build history from prior messages\n let lastUserMsg: (typeof messages)[number] | undefined;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") {\n lastUserMsg = messages[i];\n break;\n }\n }\n const rawMessageText =\n lastUserMsg?.content\n .filter((p): p is { type: \"text\"; text: string } => p.type === \"text\")\n .map((p) => p.text)\n .join(\"\\n\") ?? \"\";\n const requestMode =\n execModeRef?.current === \"plan\"\n ? \"plan\"\n : execModeRef?.current === \"build\"\n ? \"act\"\n : undefined;\n\n // Extract attachments (images as base64, text as content).\n // assistant-ui puts user attachments on msg.attachments (not on content);\n // each attachment carries its own content parts from the adapter.\n const attachments: {\n type: string;\n name: string;\n contentType?: string;\n data?: string;\n text?: string;\n }[] = [];\n if (lastUserMsg && \"attachments\" in lastUserMsg) {\n const msgAttachments = (\n lastUserMsg as {\n attachments?: readonly {\n name: string;\n contentType?: string;\n content: readonly Record<string, unknown>[];\n }[];\n }\n ).attachments;\n for (const att of msgAttachments ?? []) {\n for (const part of att.content) {\n if (part.type === \"image\" && typeof part.image === \"string\") {\n attachments.push({\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n data: part.image,\n });\n } else if (part.type === \"file\" && typeof part.data === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType:\n att.contentType ??\n (typeof part.mimeType === \"string\"\n ? part.mimeType\n : undefined),\n ...(part.data.startsWith(\"data:\")\n ? { data: part.data }\n : { text: part.data }),\n });\n } else if (part.type === \"text\" && typeof part.text === \"string\") {\n attachments.push({\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n text: part.text,\n });\n }\n }\n }\n }\n const userMessageText =\n rawMessageText.trim() || attachments.length === 0\n ? rawMessageText\n : \"Use the attached context.\";\n\n const history = messages\n .slice(0, -1) // exclude the latest user message\n .filter((m) => m.role === \"user\" || m.role === \"assistant\")\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content: m.content\n .filter(\n (p): p is { type: \"text\"; text: string } => p.type === \"text\",\n )\n .map((p) => p.text.replace(/@\\[([^\\]|]+)\\|[^\\]]+\\]/g, \"@$1\"))\n .join(\"\\n\"),\n }))\n .filter((m) => m.content.trim());\n\n // Signal that generation is starting\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: true, tabId },\n }),\n );\n }\n\n const content: ContentPart[] = [];\n const toolCallCounter = { value: 0 };\n let runId: string | null = null;\n let lastSeq = -1;\n let currentMessageText = normalizeMentions(userMessageText);\n let currentHistory: AdapterHistoryMessage[] = history;\n let includeAttachments = attachments.length > 0;\n let includeReferences = Boolean(runConfig?.custom?.references);\n let startupRecoveryAttempts = 0;\n let staleRunContinuationAttempts = 0;\n let stalledTransientContinuationAttempts = 0;\n let totalTransientContinuationAttempts = 0;\n const continuationHistoryFragments: string[] = [];\n let visibleContinuationPrefix: ContentPart[] = [];\n let lastAutoContinueReason: string | null = null;\n const attemptedRunIds: string[] = [];\n\n const connectionRecoveryDetails = (): string => {\n return [\n lastAutoContinueReason\n ? `last_auto_continue_reason: ${lastAutoContinueReason}`\n : \"\",\n `stale_run_continuations: ${staleRunContinuationAttempts}`,\n `stalled_transient_continuations: ${stalledTransientContinuationAttempts}`,\n `total_transient_continuations: ${totalTransientContinuationAttempts}`,\n attemptedRunIds.length > 0\n ? `attempted_runs: ${attemptedRunIds.join(\", \")}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\"\\n\");\n };\n\n try {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n try {\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;\n if (tz) headers[\"x-user-timezone\"] = tz;\n } catch {\n // Non-browser or Intl unavailable — tool calls will fall back to UTC.\n }\n\n const reconnectCurrentRun = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!runId) return false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const reconnectRes = await fetch(\n `${apiUrl}/runs/${encodeURIComponent(runId)}/events?after=${lastSeq + 1}`,\n { signal: abortSignal },\n );\n if (!reconnectRes.ok || !reconnectRes.body) break;\n\n yield* readSSEStream(\n reconnectRes.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (threadId) updateActiveRunSeq(seq);\n },\n runId,\n );\n clearActiveRun();\n return true;\n } catch (reconnectErr: unknown) {\n if (\n reconnectErr instanceof Error &&\n reconnectErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n if (reconnectErr instanceof AgentAutoContinueSignal) {\n if (reconnectErr.reason === \"no_progress\") {\n throw reconnectErr;\n }\n return false;\n }\n await retryDelay(attempt, abortSignal);\n }\n }\n return false;\n };\n\n const abortCurrentRun = async (): Promise<void> => {\n if (!runId) return;\n try {\n await fetch(`${apiUrl}/runs/${encodeURIComponent(runId)}/abort`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ reason: \"no_progress\" }),\n signal: abortSignal,\n });\n } catch {\n // Best effort. The follow-up POST will still reconnect or 409 if\n // the producer is alive and cannot be aborted cross-isolate.\n } finally {\n clearActiveRun();\n }\n };\n\n const reconnectActiveRunForThread = async function* (): AsyncGenerator<\n ChatModelRunResult,\n boolean,\n unknown\n > {\n if (!threadId) return false;\n for (let attempt = 0; attempt < MAX_RECONNECT_ATTEMPTS; attempt++) {\n try {\n const activeRes = await fetch(\n `${apiUrl}/runs/active?threadId=${encodeURIComponent(threadId)}`,\n { signal: abortSignal },\n );\n if (!activeRes.ok) return false;\n const active = await activeRes.json();\n if (active?.active && active.runId) {\n const activeRunId = String(active.runId);\n runId = activeRunId;\n if (!attemptedRunIds.includes(activeRunId)) {\n attemptedRunIds.push(activeRunId);\n }\n lastSeq = -1;\n setActiveRun({ threadId, runId: activeRunId, lastSeq: -1 });\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return true;\n }\n return false;\n } catch (activeErr: unknown) {\n if (\n activeErr instanceof Error &&\n activeErr.name === \"AbortError\"\n ) {\n clearActiveRun();\n return true;\n }\n await retryDelay(attempt, abortSignal);\n }\n }\n return false;\n };\n\n const visibleContentForContinuation = (): ContentPart[] => {\n if (\n visibleContinuationPrefix.length > 0 &&\n visibleContinuationPrefix.every(\n (part, index) => content[index] === part,\n )\n ) {\n return content.slice(visibleContinuationPrefix.length);\n }\n return content;\n };\n\n const prepareAutoContinuation = (\n signal: AgentAutoContinueSignal,\n ): { ok: boolean; resetVisibleContent: boolean } => {\n lastAutoContinueReason = signal.reason;\n const isTransient = signal.reason !== \"loop_limit\";\n const visibleContent = visibleContentForContinuation();\n const currentPartialHistory =\n contentToContinuationHistory(visibleContent);\n const madeProgress = hasContinuationProgress(visibleContent);\n\n if (signal.reason === \"loop_limit\") {\n stalledTransientContinuationAttempts = 0;\n } else {\n totalTransientContinuationAttempts += 1;\n if (signal.reason === \"stale_run\") {\n staleRunContinuationAttempts += 1;\n if (staleRunContinuationAttempts > MAX_STALE_RUN_CONTINUATIONS) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n stalledTransientContinuationAttempts = madeProgress\n ? 0\n : stalledTransientContinuationAttempts + 1;\n if (\n stalledTransientContinuationAttempts >\n MAX_STALLED_TRANSIENT_CONTINUATIONS ||\n totalTransientContinuationAttempts >\n MAX_TOTAL_TRANSIENT_CONTINUATIONS\n ) {\n return { ok: false, resetVisibleContent: false };\n }\n }\n\n if (isTransient && currentPartialHistory) {\n continuationHistoryFragments.push(currentPartialHistory);\n }\n const partialHistory = combineContinuationHistory(\n isTransient\n ? continuationHistoryFragments\n : [...continuationHistoryFragments, currentPartialHistory],\n );\n currentHistory = [\n ...history,\n { role: \"user\", content: normalizeMentions(userMessageText) },\n ...(partialHistory\n ? [{ role: \"assistant\" as const, content: partialHistory }]\n : []),\n ];\n currentMessageText = autoContinueMessage(signal);\n includeAttachments = false;\n includeReferences = false;\n startupRecoveryAttempts = 0;\n clearActiveRun();\n if (!isTransient) {\n return { ok: true, resetVisibleContent: false };\n }\n\n const preservedContent = visibleTransientContinuationContent(content);\n content.splice(0, content.length, ...preservedContent);\n visibleContinuationPrefix = preservedContent;\n return { ok: true, resetVisibleContent: true };\n };\n\n while (true) {\n try {\n runId = null;\n lastSeq = -1;\n const res = await fetch(apiUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n message: currentMessageText,\n history: currentHistory,\n ...(threadId ? { threadId } : {}),\n ...(requestMode ? { mode: requestMode } : {}),\n ...(modelRef?.current ? { model: modelRef.current } : {}),\n ...(engineRef?.current ? { engine: engineRef.current } : {}),\n ...(effortRef?.current ? { effort: effortRef.current } : {}),\n ...(includeAttachments ? { attachments } : {}),\n ...(includeReferences && runConfig?.custom?.references\n ? { references: runConfig.custom.references }\n : {}),\n }),\n signal: abortSignal,\n });\n\n // Check for auth errors returned as 200 with JSON (common with middleware issues)\n const contentType = res.headers.get(\"content-type\") || \"\";\n if (\n res.ok &&\n contentType.includes(\"application/json\") &&\n !contentType.includes(\"text/event-stream\")\n ) {\n try {\n const body = await res.text();\n const parsed = JSON.parse(body);\n if (parsed.error) {\n throw new Error(parsed.error);\n }\n } catch (e) {\n if (\n e instanceof Error &&\n e.message !== \"Unexpected end of JSON input\"\n ) {\n throw e;\n }\n }\n }\n\n if (!res.ok) {\n if (res.status === 409) {\n let handledConflict = false;\n try {\n const body = await res.json();\n if (body?.activeRunId) {\n handledConflict = true;\n runId = String(body.activeRunId);\n if (!attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n lastSeq = -1;\n if (threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n }\n } catch {\n // Fall through to the generic response handling below.\n }\n if (handledConflict) {\n await delay(1000, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n }\n\n if (res.status === 401 || res.status === 403) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"auth-required\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n // 405 Method Not Allowed usually means the session is broken/expired\n // (e.g. a redirect to a login page that only accepts GET).\n if (res.status === 405) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"session-expired\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n\n let errorText = `Server error: ${res.status}`;\n try {\n const body = await res.text();\n if (isAuthErrorMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agent-chat:auth-error\", {\n detail: { reason: \"auth-required\" },\n }),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n }\n if (isMissingCredentialMessage(body)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new Event(\"agent-chat:missing-api-key\"),\n );\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n } as ChatModelRunResult;\n return;\n } else if (body.includes(\"Cannot find any path\")) {\n errorText =\n \"Agent chat endpoint not found. Make sure the agent-chat plugin is loaded in server/plugins/.\";\n } else if (body) {\n errorText =\n body.length > 200 ? body.slice(0, 200) + \"...\" : body;\n }\n } catch {}\n throw new Error(errorText);\n }\n if (!res.body) {\n throw new Error(\"No response body\");\n }\n\n // Track the run ID for reconnection\n runId = res.headers.get(\"X-Run-Id\");\n if (runId && !attemptedRunIds.includes(runId)) {\n attemptedRunIds.push(runId);\n }\n if (runId && threadId) {\n setActiveRun({ threadId, runId, lastSeq: -1 });\n }\n\n yield* readSSEStream(\n res.body,\n content,\n toolCallCounter,\n tabId,\n (seq) => {\n lastSeq = seq;\n if (runId && threadId) {\n updateActiveRunSeq(seq);\n }\n },\n runId,\n );\n\n // Run completed normally — clear active run state\n clearActiveRun();\n return;\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n // User-initiated abort (Stop button) — clear active run\n clearActiveRun();\n return;\n }\n\n if (err instanceof AgentAutoContinueSignal) {\n if (err.reason === \"no_progress\") {\n await abortCurrentRun();\n }\n if (err.reason === \"stream_ended\") {\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n }\n const continuation = prepareAutoContinuation(err);\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\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: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n const errMsg =\n err instanceof Error ? err.message : \"Something went wrong.\";\n const isAuthError = isAuthErrorMessage(errMsg);\n\n // Don't try to reconnect for auth/client errors — show error directly\n if (isAuthError) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:auth-error\"));\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n if (isMissingCredentialMessage(errMsg)) {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(new Event(\"agent-chat:missing-api-key\"));\n }\n content.push({ type: \"text\", text: \"\" });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n };\n clearActiveRun();\n return;\n }\n\n // Connection lost — try to reconnect to the run\n const reconnected = yield* reconnectCurrentRun();\n if (reconnected) return;\n const activeReconnected = yield* reconnectActiveRunForThread();\n if (activeReconnected) return;\n\n // Reconnect failed or not possible — keep going from the partial\n // streamed content instead of surfacing a transient transport error.\n if (content.length > 0) {\n const continuation = prepareAutoContinuation(\n new AgentAutoContinueSignal({ reason: \"stream_ended\" }),\n );\n if (!continuation.ok) {\n const message =\n \"The agent connection kept failing after several automatic recovery attempts.\";\n const runError = {\n message,\n details: connectionRecoveryDetails(),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\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: `Something went wrong: ${message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: {\n custom: { ...(runId ? { runId } : {}), runError },\n },\n };\n clearActiveRun();\n return;\n }\n if (continuation.resetVisibleContent) {\n yield {\n content: snapshotContent(content),\n } as ChatModelRunResult;\n }\n await delay(250, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n if (\n isRetryableStartupError(errMsg) &&\n startupRecoveryAttempts < MAX_STARTUP_RECOVERY_ATTEMPTS\n ) {\n await retryDelay(startupRecoveryAttempts++, abortSignal);\n if (abortSignal.aborted) return;\n continue;\n }\n\n // No partial work exists, so this is still a real startup failure.\n const normalized = normalizeChatError(errMsg);\n const runError = {\n message: normalized.message,\n ...(normalized.details ? { details: normalized.details } : {}),\n errorCode: \"connection_error\",\n recoverable: true,\n ...(runId ? { runId } : {}),\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: errMsg.startsWith(\"Server error:\")\n ? errMsg\n : `Something went wrong: ${normalized.message}`,\n });\n yield {\n content: [...content],\n status: {\n type: \"incomplete\" as const,\n reason: \"error\" as const,\n },\n metadata: { custom: { ...(runId ? { runId } : {}), runError } },\n };\n return;\n }\n }\n } finally {\n if (typeof window !== \"undefined\") {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: { isRunning: false, tabId },\n }),\n );\n }\n }\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const SIDEBAR_OPEN_KEY = "agent-native-sidebar-open";
2
+ export declare function getInitialAgentSidebarOpen(defaultOpen: boolean): boolean;
3
+ //# sourceMappingURL=agent-sidebar-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-sidebar-state.d.ts","sourceRoot":"","sources":["../../src/client/agent-sidebar-state.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,gBAAgB,8BAA8B,CAAC;AAE5D,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAsBxE"}
@@ -0,0 +1,24 @@
1
+ import { isInBuilderFrame } from "./builder-frame.js";
2
+ export const SIDEBAR_OPEN_KEY = "agent-native-sidebar-open";
3
+ export function getInitialAgentSidebarOpen(defaultOpen) {
4
+ // On mobile viewports the sidebar would cover most of the screen, so
5
+ // always start closed regardless of any persisted desktop preference.
6
+ if (typeof window !== "undefined" &&
7
+ window.matchMedia("(max-width: 767px)").matches) {
8
+ return false;
9
+ }
10
+ // Builder owns the code/chat surface around embedded apps. Start the
11
+ // app-native chat collapsed there even if a previous standalone session
12
+ // persisted it as open.
13
+ if (isInBuilderFrame()) {
14
+ return false;
15
+ }
16
+ try {
17
+ const saved = localStorage.getItem(SIDEBAR_OPEN_KEY);
18
+ if (saved !== null)
19
+ return saved === "true";
20
+ }
21
+ catch { }
22
+ return defaultOpen;
23
+ }
24
+ //# sourceMappingURL=agent-sidebar-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-sidebar-state.js","sourceRoot":"","sources":["../../src/client/agent-sidebar-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG,2BAA2B,CAAC;AAE5D,MAAM,UAAU,0BAA0B,CAAC,WAAoB;IAC7D,qEAAqE;IACrE,sEAAsE;IACtE,IACE,OAAO,MAAM,KAAK,WAAW;QAC7B,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAC/C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qEAAqE;IACrE,wEAAwE;IACxE,wBAAwB;IACxB,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACrD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,KAAK,MAAM,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,WAAW,CAAC;AACrB,CAAC","sourcesContent":["import { isInBuilderFrame } from \"./builder-frame.js\";\n\nexport const SIDEBAR_OPEN_KEY = \"agent-native-sidebar-open\";\n\nexport function getInitialAgentSidebarOpen(defaultOpen: boolean): boolean {\n // On mobile viewports the sidebar would cover most of the screen, so\n // always start closed regardless of any persisted desktop preference.\n if (\n typeof window !== \"undefined\" &&\n window.matchMedia(\"(max-width: 767px)\").matches\n ) {\n return false;\n }\n\n // Builder owns the code/chat surface around embedded apps. Start the\n // app-native chat collapsed there even if a previous standalone session\n // persisted it as open.\n if (isInBuilderFrame()) {\n return false;\n }\n\n try {\n const saved = localStorage.getItem(SIDEBAR_OPEN_KEY);\n if (saved !== null) return saved === \"true\";\n } catch {}\n return defaultOpen;\n}\n"]}