@agent-native/core 0.30.6 → 0.31.1

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 (391) hide show
  1. package/dist/a2a/client.d.ts +2 -0
  2. package/dist/a2a/client.d.ts.map +1 -1
  3. package/dist/a2a/client.js +7 -5
  4. package/dist/a2a/client.js.map +1 -1
  5. package/dist/a2a/handlers.d.ts.map +1 -1
  6. package/dist/a2a/handlers.js +3 -0
  7. package/dist/a2a/handlers.js.map +1 -1
  8. package/dist/a2a/server.d.ts.map +1 -1
  9. package/dist/a2a/server.js.map +1 -1
  10. package/dist/a2a/task-store.d.ts.map +1 -1
  11. package/dist/a2a/task-store.js +5 -1
  12. package/dist/a2a/task-store.js.map +1 -1
  13. package/dist/action.js +22 -4
  14. package/dist/action.js.map +1 -1
  15. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  16. package/dist/agent/engine/ai-sdk-engine.js +5 -0
  17. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  18. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  19. package/dist/agent/engine/anthropic-engine.js +0 -7
  20. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  21. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  22. package/dist/agent/engine/builder-engine.js +4 -0
  23. package/dist/agent/engine/builder-engine.js.map +1 -1
  24. package/dist/agent/engine/registry.d.ts.map +1 -1
  25. package/dist/agent/engine/registry.js.map +1 -1
  26. package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
  27. package/dist/agent/engine/translate-ai-sdk.js +5 -3
  28. package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
  29. package/dist/agent/production-agent.d.ts.map +1 -1
  30. package/dist/agent/production-agent.js +31 -4
  31. package/dist/agent/production-agent.js.map +1 -1
  32. package/dist/agent/run-manager.d.ts.map +1 -1
  33. package/dist/agent/run-manager.js +21 -8
  34. package/dist/agent/run-manager.js.map +1 -1
  35. package/dist/agent/run-store.d.ts.map +1 -1
  36. package/dist/agent/run-store.js +5 -1
  37. package/dist/agent/run-store.js.map +1 -1
  38. package/dist/agent/tool-search.js.map +1 -1
  39. package/dist/application-state/store.d.ts.map +1 -1
  40. package/dist/application-state/store.js +18 -7
  41. package/dist/application-state/store.js.map +1 -1
  42. package/dist/brand-kit/brand-signals.d.ts +31 -0
  43. package/dist/brand-kit/brand-signals.d.ts.map +1 -0
  44. package/dist/brand-kit/brand-signals.js +101 -0
  45. package/dist/brand-kit/brand-signals.js.map +1 -0
  46. package/dist/brand-kit/index.d.ts +21 -0
  47. package/dist/brand-kit/index.d.ts.map +1 -0
  48. package/dist/brand-kit/index.js +34 -0
  49. package/dist/brand-kit/index.js.map +1 -0
  50. package/dist/brand-kit/types.d.ts +103 -0
  51. package/dist/brand-kit/types.d.ts.map +1 -0
  52. package/dist/brand-kit/types.js +17 -0
  53. package/dist/brand-kit/types.js.map +1 -0
  54. package/dist/browser-sessions/store.d.ts.map +1 -1
  55. package/dist/browser-sessions/store.js +6 -1
  56. package/dist/browser-sessions/store.js.map +1 -1
  57. package/dist/chat-threads/store.d.ts.map +1 -1
  58. package/dist/chat-threads/store.js +6 -2
  59. package/dist/chat-threads/store.js.map +1 -1
  60. package/dist/checkpoints/store.d.ts.map +1 -1
  61. package/dist/checkpoints/store.js +5 -1
  62. package/dist/checkpoints/store.js.map +1 -1
  63. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  64. package/dist/cli/code-agent-executor.js.map +1 -1
  65. package/dist/cli/create.d.ts.map +1 -1
  66. package/dist/cli/create.js +0 -1
  67. package/dist/cli/create.js.map +1 -1
  68. package/dist/client/AgentNative.js.map +1 -1
  69. package/dist/client/AgentPanel.d.ts.map +1 -1
  70. package/dist/client/AgentPanel.js +18 -20
  71. package/dist/client/AgentPanel.js.map +1 -1
  72. package/dist/client/AssistantChat.d.ts.map +1 -1
  73. package/dist/client/AssistantChat.js +69 -17
  74. package/dist/client/AssistantChat.js.map +1 -1
  75. package/dist/client/IframeEmbed.d.ts.map +1 -1
  76. package/dist/client/IframeEmbed.js.map +1 -1
  77. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  78. package/dist/client/MultiTabAssistantChat.js +1 -1
  79. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  80. package/dist/client/RunStuckBanner.js.map +1 -1
  81. package/dist/client/agent-chat.d.ts +0 -3
  82. package/dist/client/agent-chat.d.ts.map +1 -1
  83. package/dist/client/agent-chat.js +0 -3
  84. package/dist/client/agent-chat.js.map +1 -1
  85. package/dist/client/builder-mark.d.ts.map +1 -1
  86. package/dist/client/builder-mark.js.map +1 -1
  87. package/dist/client/components/CodeRequiredDialog.js +0 -7
  88. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  89. package/dist/client/components/MissingKeyCard.d.ts.map +1 -1
  90. package/dist/client/components/MissingKeyCard.js.map +1 -1
  91. package/dist/client/composer/PromptComposer.d.ts.map +1 -1
  92. package/dist/client/composer/PromptComposer.js +6 -3
  93. package/dist/client/composer/PromptComposer.js.map +1 -1
  94. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  95. package/dist/client/composer/TiptapComposer.js +5 -0
  96. package/dist/client/composer/TiptapComposer.js.map +1 -1
  97. package/dist/client/composer/VoiceButton.d.ts.map +1 -1
  98. package/dist/client/composer/VoiceButton.js +9 -0
  99. package/dist/client/composer/VoiceButton.js.map +1 -1
  100. package/dist/client/composer/extensions/FileReference.d.ts.map +1 -1
  101. package/dist/client/composer/extensions/FileReference.js.map +1 -1
  102. package/dist/client/composer/extensions/MentionReference.d.ts.map +1 -1
  103. package/dist/client/composer/extensions/MentionReference.js.map +1 -1
  104. package/dist/client/composer/extensions/SkillReference.d.ts.map +1 -1
  105. package/dist/client/composer/extensions/SkillReference.js.map +1 -1
  106. package/dist/client/composer/use-file-search.d.ts.map +1 -1
  107. package/dist/client/composer/use-file-search.js +14 -3
  108. package/dist/client/composer/use-file-search.js.map +1 -1
  109. package/dist/client/conversation/AgentConversation.js +8 -6
  110. package/dist/client/conversation/AgentConversation.js.map +1 -1
  111. package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
  112. package/dist/client/conversation/use-near-bottom-autoscroll.js +133 -35
  113. package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
  114. package/dist/client/db-admin/DbAdminPage.js.map +1 -1
  115. package/dist/client/db-admin/EditableCell.js +1 -1
  116. package/dist/client/db-admin/EditableCell.js.map +1 -1
  117. package/dist/client/dev-overlay/DevOverlay.d.ts +0 -2
  118. package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
  119. package/dist/client/dev-overlay/DevOverlay.js +1 -2
  120. package/dist/client/dev-overlay/DevOverlay.js.map +1 -1
  121. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  122. package/dist/client/extensions/EmbeddedExtension.js +19 -0
  123. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  124. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  125. package/dist/client/extensions/ExtensionViewer.js +11 -3
  126. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  127. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  128. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  129. package/dist/client/mcp-app-host.d.ts.map +1 -1
  130. package/dist/client/mcp-app-host.js +25 -3
  131. package/dist/client/mcp-app-host.js.map +1 -1
  132. package/dist/client/mcp-apps/McpAppRenderer.d.ts.map +1 -1
  133. package/dist/client/mcp-apps/McpAppRenderer.js +1 -1
  134. package/dist/client/mcp-apps/McpAppRenderer.js.map +1 -1
  135. package/dist/client/notifications/NotificationsBell.js.map +1 -1
  136. package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
  137. package/dist/client/onboarding/SetupButton.js +6 -0
  138. package/dist/client/onboarding/SetupButton.js.map +1 -1
  139. package/dist/client/progress/RunsTray.js.map +1 -1
  140. package/dist/client/resources/McpServerDetail.d.ts.map +1 -1
  141. package/dist/client/resources/McpServerDetail.js.map +1 -1
  142. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  143. package/dist/client/resources/ResourcesPanel.js +0 -1
  144. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  145. package/dist/client/settings/AgentsSection.d.ts.map +1 -1
  146. package/dist/client/settings/AgentsSection.js +1 -1
  147. package/dist/client/settings/AgentsSection.js.map +1 -1
  148. package/dist/client/settings/AutomationsSection.js.map +1 -1
  149. package/dist/client/settings/SettingsPanel.js +2 -2
  150. package/dist/client/settings/SettingsPanel.js.map +1 -1
  151. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  152. package/dist/client/sharing/ShareButton.js +0 -4
  153. package/dist/client/sharing/ShareButton.js.map +1 -1
  154. package/dist/client/sse-event-processor.d.ts.map +1 -1
  155. package/dist/client/sse-event-processor.js +13 -3
  156. package/dist/client/sse-event-processor.js.map +1 -1
  157. package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
  158. package/dist/client/terminal/AgentTerminal.js +1 -1
  159. package/dist/client/terminal/AgentTerminal.js.map +1 -1
  160. package/dist/client/use-agent-chat.d.ts.map +1 -1
  161. package/dist/client/use-agent-chat.js +20 -4
  162. package/dist/client/use-agent-chat.js.map +1 -1
  163. package/dist/client/use-chat-threads.d.ts.map +1 -1
  164. package/dist/client/use-chat-threads.js +39 -25
  165. package/dist/client/use-chat-threads.js.map +1 -1
  166. package/dist/client/use-db-sync.d.ts.map +1 -1
  167. package/dist/client/use-db-sync.js +24 -0
  168. package/dist/client/use-db-sync.js.map +1 -1
  169. package/dist/client/use-dev-mode.d.ts.map +1 -1
  170. package/dist/client/use-dev-mode.js +25 -9
  171. package/dist/client/use-dev-mode.js.map +1 -1
  172. package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
  173. package/dist/client/use-run-stuck-detection.js +7 -1
  174. package/dist/client/use-run-stuck-detection.js.map +1 -1
  175. package/dist/client/useProductionAgent.d.ts.map +1 -1
  176. package/dist/client/useProductionAgent.js +6 -2
  177. package/dist/client/useProductionAgent.js.map +1 -1
  178. package/dist/collab/agent-presence.d.ts +0 -3
  179. package/dist/collab/agent-presence.d.ts.map +1 -1
  180. package/dist/collab/agent-presence.js +3 -5
  181. package/dist/collab/agent-presence.js.map +1 -1
  182. package/dist/collab/awareness.d.ts.map +1 -1
  183. package/dist/collab/awareness.js +11 -1
  184. package/dist/collab/awareness.js.map +1 -1
  185. package/dist/collab/client-struct.js.map +1 -1
  186. package/dist/collab/storage.d.ts.map +1 -1
  187. package/dist/collab/storage.js +5 -1
  188. package/dist/collab/storage.js.map +1 -1
  189. package/dist/collab/ydoc-manager.d.ts.map +1 -1
  190. package/dist/collab/ydoc-manager.js +35 -8
  191. package/dist/collab/ydoc-manager.js.map +1 -1
  192. package/dist/deploy/build.js +0 -5
  193. package/dist/deploy/build.js.map +1 -1
  194. package/dist/extensions/content-patch.js +1 -1
  195. package/dist/extensions/content-patch.js.map +1 -1
  196. package/dist/extensions/fetch-tool.d.ts.map +1 -1
  197. package/dist/extensions/fetch-tool.js +4 -1
  198. package/dist/extensions/fetch-tool.js.map +1 -1
  199. package/dist/extensions/routes.js +12 -12
  200. package/dist/extensions/routes.js.map +1 -1
  201. package/dist/extensions/slots/store.d.ts.map +1 -1
  202. package/dist/extensions/slots/store.js +5 -1
  203. package/dist/extensions/slots/store.js.map +1 -1
  204. package/dist/file-upload/actions/upload-image.d.ts.map +1 -1
  205. package/dist/file-upload/actions/upload-image.js +39 -4
  206. package/dist/file-upload/actions/upload-image.js.map +1 -1
  207. package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
  208. package/dist/integrations/a2a-continuations-store.js +5 -1
  209. package/dist/integrations/a2a-continuations-store.js.map +1 -1
  210. package/dist/integrations/adapters/email.d.ts.map +1 -1
  211. package/dist/integrations/adapters/email.js +5 -2
  212. package/dist/integrations/adapters/email.js.map +1 -1
  213. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  214. package/dist/integrations/adapters/slack.js.map +1 -1
  215. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  216. package/dist/integrations/google-docs-poller.js +16 -5
  217. package/dist/integrations/google-docs-poller.js.map +1 -1
  218. package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
  219. package/dist/integrations/pending-tasks-retry-job.js +6 -2
  220. package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
  221. package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
  222. package/dist/integrations/pending-tasks-store.js +5 -1
  223. package/dist/integrations/pending-tasks-store.js.map +1 -1
  224. package/dist/integrations/plugin.d.ts.map +1 -1
  225. package/dist/integrations/plugin.js +14 -3
  226. package/dist/integrations/plugin.js.map +1 -1
  227. package/dist/integrations/remote-commands-store.d.ts.map +1 -1
  228. package/dist/integrations/remote-commands-store.js +5 -1
  229. package/dist/integrations/remote-commands-store.js.map +1 -1
  230. package/dist/integrations/remote-devices-store.d.ts.map +1 -1
  231. package/dist/integrations/remote-devices-store.js +5 -1
  232. package/dist/integrations/remote-devices-store.js.map +1 -1
  233. package/dist/integrations/remote-push-store.d.ts.map +1 -1
  234. package/dist/integrations/remote-push-store.js +5 -1
  235. package/dist/integrations/remote-push-store.js.map +1 -1
  236. package/dist/integrations/remote-retry-job.js +1 -1
  237. package/dist/integrations/remote-retry-job.js.map +1 -1
  238. package/dist/integrations/remote-run-events-store.d.ts.map +1 -1
  239. package/dist/integrations/remote-run-events-store.js +5 -1
  240. package/dist/integrations/remote-run-events-store.js.map +1 -1
  241. package/dist/integrations/thread-mapping-store.d.ts.map +1 -1
  242. package/dist/integrations/thread-mapping-store.js +5 -1
  243. package/dist/integrations/thread-mapping-store.js.map +1 -1
  244. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  245. package/dist/integrations/webhook-handler.js +10 -1
  246. package/dist/integrations/webhook-handler.js.map +1 -1
  247. package/dist/jobs/scheduler.d.ts.map +1 -1
  248. package/dist/jobs/scheduler.js +31 -15
  249. package/dist/jobs/scheduler.js.map +1 -1
  250. package/dist/jobs/tools.d.ts.map +1 -1
  251. package/dist/jobs/tools.js +4 -1
  252. package/dist/jobs/tools.js.map +1 -1
  253. package/dist/mcp/build-server.d.ts.map +1 -1
  254. package/dist/mcp/build-server.js +24 -9
  255. package/dist/mcp/build-server.js.map +1 -1
  256. package/dist/mcp/connect-store.d.ts +3 -4
  257. package/dist/mcp/connect-store.d.ts.map +1 -1
  258. package/dist/mcp/connect-store.js +5 -5
  259. package/dist/mcp/connect-store.js.map +1 -1
  260. package/dist/mcp-client/routes.js +6 -1
  261. package/dist/mcp-client/routes.js.map +1 -1
  262. package/dist/notifications/channels.d.ts.map +1 -1
  263. package/dist/notifications/channels.js +3 -2
  264. package/dist/notifications/channels.js.map +1 -1
  265. package/dist/oauth-tokens/store.d.ts.map +1 -1
  266. package/dist/oauth-tokens/store.js +5 -1
  267. package/dist/oauth-tokens/store.js.map +1 -1
  268. package/dist/observability/evals.d.ts.map +1 -1
  269. package/dist/observability/evals.js +7 -7
  270. package/dist/observability/evals.js.map +1 -1
  271. package/dist/observability/traces.d.ts.map +1 -1
  272. package/dist/observability/traces.js +15 -5
  273. package/dist/observability/traces.js.map +1 -1
  274. package/dist/org/accept-pending.js +1 -1
  275. package/dist/org/accept-pending.js.map +1 -1
  276. package/dist/org/handlers.d.ts.map +1 -1
  277. package/dist/org/handlers.js +3 -2
  278. package/dist/org/handlers.js.map +1 -1
  279. package/dist/progress/store.d.ts.map +1 -1
  280. package/dist/progress/store.js +11 -1
  281. package/dist/progress/store.js.map +1 -1
  282. package/dist/resources/handlers.d.ts +5 -5
  283. package/dist/resources/handlers.d.ts.map +1 -1
  284. package/dist/resources/handlers.js +0 -2
  285. package/dist/resources/handlers.js.map +1 -1
  286. package/dist/resources/store.d.ts.map +1 -1
  287. package/dist/resources/store.js +23 -13
  288. package/dist/resources/store.js.map +1 -1
  289. package/dist/scripts/db/query.d.ts.map +1 -1
  290. package/dist/scripts/db/query.js +1 -2
  291. package/dist/scripts/db/query.js.map +1 -1
  292. package/dist/scripts/db/schema.js.map +1 -1
  293. package/dist/server/action-discovery.d.ts.map +1 -1
  294. package/dist/server/action-discovery.js +10 -3
  295. package/dist/server/action-discovery.js.map +1 -1
  296. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  297. package/dist/server/agent-chat-plugin.js +3 -6
  298. package/dist/server/agent-chat-plugin.js.map +1 -1
  299. package/dist/server/auth.d.ts.map +1 -1
  300. package/dist/server/auth.js +13 -9
  301. package/dist/server/auth.js.map +1 -1
  302. package/dist/server/better-auth-instance.d.ts.map +1 -1
  303. package/dist/server/better-auth-instance.js +0 -3
  304. package/dist/server/better-auth-instance.js.map +1 -1
  305. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  306. package/dist/server/core-routes-plugin.js +1 -2
  307. package/dist/server/core-routes-plugin.js.map +1 -1
  308. package/dist/server/create-server.d.ts.map +1 -1
  309. package/dist/server/create-server.js +0 -23
  310. package/dist/server/create-server.js.map +1 -1
  311. package/dist/server/google-oauth.d.ts.map +1 -1
  312. package/dist/server/google-oauth.js +0 -3
  313. package/dist/server/google-oauth.js.map +1 -1
  314. package/dist/server/identity-sso-store.d.ts.map +1 -1
  315. package/dist/server/identity-sso-store.js +14 -3
  316. package/dist/server/identity-sso-store.js.map +1 -1
  317. package/dist/server/poll.d.ts.map +1 -1
  318. package/dist/server/poll.js +67 -18
  319. package/dist/server/poll.js.map +1 -1
  320. package/dist/server/schema-prompt.js +1 -1
  321. package/dist/server/schema-prompt.js.map +1 -1
  322. package/dist/server/security-headers.d.ts +5 -4
  323. package/dist/server/security-headers.d.ts.map +1 -1
  324. package/dist/server/security-headers.js +5 -4
  325. package/dist/server/security-headers.js.map +1 -1
  326. package/dist/settings/store.d.ts.map +1 -1
  327. package/dist/settings/store.js +5 -1
  328. package/dist/settings/store.js.map +1 -1
  329. package/dist/sharing/access.d.ts.map +1 -1
  330. package/dist/sharing/access.js +25 -4
  331. package/dist/sharing/access.js.map +1 -1
  332. package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
  333. package/dist/sharing/actions/set-resource-visibility.js +8 -1
  334. package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
  335. package/dist/triggers/actions.d.ts.map +1 -1
  336. package/dist/triggers/actions.js +1 -2
  337. package/dist/triggers/actions.js.map +1 -1
  338. package/dist/triggers/dispatcher.d.ts.map +1 -1
  339. package/dist/triggers/dispatcher.js +36 -8
  340. package/dist/triggers/dispatcher.js.map +1 -1
  341. package/dist/usage/store.d.ts.map +1 -1
  342. package/dist/usage/store.js +5 -1
  343. package/dist/usage/store.js.map +1 -1
  344. package/dist/vite/client.d.ts.map +1 -1
  345. package/dist/vite/client.js +7 -5
  346. package/dist/vite/client.js.map +1 -1
  347. package/package.json +3 -2
  348. package/dist/client/conversation/AgentConversation.spec.d.ts +0 -2
  349. package/dist/client/conversation/AgentConversation.spec.d.ts.map +0 -1
  350. package/dist/client/conversation/AgentConversation.spec.js +0 -69
  351. package/dist/client/conversation/AgentConversation.spec.js.map +0 -1
  352. package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.d.ts +0 -2
  353. package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.d.ts.map +0 -1
  354. package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.js +0 -110
  355. package/dist/client/extensions/AgentNativeExtensionFrame.e2e-host.js.map +0 -1
  356. package/dist/client/extensions/AgentNativeExtensionFrame.spec.d.ts +0 -2
  357. package/dist/client/extensions/AgentNativeExtensionFrame.spec.d.ts.map +0 -1
  358. package/dist/client/extensions/AgentNativeExtensionFrame.spec.js +0 -68
  359. package/dist/client/extensions/AgentNativeExtensionFrame.spec.js.map +0 -1
  360. package/dist/client/extensions/ExtensionViewer.spec.d.ts +0 -2
  361. package/dist/client/extensions/ExtensionViewer.spec.d.ts.map +0 -1
  362. package/dist/client/extensions/ExtensionViewer.spec.js +0 -94
  363. package/dist/client/extensions/ExtensionViewer.spec.js.map +0 -1
  364. package/dist/client/guided-questions.flow.spec.d.ts +0 -2
  365. package/dist/client/guided-questions.flow.spec.d.ts.map +0 -1
  366. package/dist/client/guided-questions.flow.spec.js +0 -147
  367. package/dist/client/guided-questions.flow.spec.js.map +0 -1
  368. package/dist/client/settings/useBuilderStatus.spec.d.ts +0 -2
  369. package/dist/client/settings/useBuilderStatus.spec.d.ts.map +0 -1
  370. package/dist/client/settings/useBuilderStatus.spec.js +0 -487
  371. package/dist/client/settings/useBuilderStatus.spec.js.map +0 -1
  372. package/dist/client/sharing/ShareButton.spec.d.ts +0 -2
  373. package/dist/client/sharing/ShareButton.spec.d.ts.map +0 -1
  374. package/dist/client/sharing/ShareButton.spec.js +0 -196
  375. package/dist/client/sharing/ShareButton.spec.js.map +0 -1
  376. package/dist/client/use-chat-models.spec.d.ts +0 -2
  377. package/dist/client/use-chat-models.spec.d.ts.map +0 -1
  378. package/dist/client/use-chat-models.spec.js +0 -39
  379. package/dist/client/use-chat-models.spec.js.map +0 -1
  380. package/dist/client/use-chat-threads.spec.d.ts +0 -2
  381. package/dist/client/use-chat-threads.spec.d.ts.map +0 -1
  382. package/dist/client/use-chat-threads.spec.js +0 -760
  383. package/dist/client/use-chat-threads.spec.js.map +0 -1
  384. package/dist/client/use-db-sync.spec.d.ts +0 -2
  385. package/dist/client/use-db-sync.spec.d.ts.map +0 -1
  386. package/dist/client/use-db-sync.spec.js +0 -107
  387. package/dist/client/use-db-sync.spec.js.map +0 -1
  388. package/dist/server/script-discovery.d.ts +0 -6
  389. package/dist/server/script-discovery.d.ts.map +0 -1
  390. package/dist/server/script-discovery.js +0 -6
  391. package/dist/server/script-discovery.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agent/engine/registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Engine Registry.\n *\n * Mirrors the CLI_REGISTRY pattern (packages/core/src/terminal/cli-registry.ts)\n * but is open — anyone can register a custom engine via registerAgentEngine()\n * from a server plugin at startup.\n *\n * Built-in engines (anthropic, ai-sdk) are auto-registered by builtin.ts.\n */\n\nimport { createRequire } from \"node:module\";\nimport type {\n AgentEngine,\n EngineCapabilities,\n EngineStreamOptions,\n} from \"./types.js\";\nimport { getSetting } from \"../../settings/store.js\";\nimport { getAgentAppModelDefaultForCurrentRequest } from \"../app-model-defaults.js\";\nimport {\n canUseDeployCredentialFallbackForRequest,\n readDeployCredentialEnv,\n resolveBuilderCredentials,\n resolveSecret,\n} from \"../../server/credential-provider.js\";\n\nconst require = createRequire(import.meta.url);\n\nexport interface AgentEngineEntry {\n /** Unique name, e.g. \"anthropic\", \"ai-sdk:anthropic\", \"ai-sdk:openai\" */\n name: string;\n /** Human-readable label for UI */\n label: string;\n /** Short description for engine picker */\n description: string;\n /** npm package hint displayed in UI when package is missing */\n installPackage?: string;\n /** Engine capabilities */\n capabilities: EngineCapabilities;\n /** Default model string */\n defaultModel: string;\n /** All supported models (shown in model picker) */\n supportedModels: readonly string[];\n /** Environment variables required for this engine to work */\n requiredEnvVars: string[];\n /** Create an engine instance from config */\n create(config: Record<string, unknown>): AgentEngine;\n}\n\nconst _registry = new Map<string, AgentEngineEntry>();\nconst _packageAvailabilityCache = new Map<string, boolean>();\n\n/**\n * Register a custom agent engine. Called at server startup (e.g., from a\n * server plugin or builtin.ts). Throws if name is already registered.\n */\nexport function registerAgentEngine(entry: AgentEngineEntry): void {\n if (_registry.has(entry.name)) {\n // Allow re-registration in tests / hot-reload — just overwrite\n if (process.env.NODE_ENV === \"test\") {\n _registry.set(entry.name, entry);\n return;\n }\n console.warn(\n `[agent-engine] Engine \"${entry.name}\" is already registered. Skipping.`,\n );\n return;\n }\n _registry.set(entry.name, entry);\n}\n\n/** Get a registered engine entry by name, or undefined if not found */\nexport function getAgentEngineEntry(\n name: string,\n): AgentEngineEntry | undefined {\n return _registry.get(name);\n}\n\n/** List all registered engine entries */\nexport function listAgentEngines(): AgentEngineEntry[] {\n return Array.from(_registry.values());\n}\n\nfunction packageNameFromInstallSpecifier(specifier: string): string | null {\n const trimmed = specifier.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith(\"-\")) return null;\n if (trimmed.startsWith(\"@\")) {\n const slashIndex = trimmed.indexOf(\"/\");\n if (slashIndex === -1) return trimmed;\n const versionIndex = trimmed.indexOf(\"@\", slashIndex + 1);\n return versionIndex === -1 ? trimmed : trimmed.slice(0, versionIndex);\n }\n const versionIndex = trimmed.indexOf(\"@\");\n return versionIndex === -1 ? trimmed : trimmed.slice(0, versionIndex);\n}\n\nfunction canResolvePackage(packageName: string): boolean {\n const cached = _packageAvailabilityCache.get(packageName);\n if (cached !== undefined) return cached;\n let available = false;\n try {\n require.resolve(packageName);\n available = true;\n } catch {\n available = false;\n }\n _packageAvailabilityCache.set(packageName, available);\n return available;\n}\n\nexport function isAgentEnginePackageInstalled(\n entry: AgentEngineEntry,\n): boolean {\n const packageNames =\n entry.installPackage\n ?.split(/\\s+/)\n .map(packageNameFromInstallSpecifier)\n .filter((name): name is string => Boolean(name)) ?? [];\n return packageNames.every(canResolvePackage);\n}\n\nfunction assertAgentEnginePackageInstalled(entry: AgentEngineEntry): void {\n if (isAgentEnginePackageInstalled(entry)) return;\n const installHint = entry.installPackage\n ? ` Run: pnpm add ${entry.installPackage}`\n : \"\";\n throw new Error(\n `[agent-engine] Engine \"${entry.name}\" requires optional packages that are not installed in this app.${installHint}`,\n );\n}\n\n/**\n * First registered engine whose requiredEnvVars are all set. Registration\n * order controls priority — the Builder gateway is registered first so it\n * wins when the Builder private key is present.\n *\n * Escape hatch: AGENT_ENGINE_PREFER_BYO_KEY=true skips the Builder engine\n * on the first pass, so an explicit provider key (ANTHROPIC_API_KEY etc.)\n * is picked instead. Builder is still used as the fallback when no other\n * provider key is set.\n */\nexport function detectEngineFromEnv(): AgentEngineEntry | null {\n const preferByo = /^(1|true)$/i.test(\n process.env.AGENT_ENGINE_PREFER_BYO_KEY ?? \"\",\n );\n\n if (preferByo) {\n for (const entry of _registry.values()) {\n if (entry.name === \"builder\") continue;\n if (entry.requiredEnvVars.length === 0) continue;\n if (!isAgentEnginePackageInstalled(entry)) continue;\n if (entry.requiredEnvVars.every((v) => !!readDeployCredentialEnv(v))) {\n return entry;\n }\n }\n // No BYO key matched — fall through to include Builder as fallback.\n }\n\n for (const entry of _registry.values()) {\n if (entry.requiredEnvVars.length === 0) continue;\n if (!isAgentEnginePackageInstalled(entry)) continue;\n if (entry.requiredEnvVars.every((v) => !!readDeployCredentialEnv(v))) {\n return entry;\n }\n }\n return null;\n}\n\nfunction shouldTraceEngineDetection(): boolean {\n return /^(1|true)$/i.test(\n process.env.AGENT_NATIVE_DEBUG_AGENT_ENGINE_DETECT ??\n process.env.AGENT_NATIVE_DEBUG_CREDENTIAL_RESOLVE ??\n \"\",\n );\n}\n\n/**\n * Detect a usable engine from the current request user's accessible\n * `app_secrets` rows. Mirrors `detectEngineFromEnv` but consults the\n * encrypted secret store instead of `process.env`, including org-scoped\n * credentials shared with the active organization.\n *\n * Required because the Builder OAuth callback (and the settings UI's\n * \"paste your own key\" flow) writes credentials to app_secrets, not env.\n * Without this check, a user who connected Builder would see status\n * \"configured\" but the next chat turn would fall through to the default\n * Anthropic engine and hit `missing_api_key` — exactly Brent's symptom\n * on the docs site (Loom 2026-04-28: \"It doesn't seem to realize I'm\n * connected once I do a chat\").\n *\n * Includes the local dev session (`local@localhost`): the Builder\n * OAuth flow writes credentials scoped to that email when run from\n * `pnpm dev`, so detection has to consult those rows or the dev user\n * sees the same \"Connect your AI\" card after they've already connected\n * (Sami, 2026-04-30). Org-scoped Builder credentials must also count here:\n * `/builder/status` resolves them via the same request org context, and the\n * chat engine picker must not disagree with that card.\n */\nexport async function detectEngineFromUserSecrets(): Promise<AgentEngineEntry | null> {\n const traceLookup = shouldTraceEngineDetection();\n let email: string | undefined;\n let orgId: string | null | undefined;\n try {\n const { getRequestUserEmail, getRequestOrgId } =\n await import(\"../../server/request-context.js\");\n email = getRequestUserEmail();\n orgId = getRequestOrgId();\n } catch {\n if (traceLookup) {\n console.log(\n `[engine-detect] result=null reason=no-request-context email=(unknown) orgId=(unknown)`,\n );\n }\n return null;\n }\n if (!email) {\n if (traceLookup) {\n console.log(\n `[engine-detect] result=null reason=no-email email=(empty) orgId=${orgId ?? \"(none)\"}`,\n );\n }\n return null;\n }\n\n const hasAllKeys = async (entry: AgentEngineEntry): Promise<boolean> => {\n if (!isAgentEnginePackageInstalled(entry)) return false;\n if (entry.requiredEnvVars.length === 0) return false;\n if (entry.name === \"builder\") {\n const creds = await resolveBuilderCredentials();\n return Boolean(creds.privateKey && creds.publicKey);\n }\n for (const key of entry.requiredEnvVars) {\n try {\n if (!(await resolveSecret(key))) return false;\n } catch {\n return false;\n }\n }\n return true;\n };\n\n const preferByo = /^(1|true)$/i.test(\n process.env.AGENT_ENGINE_PREFER_BYO_KEY ?? \"\",\n );\n\n if (preferByo) {\n for (const entry of _registry.values()) {\n if (entry.name === \"builder\") continue;\n if (await hasAllKeys(entry)) {\n if (traceLookup) {\n console.log(\n `[engine-detect] result=${entry.name} email=${email} orgId=${orgId ?? \"(none)\"} byo=true`,\n );\n }\n return entry;\n }\n }\n // No BYO key matched — fall through to include Builder as fallback.\n }\n\n for (const entry of _registry.values()) {\n if (await hasAllKeys(entry)) {\n if (traceLookup) {\n console.log(\n `[engine-detect] result=${entry.name} email=${email} orgId=${orgId ?? \"(none)\"}`,\n );\n }\n return entry;\n }\n }\n if (traceLookup) {\n console.log(\n `[engine-detect] result=null reason=no-engine-keys-found email=${email} orgId=${orgId ?? \"(none)\"}`,\n );\n }\n return null;\n}\n\n/**\n * Legacy inline API keys on the global `agent-engine` settings row are\n * intentionally ignored. That row is deployment-wide, so treating\n * `{ apiKey }` or `{ config: { apiKey } }` as configured would let one\n * user's pasted key power every other user. Per-user keys live in\n * `app_secrets` and are resolved separately.\n */\nexport function isAgentEngineSettingConfigured(stored: unknown): boolean {\n if (!stored || typeof stored !== \"object\") return false;\n const s = stored as {\n engine?: unknown;\n };\n if (typeof s.engine !== \"string\" || !s.engine) return false;\n return false;\n}\n\nfunction stripInlineApiKeyConfig(\n config: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (!config) return {};\n const { apiKey: _discardedApiKey, ...safeConfig } = config;\n return safeConfig;\n}\n\nfunction engineCreateConfig(\n apiKey: string | undefined,\n extra?: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n apiKey,\n allowEnvFallback: canUseDeployCredentialFallbackForRequest(),\n ...(extra ?? {}),\n };\n}\n\n/**\n * True when the stored `agent-engine` row points at a registered engine\n * AND an API key for it is reachable via the engine's required env vars.\n * Inline keys on the global settings row are ignored; see\n * `isAgentEngineSettingConfigured`.\n */\nexport function isStoredEngineUsable(\n stored: unknown,\n entry: AgentEngineEntry,\n): boolean {\n if (!isAgentEnginePackageInstalled(entry)) return false;\n if (isAgentEngineSettingConfigured(stored)) return true;\n if (entry.requiredEnvVars.length === 0) return true;\n return entry.requiredEnvVars.every((v) => !!readDeployCredentialEnv(v));\n}\n\n/**\n * Request-aware version of `isStoredEngineUsable`.\n *\n * The settings row stores the selected engine/model, while credentials may\n * live in per-user/org `app_secrets`. The sync helper intentionally only sees\n * deploy env vars; this async helper is what request-time routes should use\n * when deciding whether a stored engine can actually run for the current user.\n */\nexport async function isStoredEngineUsableForRequest(\n stored: unknown,\n entry: AgentEngineEntry,\n): Promise<boolean> {\n if (!isAgentEnginePackageInstalled(entry)) return false;\n if (isAgentEngineSettingConfigured(stored)) return true;\n if (entry.requiredEnvVars.length === 0) return true;\n if (entry.name === \"builder\") {\n const creds = await resolveBuilderCredentials();\n return Boolean(creds.privateKey && creds.publicKey);\n }\n for (const key of entry.requiredEnvVars) {\n try {\n if (await resolveSecret(key)) continue;\n } catch {\n // Fall through to the deployment-level check below.\n }\n if (\n !canUseDeployCredentialFallbackForRequest() ||\n !readDeployCredentialEnv(key)\n ) {\n return false;\n }\n }\n return true;\n}\n\nexport interface ResolveEngineConfig {\n /** Explicit engine name or instance from createAgentChatPlugin options */\n engineOption?:\n | string\n | AgentEngine\n | { name: string; config: Record<string, unknown> };\n /** API key (used as config for the resolved engine) */\n apiKey?: string;\n /** Model override (used as part of engine config) */\n model?: string;\n /** App/template id used for org-scoped per-app model defaults. */\n appId?: string;\n}\n\n/**\n * Resolve an AgentEngine from options → explicit env → app default →\n * request credentials → settings → env → default.\n *\n * Resolution order:\n * 1. Explicit `engineOption` from plugin options (string name, instance, or {name, config})\n * 2. Env var AGENT_ENGINE\n * 3. Org/user app-template default, when usable\n * 4. Current request's app_secrets; Builder wins by default when connected\n * 5. Settings store key \"agent-engine\" → { engine: string }, when usable\n * 6. Auto-detect deployment env credentials\n * 7. Default \"anthropic\" (requires ANTHROPIC_API_KEY)\n */\nexport async function resolveEngine(\n config: ResolveEngineConfig,\n): Promise<AgentEngine> {\n const { engineOption, apiKey, model: _model, appId } = config;\n\n // 1. Explicit instance passed directly\n if (\n engineOption &&\n typeof engineOption === \"object\" &&\n \"stream\" in engineOption\n ) {\n return engineOption as AgentEngine;\n }\n\n // 2. Explicit {name, config} object\n if (\n engineOption &&\n typeof engineOption === \"object\" &&\n \"name\" in engineOption\n ) {\n const { name, config: engineConfig } = engineOption as {\n name: string;\n config: Record<string, unknown>;\n };\n const entry = _registry.get(name);\n if (!entry)\n throw new Error(\n `[agent-engine] Unknown engine: \"${name}\". Registered: ${[..._registry.keys()].join(\", \")}`,\n );\n assertAgentEnginePackageInstalled(entry);\n return entry.create(engineCreateConfig(apiKey, engineConfig));\n }\n\n // 3. Explicit string name from options\n if (typeof engineOption === \"string\") {\n const entry = _registry.get(engineOption);\n if (!entry)\n throw new Error(\n `[agent-engine] Unknown engine: \"${engineOption}\". Registered: ${[..._registry.keys()].join(\", \")}`,\n );\n assertAgentEnginePackageInstalled(entry);\n return entry.create(engineCreateConfig(apiKey));\n }\n\n // 4. Env var — explicit engine name override\n const envEngine = process.env.AGENT_ENGINE;\n if (envEngine) {\n const entry = _registry.get(envEngine);\n if (entry) {\n assertAgentEnginePackageInstalled(entry);\n return entry.create(engineCreateConfig(apiKey));\n }\n }\n\n const appDefault = await getAgentAppModelDefaultForCurrentRequest(appId);\n if (appDefault?.engine) {\n const entry = _registry.get(appDefault.engine);\n if (entry && (await isStoredEngineUsableForRequest(appDefault, entry))) {\n return entry.create(engineCreateConfig(apiKey));\n }\n }\n\n let stored:\n | (Record<string, unknown> & { engine?: unknown; config?: unknown })\n | null = null;\n try {\n stored = (await getSetting(\"agent-engine\")) as typeof stored;\n } catch {\n // Settings not available — fall through\n }\n\n // 5. Auto-detect from the current user's per-user `app_secrets` rows\n // (Builder OAuth callback + \"paste your own key\" settings flow write\n // here, not env). Comes before env-detection so a user-specific\n // Builder connection wins over a stale deploy-level/provider key.\n const detectedFromUser = await detectEngineFromUserSecrets();\n if (detectedFromUser?.name === \"builder\") {\n return detectedFromUser.create(engineCreateConfig(apiKey));\n }\n\n // 6. Settings store — only when the stored row's API key is reachable.\n // This remains below Builder detection so \"Builder.io connected\" and the\n // runtime agree on the default managed gateway path. Non-Builder user keys\n // still honor the stored provider/model when Builder is not connected.\n if (stored && typeof stored.engine === \"string\") {\n const entry = _registry.get(stored.engine);\n if (entry && (await isStoredEngineUsableForRequest(stored, entry))) {\n return entry.create({\n ...engineCreateConfig(\n apiKey,\n stripInlineApiKeyConfig(\n stored.config as Record<string, unknown> | undefined,\n ),\n ),\n });\n }\n }\n\n if (detectedFromUser) {\n return detectedFromUser.create(engineCreateConfig(apiKey));\n }\n\n // 8. Auto-detect from any provider env var — so just dropping a key in\n // .env works without also setting AGENT_ENGINE.\n const detected = canUseDeployCredentialFallbackForRequest()\n ? detectEngineFromEnv()\n : null;\n if (detected) return detected.create(engineCreateConfig(apiKey));\n\n // 9. Default: anthropic\n const anthropicEntry = _registry.get(\"anthropic\");\n if (!anthropicEntry) {\n throw new Error(\n \"[agent-engine] Default Anthropic engine is not registered. Did builtin.ts fail to load?\",\n );\n }\n return anthropicEntry.create(engineCreateConfig(apiKey));\n}\n\n/**\n * Read the user-selected model for an engine from the `agent-engine` setting.\n *\n * The settings UI writes `{engine, model}` via the `manage-agent-engine` action=\"set\",\n * but `resolveEngine` only uses the stored engine (the model is a separate\n * per-request concern). Call this helper alongside `resolveEngine` to honor\n * the user's model choice without requiring a process restart.\n *\n * Returns the stored model only when the stored engine name matches `engine`\n * — otherwise returns `undefined` to avoid applying an Anthropic model string\n * to, say, an OpenRouter engine.\n */\nexport async function getStoredModelForEngine(\n engine: AgentEngine | string,\n options: { appId?: string } = {},\n): Promise<string | undefined> {\n const engineName = typeof engine === \"string\" ? engine : engine.name;\n try {\n const appDefault = await getAgentAppModelDefaultForCurrentRequest(\n options.appId,\n );\n if (\n appDefault?.engine === engineName &&\n typeof appDefault.model === \"string\" &&\n appDefault.model.length > 0\n ) {\n return appDefault.model;\n }\n } catch {\n // Settings/request context may not be available — fall through.\n }\n\n try {\n const stored = await getSetting(\"agent-engine\");\n if (\n stored &&\n typeof stored.engine === \"string\" &&\n stored.engine === engineName &&\n typeof stored.model === \"string\" &&\n stored.model.length > 0\n ) {\n return stored.model;\n }\n } catch {\n // Settings store not ready (fresh install, migration pending) — skip.\n }\n return undefined;\n}\n"]}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agent/engine/registry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Agent Engine Registry.\n *\n * Mirrors the CLI_REGISTRY pattern (packages/core/src/terminal/cli-registry.ts)\n * but is open — anyone can register a custom engine via registerAgentEngine()\n * from a server plugin at startup.\n *\n * Built-in engines (anthropic, ai-sdk) are auto-registered by builtin.ts.\n */\n\nimport { createRequire } from \"node:module\";\nimport type { AgentEngine, EngineCapabilities } from \"./types.js\";\nimport { getSetting } from \"../../settings/store.js\";\nimport { getAgentAppModelDefaultForCurrentRequest } from \"../app-model-defaults.js\";\nimport {\n canUseDeployCredentialFallbackForRequest,\n readDeployCredentialEnv,\n resolveBuilderCredentials,\n resolveSecret,\n} from \"../../server/credential-provider.js\";\n\nconst require = createRequire(import.meta.url);\n\nexport interface AgentEngineEntry {\n /** Unique name, e.g. \"anthropic\", \"ai-sdk:anthropic\", \"ai-sdk:openai\" */\n name: string;\n /** Human-readable label for UI */\n label: string;\n /** Short description for engine picker */\n description: string;\n /** npm package hint displayed in UI when package is missing */\n installPackage?: string;\n /** Engine capabilities */\n capabilities: EngineCapabilities;\n /** Default model string */\n defaultModel: string;\n /** All supported models (shown in model picker) */\n supportedModels: readonly string[];\n /** Environment variables required for this engine to work */\n requiredEnvVars: string[];\n /** Create an engine instance from config */\n create(config: Record<string, unknown>): AgentEngine;\n}\n\nconst _registry = new Map<string, AgentEngineEntry>();\nconst _packageAvailabilityCache = new Map<string, boolean>();\n\n/**\n * Register a custom agent engine. Called at server startup (e.g., from a\n * server plugin or builtin.ts). Throws if name is already registered.\n */\nexport function registerAgentEngine(entry: AgentEngineEntry): void {\n if (_registry.has(entry.name)) {\n // Allow re-registration in tests / hot-reload — just overwrite\n if (process.env.NODE_ENV === \"test\") {\n _registry.set(entry.name, entry);\n return;\n }\n console.warn(\n `[agent-engine] Engine \"${entry.name}\" is already registered. Skipping.`,\n );\n return;\n }\n _registry.set(entry.name, entry);\n}\n\n/** Get a registered engine entry by name, or undefined if not found */\nexport function getAgentEngineEntry(\n name: string,\n): AgentEngineEntry | undefined {\n return _registry.get(name);\n}\n\n/** List all registered engine entries */\nexport function listAgentEngines(): AgentEngineEntry[] {\n return Array.from(_registry.values());\n}\n\nfunction packageNameFromInstallSpecifier(specifier: string): string | null {\n const trimmed = specifier.trim();\n if (!trimmed) return null;\n if (trimmed.startsWith(\"-\")) return null;\n if (trimmed.startsWith(\"@\")) {\n const slashIndex = trimmed.indexOf(\"/\");\n if (slashIndex === -1) return trimmed;\n const versionIndex = trimmed.indexOf(\"@\", slashIndex + 1);\n return versionIndex === -1 ? trimmed : trimmed.slice(0, versionIndex);\n }\n const versionIndex = trimmed.indexOf(\"@\");\n return versionIndex === -1 ? trimmed : trimmed.slice(0, versionIndex);\n}\n\nfunction canResolvePackage(packageName: string): boolean {\n const cached = _packageAvailabilityCache.get(packageName);\n if (cached !== undefined) return cached;\n let available = false;\n try {\n require.resolve(packageName);\n available = true;\n } catch {\n available = false;\n }\n _packageAvailabilityCache.set(packageName, available);\n return available;\n}\n\nexport function isAgentEnginePackageInstalled(\n entry: AgentEngineEntry,\n): boolean {\n const packageNames =\n entry.installPackage\n ?.split(/\\s+/)\n .map(packageNameFromInstallSpecifier)\n .filter((name): name is string => Boolean(name)) ?? [];\n return packageNames.every(canResolvePackage);\n}\n\nfunction assertAgentEnginePackageInstalled(entry: AgentEngineEntry): void {\n if (isAgentEnginePackageInstalled(entry)) return;\n const installHint = entry.installPackage\n ? ` Run: pnpm add ${entry.installPackage}`\n : \"\";\n throw new Error(\n `[agent-engine] Engine \"${entry.name}\" requires optional packages that are not installed in this app.${installHint}`,\n );\n}\n\n/**\n * First registered engine whose requiredEnvVars are all set. Registration\n * order controls priority — the Builder gateway is registered first so it\n * wins when the Builder private key is present.\n *\n * Escape hatch: AGENT_ENGINE_PREFER_BYO_KEY=true skips the Builder engine\n * on the first pass, so an explicit provider key (ANTHROPIC_API_KEY etc.)\n * is picked instead. Builder is still used as the fallback when no other\n * provider key is set.\n */\nexport function detectEngineFromEnv(): AgentEngineEntry | null {\n const preferByo = /^(1|true)$/i.test(\n process.env.AGENT_ENGINE_PREFER_BYO_KEY ?? \"\",\n );\n\n if (preferByo) {\n for (const entry of _registry.values()) {\n if (entry.name === \"builder\") continue;\n if (entry.requiredEnvVars.length === 0) continue;\n if (!isAgentEnginePackageInstalled(entry)) continue;\n if (entry.requiredEnvVars.every((v) => !!readDeployCredentialEnv(v))) {\n return entry;\n }\n }\n // No BYO key matched — fall through to include Builder as fallback.\n }\n\n for (const entry of _registry.values()) {\n if (entry.requiredEnvVars.length === 0) continue;\n if (!isAgentEnginePackageInstalled(entry)) continue;\n if (entry.requiredEnvVars.every((v) => !!readDeployCredentialEnv(v))) {\n return entry;\n }\n }\n return null;\n}\n\nfunction shouldTraceEngineDetection(): boolean {\n return /^(1|true)$/i.test(\n process.env.AGENT_NATIVE_DEBUG_AGENT_ENGINE_DETECT ??\n process.env.AGENT_NATIVE_DEBUG_CREDENTIAL_RESOLVE ??\n \"\",\n );\n}\n\n/**\n * Detect a usable engine from the current request user's accessible\n * `app_secrets` rows. Mirrors `detectEngineFromEnv` but consults the\n * encrypted secret store instead of `process.env`, including org-scoped\n * credentials shared with the active organization.\n *\n * Required because the Builder OAuth callback (and the settings UI's\n * \"paste your own key\" flow) writes credentials to app_secrets, not env.\n * Without this check, a user who connected Builder would see status\n * \"configured\" but the next chat turn would fall through to the default\n * Anthropic engine and hit `missing_api_key` — exactly Brent's symptom\n * on the docs site (Loom 2026-04-28: \"It doesn't seem to realize I'm\n * connected once I do a chat\").\n *\n * Includes the local dev session (`local@localhost`): the Builder\n * OAuth flow writes credentials scoped to that email when run from\n * `pnpm dev`, so detection has to consult those rows or the dev user\n * sees the same \"Connect your AI\" card after they've already connected\n * (Sami, 2026-04-30). Org-scoped Builder credentials must also count here:\n * `/builder/status` resolves them via the same request org context, and the\n * chat engine picker must not disagree with that card.\n */\nexport async function detectEngineFromUserSecrets(): Promise<AgentEngineEntry | null> {\n const traceLookup = shouldTraceEngineDetection();\n let email: string | undefined;\n let orgId: string | null | undefined;\n try {\n const { getRequestUserEmail, getRequestOrgId } =\n await import(\"../../server/request-context.js\");\n email = getRequestUserEmail();\n orgId = getRequestOrgId();\n } catch {\n if (traceLookup) {\n console.log(\n `[engine-detect] result=null reason=no-request-context email=(unknown) orgId=(unknown)`,\n );\n }\n return null;\n }\n if (!email) {\n if (traceLookup) {\n console.log(\n `[engine-detect] result=null reason=no-email email=(empty) orgId=${orgId ?? \"(none)\"}`,\n );\n }\n return null;\n }\n\n const hasAllKeys = async (entry: AgentEngineEntry): Promise<boolean> => {\n if (!isAgentEnginePackageInstalled(entry)) return false;\n if (entry.requiredEnvVars.length === 0) return false;\n if (entry.name === \"builder\") {\n const creds = await resolveBuilderCredentials();\n return Boolean(creds.privateKey && creds.publicKey);\n }\n for (const key of entry.requiredEnvVars) {\n try {\n if (!(await resolveSecret(key))) return false;\n } catch {\n return false;\n }\n }\n return true;\n };\n\n const preferByo = /^(1|true)$/i.test(\n process.env.AGENT_ENGINE_PREFER_BYO_KEY ?? \"\",\n );\n\n if (preferByo) {\n for (const entry of _registry.values()) {\n if (entry.name === \"builder\") continue;\n if (await hasAllKeys(entry)) {\n if (traceLookup) {\n console.log(\n `[engine-detect] result=${entry.name} email=${email} orgId=${orgId ?? \"(none)\"} byo=true`,\n );\n }\n return entry;\n }\n }\n // No BYO key matched — fall through to include Builder as fallback.\n }\n\n for (const entry of _registry.values()) {\n if (await hasAllKeys(entry)) {\n if (traceLookup) {\n console.log(\n `[engine-detect] result=${entry.name} email=${email} orgId=${orgId ?? \"(none)\"}`,\n );\n }\n return entry;\n }\n }\n if (traceLookup) {\n console.log(\n `[engine-detect] result=null reason=no-engine-keys-found email=${email} orgId=${orgId ?? \"(none)\"}`,\n );\n }\n return null;\n}\n\n/**\n * Legacy inline API keys on the global `agent-engine` settings row are\n * intentionally ignored. That row is deployment-wide, so treating\n * `{ apiKey }` or `{ config: { apiKey } }` as configured would let one\n * user's pasted key power every other user. Per-user keys live in\n * `app_secrets` and are resolved separately.\n */\nexport function isAgentEngineSettingConfigured(stored: unknown): boolean {\n if (!stored || typeof stored !== \"object\") return false;\n const s = stored as {\n engine?: unknown;\n };\n if (typeof s.engine !== \"string\" || !s.engine) return false;\n return false;\n}\n\nfunction stripInlineApiKeyConfig(\n config: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n if (!config) return {};\n const { apiKey: _discardedApiKey, ...safeConfig } = config;\n return safeConfig;\n}\n\nfunction engineCreateConfig(\n apiKey: string | undefined,\n extra?: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n apiKey,\n allowEnvFallback: canUseDeployCredentialFallbackForRequest(),\n ...(extra ?? {}),\n };\n}\n\n/**\n * True when the stored `agent-engine` row points at a registered engine\n * AND an API key for it is reachable via the engine's required env vars.\n * Inline keys on the global settings row are ignored; see\n * `isAgentEngineSettingConfigured`.\n */\nexport function isStoredEngineUsable(\n stored: unknown,\n entry: AgentEngineEntry,\n): boolean {\n if (!isAgentEnginePackageInstalled(entry)) return false;\n if (isAgentEngineSettingConfigured(stored)) return true;\n if (entry.requiredEnvVars.length === 0) return true;\n return entry.requiredEnvVars.every((v) => !!readDeployCredentialEnv(v));\n}\n\n/**\n * Request-aware version of `isStoredEngineUsable`.\n *\n * The settings row stores the selected engine/model, while credentials may\n * live in per-user/org `app_secrets`. The sync helper intentionally only sees\n * deploy env vars; this async helper is what request-time routes should use\n * when deciding whether a stored engine can actually run for the current user.\n */\nexport async function isStoredEngineUsableForRequest(\n stored: unknown,\n entry: AgentEngineEntry,\n): Promise<boolean> {\n if (!isAgentEnginePackageInstalled(entry)) return false;\n if (isAgentEngineSettingConfigured(stored)) return true;\n if (entry.requiredEnvVars.length === 0) return true;\n if (entry.name === \"builder\") {\n const creds = await resolveBuilderCredentials();\n return Boolean(creds.privateKey && creds.publicKey);\n }\n for (const key of entry.requiredEnvVars) {\n try {\n if (await resolveSecret(key)) continue;\n } catch {\n // Fall through to the deployment-level check below.\n }\n if (\n !canUseDeployCredentialFallbackForRequest() ||\n !readDeployCredentialEnv(key)\n ) {\n return false;\n }\n }\n return true;\n}\n\nexport interface ResolveEngineConfig {\n /** Explicit engine name or instance from createAgentChatPlugin options */\n engineOption?:\n | string\n | AgentEngine\n | { name: string; config: Record<string, unknown> };\n /** API key (used as config for the resolved engine) */\n apiKey?: string;\n /** Model override (used as part of engine config) */\n model?: string;\n /** App/template id used for org-scoped per-app model defaults. */\n appId?: string;\n}\n\n/**\n * Resolve an AgentEngine from options → explicit env → app default →\n * request credentials → settings → env → default.\n *\n * Resolution order:\n * 1. Explicit `engineOption` from plugin options (string name, instance, or {name, config})\n * 2. Env var AGENT_ENGINE\n * 3. Org/user app-template default, when usable\n * 4. Current request's app_secrets; Builder wins by default when connected\n * 5. Settings store key \"agent-engine\" → { engine: string }, when usable\n * 6. Auto-detect deployment env credentials\n * 7. Default \"anthropic\" (requires ANTHROPIC_API_KEY)\n */\nexport async function resolveEngine(\n config: ResolveEngineConfig,\n): Promise<AgentEngine> {\n const { engineOption, apiKey, model: _model, appId } = config;\n\n // 1. Explicit instance passed directly\n if (\n engineOption &&\n typeof engineOption === \"object\" &&\n \"stream\" in engineOption\n ) {\n return engineOption as AgentEngine;\n }\n\n // 2. Explicit {name, config} object\n if (\n engineOption &&\n typeof engineOption === \"object\" &&\n \"name\" in engineOption\n ) {\n const { name, config: engineConfig } = engineOption as {\n name: string;\n config: Record<string, unknown>;\n };\n const entry = _registry.get(name);\n if (!entry)\n throw new Error(\n `[agent-engine] Unknown engine: \"${name}\". Registered: ${[..._registry.keys()].join(\", \")}`,\n );\n assertAgentEnginePackageInstalled(entry);\n return entry.create(engineCreateConfig(apiKey, engineConfig));\n }\n\n // 3. Explicit string name from options\n if (typeof engineOption === \"string\") {\n const entry = _registry.get(engineOption);\n if (!entry)\n throw new Error(\n `[agent-engine] Unknown engine: \"${engineOption}\". Registered: ${[..._registry.keys()].join(\", \")}`,\n );\n assertAgentEnginePackageInstalled(entry);\n return entry.create(engineCreateConfig(apiKey));\n }\n\n // 4. Env var — explicit engine name override\n const envEngine = process.env.AGENT_ENGINE;\n if (envEngine) {\n const entry = _registry.get(envEngine);\n if (entry) {\n assertAgentEnginePackageInstalled(entry);\n return entry.create(engineCreateConfig(apiKey));\n }\n }\n\n const appDefault = await getAgentAppModelDefaultForCurrentRequest(appId);\n if (appDefault?.engine) {\n const entry = _registry.get(appDefault.engine);\n if (entry && (await isStoredEngineUsableForRequest(appDefault, entry))) {\n return entry.create(engineCreateConfig(apiKey));\n }\n }\n\n let stored:\n | (Record<string, unknown> & { engine?: unknown; config?: unknown })\n | null = null;\n try {\n stored = (await getSetting(\"agent-engine\")) as typeof stored;\n } catch {\n // Settings not available — fall through\n }\n\n // 5. Auto-detect from the current user's per-user `app_secrets` rows\n // (Builder OAuth callback + \"paste your own key\" settings flow write\n // here, not env). Comes before env-detection so a user-specific\n // Builder connection wins over a stale deploy-level/provider key.\n const detectedFromUser = await detectEngineFromUserSecrets();\n if (detectedFromUser?.name === \"builder\") {\n return detectedFromUser.create(engineCreateConfig(apiKey));\n }\n\n // 6. Settings store — only when the stored row's API key is reachable.\n // This remains below Builder detection so \"Builder.io connected\" and the\n // runtime agree on the default managed gateway path. Non-Builder user keys\n // still honor the stored provider/model when Builder is not connected.\n if (stored && typeof stored.engine === \"string\") {\n const entry = _registry.get(stored.engine);\n if (entry && (await isStoredEngineUsableForRequest(stored, entry))) {\n return entry.create({\n ...engineCreateConfig(\n apiKey,\n stripInlineApiKeyConfig(\n stored.config as Record<string, unknown> | undefined,\n ),\n ),\n });\n }\n }\n\n if (detectedFromUser) {\n return detectedFromUser.create(engineCreateConfig(apiKey));\n }\n\n // 8. Auto-detect from any provider env var — so just dropping a key in\n // .env works without also setting AGENT_ENGINE.\n const detected = canUseDeployCredentialFallbackForRequest()\n ? detectEngineFromEnv()\n : null;\n if (detected) return detected.create(engineCreateConfig(apiKey));\n\n // 9. Default: anthropic\n const anthropicEntry = _registry.get(\"anthropic\");\n if (!anthropicEntry) {\n throw new Error(\n \"[agent-engine] Default Anthropic engine is not registered. Did builtin.ts fail to load?\",\n );\n }\n return anthropicEntry.create(engineCreateConfig(apiKey));\n}\n\n/**\n * Read the user-selected model for an engine from the `agent-engine` setting.\n *\n * The settings UI writes `{engine, model}` via the `manage-agent-engine` action=\"set\",\n * but `resolveEngine` only uses the stored engine (the model is a separate\n * per-request concern). Call this helper alongside `resolveEngine` to honor\n * the user's model choice without requiring a process restart.\n *\n * Returns the stored model only when the stored engine name matches `engine`\n * — otherwise returns `undefined` to avoid applying an Anthropic model string\n * to, say, an OpenRouter engine.\n */\nexport async function getStoredModelForEngine(\n engine: AgentEngine | string,\n options: { appId?: string } = {},\n): Promise<string | undefined> {\n const engineName = typeof engine === \"string\" ? engine : engine.name;\n try {\n const appDefault = await getAgentAppModelDefaultForCurrentRequest(\n options.appId,\n );\n if (\n appDefault?.engine === engineName &&\n typeof appDefault.model === \"string\" &&\n appDefault.model.length > 0\n ) {\n return appDefault.model;\n }\n } catch {\n // Settings/request context may not be available — fall through.\n }\n\n try {\n const stored = await getSetting(\"agent-engine\");\n if (\n stored &&\n typeof stored.engine === \"string\" &&\n stored.engine === engineName &&\n typeof stored.model === \"string\" &&\n stored.model.length > 0\n ) {\n return stored.model;\n }\n } catch {\n // Settings store not ready (fresh install, migration pending) — skip.\n }\n return undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"translate-ai-sdk.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/translate-ai-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACZ,MAAM,YAAY,CAAC;AAOpB;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GACxD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAcrB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,EAAE,CAwF9D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,GAAG,EAAE,CAItE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,EAAE,CA+GhE;AAuCD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,EAAE,CA8B1E"}
