@agent-native/core 0.7.10 → 0.7.12

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 (375) hide show
  1. package/dist/action.js +30 -11
  2. package/dist/action.js.map +1 -1
  3. package/dist/agent/engine/ai-sdk-engine.d.ts +14 -2
  4. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  5. package/dist/agent/engine/ai-sdk-engine.js +70 -54
  6. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  7. package/dist/agent/engine/anthropic-engine.d.ts +1 -6
  8. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  9. package/dist/agent/engine/anthropic-engine.js +3 -14
  10. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  11. package/dist/agent/engine/builtin.d.ts.map +1 -1
  12. package/dist/agent/engine/builtin.js +3 -0
  13. package/dist/agent/engine/builtin.js.map +1 -1
  14. package/dist/agent/engine/index.d.ts +1 -1
  15. package/dist/agent/engine/index.d.ts.map +1 -1
  16. package/dist/agent/engine/index.js +1 -1
  17. package/dist/agent/engine/index.js.map +1 -1
  18. package/dist/agent/engine/provider-env-vars.d.ts +21 -0
  19. package/dist/agent/engine/provider-env-vars.d.ts.map +1 -0
  20. package/dist/agent/engine/provider-env-vars.js +50 -0
  21. package/dist/agent/engine/provider-env-vars.js.map +1 -0
  22. package/dist/agent/engine/registry.d.ts +18 -0
  23. package/dist/agent/engine/registry.d.ts.map +1 -1
  24. package/dist/agent/engine/registry.js +54 -4
  25. package/dist/agent/engine/registry.js.map +1 -1
  26. package/dist/agent/engine/translate-ai-sdk.d.ts +35 -10
  27. package/dist/agent/engine/translate-ai-sdk.d.ts.map +1 -1
  28. package/dist/agent/engine/translate-ai-sdk.js +190 -91
  29. package/dist/agent/engine/translate-ai-sdk.js.map +1 -1
  30. package/dist/agent/engine/types.d.ts +10 -1
  31. package/dist/agent/engine/types.d.ts.map +1 -1
  32. package/dist/agent/production-agent.d.ts +21 -1
  33. package/dist/agent/production-agent.d.ts.map +1 -1
  34. package/dist/agent/production-agent.js +72 -21
  35. package/dist/agent/production-agent.js.map +1 -1
  36. package/dist/agent/thread-data-builder.js +1 -1
  37. package/dist/agent/thread-data-builder.js.map +1 -1
  38. package/dist/agent/types.d.ts +4 -0
  39. package/dist/agent/types.d.ts.map +1 -1
  40. package/dist/application-state/script-helpers.d.ts +12 -5
  41. package/dist/application-state/script-helpers.d.ts.map +1 -1
  42. package/dist/application-state/script-helpers.js +41 -20
  43. package/dist/application-state/script-helpers.js.map +1 -1
  44. package/dist/catalog.json +15 -0
  45. package/dist/checkpoints/index.d.ts +3 -0
  46. package/dist/checkpoints/index.d.ts.map +1 -0
  47. package/dist/checkpoints/index.js +3 -0
  48. package/dist/checkpoints/index.js.map +1 -0
  49. package/dist/checkpoints/service.d.ts +6 -0
  50. package/dist/checkpoints/service.d.ts.map +1 -0
  51. package/dist/checkpoints/service.js +107 -0
  52. package/dist/checkpoints/service.js.map +1 -0
  53. package/dist/checkpoints/store.d.ts +27 -0
  54. package/dist/checkpoints/store.d.ts.map +1 -0
  55. package/dist/checkpoints/store.js +92 -0
  56. package/dist/checkpoints/store.js.map +1 -0
  57. package/dist/cli/create.d.ts.map +1 -1
  58. package/dist/cli/create.js +191 -2
  59. package/dist/cli/create.js.map +1 -1
  60. package/dist/cli/index.js +63 -3
  61. package/dist/cli/index.js.map +1 -1
  62. package/dist/cli/templates-meta.d.ts +2 -0
  63. package/dist/cli/templates-meta.d.ts.map +1 -1
  64. package/dist/cli/templates-meta.js +35 -0
  65. package/dist/cli/templates-meta.js.map +1 -1
  66. package/dist/cli/workspacify.d.ts.map +1 -1
  67. package/dist/cli/workspacify.js +7 -3
  68. package/dist/cli/workspacify.js.map +1 -1
  69. package/dist/client/AgentPanel.d.ts.map +1 -1
  70. package/dist/client/AgentPanel.js +3 -1
  71. package/dist/client/AgentPanel.js.map +1 -1
  72. package/dist/client/AssistantChat.d.ts +15 -0
  73. package/dist/client/AssistantChat.d.ts.map +1 -1
  74. package/dist/client/AssistantChat.js +162 -67
  75. package/dist/client/AssistantChat.js.map +1 -1
  76. package/dist/client/CommandMenu.d.ts.map +1 -1
  77. package/dist/client/CommandMenu.js +9 -5
  78. package/dist/client/CommandMenu.js.map +1 -1
  79. package/dist/client/ConnectBuilderCard.js +1 -1
  80. package/dist/client/ConnectBuilderCard.js.map +1 -1
  81. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  82. package/dist/client/MultiTabAssistantChat.js +89 -4
  83. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  84. package/dist/client/agent-chat-adapter.d.ts +6 -0
  85. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  86. package/dist/client/agent-chat-adapter.js +4 -0
  87. package/dist/client/agent-chat-adapter.js.map +1 -1
  88. package/dist/client/composer/TiptapComposer.d.ts +12 -1
  89. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  90. package/dist/client/composer/TiptapComposer.js +87 -5
  91. package/dist/client/composer/TiptapComposer.js.map +1 -1
  92. package/dist/client/notifications/NotificationsBell.d.ts +23 -0
  93. package/dist/client/notifications/NotificationsBell.d.ts.map +1 -0
  94. package/dist/client/notifications/NotificationsBell.js +165 -0
  95. package/dist/client/notifications/NotificationsBell.js.map +1 -0
  96. package/dist/client/notifications/index.d.ts +2 -0
  97. package/dist/client/notifications/index.d.ts.map +1 -0
  98. package/dist/client/notifications/index.js +2 -0
  99. package/dist/client/notifications/index.js.map +1 -0
  100. package/dist/client/onboarding/OnboardingPanel.js +6 -3
  101. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  102. package/dist/client/progress/RunsTray.d.ts +18 -0
  103. package/dist/client/progress/RunsTray.d.ts.map +1 -0
  104. package/dist/client/progress/RunsTray.js +70 -0
  105. package/dist/client/progress/RunsTray.js.map +1 -0
  106. package/dist/client/progress/index.d.ts +2 -0
  107. package/dist/client/progress/index.d.ts.map +1 -0
  108. package/dist/client/progress/index.js +2 -0
  109. package/dist/client/progress/index.js.map +1 -0
  110. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  111. package/dist/client/resources/ResourcesPanel.js +19 -4
  112. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  113. package/dist/client/settings/AutomationsSection.d.ts +2 -0
  114. package/dist/client/settings/AutomationsSection.d.ts.map +1 -0
  115. package/dist/client/settings/AutomationsSection.js +214 -0
  116. package/dist/client/settings/AutomationsSection.js.map +1 -0
  117. package/dist/client/settings/ComingSoonSection.d.ts.map +1 -1
  118. package/dist/client/settings/ComingSoonSection.js +2 -1
  119. package/dist/client/settings/ComingSoonSection.js.map +1 -1
  120. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  121. package/dist/client/settings/SecretsSection.js +122 -3
  122. package/dist/client/settings/SecretsSection.js.map +1 -1
  123. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  124. package/dist/client/settings/SettingsPanel.js +252 -14
  125. package/dist/client/settings/SettingsPanel.js.map +1 -1
  126. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  127. package/dist/client/settings/VoiceTranscriptionSection.js +2 -2
  128. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  129. package/dist/client/use-pausing-interval.d.ts +11 -0
  130. package/dist/client/use-pausing-interval.d.ts.map +1 -0
  131. package/dist/client/use-pausing-interval.js +49 -0
  132. package/dist/client/use-pausing-interval.js.map +1 -0
  133. package/dist/db/client.d.ts +26 -0
  134. package/dist/db/client.d.ts.map +1 -1
  135. package/dist/db/client.js +84 -2
  136. package/dist/db/client.js.map +1 -1
  137. package/dist/db/drizzle-config.d.ts +33 -0
  138. package/dist/db/drizzle-config.d.ts.map +1 -0
  139. package/dist/db/drizzle-config.js +132 -0
  140. package/dist/db/drizzle-config.js.map +1 -0
  141. package/dist/db/migrations.d.ts.map +1 -1
  142. package/dist/db/migrations.js +11 -6
  143. package/dist/db/migrations.js.map +1 -1
  144. package/dist/deploy/build.js +2 -1
  145. package/dist/deploy/build.js.map +1 -1
  146. package/dist/event-bus/bus.d.ts +20 -0
  147. package/dist/event-bus/bus.d.ts.map +1 -0
  148. package/dist/event-bus/bus.js +108 -0
  149. package/dist/event-bus/bus.js.map +1 -0
  150. package/dist/event-bus/index.d.ts +4 -0
  151. package/dist/event-bus/index.d.ts.map +1 -0
  152. package/dist/event-bus/index.js +3 -0
  153. package/dist/event-bus/index.js.map +1 -0
  154. package/dist/event-bus/registry.d.ts +22 -0
  155. package/dist/event-bus/registry.d.ts.map +1 -0
  156. package/dist/event-bus/registry.js +63 -0
  157. package/dist/event-bus/registry.js.map +1 -0
  158. package/dist/event-bus/types.d.ts +27 -0
  159. package/dist/event-bus/types.d.ts.map +1 -0
  160. package/dist/event-bus/types.js +2 -0
  161. package/dist/event-bus/types.js.map +1 -0
  162. package/dist/integrations/config-store.d.ts.map +1 -1
  163. package/dist/integrations/config-store.js +16 -12
  164. package/dist/integrations/config-store.js.map +1 -1
  165. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  166. package/dist/integrations/google-docs-poller.js +5 -1
  167. package/dist/integrations/google-docs-poller.js.map +1 -1
  168. package/dist/jobs/scheduler.d.ts.map +1 -1
  169. package/dist/jobs/scheduler.js +7 -3
  170. package/dist/jobs/scheduler.js.map +1 -1
  171. package/dist/notifications/actions.d.ts +10 -0
  172. package/dist/notifications/actions.d.ts.map +1 -0
  173. package/dist/notifications/actions.js +114 -0
  174. package/dist/notifications/actions.js.map +1 -0
  175. package/dist/notifications/channels.d.ts +15 -0
  176. package/dist/notifications/channels.d.ts.map +1 -0
  177. package/dist/notifications/channels.js +97 -0
  178. package/dist/notifications/channels.js.map +1 -0
  179. package/dist/notifications/index.d.ts +4 -0
  180. package/dist/notifications/index.d.ts.map +1 -0
  181. package/dist/notifications/index.js +3 -0
  182. package/dist/notifications/index.js.map +1 -0
  183. package/dist/notifications/registry.d.ts +9 -0
  184. package/dist/notifications/registry.d.ts.map +1 -0
  185. package/dist/notifications/registry.js +146 -0
  186. package/dist/notifications/registry.js.map +1 -0
  187. package/dist/notifications/routes.d.ts +34 -0
  188. package/dist/notifications/routes.d.ts.map +1 -0
  189. package/dist/notifications/routes.js +69 -0
  190. package/dist/notifications/routes.js.map +1 -0
  191. package/dist/notifications/store.d.ts +25 -0
  192. package/dist/notifications/store.d.ts.map +1 -0
  193. package/dist/notifications/store.js +158 -0
  194. package/dist/notifications/store.js.map +1 -0
  195. package/dist/notifications/types.d.ts +43 -0
  196. package/dist/notifications/types.d.ts.map +1 -0
  197. package/dist/notifications/types.js +2 -0
  198. package/dist/notifications/types.js.map +1 -0
  199. package/dist/onboarding/default-steps.d.ts.map +1 -1
  200. package/dist/onboarding/default-steps.js +63 -20
  201. package/dist/onboarding/default-steps.js.map +1 -1
  202. package/dist/org/handlers.d.ts.map +1 -1
  203. package/dist/org/handlers.js +7 -26
  204. package/dist/org/handlers.js.map +1 -1
  205. package/dist/progress/actions.d.ts +8 -0
  206. package/dist/progress/actions.d.ts.map +1 -0
  207. package/dist/progress/actions.js +158 -0
  208. package/dist/progress/actions.js.map +1 -0
  209. package/dist/progress/index.d.ts +3 -0
  210. package/dist/progress/index.d.ts.map +1 -0
  211. package/dist/progress/index.js +2 -0
  212. package/dist/progress/index.js.map +1 -0
  213. package/dist/progress/registry.d.ts +22 -0
  214. package/dist/progress/registry.d.ts.map +1 -0
  215. package/dist/progress/registry.js +98 -0
  216. package/dist/progress/registry.js.map +1 -0
  217. package/dist/progress/routes.d.ts +21 -0
  218. package/dist/progress/routes.d.ts.map +1 -0
  219. package/dist/progress/routes.js +59 -0
  220. package/dist/progress/routes.js.map +1 -0
  221. package/dist/progress/store.d.ts +7 -0
  222. package/dist/progress/store.d.ts.map +1 -0
  223. package/dist/progress/store.js +195 -0
  224. package/dist/progress/store.js.map +1 -0
  225. package/dist/progress/types.d.ts +49 -0
  226. package/dist/progress/types.d.ts.map +1 -0
  227. package/dist/progress/types.js +7 -0
  228. package/dist/progress/types.js.map +1 -0
  229. package/dist/resources/store.d.ts.map +1 -1
  230. package/dist/resources/store.js +19 -15
  231. package/dist/resources/store.js.map +1 -1
  232. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  233. package/dist/scripts/agent-engines/list-agent-engines.js +19 -5
  234. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  235. package/dist/scripts/agent-engines/set-agent-engine.d.ts.map +1 -1
  236. package/dist/scripts/agent-engines/set-agent-engine.js +8 -7
  237. package/dist/scripts/agent-engines/set-agent-engine.js.map +1 -1
  238. package/dist/secrets/index.d.ts +3 -2
  239. package/dist/secrets/index.d.ts.map +1 -1
  240. package/dist/secrets/index.js +3 -2
  241. package/dist/secrets/index.js.map +1 -1
  242. package/dist/secrets/routes.d.ts +41 -2
  243. package/dist/secrets/routes.d.ts.map +1 -1
  244. package/dist/secrets/routes.js +167 -1
  245. package/dist/secrets/routes.js.map +1 -1
  246. package/dist/secrets/schema.d.ts +39 -1
  247. package/dist/secrets/schema.d.ts.map +1 -1
  248. package/dist/secrets/schema.js +6 -0
  249. package/dist/secrets/schema.js.map +1 -1
  250. package/dist/secrets/storage.d.ts +26 -0
  251. package/dist/secrets/storage.d.ts.map +1 -1
  252. package/dist/secrets/storage.js +111 -5
  253. package/dist/secrets/storage.js.map +1 -1
  254. package/dist/secrets/substitution.d.ts +39 -0
  255. package/dist/secrets/substitution.d.ts.map +1 -0
  256. package/dist/secrets/substitution.js +93 -0
  257. package/dist/secrets/substitution.js.map +1 -0
  258. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  259. package/dist/server/agent-chat-plugin.js +1684 -1410
  260. package/dist/server/agent-chat-plugin.js.map +1 -1
  261. package/dist/server/agent-teams.d.ts.map +1 -1
  262. package/dist/server/agent-teams.js +17 -6
  263. package/dist/server/agent-teams.js.map +1 -1
  264. package/dist/server/analytics.d.ts +8 -5
  265. package/dist/server/analytics.d.ts.map +1 -1
  266. package/dist/server/analytics.js +17 -8
  267. package/dist/server/analytics.js.map +1 -1
  268. package/dist/server/app-url.d.ts.map +1 -1
  269. package/dist/server/app-url.js +7 -4
  270. package/dist/server/app-url.js.map +1 -1
  271. package/dist/server/auth.d.ts +11 -0
  272. package/dist/server/auth.d.ts.map +1 -1
  273. package/dist/server/auth.js +74 -21
  274. package/dist/server/auth.js.map +1 -1
  275. package/dist/server/better-auth-instance.d.ts.map +1 -1
  276. package/dist/server/better-auth-instance.js +34 -16
  277. package/dist/server/better-auth-instance.js.map +1 -1
  278. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  279. package/dist/server/core-routes-plugin.js +179 -2
  280. package/dist/server/core-routes-plugin.js.map +1 -1
  281. package/dist/server/email-templates.d.ts +43 -0
  282. package/dist/server/email-templates.d.ts.map +1 -0
  283. package/dist/server/email-templates.js +86 -0
  284. package/dist/server/email-templates.js.map +1 -0
  285. package/dist/server/framework-request-handler.d.ts +15 -0
  286. package/dist/server/framework-request-handler.d.ts.map +1 -1
  287. package/dist/server/framework-request-handler.js +64 -1
  288. package/dist/server/framework-request-handler.js.map +1 -1
  289. package/dist/server/onboarding-html.d.ts +11 -0
  290. package/dist/server/onboarding-html.d.ts.map +1 -1
  291. package/dist/server/onboarding-html.js +275 -16
  292. package/dist/server/onboarding-html.js.map +1 -1
  293. package/dist/server/schema-prompt.d.ts.map +1 -1
  294. package/dist/server/schema-prompt.js +5 -0
  295. package/dist/server/schema-prompt.js.map +1 -1
  296. package/dist/shared/index.d.ts +1 -0
  297. package/dist/shared/index.d.ts.map +1 -1
  298. package/dist/shared/index.js +1 -0
  299. package/dist/shared/index.js.map +1 -1
  300. package/dist/shared/truncate.d.ts +8 -0
  301. package/dist/shared/truncate.d.ts.map +1 -0
  302. package/dist/shared/truncate.js +12 -0
  303. package/dist/shared/truncate.js.map +1 -0
  304. package/dist/templates/default/.agents/skills/agent-engines/SKILL.md +60 -4
  305. package/dist/templates/default/.agents/skills/notifications/SKILL.md +95 -0
  306. package/dist/templates/default/.agents/skills/progress/SKILL.md +97 -0
  307. package/dist/templates/default/AGENTS.md +12 -10
  308. package/dist/templates/default/package.json +10 -10
  309. package/dist/templates/workspace-core/package.json +5 -5
  310. package/dist/templates/workspace-root/package.json +1 -1
  311. package/dist/templates/workspace-root/pnpm-workspace.yaml +6 -0
  312. package/dist/templates/workspace-root/tsconfig.base.json +1 -2
  313. package/dist/tools/fetch-tool.d.ts +22 -0
  314. package/dist/tools/fetch-tool.d.ts.map +1 -0
  315. package/dist/tools/fetch-tool.js +156 -0
  316. package/dist/tools/fetch-tool.js.map +1 -0
  317. package/dist/tracking/index.d.ts +4 -0
  318. package/dist/tracking/index.d.ts.map +1 -0
  319. package/dist/tracking/index.js +3 -0
  320. package/dist/tracking/index.js.map +1 -0
  321. package/dist/tracking/providers.d.ts +15 -0
  322. package/dist/tracking/providers.d.ts.map +1 -0
  323. package/dist/tracking/providers.js +195 -0
  324. package/dist/tracking/providers.js.map +1 -0
  325. package/dist/tracking/registry.d.ts +10 -0
  326. package/dist/tracking/registry.d.ts.map +1 -0
  327. package/dist/tracking/registry.js +75 -0
  328. package/dist/tracking/registry.js.map +1 -0
  329. package/dist/tracking/types.d.ts +13 -0
  330. package/dist/tracking/types.d.ts.map +1 -0
  331. package/dist/tracking/types.js +2 -0
  332. package/dist/tracking/types.js.map +1 -0
  333. package/dist/triggers/actions.d.ts +10 -0
  334. package/dist/triggers/actions.d.ts.map +1 -0
  335. package/dist/triggers/actions.js +277 -0
  336. package/dist/triggers/actions.js.map +1 -0
  337. package/dist/triggers/condition-evaluator.d.ts +15 -0
  338. package/dist/triggers/condition-evaluator.d.ts.map +1 -0
  339. package/dist/triggers/condition-evaluator.js +107 -0
  340. package/dist/triggers/condition-evaluator.js.map +1 -0
  341. package/dist/triggers/dispatcher.d.ts +32 -0
  342. package/dist/triggers/dispatcher.d.ts.map +1 -0
  343. package/dist/triggers/dispatcher.js +291 -0
  344. package/dist/triggers/dispatcher.js.map +1 -0
  345. package/dist/triggers/index.d.ts +5 -0
  346. package/dist/triggers/index.d.ts.map +1 -0
  347. package/dist/triggers/index.js +4 -0
  348. package/dist/triggers/index.js.map +1 -0
  349. package/dist/triggers/types.d.ts +35 -0
  350. package/dist/triggers/types.d.ts.map +1 -0
  351. package/dist/triggers/types.js +9 -0
  352. package/dist/triggers/types.js.map +1 -0
  353. package/dist/vite/client.d.ts.map +1 -1
  354. package/dist/vite/client.js +66 -16
  355. package/dist/vite/client.js.map +1 -1
  356. package/docs/content/automations.md +239 -0
  357. package/docs/content/multi-tenancy.md +88 -0
  358. package/docs/content/notifications.md +199 -0
  359. package/docs/content/progress.md +176 -0
  360. package/docs/content/tracking.md +168 -0
  361. package/package.json +59 -35
  362. package/src/templates/default/.agents/skills/agent-engines/SKILL.md +60 -4
  363. package/src/templates/default/.agents/skills/notifications/SKILL.md +95 -0
  364. package/src/templates/default/.agents/skills/progress/SKILL.md +97 -0
  365. package/src/templates/default/AGENTS.md +12 -10
  366. package/src/templates/default/package.json +10 -10
  367. package/src/templates/workspace-core/package.json +5 -5
  368. package/src/templates/workspace-root/package.json +1 -1
  369. package/src/templates/workspace-root/pnpm-workspace.yaml +6 -0
  370. package/src/templates/workspace-root/tsconfig.base.json +1 -2
  371. package/tsconfig.base.json +1 -1
  372. package/dist/client/settings/LLMSection.d.ts +0 -2
  373. package/dist/client/settings/LLMSection.d.ts.map +0 -1
  374. package/dist/client/settings/LLMSection.js +0 -64
  375. package/dist/client/settings/LLMSection.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Single source of truth for every built-in LLM provider's env var name and