1
+ {"version":3,"file":"translate-ai-sdk.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/translate-ai-sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,WAAW,EACZ,MAAM,YAAY,CAAC;AAOpB;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,GACxD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAcrB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,EAAE,CAwF9D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,GAAG,EAAE,CAItE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,EAAE,CAiHhE;AAuCD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,EAAE,CA8B1E"}
@@ -225,9 +225,11 @@ export function aiSdkPartToEngineEvents(part) {
225
225
  break;
226
226
  }
227
227
  case "finish-step":
228
- if (part.usage) {
229
- events.push(usageEventFromLanguageModelUsage(part.usage));
230
- }
228
+ // Usage is intentionally NOT emitted here. AI SDK's fullStream emits both
229
+ // a per-step `finish-step` (part.usage) and a terminal `finish`
230
+ // (part.totalUsage) for every step. runAgentLoop runs one model step per
231
+ // stream() call, so totalUsage already covers it; emitting here too would
232
+ // double-count tokens into recordUsage / cost tracking.
231
233
  break;
232
234
  case "finish":
233
235
  if (part.totalUsage) {
@@ -1 +1 @@
1
- {"version":3,"file":"translate-ai-sdk.js","sourceRoot":"","sources":["../../../src/agent/engine/translate-ai-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Translation helpers between AgentEngine normalized types and\n * Vercel AI SDK (`ai` package, v6+) types.\n *\n * The framework keeps a provider-neutral content/event model (see ./types.ts).\n * These helpers convert in both directions against the v6 `TextStreamPart` and\n * `ModelMessage` shapes.\n */\n\nimport type {\n EngineTool,\n EngineMessage,\n EngineContentPart,\n EngineEvent,\n} from \"./types.js\";\nimport { backfillEngineMessagesToolResults } from \"./translate-anthropic.js\";\n\n// ---------------------------------------------------------------------------\n// EngineTool → AI SDK tool definition\n// ---------------------------------------------------------------------------\n\n/**\n * Convert EngineTool[] into the record shape that AI SDK's `streamText` expects\n * under the `tools` option.\n *\n * Pass the `jsonSchema` helper from the `ai` package when available so the\n * schema is wrapped in the SDK's runtime validator; fall back to the raw JSON\n * Schema object otherwise (mostly for unit tests that don't import `ai`).\n */\nexport function engineToolsToAISDK(\n tools: EngineTool[],\n jsonSchema?: (schema: Record<string, unknown>) => unknown,\n): Record<string, any> {\n const result: Record<string, any> = {};\n for (const tool of tools) {\n const rawSchema: Record<string, unknown> = {\n type: \"object\",\n properties: tool.inputSchema.properties ?? {},\n required: tool.inputSchema.required ?? [],\n };\n result[tool.name] = {\n description: tool.description,\n inputSchema: jsonSchema ? jsonSchema(rawSchema) : rawSchema,\n };\n }\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// EngineMessage → AI SDK ModelMessage\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a single EngineMessage into **one or more** AI SDK ModelMessages.\n *\n * v6 puts tool-results in a dedicated `role: \"tool\"` message rather than\n * embedding them in user content. When an EngineMessage's user content mixes\n * text/images with tool-results, we emit the tool-result parts first as a\n * `{role: \"tool\"}` message, followed by the remaining text/image parts as a\n * `{role: \"user\"}` message.\n */\nexport function engineMessageToAISDK(msg: EngineMessage): any[] {\n // EngineMessage is `user | assistant` — both branches return below.\n if (msg.role === \"user\") {\n const userParts: any[] = [];\n const toolResultParts: any[] = [];\n for (const part of msg.content) {\n if (part.type === \"text\") {\n userParts.push({ type: \"text\", text: part.text });\n } else if (part.type === \"image\") {\n userParts.push({\n type: \"image\",\n image: `data:${part.mediaType};base64,${part.data}`,\n mediaType: part.mediaType,\n });\n } else if (part.type === \"file\") {\n userParts.push({\n type: \"file\",\n data: part.data,\n mediaType: part.mediaType,\n filename: part.filename,\n });\n } else if (part.type === \"tool-result\") {\n toolResultParts.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: part.isError\n ? { type: \"error-text\", value: part.content }\n : { type: \"text\", value: part.content },\n });\n }\n }\n\n const out: any[] = [];\n if (toolResultParts.length > 0) {\n out.push({ role: \"tool\", content: toolResultParts });\n }\n if (userParts.length > 0) {\n out.push({\n role: \"user\",\n content:\n userParts.length === 1 && userParts[0].type === \"text\"\n ? userParts[0].text\n : userParts,\n });\n }\n return out;\n }\n\n if (msg.role === \"assistant\") {\n const content: any[] = [];\n for (const part of msg.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"tool-call\") {\n content.push({\n type: \"tool-call\",\n toolCallId: part.id,\n toolName: part.name,\n input: part.input,\n });\n } else if (part.type === \"thinking\") {\n const reasoning: Record<string, unknown> = {\n type: \"reasoning\",\n text: part.text,\n };\n if (part.signature) {\n // Round-trip the Anthropic extended-thinking signature through\n // providerOptions so the model can continue its chain of thought.\n reasoning.providerOptions = {\n anthropic: { signature: part.signature },\n };\n }\n content.push(reasoning);\n }\n }\n return [\n {\n role: \"assistant\",\n content:\n content.length === 1 && content[0].type === \"text\"\n ? content[0].text\n : content,\n },\n ];\n }\n\n throw new Error(`unknown EngineMessage role: ${(msg as any).role}`);\n}\n\nexport function engineMessagesToAISDK(messages: EngineMessage[]): any[] {\n return backfillEngineMessagesToolResults(messages).flatMap(\n engineMessageToAISDK,\n );\n}\n\n// ---------------------------------------------------------------------------\n// AI SDK TextStreamPart → EngineEvent\n// ---------------------------------------------------------------------------\n\n/**\n * Translate a single part from AI SDK's `result.fullStream` into the flat\n * sequence of EngineEvent items the framework works with.\n *\n * v6 emits lifecycle events (`text-start` / `text-delta` / `text-end`,\n * `reasoning-start` / `reasoning-delta` / `reasoning-end`, `tool-input-*`).\n * We absorb text/reasoning boundaries, forward text/reasoning/tool-input\n * deltas, and keep the terminal `tool-call`, `finish-step`, and `finish` parts.\n */\nexport function aiSdkPartToEngineEvents(part: any): EngineEvent[] {\n const events: EngineEvent[] = [];\n\n switch (part?.type) {\n case \"text-delta\":\n if (part.text) events.push({ type: \"text-delta\", text: part.text });\n break;\n case \"text-start\":\n case \"text-end\":\n break;\n\n case \"reasoning-delta\":\n if (part.text) events.push({ type: \"thinking-delta\", text: part.text });\n break;\n case \"reasoning-start\":\n case \"reasoning-end\":\n break;\n\n case \"tool-input-start\":\n events.push({\n type: \"tool-input-start\",\n id: part.id ?? part.toolCallId,\n name: part.toolName,\n });\n break;\n case \"tool-input-delta\":\n events.push({\n type: \"tool-input-delta\",\n id: part.id ?? part.toolCallId,\n name: part.toolName,\n text:\n typeof part.delta === \"string\"\n ? part.delta\n : typeof part.text === \"string\"\n ? part.text\n : \"\",\n });\n break;\n case \"tool-input-end\":\n // Ignored: the terminal `tool-call` part carries the full input.\n break;\n\n case \"tool-call\":\n events.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n });\n break;\n\n case \"tool-input-error\":\n case \"tool-error\":\n events.push({\n type: \"tool-call-error\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n error:\n part.errorText ??\n (part.error instanceof Error\n ? part.error.message\n : typeof part.error === \"string\"\n ? part.error\n : JSON.stringify(part.error ?? \"Invalid tool input\")),\n });\n break;\n\n case \"tool-result\":\n // Only fired when the SDK itself executes a tool. Our runAgentLoop\n // dispatches tools on the outside, so these don't appear in our flow.\n break;\n\n case \"error\": {\n const errMsg =\n part.error instanceof Error\n ? part.error.message\n : typeof part.error === \"string\"\n ? part.error\n : JSON.stringify(part.error);\n events.push({ type: \"stop\", reason: \"error\", error: errMsg });\n break;\n }\n\n case \"finish-step\":\n if (part.usage) {\n events.push(usageEventFromLanguageModelUsage(part.usage));\n }\n break;\n\n case \"finish\":\n if (part.totalUsage) {\n events.push(usageEventFromLanguageModelUsage(part.totalUsage));\n }\n events.push({\n type: \"stop\",\n reason: finishReasonToStopReason(part.finishReason),\n });\n break;\n\n case \"start\":\n case \"start-step\":\n case \"source\":\n case \"file\":\n case \"abort\":\n case \"raw\":\n default:\n break;\n }\n\n return events;\n}\n\nfunction finishReasonToStopReason(\n reason: unknown,\n): \"end_turn\" | \"tool_use\" | \"max_tokens\" | \"stop_sequence\" | \"error\" {\n switch (reason) {\n case \"tool-calls\":\n return \"tool_use\";\n case \"length\":\n return \"max_tokens\";\n case \"content-filter\":\n case \"error\":\n return \"error\";\n default:\n // Maps \"stop\", \"other\", \"unknown\", and anything we don't recognise.\n return \"end_turn\";\n }\n}\n\nfunction usageEventFromLanguageModelUsage(usage: any): EngineEvent {\n // v6 exposes cache/reasoning tokens via detail objects; older providers\n // put them at the top level (deprecated but still read as a fallback).\n return {\n type: \"usage\",\n inputTokens: usage.inputTokens ?? 0,\n outputTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens,\n cacheReadTokens:\n usage.inputTokenDetails?.cacheReadTokens ?? usage.cachedInputTokens ?? 0,\n cacheWriteTokens: usage.inputTokenDetails?.cacheWriteTokens ?? 0,\n reasoningTokens:\n usage.outputTokenDetails?.reasoningTokens ?? usage.reasoningTokens,\n };\n}\n\n// ---------------------------------------------------------------------------\n// AI SDK StepResult → EngineContentPart[] (assistant content reconstruction)\n// ---------------------------------------------------------------------------\n\n/**\n * Reconstruct the assistant message content from an AI SDK v6 `StepResult`.\n * `step.content` is the canonical structured form — iterate it.\n */\nexport function aiSdkStepToAssistantContent(step: any): EngineContentPart[] {\n const parts: EngineContentPart[] = [];\n for (const part of step?.content ?? []) {\n if (part.type === \"text\" && part.text) {\n parts.push({ type: \"text\", text: part.text });\n } else if (part.type === \"reasoning\") {\n const signature = part.providerMetadata?.anthropic?.signature;\n const thinking: EngineContentPart = {\n type: \"thinking\",\n text: part.text ?? \"\",\n };\n if (typeof signature === \"string\") thinking.signature = signature;\n parts.push(thinking);\n } else if (part.type === \"tool-call\") {\n parts.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input,\n });\n } else if (part.type === \"tool-input-error\" || part.type === \"tool-error\") {\n parts.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n });\n }\n }\n return parts;\n}\n"]}
1
+ {"version":3,"file":"translate-ai-sdk.js","sourceRoot":"","sources":["../../../src/agent/engine/translate-ai-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Translation helpers between AgentEngine normalized types and\n * Vercel AI SDK (`ai` package, v6+) types.\n *\n * The framework keeps a provider-neutral content/event model (see ./types.ts).\n * These helpers convert in both directions against the v6 `TextStreamPart` and\n * `ModelMessage` shapes.\n */\n\nimport type {\n EngineTool,\n EngineMessage,\n EngineContentPart,\n EngineEvent,\n} from \"./types.js\";\nimport { backfillEngineMessagesToolResults } from \"./translate-anthropic.js\";\n\n// ---------------------------------------------------------------------------\n// EngineTool → AI SDK tool definition\n// ---------------------------------------------------------------------------\n\n/**\n * Convert EngineTool[] into the record shape that AI SDK's `streamText` expects\n * under the `tools` option.\n *\n * Pass the `jsonSchema` helper from the `ai` package when available so the\n * schema is wrapped in the SDK's runtime validator; fall back to the raw JSON\n * Schema object otherwise (mostly for unit tests that don't import `ai`).\n */\nexport function engineToolsToAISDK(\n tools: EngineTool[],\n jsonSchema?: (schema: Record<string, unknown>) => unknown,\n): Record<string, any> {\n const result: Record<string, any> = {};\n for (const tool of tools) {\n const rawSchema: Record<string, unknown> = {\n type: \"object\",\n properties: tool.inputSchema.properties ?? {},\n required: tool.inputSchema.required ?? [],\n };\n result[tool.name] = {\n description: tool.description,\n inputSchema: jsonSchema ? jsonSchema(rawSchema) : rawSchema,\n };\n }\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// EngineMessage → AI SDK ModelMessage\n// ---------------------------------------------------------------------------\n\n/**\n * Convert a single EngineMessage into **one or more** AI SDK ModelMessages.\n *\n * v6 puts tool-results in a dedicated `role: \"tool\"` message rather than\n * embedding them in user content. When an EngineMessage's user content mixes\n * text/images with tool-results, we emit the tool-result parts first as a\n * `{role: \"tool\"}` message, followed by the remaining text/image parts as a\n * `{role: \"user\"}` message.\n */\nexport function engineMessageToAISDK(msg: EngineMessage): any[] {\n // EngineMessage is `user | assistant` — both branches return below.\n if (msg.role === \"user\") {\n const userParts: any[] = [];\n const toolResultParts: any[] = [];\n for (const part of msg.content) {\n if (part.type === \"text\") {\n userParts.push({ type: \"text\", text: part.text });\n } else if (part.type === \"image\") {\n userParts.push({\n type: \"image\",\n image: `data:${part.mediaType};base64,${part.data}`,\n mediaType: part.mediaType,\n });\n } else if (part.type === \"file\") {\n userParts.push({\n type: \"file\",\n data: part.data,\n mediaType: part.mediaType,\n filename: part.filename,\n });\n } else if (part.type === \"tool-result\") {\n toolResultParts.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: part.isError\n ? { type: \"error-text\", value: part.content }\n : { type: \"text\", value: part.content },\n });\n }\n }\n\n const out: any[] = [];\n if (toolResultParts.length > 0) {\n out.push({ role: \"tool\", content: toolResultParts });\n }\n if (userParts.length > 0) {\n out.push({\n role: \"user\",\n content:\n userParts.length === 1 && userParts[0].type === \"text\"\n ? userParts[0].text\n : userParts,\n });\n }\n return out;\n }\n\n if (msg.role === \"assistant\") {\n const content: any[] = [];\n for (const part of msg.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text });\n } else if (part.type === \"tool-call\") {\n content.push({\n type: \"tool-call\",\n toolCallId: part.id,\n toolName: part.name,\n input: part.input,\n });\n } else if (part.type === \"thinking\") {\n const reasoning: Record<string, unknown> = {\n type: \"reasoning\",\n text: part.text,\n };\n if (part.signature) {\n // Round-trip the Anthropic extended-thinking signature through\n // providerOptions so the model can continue its chain of thought.\n reasoning.providerOptions = {\n anthropic: { signature: part.signature },\n };\n }\n content.push(reasoning);\n }\n }\n return [\n {\n role: \"assistant\",\n content:\n content.length === 1 && content[0].type === \"text\"\n ? content[0].text\n : content,\n },\n ];\n }\n\n throw new Error(`unknown EngineMessage role: ${(msg as any).role}`);\n}\n\nexport function engineMessagesToAISDK(messages: EngineMessage[]): any[] {\n return backfillEngineMessagesToolResults(messages).flatMap(\n engineMessageToAISDK,\n );\n}\n\n// ---------------------------------------------------------------------------\n// AI SDK TextStreamPart → EngineEvent\n// ---------------------------------------------------------------------------\n\n/**\n * Translate a single part from AI SDK's `result.fullStream` into the flat\n * sequence of EngineEvent items the framework works with.\n *\n * v6 emits lifecycle events (`text-start` / `text-delta` / `text-end`,\n * `reasoning-start` / `reasoning-delta` / `reasoning-end`, `tool-input-*`).\n * We absorb text/reasoning boundaries, forward text/reasoning/tool-input\n * deltas, and keep the terminal `tool-call`, `finish-step`, and `finish` parts.\n */\nexport function aiSdkPartToEngineEvents(part: any): EngineEvent[] {\n const events: EngineEvent[] = [];\n\n switch (part?.type) {\n case \"text-delta\":\n if (part.text) events.push({ type: \"text-delta\", text: part.text });\n break;\n case \"text-start\":\n case \"text-end\":\n break;\n\n case \"reasoning-delta\":\n if (part.text) events.push({ type: \"thinking-delta\", text: part.text });\n break;\n case \"reasoning-start\":\n case \"reasoning-end\":\n break;\n\n case \"tool-input-start\":\n events.push({\n type: \"tool-input-start\",\n id: part.id ?? part.toolCallId,\n name: part.toolName,\n });\n break;\n case \"tool-input-delta\":\n events.push({\n type: \"tool-input-delta\",\n id: part.id ?? part.toolCallId,\n name: part.toolName,\n text:\n typeof part.delta === \"string\"\n ? part.delta\n : typeof part.text === \"string\"\n ? part.text\n : \"\",\n });\n break;\n case \"tool-input-end\":\n // Ignored: the terminal `tool-call` part carries the full input.\n break;\n\n case \"tool-call\":\n events.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n });\n break;\n\n case \"tool-input-error\":\n case \"tool-error\":\n events.push({\n type: \"tool-call-error\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n error:\n part.errorText ??\n (part.error instanceof Error\n ? part.error.message\n : typeof part.error === \"string\"\n ? part.error\n : JSON.stringify(part.error ?? \"Invalid tool input\")),\n });\n break;\n\n case \"tool-result\":\n // Only fired when the SDK itself executes a tool. Our runAgentLoop\n // dispatches tools on the outside, so these don't appear in our flow.\n break;\n\n case \"error\": {\n const errMsg =\n part.error instanceof Error\n ? part.error.message\n : typeof part.error === \"string\"\n ? part.error\n : JSON.stringify(part.error);\n events.push({ type: \"stop\", reason: \"error\", error: errMsg });\n break;\n }\n\n case \"finish-step\":\n // Usage is intentionally NOT emitted here. AI SDK's fullStream emits both\n // a per-step `finish-step` (part.usage) and a terminal `finish`\n // (part.totalUsage) for every step. runAgentLoop runs one model step per\n // stream() call, so totalUsage already covers it; emitting here too would\n // double-count tokens into recordUsage / cost tracking.\n break;\n\n case \"finish\":\n if (part.totalUsage) {\n events.push(usageEventFromLanguageModelUsage(part.totalUsage));\n }\n events.push({\n type: \"stop\",\n reason: finishReasonToStopReason(part.finishReason),\n });\n break;\n\n case \"start\":\n case \"start-step\":\n case \"source\":\n case \"file\":\n case \"abort\":\n case \"raw\":\n default:\n break;\n }\n\n return events;\n}\n\nfunction finishReasonToStopReason(\n reason: unknown,\n): \"end_turn\" | \"tool_use\" | \"max_tokens\" | \"stop_sequence\" | \"error\" {\n switch (reason) {\n case \"tool-calls\":\n return \"tool_use\";\n case \"length\":\n return \"max_tokens\";\n case \"content-filter\":\n case \"error\":\n return \"error\";\n default:\n // Maps \"stop\", \"other\", \"unknown\", and anything we don't recognise.\n return \"end_turn\";\n }\n}\n\nfunction usageEventFromLanguageModelUsage(usage: any): EngineEvent {\n // v6 exposes cache/reasoning tokens via detail objects; older providers\n // put them at the top level (deprecated but still read as a fallback).\n return {\n type: \"usage\",\n inputTokens: usage.inputTokens ?? 0,\n outputTokens: usage.outputTokens ?? 0,\n totalTokens: usage.totalTokens,\n cacheReadTokens:\n usage.inputTokenDetails?.cacheReadTokens ?? usage.cachedInputTokens ?? 0,\n cacheWriteTokens: usage.inputTokenDetails?.cacheWriteTokens ?? 0,\n reasoningTokens:\n usage.outputTokenDetails?.reasoningTokens ?? usage.reasoningTokens,\n };\n}\n\n// ---------------------------------------------------------------------------\n// AI SDK StepResult → EngineContentPart[] (assistant content reconstruction)\n// ---------------------------------------------------------------------------\n\n/**\n * Reconstruct the assistant message content from an AI SDK v6 `StepResult`.\n * `step.content` is the canonical structured form — iterate it.\n */\nexport function aiSdkStepToAssistantContent(step: any): EngineContentPart[] {\n const parts: EngineContentPart[] = [];\n for (const part of step?.content ?? []) {\n if (part.type === \"text\" && part.text) {\n parts.push({ type: \"text\", text: part.text });\n } else if (part.type === \"reasoning\") {\n const signature = part.providerMetadata?.anthropic?.signature;\n const thinking: EngineContentPart = {\n type: \"thinking\",\n text: part.text ?? \"\",\n };\n if (typeof signature === \"string\") thinking.signature = signature;\n parts.push(thinking);\n } else if (part.type === \"tool-call\") {\n parts.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input,\n });\n } else if (part.type === \"tool-input-error\" || part.type === \"tool-error\") {\n parts.push({\n type: \"tool-call\",\n id: part.toolCallId,\n name: part.toolName,\n input: part.input ?? {},\n });\n }\n }\n return parts;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"production-agent.d.ts","sourceRoot":"","sources":["../../src/agent/production-agent.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EAEnB,cAAc,EACd,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,iBAAiB,EAElB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAIhE,OAAO,EAEL,cAAc,EACd,qBAAqB,EACrB,0BAA0B,EAC1B,MAAM,EACN,QAAQ,EACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAoBlD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAQvC,OAAO,EAAE,eAAe,EAAE,CAAC;AA4C3B;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA8C7B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAaD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsB7B;AAED,sEAAsE;AACtE,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACpC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAE7B;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,CACH,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,CAAC,EAAE,gBAAgB,KACvB,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,qFAAqF;IACrF,IAAI,CAAC,EAAE,OAAO,cAAc,EAAE,gBAAgB,GAAG,KAAK,CAAC;IACvD;qFACiF;IACjF,WAAW,CAAC,EAAE,OAAO,cAAc,EAAE,uBAAuB,CAAC;IAC7D;4EACwE;IACxE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;oDAEgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;;gDAK4C;IAC5C,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;2EAEuE;IACvE,IAAI,CAAC,EAAE,OAAO,cAAc,EAAE,iBAAiB,CAAC;IAChD;;qCAEiC;IACjC,MAAM,CAAC,EAAE,OAAO,cAAc,EAAE,kBAAkB,CAAC;CACpD;AAED,4CAA4C;AAC5C,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,MAAM,CAAC;AAEhD,eAAO,MAAM,uBAAuB,ivBAQ2H,CAAC;AAmFhK,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,WAAW,GACjB,OAAO,CAiBT;AA0ED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAiC7B;AAED,MAAM,WAAW,sBAAsB;IACrC,+FAA+F;IAC/F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtC,0FAA0F;IAC1F,YAAY,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EACH,WAAW,GACX,MAAM,GACN;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtD,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,6DAA6D;IAC7D,eAAe,CAAC,EAAE,aAAa,SAAS,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC;IAC5D,uEAAuE;IACvE,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACvE,mEAAmE;IACnE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE;QACxB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACrC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE;QACzB,KAAK,EAAE,GAAG,CAAC;QACX,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,mBAAmB,EAAE,CAAC;QACnC,UAAU,EAAE,kBAAkB,EAAE,CAAC;QACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,IAAI,EAAE,kBAAkB,CAAC;KAC1B,KACG,IAAI,GACJ;QACE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACrC,GACD,OAAO,CAAC,IAAI,GAAG;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;KACrC,CAAC,CAAC;IACP;;;mDAG+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4FAA4F;IAC5F,UAAU,CAAC,EAAE,CACX,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,EACrC,QAAQ,EAAE,MAAM,KACb,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,2BAA2B,CAAC;IACjD;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,EAC1D,KAAK,EAAE,GAAG,GACT,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AA8ND,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACrC,GAAG,iBAAiB,EAAE,CAsCtB;AAyBD,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,0BAA0B,EAAE,GAAG,SAAS,GAChD,aAAa,EAAE,GAAG,IAAI,CA2GxB;AA8DD,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,wBAAwB,EAAE,CAAC;IACtC,WAAW,EAAE,0BAA0B,EAAE,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,iCAAiC,GACzC,MAAM,GACN;IACE,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEN,MAAM,MAAM,2BAA2B,GAAG,CACxC,OAAO,EAAE,kCAAkC,KAEzC,iCAAiC,GACjC,IAAI,GACJ,SAAS,GACT,OAAO,CAAC,iCAAiC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAYlE,eAAO,MAAM,8BAA8B,mOACuL,CAAC;AAEnO,MAAM,MAAM,2BAA2B,GACnC,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,iBAAiB,GACjB,qBAAqB,CAAC;AAE1B,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,2BAA2B,QAuBpC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAoC5D;AAED;;;;GAIG;AACH,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,OAAO,GACX,iBAAiB,GAAG,qBAAqB,CAa3C;AAqED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GACnC,UAAU,EAAE,CAiBd;AAmED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,eAAe,CAAC,EAAE,GAAG,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,2BAA2B,CAAC;CAClD,GAAG,OAAO,CAAC,cAAc,CAAC,CA+kB1B;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,sBAAsB,GAC9B,cAAc,CAi6BhB;AAED,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,MAAM,EACN,QAAQ,EACR,cAAc,GACf,CAAC"}
@@ -501,11 +501,15 @@ function retryDelay(attempt, signal) {
501
501
  return new Promise((resolve, reject) => {
502
502
  if (signal.aborted)
503
503
  return reject(new Error("aborted"));
504
- const timer = setTimeout(resolve, ms);
505
- signal.addEventListener("abort", () => {
504
+ const onAbort = () => {
506
505
  clearTimeout(timer);
507
506
  reject(new Error("aborted"));
508
- }, { once: true });
507
+ };
508
+ const timer = setTimeout(() => {
509
+ signal.removeEventListener("abort", onAbort);
510
+ resolve();
511
+ }, ms);
512
+ signal.addEventListener("abort", onAbort, { once: true });
509
513
  });
510
514
  }
511
515
  function isSupportedImageMediaType(mediaType) {
@@ -1197,6 +1201,12 @@ export async function runAgentLoop(opts) {
1197
1201
  }
1198
1202
  break;
1199
1203
  }
1204
+ // Reached only when the model made tool calls (toolCallParts.length > 0),
1205
+ // i.e. it's about to do more work and produce a *new* final answer. Give
1206
+ // that next final-answer cycle a fresh guard-retry budget; otherwise
1207
+ // finalGuardRetries stays at 1 from a prior cycle and the guard is
1208
+ // permanently disabled for the rest of a long multi-step run.
1209
+ finalGuardRetries = 0;
1200
1210
  flushBufferedAssistantText();
1201
1211
  let requestedActionStop = null;
1202
1212
  const runToolCall = async (toolCall) => {
@@ -1307,6 +1317,17 @@ export async function runAgentLoop(opts) {
1307
1317
  new Promise((_, reject) => {
1308
1318
  timeoutSignal.addEventListener("abort", () => reject(new Error("Tool call timed out after 60 seconds")));
1309
1319
  }),
1320
+ // Stop waiting on the tool when the run itself is aborted (e.g. the
1321
+ // run-manager soft timeout, or a user cancel). Without this leg the
1322
+ // loop blocks on an in-flight tool for up to TOOL_TIMEOUT_MS after
1323
+ // the run signal has already fired.
1324
+ new Promise((_, reject) => {
1325
+ if (signal.aborted) {
1326
+ reject(new Error("Run aborted"));
1327
+ return;
1328
+ }
1329
+ signal.addEventListener("abort", () => reject(new Error("Run aborted")), { once: true });
1330
+ }),
1310
1331
  ]);
1311
1332
  const mcpResult = isMcpActionResult(raw) ? raw : null;
1312
1333
  const rawForAgent = mcpResult ? mcpResult.text : raw;
@@ -1409,7 +1430,13 @@ export async function runAgentLoop(opts) {
1409
1430
  };
1410
1431
  const getParallelBatchKind = (toolCall) => {
1411
1432
  const entry = actions[toolCall.name];
1412
- if (!entry || entry.readOnly === true)
1433
+ // Unknown tool name → serialize (null), don't fold it into the read-only
1434
+ // parallel batch. Misclassifying it as "read" lets it run via Promise.all
1435
+ // alongside genuine reads, which can reorder it ahead of a later mutating
1436
+ // call and break the model's intended sequencing.
1437
+ if (!entry)
1438
+ return null;
1439
+ if (entry.readOnly === true)
1413
1440
  return "read";
1414
1441
  if (entry.parallelSafe === true)
1415
1442
  return "parallel-write";