3
+ * UI metadata. Imported by both server and client code — keep it free of
4
+ * runtime imports so it stays tree-shakeable into the browser bundle.
5
+ *
6
+ * Add a new provider here when adding it to builtin.ts; all three UI gates
7
+ * (AssistantChat composer, settings env-var list, settings key form) pick
8
+ * it up automatically.
9
+ */
10
+ export const PROVIDER_ENV_META = {
11
+ anthropic: {
12
+ envVar: "ANTHROPIC_API_KEY",
13
+ label: "Anthropic API Key",
14
+ placeholder: "sk-ant-...",
15
+ },
16
+ openai: {
17
+ envVar: "OPENAI_API_KEY",
18
+ label: "OpenAI API Key",
19
+ placeholder: "sk-...",
20
+ },
21
+ google: {
22
+ envVar: "GOOGLE_GENERATIVE_AI_API_KEY",
23
+ label: "Google Gemini API Key",
24
+ placeholder: "AI...",
25
+ },
26
+ openrouter: {
27
+ envVar: "OPENROUTER_API_KEY",
28
+ label: "OpenRouter API Key",
29
+ placeholder: "sk-or-...",
30
+ },
31
+ groq: {
32
+ envVar: "GROQ_API_KEY",
33
+ label: "Groq API Key",
34
+ placeholder: "gsk_...",
35
+ },
36
+ mistral: {
37
+ envVar: "MISTRAL_API_KEY",
38
+ label: "Mistral API Key",
39
+ placeholder: "...",
40
+ },
41
+ cohere: {
42
+ envVar: "COHERE_API_KEY",
43
+ label: "Cohere API Key",
44
+ placeholder: "...",
45
+ },
46
+ };
47
+ export const PROVIDER_TO_ENV = Object.fromEntries(Object.entries(PROVIDER_ENV_META).map(([k, v]) => [k, v.envVar]));
48
+ export const PROVIDER_ENV_VARS = Object.values(PROVIDER_TO_ENV);
49
+ export const PROVIDER_ENV_PLACEHOLDERS = Object.fromEntries(Object.values(PROVIDER_ENV_META).map((m) => [m.envVar, m.placeholder]));
50
+ //# sourceMappingURL=provider-env-vars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-env-vars.js","sourceRoot":"","sources":["../../../src/agent/engine/provider-env-vars.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,MAAM,CAAC,MAAM,iBAAiB,GAAoC;IAChE,SAAS,EAAE;QACT,MAAM,EAAE,mBAAmB;QAC3B,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,YAAY;KAC1B;IACD,MAAM,EAAE;QACN,MAAM,EAAE,gBAAgB;QACxB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,QAAQ;KACtB;IACD,MAAM,EAAE;QACN,MAAM,EAAE,8BAA8B;QACtC,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,OAAO;KACrB;IACD,UAAU,EAAE;QACV,MAAM,EAAE,oBAAoB;QAC5B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,WAAW;KACzB;IACD,IAAI,EAAE;QACJ,MAAM,EAAE,cAAc;QACtB,KAAK,EAAE,cAAc;QACrB,WAAW,EAAE,SAAS;KACvB;IACD,OAAO,EAAE;QACP,MAAM,EAAE,iBAAiB;QACzB,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE,KAAK;KACnB;IACD,MAAM,EAAE;QACN,MAAM,EAAE,gBAAgB;QACxB,KAAK,EAAE,gBAAgB;QACvB,WAAW,EAAE,KAAK;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA2B,MAAM,CAAC,WAAW,CACvE,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CACjE,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAC5B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AAEjC,MAAM,CAAC,MAAM,yBAAyB,GACpC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CACvE,CAAC"}
@@ -37,6 +37,24 @@ export declare function registerAgentEngine(entry: AgentEngineEntry): void;
37
37
  export declare function getAgentEngineEntry(name: string): AgentEngineEntry | undefined;
38
38
  /** List all registered engine entries */
39
39
  export declare function listAgentEngines(): AgentEngineEntry[];
40
+ /**
41
+ * First registered engine whose requiredEnvVars are all set. Registration
42
+ * order controls priority — Anthropic wins when multiple keys coexist.
43
+ */
44
+ export declare function detectEngineFromEnv(): AgentEngineEntry | null;
45
+ /**
46
+ * True when an `agent-engine` setting entry names an engine AND carries an
47
+ * API key (top-level or inside `config`). Shared between the onboarding step
48
+ * and the /agent-engine/status endpoint so both agree on "is this configured".
49
+ */
50
+ export declare function isAgentEngineSettingConfigured(stored: unknown): boolean;
51
+ /**
52
+ * True when the stored `agent-engine` row points at a registered engine
53
+ * AND an API key for it is reachable — either inline (settings + `config`)
54
+ * or via the engine's required env vars. When false, callers should fall
55
+ * through to env-detection so a stale disconnected row can't hijack chat.
56
+ */
57
+ export declare function isStoredEngineUsable(stored: unknown, entry: AgentEngineEntry): boolean;
40
58
  export interface ResolveEngineConfig {
41
59
  /** Explicit engine name or instance from createAgentChatPlugin options */
42
60
  engineOption?: string | AgentEngine | {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,YAAY,EAAE,kBAAkB,CAAC;IACjC,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,6DAA6D;IAC7D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,4CAA4C;IAC5C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC;CACtD;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAajE;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,SAAS,CAE9B;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,IAAI,gBAAgB,EAAE,CAErD;AAED,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,YAAY,CAAC,EACT,MAAM,GACN,WAAW,GACX;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtD,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAwEtB"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,YAAY,EAAE,kBAAkB,CAAC;IACjC,2BAA2B;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,mDAAmD;IACnD,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,6DAA6D;IAC7D,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,4CAA4C;IAC5C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC;CACtD;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAajE;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GACX,gBAAgB,GAAG,SAAS,CAE9B;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,IAAI,gBAAgB,EAAE,CAErD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAQ7D;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAavE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAIT;AAED,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,YAAY,CAAC,EACT,MAAM,GACN,WAAW,GACX;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IACtD,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,WAAW,CAAC,CA6EtB"}
@@ -33,6 +33,51 @@ export function getAgentEngineEntry(name) {
33
33
  export function listAgentEngines() {
34
34
  return Array.from(_registry.values());
35
35
  }
36
+ /**
37
+ * First registered engine whose requiredEnvVars are all set. Registration
38
+ * order controls priority — Anthropic wins when multiple keys coexist.
39
+ */
40
+ export function detectEngineFromEnv() {
41
+ for (const entry of _registry.values()) {
42
+ if (entry.requiredEnvVars.length === 0)
43
+ continue;
44
+ if (entry.requiredEnvVars.every((v) => !!process.env[v])) {
45
+ return entry;
46
+ }
47
+ }
48
+ return null;
49
+ }
50
+ /**
51
+ * True when an `agent-engine` setting entry names an engine AND carries an
52
+ * API key (top-level or inside `config`). Shared between the onboarding step
53
+ * and the /agent-engine/status endpoint so both agree on "is this configured".
54
+ */
55
+ export function isAgentEngineSettingConfigured(stored) {
56
+ if (!stored || typeof stored !== "object")
57
+ return false;
58
+ const s = stored;
59
+ if (typeof s.engine !== "string" || !s.engine)
60
+ return false;
61
+ if (typeof s.apiKey === "string" && s.apiKey)
62
+ return true;
63
+ if (s.config && typeof s.config.apiKey === "string" && s.config.apiKey) {
64
+ return true;
65
+ }
66
+ return false;
67
+ }
68
+ /**
69
+ * True when the stored `agent-engine` row points at a registered engine
70
+ * AND an API key for it is reachable — either inline (settings + `config`)
71
+ * or via the engine's required env vars. When false, callers should fall
72
+ * through to env-detection so a stale disconnected row can't hijack chat.
73
+ */
74
+ export function isStoredEngineUsable(stored, entry) {
75
+ if (isAgentEngineSettingConfigured(stored))
76
+ return true;
77
+ if (entry.requiredEnvVars.length === 0)
78
+ return true;
79
+ return entry.requiredEnvVars.every((v) => !!process.env[v]);
80
+ }
36
81
  /**
37
82
  * Resolve an AgentEngine from options → settings → env → default.
38
83
  *
@@ -67,12 +112,12 @@ export async function resolveEngine(config) {
67
112
  throw new Error(`[agent-engine] Unknown engine: "${engineOption}". Registered: ${[..._registry.keys()].join(", ")}`);
68
113
  return entry.create({ apiKey });
69
114
  }
70
- // 4. Settings store
115
+ // 4. Settings store — only when the stored row's API key is reachable.
71
116
  try {
72
117
  const stored = await getSetting("agent-engine");
73
118
  if (stored && typeof stored.engine === "string") {
74
119
  const entry = _registry.get(stored.engine);
75
- if (entry) {
120
+ if (entry && isStoredEngineUsable(stored, entry)) {
76
121
  const storedApiKey = stored.apiKey ?? apiKey;
77
122
  return entry.create({
78
123
  apiKey: storedApiKey,
@@ -84,14 +129,19 @@ export async function resolveEngine(config) {
84
129
  catch {
85
130
  // Settings not available — fall through
86
131
  }
87
- // 5. Env var
132
+ // 5. Env var — explicit engine name override
88
133
  const envEngine = process.env.AGENT_ENGINE;
89
134
  if (envEngine) {
90
135
  const entry = _registry.get(envEngine);
91
136
  if (entry)
92
137
  return entry.create({ apiKey });
93
138
  }
94
- // 6. Default: anthropic
139
+ // 6. Auto-detect from any provider env var — so just dropping a key in
140
+ // .env works without also setting AGENT_ENGINE.
141
+ const detected = detectEngineFromEnv();
142
+ if (detected)
143
+ return detected.create({ apiKey });
144
+ // 7. Default: anthropic
95
145
  const anthropicEntry = _registry.get("anthropic");
96
146
  if (!anthropicEntry) {
97
147
  throw new Error("[agent-engine] Default Anthropic engine is not registered. Did builtin.ts fail to load?");
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agent/engine/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/agent/engine/registry.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,45 @@
1
1
  /**
2
2
  * Translation helpers between AgentEngine normalized types and
3
- * Vercel AI SDK (ai package) types.
3
+ * Vercel AI SDK (`ai` package, v6+) types.
4
+ *
5
+ * The framework keeps a provider-neutral content/event model (see ./types.ts).
6
+ * These helpers convert in both directions against the v6 `TextStreamPart` and
7
+ * `ModelMessage` shapes.
4
8
  */
5
- import type { EngineTool, EngineMessage, EngineContentPart } from "./types.js";
9
+ import type { EngineTool, EngineMessage, EngineContentPart, EngineEvent } from "./types.js";
6
10
  /**
7
- * Convert EngineTool[] to the `tools` Record<string, CoreTool> shape
8
- * that AI SDK's streamText expects.
11
+ * Convert EngineTool[] into the record shape that AI SDK's `streamText` expects
12
+ * under the `tools` option.
9
13
  *
10
- * AI SDK v4 requires tool parameters to be Zod schemas or jsonSchema()-wrapped
11
- * objects. Pass the `jsonSchema` helper from the `ai` package to produce a
12
- * compatible schema wrapper; fall back to the raw JSON Schema object when the
13
- * helper is not available (older AI SDK or tests).
14
+ * Pass the `jsonSchema` helper from the `ai` package when available so the
15
+ * schema is wrapped in the SDK's runtime validator; fall back to the raw JSON
16
+ * Schema object otherwise (mostly for unit tests that don't import `ai`).
14
17
  */
15
18
  export declare function engineToolsToAISDK(tools: EngineTool[], jsonSchema?: (schema: Record<string, unknown>) => unknown): Record<string, any>;
16
- export declare function engineMessageToAISDK(msg: EngineMessage): any;
19
+ /**
20
+ * Convert a single EngineMessage into **one or more** AI SDK ModelMessages.
21
+ *
22
+ * v6 puts tool-results in a dedicated `role: "tool"` message rather than
23
+ * embedding them in user content. When an EngineMessage's user content mixes
24
+ * text/images with tool-results, we emit the tool-result parts first as a
25
+ * `{role: "tool"}` message, followed by the remaining text/image parts as a
26
+ * `{role: "user"}` message.
27
+ */
28
+ export declare function engineMessageToAISDK(msg: EngineMessage): any[];
17
29
  export declare function engineMessagesToAISDK(messages: EngineMessage[]): any[];
18
- export declare function aiSdkPartToEngineEvents(part: any): import("./types.js").EngineEvent[];
30
+ /**
31
+ * Translate a single part from AI SDK's `result.fullStream` into the flat
32
+ * sequence of EngineEvent items the framework works with.
33
+ *
34
+ * v6 emits lifecycle events (`text-start` / `text-delta` / `text-end`,
35
+ * `reasoning-start` / `reasoning-delta` / `reasoning-end`, `tool-input-*`).
36
+ * We absorb the boundary events and forward only the deltas plus the terminal
37
+ * `tool-call`, `finish-step`, and `finish` parts.
38
+ */
39
+ export declare function aiSdkPartToEngineEvents(part: any): EngineEvent[];
40
+ /**
41
+ * Reconstruct the assistant message content from an AI SDK v6 `StepResult`.
42
+ * `step.content` is the canonical structured form — iterate it.
43
+ */
19
44
  export declare function aiSdkStepToAssistantContent(step: any): EngineContentPart[];
20
45
  //# sourceMappingURL=translate-ai-sdk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"translate-ai-sdk.d.ts","sourceRoot":"","sources":["../../../src/agent/engine/translate-ai-sdk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM/E;;;;;;;;GAQG;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,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG,CAyD5D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,GAAG,EAAE,CAEtE;AAMD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,GAAG,GACR,OAAO,YAAY,EAAE,WAAW,EAAE,CA+CpC;AAMD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,EAAE,CA2B1E"}
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;AAMpB;;;;;;;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,CAiF9D;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,GAAG,EAAE,CAEtE;AAMD;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,WAAW,EAAE,CA6EhE;AAuCD;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,GAAG,GAAG,iBAAiB,EAAE,CAuB1E"}
@@ -1,18 +1,21 @@
1
1
  /**
2
2
  * Translation helpers between AgentEngine normalized types and
3
- * Vercel AI SDK (ai package) types.
3
+ * Vercel AI SDK (`ai` package, v6+) types.
4
+ *
5
+ * The framework keeps a provider-neutral content/event model (see ./types.ts).
6
+ * These helpers convert in both directions against the v6 `TextStreamPart` and
7
+ * `ModelMessage` shapes.
4
8
  */
5
9
  // ---------------------------------------------------------------------------
6
- // EngineTool → AI SDK CoreTool shape
10
+ // EngineTool → AI SDK tool definition
7
11
  // ---------------------------------------------------------------------------
8
12
  /**
9
- * Convert EngineTool[] to the `tools` Record<string, CoreTool> shape
10
- * that AI SDK's streamText expects.
13
+ * Convert EngineTool[] into the record shape that AI SDK's `streamText` expects
14
+ * under the `tools` option.
11
15
  *
12
- * AI SDK v4 requires tool parameters to be Zod schemas or jsonSchema()-wrapped
13
- * objects. Pass the `jsonSchema` helper from the `ai` package to produce a
14
- * compatible schema wrapper; fall back to the raw JSON Schema object when the
15
- * helper is not available (older AI SDK or tests).
16
+ * Pass the `jsonSchema` helper from the `ai` package when available so the
17
+ * schema is wrapped in the SDK's runtime validator; fall back to the raw JSON
18
+ * Schema object otherwise (mostly for unit tests that don't import `ai`).
16
19
  */
17
20
  export function engineToolsToAISDK(tools, jsonSchema) {
18
21
  const result = {};
@@ -24,42 +27,63 @@ export function engineToolsToAISDK(tools, jsonSchema) {
24
27
  };
25
28
  result[tool.name] = {
26
29
  description: tool.description,
27
- parameters: jsonSchema ? jsonSchema(rawSchema) : rawSchema,
30
+ inputSchema: jsonSchema ? jsonSchema(rawSchema) : rawSchema,
28
31
  };
29
32
  }
30
33
  return result;
31
34
  }
32
35
  // ---------------------------------------------------------------------------
33
- // EngineMessage → AI SDK CoreMessage
36
+ // EngineMessage → AI SDK ModelMessage
34
37
  // ---------------------------------------------------------------------------
38
+ /**
39
+ * Convert a single EngineMessage into **one or more** AI SDK ModelMessages.
40
+ *
41
+ * v6 puts tool-results in a dedicated `role: "tool"` message rather than
42
+ * embedding them in user content. When an EngineMessage's user content mixes
43
+ * text/images with tool-results, we emit the tool-result parts first as a
44
+ * `{role: "tool"}` message, followed by the remaining text/image parts as a
45
+ * `{role: "user"}` message.
46
+ */
35
47
  export function engineMessageToAISDK(msg) {
48
+ // EngineMessage is `user | assistant` — both branches return below.
36
49
  if (msg.role === "user") {
37
- const content = [];
50
+ const userParts = [];
51
+ const toolResultParts = [];
38
52
  for (const part of msg.content) {
39
53
  if (part.type === "text") {
40
- content.push({ type: "text", text: part.text });
54
+ userParts.push({ type: "text", text: part.text });
41
55
  }
42
56
  else if (part.type === "image") {
43
- content.push({
57
+ userParts.push({
44
58
  type: "image",
45
59
  image: `data:${part.mediaType};base64,${part.data}`,
60
+ mediaType: part.mediaType,
46
61
  });
47
62
  }
48
63
  else if (part.type === "tool-result") {
49
- content.push({
64
+ toolResultParts.push({
50
65
  type: "tool-result",
51
66
  toolCallId: part.toolCallId,
52
- result: part.content,
53
- isError: part.isError,
67
+ toolName: part.toolName ?? "",
68
+ output: part.isError
69
+ ? { type: "error-text", value: part.content }
70
+ : { type: "text", value: part.content },
54
71
  });
55
72
  }
56
73
  }
57
- return {
58
- role: "user",
59
- content: content.length === 1 && content[0].type === "text"
60
- ? content[0].text
61
- : content,
62
- };
74
+ const out = [];
75
+ if (toolResultParts.length > 0) {
76
+ out.push({ role: "tool", content: toolResultParts });
77
+ }
78
+ if (userParts.length > 0) {
79
+ out.push({
80
+ role: "user",
81
+ content: userParts.length === 1 && userParts[0].type === "text"
82
+ ? userParts[0].text
83
+ : userParts,
84
+ });
85
+ }
86
+ return out;
63
87
  }
64
88
  if (msg.role === "assistant") {
65
89
  const content = [];
@@ -72,103 +96,178 @@ export function engineMessageToAISDK(msg) {
72
96
  type: "tool-call",
73
97
  toolCallId: part.id,
74
98
  toolName: part.name,
75
- args: part.input,
99
+ input: part.input,
76
100
  });
77
101
  }
78
102
  else if (part.type === "thinking") {
79
- // AI SDK 5+ supports reasoning content parts
80
- content.push({ type: "reasoning", text: part.text });
103
+ const reasoning = {
104
+ type: "reasoning",
105
+ text: part.text,
106
+ };
107
+ if (part.signature) {
108
+ // Round-trip the Anthropic extended-thinking signature through
109
+ // providerOptions so the model can continue its chain of thought.
110
+ reasoning.providerOptions = {
111
+ anthropic: { signature: part.signature },
112
+ };
113
+ }
114
+ content.push(reasoning);
81
115
  }
82
116
  }
83
- return {
84
- role: "assistant",
85
- content: content.length === 1 && content[0].type === "text"
86
- ? content[0].text
87
- : content,
88
- };
117
+ return [
118
+ {
119
+ role: "assistant",
120
+ content: content.length === 1 && content[0].type === "text"
121
+ ? content[0].text
122
+ : content,
123
+ },
124
+ ];
89
125
  }
90
- // Exhaustive EngineMessage only has "user" | "assistant" roles
91
- return { role: msg.role, content: "" };
126
+ throw new Error(`unknown EngineMessage role: ${msg.role}`);
92
127
  }
93
128
  export function engineMessagesToAISDK(messages) {
94
- return messages.map(engineMessageToAISDK);
129
+ return messages.flatMap(engineMessageToAISDK);
95
130
  }
96
131
  // ---------------------------------------------------------------------------
97
- // AI SDK stream part → EngineEvent
132
+ // AI SDK TextStreamPart → EngineEvent
98
133
  // ---------------------------------------------------------------------------
134
+ /**
135
+ * Translate a single part from AI SDK's `result.fullStream` into the flat
136
+ * sequence of EngineEvent items the framework works with.
137
+ *
138
+ * v6 emits lifecycle events (`text-start` / `text-delta` / `text-end`,
139
+ * `reasoning-start` / `reasoning-delta` / `reasoning-end`, `tool-input-*`).
140
+ * We absorb the boundary events and forward only the deltas plus the terminal
141
+ * `tool-call`, `finish-step`, and `finish` parts.
142
+ */
99
143
  export function aiSdkPartToEngineEvents(part) {
100
144
  const events = [];
101
- if (part.type === "text-delta") {
102
- events.push({ type: "text-delta", text: part.textDelta ?? "" });
103
- }
104
- else if (part.type === "reasoning") {
105
- events.push({
106
- type: "thinking-delta",
107
- text: part.textDelta ?? part.text ?? "",
108
- });
109
- }
110
- else if (part.type === "tool-call") {
111
- events.push({
112
- type: "tool-call",
113
- id: part.toolCallId,
114
- name: part.toolName,
115
- input: part.args,
116
- });
117
- }
118
- else if (part.type === "error") {
119
- // AI SDK emits { type: "error", error: Error } when streaming fails
120
- const errMsg = (part.error instanceof Error ? part.error.message : String(part.error)) ??
121
- "Unknown stream error";
122
- events.push({ type: "stop", reason: "error", error: errMsg });
123
- }
124
- else if (part.type === "finish") {
125
- // Usage info may arrive on the finish step
126
- if (part.usage) {
145
+ switch (part?.type) {
146
+ case "text-delta":
147
+ if (part.text)
148
+ events.push({ type: "text-delta", text: part.text });
149
+ break;
150
+ case "text-start":
151
+ case "text-end":
152
+ break;
153
+ case "reasoning-delta":
154
+ if (part.text)
155
+ events.push({ type: "thinking-delta", text: part.text });
156
+ break;
157
+ case "reasoning-start":
158
+ case "reasoning-end":
159
+ break;
160
+ case "tool-input-start":
161
+ case "tool-input-delta":
162
+ case "tool-input-end":
163
+ // Ignored: the terminal `tool-call` part carries the full input.
164
+ break;
165
+ case "tool-call":
127
166
  events.push({
128
- type: "usage",
129
- inputTokens: part.usage.promptTokens ?? 0,
130
- outputTokens: part.usage.completionTokens ?? 0,
131
- cacheReadTokens: part.usage.cacheReadTokens ?? 0,
132
- cacheWriteTokens: part.usage.cacheWriteTokens ?? 0,
167
+ type: "tool-call",
168
+ id: part.toolCallId,
169
+ name: part.toolName,
170
+ input: part.input ?? {},
133
171
  });
172
+ break;
173
+ case "tool-result":
174
+ case "tool-error":
175
+ // Only fired when the SDK itself executes a tool. Our runAgentLoop
176
+ // dispatches tools on the outside, so these don't appear in our flow.
177
+ break;
178
+ case "error": {
179
+ const errMsg = part.error instanceof Error
180
+ ? part.error.message
181
+ : typeof part.error === "string"
182
+ ? part.error
183
+ : JSON.stringify(part.error);
184
+ events.push({ type: "stop", reason: "error", error: errMsg });
185
+ break;
134
186
  }
135
- const reason = part.finishReason;
136
- events.push({
137
- type: "stop",
138
- reason: reason === "tool-calls"
139
- ? "tool_use"
140
- : reason === "length"
141
- ? "max_tokens"
142
- : "end_turn",
143
- });
187
+ case "finish-step":
188
+ if (part.usage) {
189
+ events.push(usageEventFromLanguageModelUsage(part.usage));
190
+ }
191
+ break;
192
+ case "finish":
193
+ if (part.totalUsage) {
194
+ events.push(usageEventFromLanguageModelUsage(part.totalUsage));
195
+ }
196
+ events.push({
197
+ type: "stop",
198
+ reason: finishReasonToStopReason(part.finishReason),
199
+ });
200
+ break;
201
+ case "start":
202
+ case "start-step":
203
+ case "source":
204
+ case "file":
205
+ case "abort":
206
+ case "raw":
207
+ default:
208
+ break;
144
209
  }
145
210
  return events;
146
211
  }
212
+ function finishReasonToStopReason(reason) {
213
+ switch (reason) {
214
+ case "tool-calls":
215
+ return "tool_use";
216
+ case "length":
217
+ return "max_tokens";
218
+ case "content-filter":
219
+ case "error":
220
+ return "error";
221
+ default:
222
+ // Maps "stop", "other", "unknown", and anything we don't recognise.
223
+ return "end_turn";
224
+ }
225
+ }
226
+ function usageEventFromLanguageModelUsage(usage) {
227
+ // v6 exposes cache/reasoning tokens via detail objects; older providers
228
+ // put them at the top level (deprecated but still read as a fallback).
229
+ return {
230
+ type: "usage",
231
+ inputTokens: usage.inputTokens ?? 0,
232
+ outputTokens: usage.outputTokens ?? 0,
233
+ totalTokens: usage.totalTokens,
234
+ cacheReadTokens: usage.inputTokenDetails?.cacheReadTokens ?? usage.cachedInputTokens ?? 0,
235
+ cacheWriteTokens: usage.inputTokenDetails?.cacheWriteTokens ?? 0,
236
+ reasoningTokens: usage.outputTokenDetails?.reasoningTokens ?? usage.reasoningTokens,
237
+ };
238
+ }
147
239
  // ---------------------------------------------------------------------------
148
- // AI SDK step result → EngineContentPart[] (assistant content for messages)
240
+ // AI SDK StepResult → EngineContentPart[] (assistant content reconstruction)
149
241
  // ---------------------------------------------------------------------------
242
+ /**
243
+ * Reconstruct the assistant message content from an AI SDK v6 `StepResult`.
244
+ * `step.content` is the canonical structured form — iterate it.
245
+ */
150
246
  export function aiSdkStepToAssistantContent(step) {
151
247
  const parts = [];
152
- if (typeof step.text === "string" && step.text) {
153
- parts.push({ type: "text", text: step.text });
154
- }
155
- if (Array.isArray(step.toolCalls)) {
156
- for (const tc of step.toolCalls) {
248
+ for (const part of step?.content ?? []) {
249
+ if (part.type === "text" && part.text) {
250
+ parts.push({ type: "text", text: part.text });
251
+ }
252
+ else if (part.type === "reasoning") {
253
+ const signature = part.providerMetadata?.anthropic?.signature;
254
+ const thinking = {
255
+ type: "thinking",
256
+ text: part.text ?? "",
257
+ };
258
+ if (typeof signature === "string")
259
+ thinking.signature = signature;
260
+ parts.push(thinking);
261
+ }
262
+ else if (part.type === "tool-call") {
157
263
  parts.push({
158
264
  type: "tool-call",
159
- id: tc.toolCallId,
160
- name: tc.toolName,
161
- input: tc.args,
265
+ id: part.toolCallId,
266
+ name: part.toolName,
267
+ input: part.input,
162
268
  });
163
269
  }
164
270
  }
165
- if (Array.isArray(step.reasoning)) {
166
- for (const r of step.reasoning) {
167
- if (r.type === "text") {
168
- parts.push({ type: "thinking", text: r.text });
169
- }
170
- }
171
- }
172
271
  return parts;
173
272
  }
174
273
  //# sourceMappingURL=translate-ai-sdk.js.map