@datalayer/agent-runtimes 1.0.2 → 1.0.4

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 (608) hide show
  1. package/README.md +14 -132
  2. package/lib/Agent.js +2 -2
  3. package/lib/AgentLexical.d.ts +1 -12
  4. package/lib/AgentLexical.js +3 -14
  5. package/lib/AgentNotebook.js +3 -3
  6. package/lib/App.js +2 -2
  7. package/lib/{components/chat/components → agents}/AgentDetails.d.ts +13 -2
  8. package/lib/{components/chat/components → agents}/AgentDetails.js +6 -12
  9. package/lib/api/agents.d.ts +47 -0
  10. package/lib/api/agents.js +106 -0
  11. package/lib/api/context.d.ts +17 -0
  12. package/lib/api/context.js +45 -0
  13. package/lib/api/evals.d.ts +27 -0
  14. package/lib/api/evals.js +63 -0
  15. package/lib/api/events.d.ts +17 -0
  16. package/lib/api/events.js +93 -0
  17. package/lib/{components/chat → api}/handler.js +1 -1
  18. package/lib/api/index.d.ts +15 -0
  19. package/lib/api/index.js +20 -0
  20. package/lib/api/notifications.d.ts +39 -0
  21. package/lib/api/notifications.js +103 -0
  22. package/lib/api/output.d.ts +28 -0
  23. package/lib/api/output.js +64 -0
  24. package/lib/api/tool-approvals.d.ts +62 -0
  25. package/lib/api/tool-approvals.js +145 -0
  26. package/lib/{components/chat/components → chat}/Chat.d.ts +26 -15
  27. package/lib/{components/chat/components → chat}/Chat.js +16 -16
  28. package/lib/{components/chat/components → chat}/ChatFloating.d.ts +17 -9
  29. package/lib/{components/chat/components → chat}/ChatFloating.js +17 -9
  30. package/lib/{components/chat/components → chat}/ChatInline.d.ts +2 -2
  31. package/lib/{components/chat/components → chat}/ChatInline.js +8 -6
  32. package/lib/{components/chat/components → chat}/ChatPopupStandalone.d.ts +3 -4
  33. package/lib/{components/chat/components → chat}/ChatPopupStandalone.js +6 -6
  34. package/lib/{components/chat/components → chat}/ChatSidebar.d.ts +14 -5
  35. package/lib/{components/chat/components → chat}/ChatSidebar.js +48 -26
  36. package/lib/{components/chat/components → chat}/ChatStandalone.d.ts +3 -4
  37. package/lib/{components/chat/components → chat}/ChatStandalone.js +5 -5
  38. package/lib/chat/base/ChatBase.d.ts +6 -0
  39. package/lib/chat/base/ChatBase.js +1338 -0
  40. package/lib/chat/display/EmptyState.d.ts +27 -0
  41. package/lib/chat/display/EmptyState.js +41 -0
  42. package/lib/{components/chat/components/elements → chat/display}/FloatingBrandButton.d.ts +1 -1
  43. package/lib/{components/chat/components/elements → chat/display}/FloatingBrandButton.js +1 -1
  44. package/lib/{components/chat/components/elements → chat/display}/PoweredByTag.d.ts +1 -1
  45. package/lib/{components/chat/components/elements → chat/header}/ChatHeader.d.ts +1 -4
  46. package/lib/{components/chat/components/elements → chat/header}/ChatHeader.js +1 -1
  47. package/lib/chat/header/ChatHeaderBase.d.ts +38 -0
  48. package/lib/chat/header/ChatHeaderBase.js +83 -0
  49. package/lib/chat/index.d.ts +66 -0
  50. package/lib/chat/index.js +74 -0
  51. package/lib/chat/indicators/McpStatusIndicator.d.ts +9 -0
  52. package/lib/chat/indicators/McpStatusIndicator.js +128 -0
  53. package/lib/chat/indicators/SandboxStatusIndicator.d.ts +10 -0
  54. package/lib/chat/indicators/SandboxStatusIndicator.js +175 -0
  55. package/lib/chat/indicators/index.d.ts +17 -0
  56. package/lib/chat/indicators/index.js +19 -0
  57. package/lib/chat/messages/ChatMessageList.d.ts +49 -0
  58. package/lib/chat/messages/ChatMessageList.js +332 -0
  59. package/lib/{components/chat/components/elements → chat/messages}/ChatMessages.d.ts +2 -2
  60. package/lib/{components/chat/components/elements → chat/messages}/ChatMessages.js +6 -4
  61. package/lib/{components/chat/components → chat}/parts/DynamicToolPart.d.ts +1 -1
  62. package/lib/{components/chat/components/elements → chat/parts}/MessagePart.d.ts +1 -1
  63. package/lib/{components/chat/components/elements → chat/parts}/MessagePart.js +4 -4
  64. package/lib/{components/chat/components → chat}/parts/ReasoningPart.js +1 -1
  65. package/lib/{components/chat/components → chat}/parts/TextPart.d.ts +1 -1
  66. package/lib/{components/chat/components → chat}/parts/ToolPart.js +1 -1
  67. package/lib/{components/chat/components → chat}/parts/index.d.ts +2 -1
  68. package/lib/{components/chat/components → chat}/parts/index.js +2 -1
  69. package/lib/chat/prompt/InputFooter.d.ts +43 -0
  70. package/lib/chat/prompt/InputFooter.js +135 -0
  71. package/lib/chat/prompt/InputPrompt.d.ts +60 -0
  72. package/lib/chat/prompt/InputPrompt.js +83 -0
  73. package/lib/chat/prompt/InputPromptFooter.d.ts +25 -0
  74. package/lib/chat/prompt/InputPromptFooter.js +15 -0
  75. package/lib/chat/prompt/InputPromptHeader.d.ts +15 -0
  76. package/lib/chat/prompt/InputPromptHeader.js +15 -0
  77. package/lib/chat/prompt/InputPromptLexical.d.ts +16 -0
  78. package/lib/chat/prompt/InputPromptLexical.js +122 -0
  79. package/lib/chat/prompt/InputPromptText.d.ts +24 -0
  80. package/lib/chat/prompt/InputPromptText.js +66 -0
  81. package/lib/chat/prompt/index.d.ts +11 -0
  82. package/lib/chat/prompt/index.js +15 -0
  83. package/lib/{components/chat/components → chat}/styles/streamdownStyles.d.ts +1 -1
  84. package/lib/chat/tools/ToolApprovalBanner.d.ts +31 -0
  85. package/lib/chat/tools/ToolApprovalBanner.js +62 -0
  86. package/lib/{components/chat/components/elements → chat/tools}/ToolApprovalDialog.js +1 -1
  87. package/lib/{components/chat/components/display → chat/tools}/ToolCallDisplay.d.ts +13 -4
  88. package/lib/{components/chat/components/display → chat/tools}/ToolCallDisplay.js +18 -8
  89. package/lib/chat/tools/index.d.ts +8 -0
  90. package/lib/{components/chat/components/display → chat/tools}/index.js +3 -1
  91. package/lib/chat/usage/TokenUsageBar.d.ts +8 -0
  92. package/lib/chat/usage/TokenUsageBar.js +213 -0
  93. package/lib/client/AgentsMixin.d.ts +216 -0
  94. package/lib/client/AgentsMixin.js +388 -0
  95. package/lib/client/index.d.ts +6 -0
  96. package/lib/client/index.js +10 -0
  97. package/lib/components/NotificationEventCard.d.ts +8 -0
  98. package/lib/components/NotificationEventCard.js +177 -0
  99. package/lib/components/OutputCard.d.ts +8 -0
  100. package/lib/components/OutputCard.js +94 -0
  101. package/lib/components/ToolApprovalCard.d.ts +33 -0
  102. package/lib/components/ToolApprovalCard.js +78 -0
  103. package/lib/components/index.d.ts +3 -7
  104. package/lib/components/index.js +3 -4
  105. package/lib/{components → config}/AgentConfiguration.d.ts +43 -21
  106. package/lib/{components → config}/AgentConfiguration.js +48 -28
  107. package/lib/config/index.d.ts +2 -0
  108. package/lib/config/index.js +1 -0
  109. package/lib/{components/chat/components → context}/ContextInspector.js +38 -8
  110. package/lib/{components/chat/components → context}/ContextPanel.js +27 -6
  111. package/lib/context/CostTracker.d.ts +37 -0
  112. package/lib/context/CostTracker.js +124 -0
  113. package/lib/context/TokenUsageChart.d.ts +10 -0
  114. package/lib/context/TokenUsageChart.js +288 -0
  115. package/lib/examples/A2UiComponentGalleryExample.d.ts +20 -0
  116. package/lib/examples/A2UiComponentGalleryExample.js +568 -0
  117. package/lib/examples/A2UiContactCardExample.d.ts +21 -0
  118. package/lib/examples/A2UiContactCardExample.js +432 -0
  119. package/lib/examples/A2UiRestaurantExample.d.ts +11 -3
  120. package/lib/examples/A2UiRestaurantExample.js +63 -98
  121. package/lib/examples/A2UiViewerExample.d.ts +21 -0
  122. package/lib/examples/A2UiViewerExample.js +563 -0
  123. package/lib/examples/AgUiAgenticExample.js +3 -3
  124. package/lib/examples/AgUiBackendToolRenderingExample.js +3 -3
  125. package/lib/examples/{AgUiHaikuGenUIExample.d.ts → AgUiHaikuGenUiExample.d.ts} +4 -4
  126. package/lib/examples/{AgUiHaikuGenUIExample.js → AgUiHaikuGenUiExample.js} +7 -7
  127. package/lib/examples/AgUiHumanInTheLoopExample.js +3 -3
  128. package/lib/examples/AgUiSharedStateExample.js +3 -3
  129. package/lib/examples/{AgUiToolsBasedGenUIExample.d.ts → AgUiToolsBasedGenUiExample.d.ts} +4 -4
  130. package/lib/examples/{AgUiToolsBasedGenUIExample.js → AgUiToolsBasedGenUiExample.js} +7 -7
  131. package/lib/examples/AgentCheckpointsExample.d.ts +19 -0
  132. package/lib/examples/AgentCheckpointsExample.js +500 -0
  133. package/lib/examples/AgentCodemodeExample.d.ts +14 -0
  134. package/lib/examples/AgentCodemodeExample.js +256 -0
  135. package/lib/examples/AgentEvalsExample.d.ts +14 -0
  136. package/lib/examples/AgentEvalsExample.js +210 -0
  137. package/lib/examples/AgentGuardrailsExample.d.ts +14 -0
  138. package/lib/examples/AgentGuardrailsExample.js +212 -0
  139. package/lib/examples/AgentMemoryExample.d.ts +14 -0
  140. package/lib/examples/AgentMemoryExample.js +228 -0
  141. package/lib/examples/AgentMonitoringExample.d.ts +13 -0
  142. package/lib/examples/AgentMonitoringExample.js +305 -0
  143. package/lib/examples/AgentNotificationsExample.d.ts +14 -0
  144. package/lib/examples/AgentNotificationsExample.js +267 -0
  145. package/lib/examples/AgentOtelExample.d.ts +25 -0
  146. package/lib/examples/AgentOtelExample.js +281 -0
  147. package/lib/examples/AgentOutputsExample.d.ts +14 -0
  148. package/lib/examples/AgentOutputsExample.js +205 -0
  149. package/lib/examples/AgentSandboxExample.d.ts +17 -0
  150. package/lib/examples/AgentSandboxExample.js +490 -0
  151. package/lib/examples/AgentSkillsExample.d.ts +3 -0
  152. package/lib/examples/AgentSkillsExample.js +284 -0
  153. package/lib/examples/AgentToolApprovalsExample.d.ts +3 -0
  154. package/lib/examples/AgentToolApprovalsExample.js +737 -0
  155. package/lib/examples/AgentTriggersExample.d.ts +14 -0
  156. package/lib/examples/AgentTriggersExample.js +1090 -0
  157. package/lib/examples/{AgentRuntimeFormExample.d.ts → AgentspecExample.d.ts} +3 -4
  158. package/lib/examples/{AgentRuntimeFormExample.js → AgentspecExample.js} +92 -34
  159. package/lib/examples/{JupyterCellExample.js → CellSimpleExample.js} +1 -1
  160. package/lib/examples/{AgentRuntimeCustomExample.js → ChatCustomExample.js} +3 -3
  161. package/lib/examples/{AgentRuntimeChatExample.js → ChatExample.js} +6 -14
  162. package/lib/examples/{AgentRuntimeStandaloneExample.js → ChatStandaloneExample.js} +2 -2
  163. package/lib/examples/CopilotKitLexicalExample.d.ts +3 -14
  164. package/lib/examples/CopilotKitLexicalExample.js +4 -15
  165. package/lib/examples/CopilotKitNotebookExample.js +4 -6
  166. package/lib/examples/DatalayerNotebookExample.js +2 -2
  167. package/lib/examples/{AgentRuntimeLexical2Example.d.ts → Lexical2Example.d.ts} +2 -13
  168. package/lib/examples/{AgentRuntimeLexical2Example.js → Lexical2Example.js} +8 -17
  169. package/lib/examples/{AgentRuntimeLexicalExample.d.ts → LexicalExample.d.ts} +1 -12
  170. package/lib/examples/{AgentRuntimeLexicalExample.js → LexicalExample.js} +28 -27
  171. package/lib/examples/{AgentRuntimeLexicalSidebarExample.d.ts → LexicalSidebarExample.d.ts} +2 -13
  172. package/lib/examples/{AgentRuntimeLexicalSidebarExample.js → LexicalSidebarExample.js} +6 -18
  173. package/lib/examples/{AgentRuntimeNotebookExample.js → NotebookExample.js} +14 -10
  174. package/lib/examples/{AgentRuntimeNotebookSidebarExample.js → NotebookSidebarExample.js} +5 -8
  175. package/lib/examples/{JupyterNotebookExample.js → NotebookSimpleExample.js} +2 -2
  176. package/lib/examples/ag-ui/weather/InlineWeatherCard.js +1 -1
  177. package/lib/examples/components/ErrorView.d.ts +14 -0
  178. package/lib/examples/components/ErrorView.js +20 -0
  179. package/lib/examples/components/ExampleWrapper.d.ts +12 -0
  180. package/lib/examples/components/ExampleWrapper.js +16 -0
  181. package/lib/examples/components/Header.d.ts +2 -2
  182. package/lib/examples/components/HeaderControls.js +1 -1
  183. package/lib/examples/components/LexicalEditor.d.ts +1 -12
  184. package/lib/examples/components/LexicalEditor.js +1 -12
  185. package/lib/examples/components/MainContent.d.ts +4 -11
  186. package/lib/examples/components/MainContent.js +6 -60
  187. package/lib/examples/components/index.d.ts +3 -0
  188. package/lib/examples/components/index.js +2 -0
  189. package/lib/examples/example-selector.d.ts +1 -1
  190. package/lib/examples/example-selector.js +35 -22
  191. package/lib/examples/index.d.ts +26 -13
  192. package/lib/examples/index.js +26 -12
  193. package/lib/examples/main.d.ts +7 -0
  194. package/lib/examples/main.js +21 -43
  195. package/lib/examples/utils/examplesStore.d.ts +4 -0
  196. package/lib/examples/{stores → utils}/examplesStore.js +1 -1
  197. package/lib/examples/utils/notebooks/Empty.ipynb.json +33 -0
  198. package/lib/examples/utils/notebooks/NotebookExample2.ipynb.json +48 -0
  199. package/lib/examples/utils/themeStore.d.ts +8 -0
  200. package/lib/examples/utils/themeStore.js +14 -0
  201. package/lib/extensions/A2UIExtension.d.ts +65 -0
  202. package/lib/extensions/A2UIExtension.js +202 -0
  203. package/lib/{components/chat/extensions → extensions}/ExtensionRegistry.d.ts +2 -3
  204. package/lib/{components/chat/extensions → extensions}/ExtensionRegistry.js +0 -2
  205. package/lib/{components/chat/extensions → extensions}/MCPUIExtension.d.ts +2 -2
  206. package/lib/{components/chat/extensions → extensions}/MCPUIExtension.js +1 -1
  207. package/lib/extensions/index.d.ts +9 -0
  208. package/lib/{components/chat/extensions → extensions}/index.js +2 -2
  209. package/lib/hooks/index.d.ts +33 -16
  210. package/lib/hooks/index.js +33 -16
  211. package/lib/hooks/useAIAgentsWebSocket.d.ts +29 -0
  212. package/lib/hooks/useAIAgentsWebSocket.js +136 -0
  213. package/lib/hooks/{useAGUI.d.ts → useAgUi.d.ts} +2 -2
  214. package/lib/hooks/{useAGUI.js → useAgUi.js} +2 -2
  215. package/lib/hooks/useAgents.d.ts +150 -11
  216. package/lib/hooks/useAgents.js +623 -61
  217. package/lib/hooks/{useAgentStore.d.ts → useAgentsCatalog.d.ts} +3 -8
  218. package/lib/hooks/{useAgentStore.js → useAgentsCatalog.js} +9 -3
  219. package/lib/hooks/useAgentsRegistry.d.ts +10 -0
  220. package/lib/hooks/useAgentsRegistry.js +20 -0
  221. package/lib/hooks/useAgentsService.d.ts +22 -0
  222. package/lib/hooks/useAgentsService.js +146 -0
  223. package/lib/hooks/useChat.d.ts +2 -2
  224. package/lib/hooks/useChat.js +14 -8
  225. package/lib/hooks/useCheckpoints.d.ts +176 -0
  226. package/lib/hooks/useCheckpoints.js +466 -0
  227. package/lib/hooks/useConfig.d.ts +11 -0
  228. package/lib/hooks/useConfig.js +46 -0
  229. package/lib/hooks/useContextSnapshot.d.ts +11 -0
  230. package/lib/hooks/useContextSnapshot.js +44 -0
  231. package/lib/hooks/useMonitoring.d.ts +24 -0
  232. package/lib/hooks/useMonitoring.js +111 -0
  233. package/lib/hooks/useNotifications.d.ts +67 -0
  234. package/lib/hooks/useNotifications.js +208 -0
  235. package/lib/hooks/useSandbox.d.ts +12 -0
  236. package/lib/hooks/useSandbox.js +49 -0
  237. package/lib/hooks/useSkills.d.ts +13 -0
  238. package/lib/hooks/useSkills.js +46 -0
  239. package/lib/hooks/useToolApprovals.d.ts +45 -0
  240. package/lib/hooks/useToolApprovals.js +126 -0
  241. package/lib/hooks/useTools.d.ts +4 -4
  242. package/lib/hooks/useTools.js +2 -2
  243. package/lib/hooks/{useVercelChat.d.ts → useVercelAI.d.ts} +3 -3
  244. package/lib/hooks/{useVercelChat.js → useVercelAI.js} +2 -2
  245. package/lib/{components/chat/components → identity}/AgentIdentity.d.ts +1 -1
  246. package/lib/{components/chat/components → identity}/AgentIdentity.js +4 -3
  247. package/lib/identity/index.d.ts +1 -0
  248. package/lib/identity/index.js +2 -0
  249. package/lib/index.d.ts +4 -3
  250. package/lib/index.js +3 -2
  251. package/lib/{components/chat/inference → inference}/BaseInferenceProvider.d.ts +3 -3
  252. package/lib/{components/chat/inference → inference}/DatalayerInferenceProvider.d.ts +3 -3
  253. package/lib/{components/chat/inference → inference}/DatalayerInferenceProvider.js +1 -1
  254. package/lib/{components/chat/inference → inference}/SelfHostedInferenceProvider.d.ts +2 -2
  255. package/lib/{components/chat/inference → inference}/SelfHostedInferenceProvider.js +1 -1
  256. package/lib/{components/chat/inference → inference}/index.d.ts +1 -1
  257. package/lib/{components/chat/inference → inference}/index.js +1 -1
  258. package/lib/lexical/ChatInlinePlugin.d.ts +1 -1
  259. package/lib/lexical/ChatInlinePlugin.js +1 -1
  260. package/lib/{components → mcp}/McpServerManager.d.ts +1 -2
  261. package/lib/mcp/index.d.ts +1 -0
  262. package/lib/{specs/agents/codeai → mcp}/index.js +1 -1
  263. package/lib/{components/chat/middleware → middleware}/MiddlewarePipeline.d.ts +3 -3
  264. package/lib/{components/chat/middleware → middleware}/index.d.ts +1 -1
  265. package/lib/{components/chat/middleware → middleware}/index.js +1 -1
  266. package/lib/{components/chat/protocols → protocols}/A2AAdapter.d.ts +6 -6
  267. package/lib/{components/chat/protocols → protocols}/A2AAdapter.js +3 -3
  268. package/lib/{components/chat/protocols → protocols}/ACPAdapter.d.ts +6 -6
  269. package/lib/{components/chat/protocols → protocols}/ACPAdapter.js +4 -4
  270. package/lib/{components/chat/protocols → protocols}/AGUIAdapter.d.ts +14 -6
  271. package/lib/{components/chat/protocols → protocols}/AGUIAdapter.js +72 -10
  272. package/lib/{components/chat/protocols → protocols}/BaseProtocolAdapter.d.ts +6 -6
  273. package/lib/{components/chat/protocols → protocols}/BaseProtocolAdapter.js +1 -1
  274. package/lib/{components/chat/protocols → protocols}/VercelAIAdapter.d.ts +33 -7
  275. package/lib/protocols/VercelAIAdapter.js +748 -0
  276. package/lib/{components/chat/protocols → protocols}/index.d.ts +1 -2
  277. package/lib/{components/chat/protocols → protocols}/index.js +1 -1
  278. package/lib/shims/json5.d.ts +4 -0
  279. package/lib/shims/json5.js +8 -0
  280. package/lib/specs/agents/agents.d.ts +54 -0
  281. package/lib/specs/agents/agents.js +1489 -0
  282. package/lib/specs/agents/index.js +15 -12
  283. package/lib/specs/envvars.d.ts +11 -19
  284. package/lib/specs/envvars.js +52 -38
  285. package/lib/specs/evals.d.ts +20 -0
  286. package/lib/specs/evals.js +133 -0
  287. package/lib/specs/events.d.ts +26 -0
  288. package/lib/specs/events.js +140 -0
  289. package/lib/specs/frontendTools.d.ts +14 -0
  290. package/lib/specs/frontendTools.js +53 -0
  291. package/lib/specs/guardrails.d.ts +29 -0
  292. package/lib/specs/guardrails.js +310 -0
  293. package/lib/specs/index.d.ts +15 -2
  294. package/lib/specs/index.js +15 -2
  295. package/lib/specs/mcpServers.d.ts +13 -11
  296. package/lib/specs/mcpServers.js +75 -50
  297. package/lib/specs/memory.d.ts +36 -0
  298. package/lib/specs/memory.js +112 -0
  299. package/lib/specs/models.d.ts +21 -34
  300. package/lib/specs/models.js +66 -66
  301. package/lib/specs/notifications.d.ts +17 -0
  302. package/lib/specs/notifications.js +103 -0
  303. package/lib/specs/outputs.d.ts +19 -0
  304. package/lib/specs/outputs.js +106 -0
  305. package/lib/specs/skills.d.ts +7 -16
  306. package/lib/specs/skills.js +95 -18
  307. package/lib/specs/teams/index.d.ts +17 -0
  308. package/lib/specs/teams/index.js +35 -0
  309. package/lib/specs/teams/teams.d.ts +27 -0
  310. package/lib/specs/teams/teams.js +1000 -0
  311. package/lib/specs/tools.d.ts +15 -0
  312. package/lib/specs/tools.js +86 -0
  313. package/lib/specs/triggers.d.ts +15 -0
  314. package/lib/specs/triggers.js +67 -0
  315. package/lib/stores/agentsStore.d.ts +123 -0
  316. package/lib/stores/agentsStore.js +270 -0
  317. package/lib/{components/chat/store → stores}/chatStore.d.ts +3 -2
  318. package/lib/{components/chat/store → stores}/chatStore.js +2 -2
  319. package/lib/{components/chat/store → stores}/conversationStore.d.ts +1 -1
  320. package/lib/{components/chat/store → stores}/conversationStore.js +1 -1
  321. package/lib/{components/chat/store → stores}/index.d.ts +3 -2
  322. package/lib/{components/chat/store → stores}/index.js +3 -2
  323. package/lib/{components/chat/tools → tools}/ToolExecutor.d.ts +2 -2
  324. package/lib/{components/chat/tools → tools}/ToolExecutor.js +1 -1
  325. package/lib/tools/adapters/agent-runtimes/AgentRuntimesToolAdapter.d.ts +1 -1
  326. package/lib/tools/adapters/agent-runtimes/lexicalHooks.d.ts +14 -10
  327. package/lib/tools/adapters/agent-runtimes/lexicalHooks.js +31 -21
  328. package/lib/tools/adapters/agent-runtimes/notebookHooks.d.ts +1 -1
  329. package/lib/tools/index.d.ts +3 -0
  330. package/lib/tools/index.js +3 -7
  331. package/lib/types/a2a.d.ts +39 -0
  332. package/lib/types/acp.d.ts +21 -0
  333. package/lib/types/ag-ui.d.ts +25 -0
  334. package/lib/types/agents-lifecycle.d.ts +36 -0
  335. package/lib/types/agents.d.ts +80 -0
  336. package/lib/types/agents.js +22 -0
  337. package/lib/types/agentspecs.d.ts +90 -0
  338. package/lib/{components/chat/components/base/ChatBase.d.ts → types/chat.d.ts} +59 -99
  339. package/lib/types/checkpoints.d.ts +32 -0
  340. package/lib/types/checkpoints.js +5 -0
  341. package/lib/types/config.d.ts +67 -0
  342. package/lib/{runtime/types.js → types/config.js} +2 -2
  343. package/lib/types/connection.d.ts +31 -0
  344. package/lib/types/connection.js +5 -0
  345. package/lib/types/context.d.ts +67 -0
  346. package/lib/types/context.js +5 -0
  347. package/lib/types/cost.d.ts +42 -0
  348. package/lib/types/cost.js +5 -0
  349. package/lib/types/envvars.d.ts +21 -0
  350. package/lib/types/envvars.js +5 -0
  351. package/lib/types/evals.d.ts +66 -0
  352. package/lib/types/evals.js +5 -0
  353. package/lib/types/events.d.ts +49 -0
  354. package/lib/types/events.js +5 -0
  355. package/lib/types/eventspecs.d.ts +39 -0
  356. package/lib/types/eventspecs.js +5 -0
  357. package/lib/types/examples.d.ts +31 -0
  358. package/lib/types/examples.js +5 -0
  359. package/lib/{components/chat/types → types}/execution.d.ts +10 -1
  360. package/lib/{components/chat/types/extension.d.ts → types/extensions.d.ts} +3 -3
  361. package/lib/types/guardrails.d.ts +106 -0
  362. package/lib/types/guardrails.js +5 -0
  363. package/lib/types/index.d.ts +36 -2
  364. package/lib/types/index.js +35 -2
  365. package/lib/{components/chat/types → types}/inference.d.ts +3 -3
  366. package/lib/types/inference.js +5 -0
  367. package/lib/types/mcp.d.ts +117 -0
  368. package/lib/types/mcp.js +27 -0
  369. package/lib/types/memory.d.ts +23 -0
  370. package/lib/types/memory.js +5 -0
  371. package/lib/{components/chat/types/message.d.ts → types/messages.d.ts} +20 -1
  372. package/lib/{components/chat/types → types}/middleware.d.ts +3 -3
  373. package/lib/types/models.d.ts +63 -0
  374. package/lib/types/models.js +5 -0
  375. package/lib/types/notifications.d.ts +85 -0
  376. package/lib/types/notifications.js +5 -0
  377. package/lib/types/outputs.d.ts +51 -0
  378. package/lib/types/outputs.js +5 -0
  379. package/lib/{components/chat/types → types}/protocol.d.ts +37 -99
  380. package/lib/types/protocol.js +5 -0
  381. package/lib/types/sandbox.d.ts +27 -0
  382. package/lib/types/sandbox.js +24 -0
  383. package/lib/types/skills.d.ts +74 -0
  384. package/lib/types/skills.js +5 -0
  385. package/lib/types/teams.d.ts +133 -0
  386. package/lib/types/teams.js +5 -0
  387. package/lib/types/tool-approvals.d.ts +39 -0
  388. package/lib/types/tool-approvals.js +5 -0
  389. package/lib/{components/chat/types/tool.d.ts → types/tools.d.ts} +61 -4
  390. package/lib/types/triggers.d.ts +48 -0
  391. package/lib/types/triggers.js +5 -0
  392. package/lib/types/usage.d.ts +36 -0
  393. package/lib/types/usage.js +5 -0
  394. package/lib/utils/index.d.ts +1 -0
  395. package/lib/utils/index.js +5 -0
  396. package/lib/utils/utils.d.ts +60 -0
  397. package/lib/utils/utils.js +205 -0
  398. package/package.json +13 -14
  399. package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
  400. package/scripts/codegen/generate_agents.py +377 -61
  401. package/scripts/codegen/generate_envvars.py +36 -35
  402. package/scripts/codegen/generate_evals.py +279 -0
  403. package/scripts/codegen/generate_events.py +320 -0
  404. package/scripts/codegen/generate_frontend_tools.py +266 -0
  405. package/scripts/codegen/generate_guardrails.py +475 -0
  406. package/scripts/codegen/generate_mcp_servers.py +36 -9
  407. package/scripts/codegen/generate_memory.py +468 -0
  408. package/scripts/codegen/generate_models.py +22 -46
  409. package/scripts/codegen/generate_notifications.py +309 -0
  410. package/scripts/codegen/generate_outputs.py +267 -0
  411. package/scripts/codegen/generate_skills.py +108 -51
  412. package/scripts/codegen/generate_teams.py +922 -0
  413. package/scripts/codegen/generate_tools.py +346 -0
  414. package/scripts/codegen/generate_triggers.py +295 -0
  415. package/scripts/codegen/versioning.py +53 -0
  416. package/style/primer-primitives.css +1 -6
  417. package/lib/components/chat/components/base/ChatBase.js +0 -2242
  418. package/lib/components/chat/components/base/InputPrompt.d.ts +0 -42
  419. package/lib/components/chat/components/base/InputPrompt.js +0 -131
  420. package/lib/components/chat/components/display/index.d.ts +0 -6
  421. package/lib/components/chat/components/index.d.ts +0 -26
  422. package/lib/components/chat/components/index.js +0 -39
  423. package/lib/components/chat/extensions/A2UIExtension.d.ts +0 -87
  424. package/lib/components/chat/extensions/A2UIExtension.js +0 -312
  425. package/lib/components/chat/extensions/index.d.ts +0 -10
  426. package/lib/components/chat/index.d.ts +0 -61
  427. package/lib/components/chat/index.js +0 -76
  428. package/lib/components/chat/protocols/VercelAIAdapter.js +0 -315
  429. package/lib/components/chat/tools/index.d.ts +0 -8
  430. package/lib/components/chat/tools/index.js +0 -11
  431. package/lib/components/chat/types/index.d.ts +0 -12
  432. package/lib/components/chat/types/index.js +0 -17
  433. package/lib/components/sparklines/Sparklines.d.ts +0 -16
  434. package/lib/components/sparklines/Sparklines.js +0 -65
  435. package/lib/components/sparklines/SparklinesLine.d.ts +0 -8
  436. package/lib/components/sparklines/SparklinesLine.js +0 -37
  437. package/lib/components/sparklines/dataProcessing.d.ts +0 -25
  438. package/lib/components/sparklines/dataProcessing.js +0 -35
  439. package/lib/components/sparklines/index.d.ts +0 -4
  440. package/lib/components/sparklines/index.js +0 -7
  441. package/lib/components/sparklines/types.d.ts +0 -36
  442. package/lib/examples/stores/examplesStore.d.ts +0 -5
  443. package/lib/examples/stores/notebooks/Empty.ipynb.json +0 -33
  444. package/lib/examples/stores/notebooks/NotebookExample2.ipynb.json +0 -48
  445. package/lib/examples/stores/themeStore.d.ts +0 -33
  446. package/lib/examples/stores/themeStore.js +0 -38
  447. package/lib/hooks/useAgentRuntimes.d.ts +0 -350
  448. package/lib/hooks/useAgentRuntimes.js +0 -78
  449. package/lib/hooks/useKeyboardShortcuts.d.ts +0 -47
  450. package/lib/hooks/useKeyboardShortcuts.js +0 -153
  451. package/lib/hooks/useMobile.d.ts +0 -1
  452. package/lib/hooks/useMobile.js +0 -19
  453. package/lib/hooks/useNotebookAIAgent.d.ts +0 -8
  454. package/lib/hooks/useNotebookAIAgent.js +0 -73
  455. package/lib/renderers/a2ui/components/A2UIRenderer.d.ts +0 -7
  456. package/lib/renderers/a2ui/components/A2UIRenderer.js +0 -102
  457. package/lib/renderers/a2ui/components/SurfaceRenderer.d.ts +0 -7
  458. package/lib/renderers/a2ui/components/SurfaceRenderer.js +0 -101
  459. package/lib/renderers/a2ui/components/content/AudioPlayer.d.ts +0 -9
  460. package/lib/renderers/a2ui/components/content/AudioPlayer.js +0 -38
  461. package/lib/renderers/a2ui/components/content/Divider.d.ts +0 -9
  462. package/lib/renderers/a2ui/components/content/Divider.js +0 -35
  463. package/lib/renderers/a2ui/components/content/Icon.d.ts +0 -9
  464. package/lib/renderers/a2ui/components/content/Icon.js +0 -110
  465. package/lib/renderers/a2ui/components/content/Image.d.ts +0 -9
  466. package/lib/renderers/a2ui/components/content/Image.js +0 -61
  467. package/lib/renderers/a2ui/components/content/Text.d.ts +0 -9
  468. package/lib/renderers/a2ui/components/content/Text.js +0 -64
  469. package/lib/renderers/a2ui/components/content/Video.d.ts +0 -9
  470. package/lib/renderers/a2ui/components/content/Video.js +0 -37
  471. package/lib/renderers/a2ui/components/content/index.d.ts +0 -6
  472. package/lib/renderers/a2ui/components/content/index.js +0 -25
  473. package/lib/renderers/a2ui/components/index.d.ts +0 -5
  474. package/lib/renderers/a2ui/components/index.js +0 -24
  475. package/lib/renderers/a2ui/components/interactive/Button.d.ts +0 -11
  476. package/lib/renderers/a2ui/components/interactive/Button.js +0 -71
  477. package/lib/renderers/a2ui/components/interactive/CheckBox.d.ts +0 -9
  478. package/lib/renderers/a2ui/components/interactive/CheckBox.js +0 -48
  479. package/lib/renderers/a2ui/components/interactive/DateTimeInput.d.ts +0 -9
  480. package/lib/renderers/a2ui/components/interactive/DateTimeInput.js +0 -62
  481. package/lib/renderers/a2ui/components/interactive/MultipleChoice.d.ts +0 -9
  482. package/lib/renderers/a2ui/components/interactive/MultipleChoice.js +0 -73
  483. package/lib/renderers/a2ui/components/interactive/Slider.d.ts +0 -9
  484. package/lib/renderers/a2ui/components/interactive/Slider.js +0 -53
  485. package/lib/renderers/a2ui/components/interactive/TextField.d.ts +0 -9
  486. package/lib/renderers/a2ui/components/interactive/TextField.js +0 -72
  487. package/lib/renderers/a2ui/components/interactive/index.d.ts +0 -6
  488. package/lib/renderers/a2ui/components/interactive/index.js +0 -25
  489. package/lib/renderers/a2ui/components/layout/Card.d.ts +0 -11
  490. package/lib/renderers/a2ui/components/layout/Card.js +0 -30
  491. package/lib/renderers/a2ui/components/layout/Column.d.ts +0 -11
  492. package/lib/renderers/a2ui/components/layout/Column.js +0 -65
  493. package/lib/renderers/a2ui/components/layout/List.d.ts +0 -11
  494. package/lib/renderers/a2ui/components/layout/List.js +0 -55
  495. package/lib/renderers/a2ui/components/layout/Modal.d.ts +0 -11
  496. package/lib/renderers/a2ui/components/layout/Modal.js +0 -58
  497. package/lib/renderers/a2ui/components/layout/Row.d.ts +0 -11
  498. package/lib/renderers/a2ui/components/layout/Row.js +0 -65
  499. package/lib/renderers/a2ui/components/layout/Tabs.d.ts +0 -11
  500. package/lib/renderers/a2ui/components/layout/Tabs.js +0 -48
  501. package/lib/renderers/a2ui/components/layout/index.d.ts +0 -6
  502. package/lib/renderers/a2ui/components/layout/index.js +0 -25
  503. package/lib/renderers/a2ui/context/A2UIContext.d.ts +0 -17
  504. package/lib/renderers/a2ui/context/A2UIContext.js +0 -54
  505. package/lib/renderers/a2ui/context/ThemeContext.d.ts +0 -20
  506. package/lib/renderers/a2ui/context/ThemeContext.js +0 -333
  507. package/lib/renderers/a2ui/hooks/useA2UI.d.ts +0 -36
  508. package/lib/renderers/a2ui/hooks/useA2UI.js +0 -62
  509. package/lib/renderers/a2ui/hooks/useDataBinding.d.ts +0 -8
  510. package/lib/renderers/a2ui/hooks/useDataBinding.js +0 -83
  511. package/lib/renderers/a2ui/index.d.ts +0 -9
  512. package/lib/renderers/a2ui/index.js +0 -28
  513. package/lib/renderers/a2ui/lib/utils.d.ts +0 -11
  514. package/lib/renderers/a2ui/lib/utils.js +0 -38
  515. package/lib/renderers/a2ui/types/index.d.ts +0 -17
  516. package/lib/runtime/index.d.ts +0 -38
  517. package/lib/runtime/index.js +0 -40
  518. package/lib/runtime/runtimeStore.d.ts +0 -76
  519. package/lib/runtime/runtimeStore.js +0 -184
  520. package/lib/runtime/types.d.ts +0 -84
  521. package/lib/runtime/useAgentConnection.d.ts +0 -45
  522. package/lib/runtime/useAgentConnection.js +0 -112
  523. package/lib/runtime/useAgentRuntime.d.ts +0 -93
  524. package/lib/runtime/useAgentRuntime.js +0 -125
  525. package/lib/specs/agents/codeai/agents.d.ts +0 -28
  526. package/lib/specs/agents/codeai/agents.js +0 -179
  527. package/lib/specs/agents/codeai/index.d.ts +0 -1
  528. package/lib/specs/agents/codemode-paper/agents.d.ts +0 -31
  529. package/lib/specs/agents/codemode-paper/agents.js +0 -378
  530. package/lib/specs/agents/codemode-paper/index.d.ts +0 -1
  531. package/lib/specs/agents/codemode-paper/index.js +0 -5
  532. package/lib/specs/agents/datalayer-ai/agents.d.ts +0 -31
  533. package/lib/specs/agents/datalayer-ai/agents.js +0 -352
  534. package/lib/specs/agents/datalayer-ai/index.d.ts +0 -1
  535. package/lib/specs/agents/datalayer-ai/index.js +0 -5
  536. package/lib/specs/agents/mocks/agents.d.ts +0 -43
  537. package/lib/specs/agents/mocks/agents.js +0 -2293
  538. package/lib/specs/agents/mocks/index.d.ts +0 -1
  539. package/lib/specs/agents/mocks/index.js +0 -5
  540. package/lib/state/index.d.ts +0 -1
  541. package/lib/state/index.js +0 -5
  542. package/lib/state/substates/AIAgentState.d.ts +0 -80
  543. package/lib/state/substates/AIAgentState.js +0 -108
  544. package/lib/state/substates/index.d.ts +0 -1
  545. package/lib/state/substates/index.js +0 -5
  546. package/lib/types/AIAgent.d.ts +0 -17
  547. package/lib/types/Types.d.ts +0 -217
  548. /package/lib/{components/chat → api}/handler.d.ts +0 -0
  549. /package/lib/{renderers/index.d.ts → api/utils.d.ts} +0 -0
  550. /package/lib/{renderers/index.js → api/utils.js} +0 -0
  551. /package/lib/{components/chat/components/elements → chat/display}/PoweredByTag.js +0 -0
  552. /package/lib/{components/chat/components → chat}/parts/DynamicToolPart.js +0 -0
  553. /package/lib/{components/chat/components → chat}/parts/ReasoningPart.d.ts +0 -0
  554. /package/lib/{components/chat/components → chat}/parts/TextPart.js +0 -0
  555. /package/lib/{components/chat/components → chat}/parts/ToolPart.d.ts +0 -0
  556. /package/lib/{components/chat/components → chat}/styles/streamdownStyles.js +0 -0
  557. /package/lib/{components/chat/components/elements → chat/tools}/ToolApprovalDialog.d.ts +0 -0
  558. /package/lib/{components/chat/components → context}/ContextDistribution.d.ts +0 -0
  559. /package/lib/{components/chat/components → context}/ContextDistribution.js +0 -0
  560. /package/lib/{components/chat/components → context}/ContextInspector.d.ts +0 -0
  561. /package/lib/{components/chat/components → context}/ContextPanel.d.ts +0 -0
  562. /package/lib/{components/chat/components → context}/ContextUsage.d.ts +0 -0
  563. /package/lib/{components/chat/components → context}/ContextUsage.js +0 -0
  564. /package/lib/examples/{JupyterCellExample.d.ts → CellSimpleExample.d.ts} +0 -0
  565. /package/lib/examples/{AgentRuntimeCustomExample.d.ts → ChatCustomExample.d.ts} +0 -0
  566. /package/lib/examples/{AgentRuntimeChatExample.d.ts → ChatExample.d.ts} +0 -0
  567. /package/lib/examples/{AgentRuntimeStandaloneExample.d.ts → ChatStandaloneExample.d.ts} +0 -0
  568. /package/lib/examples/{AgentRuntimeNotebookExample.d.ts → NotebookExample.d.ts} +0 -0
  569. /package/lib/examples/{AgentRuntimeNotebookSidebarExample.d.ts → NotebookSidebarExample.d.ts} +0 -0
  570. /package/lib/examples/{JupyterNotebookExample.d.ts → NotebookSimpleExample.d.ts} +0 -0
  571. /package/lib/examples/{stores → utils}/agents/earthquake-detector.ipynb.json +0 -0
  572. /package/lib/examples/{stores → utils}/agents/earthquake-detector.json +0 -0
  573. /package/lib/examples/{stores → utils}/agents/earthquake-detector.lexical.json +0 -0
  574. /package/lib/examples/{stores → utils}/agents/sales-forecaster.ipynb.json +0 -0
  575. /package/lib/examples/{stores → utils}/agents/sales-forecaster.json +0 -0
  576. /package/lib/examples/{stores → utils}/agents/sales-forecaster.lexical.json +0 -0
  577. /package/lib/examples/{stores → utils}/agents/social-post-generator.ipynb.json +0 -0
  578. /package/lib/examples/{stores → utils}/agents/social-post-generator.json +0 -0
  579. /package/lib/examples/{stores → utils}/agents/social-post-generator.lexical.json +0 -0
  580. /package/lib/examples/{stores → utils}/agents/stock-market.ipynb.json +0 -0
  581. /package/lib/examples/{stores → utils}/agents/stock-market.json +0 -0
  582. /package/lib/examples/{stores → utils}/agents/stock-market.lexical.json +0 -0
  583. /package/lib/examples/{stores → utils}/notebooks/IPyWidgetsExample.ipynb.json +0 -0
  584. /package/lib/examples/{stores → utils}/notebooks/IPyWidgetsExampleWithState.ipynb.json +0 -0
  585. /package/lib/examples/{stores → utils}/notebooks/Lite.ipynb.json +0 -0
  586. /package/lib/examples/{stores → utils}/notebooks/Matplotlib.ipynb.json +0 -0
  587. /package/lib/examples/{stores → utils}/notebooks/NotebookExample1.ipynb.json +0 -0
  588. /package/lib/examples/{stores → utils}/notebooks/NotebookOutputs.ipynb.json +0 -0
  589. /package/lib/examples/{stores → utils}/notebooks/NotebookToCExample.ipynb.json +0 -0
  590. /package/lib/examples/{stores → utils}/notebooks/OutputIPyWidgetsExample.d.ts +0 -0
  591. /package/lib/examples/{stores → utils}/notebooks/OutputIPyWidgetsExample.js +0 -0
  592. /package/lib/examples/{stores → utils}/notebooks/PyGWalker.ipynb.json +0 -0
  593. /package/lib/examples/{stores → utils}/themedProvider.d.ts +0 -0
  594. /package/lib/examples/{stores → utils}/themedProvider.js +0 -0
  595. /package/lib/{components/chat/inference → inference}/BaseInferenceProvider.js +0 -0
  596. /package/lib/{components → mcp}/McpServerManager.js +0 -0
  597. /package/lib/{components/chat/middleware → middleware}/MiddlewarePipeline.js +0 -0
  598. /package/lib/{components/chat/types/inference.js → types/a2a.js} +0 -0
  599. /package/lib/{components/chat/types/protocol.js → types/acp.js} +0 -0
  600. /package/lib/{components/sparklines/types.js → types/ag-ui.js} +0 -0
  601. /package/lib/{renderers/a2ui/types/index.js → types/agents-lifecycle.js} +0 -0
  602. /package/lib/types/{AIAgent.js → agentspecs.js} +0 -0
  603. /package/lib/types/{Types.js → chat.js} +0 -0
  604. /package/lib/{components/chat/types → types}/execution.js +0 -0
  605. /package/lib/{components/chat/types/extension.js → types/extensions.js} +0 -0
  606. /package/lib/{components/chat/types/message.js → types/messages.js} +0 -0
  607. /package/lib/{components/chat/types → types}/middleware.js +0 -0
  608. /package/lib/{components/chat/types/tool.js → types/tools.js} +0 -0
@@ -0,0 +1,748 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import { generateMessageId, createAssistantMessage } from '../types/messages';
6
+ import { BaseProtocolAdapter } from './BaseProtocolAdapter';
7
+ /**
8
+ * Vercel AI protocol adapter
9
+ * Uses HTTP POST with SSE streaming for responses
10
+ * Compatible with Pydantic AI's Vercel AI Data Stream Protocol
11
+ */
12
+ export class VercelAIAdapter extends BaseProtocolAdapter {
13
+ protocol = 'vercel-ai';
14
+ protocolTransport = 'sse';
15
+ vercelConfig;
16
+ abortController = null;
17
+ currentRequestId = null;
18
+ // Frontend tool continuation state (modelled after AGUIAdapter)
19
+ pendingToolCalls = new Map();
20
+ collectedToolResults = new Map();
21
+ // Store conversation history for continuation
22
+ messageHistory = [];
23
+ lastAssistantText = '';
24
+ lastTools = [];
25
+ lastFrontendToolNames = new Set();
26
+ isContinuation = false;
27
+ // Metadata for ALL deferred tool calls (frontend + approval), keyed by toolCallId.
28
+ // Unlike pendingToolCalls (which only tracks frontend tools for batching),
29
+ // this preserves tool name/args for approval tools so sendToolResult can
30
+ // build a correct continuation message.
31
+ deferredToolMeta = new Map();
32
+ // Stream parsing depth — prevents premature continuations
33
+ _streamParsingDepth = 0;
34
+ _streamDonePromise = null;
35
+ _streamDoneResolve = null;
36
+ constructor(config) {
37
+ super(config);
38
+ this.vercelConfig = config;
39
+ }
40
+ /**
41
+ * Connect to Vercel AI endpoint (SSE doesn't require persistent connection)
42
+ */
43
+ async connect() {
44
+ this.setConnectionState('connecting');
45
+ // Vercel AI uses SSE, no persistent connection needed
46
+ // Just mark as connected
47
+ this.setConnectionState('connected');
48
+ }
49
+ /**
50
+ * Disconnect and terminate any ongoing request
51
+ */
52
+ disconnect() {
53
+ this.abortController?.abort();
54
+ this.abortController = null;
55
+ // Send terminate request to backend if we have a request ID
56
+ if (this.currentRequestId) {
57
+ this.terminateRequest(this.currentRequestId).catch(err => {
58
+ console.warn('[VercelAIAdapter] Failed to terminate request:', err);
59
+ });
60
+ }
61
+ this.setConnectionState('disconnected');
62
+ }
63
+ /**
64
+ * Terminate a running request on the backend
65
+ */
66
+ async terminateRequest(requestId) {
67
+ try {
68
+ // Derive the terminate endpoint from the base URL
69
+ const baseUrl = new URL(this.vercelConfig.baseUrl);
70
+ const terminateUrl = `${baseUrl.origin}/api/v1/vercel-ai/terminate`;
71
+ const response = await fetch(terminateUrl, {
72
+ method: 'POST',
73
+ headers: {
74
+ 'Content-Type': 'application/json',
75
+ },
76
+ body: JSON.stringify({
77
+ request_id: requestId || this.currentRequestId,
78
+ }),
79
+ });
80
+ if (!response.ok) {
81
+ console.warn(`[VercelAIAdapter] Terminate request failed: ${response.status}`);
82
+ }
83
+ else {
84
+ // Consume the response (terminate result)
85
+ await response.json();
86
+ }
87
+ }
88
+ catch {
89
+ // Ignore errors - request may have already completed
90
+ }
91
+ }
92
+ /**
93
+ * Send a message using Vercel AI Data Stream Protocol
94
+ */
95
+ async sendMessage(message, options) {
96
+ if (this.abortController) {
97
+ this.abortController.abort();
98
+ }
99
+ this.abortController = new AbortController();
100
+ // Generate request ID for tracking
101
+ const requestId = options?.threadId || generateMessageId();
102
+ this.currentRequestId = requestId;
103
+ // Store tools for potential continuation
104
+ if (options?.tools) {
105
+ this.lastTools = options.tools;
106
+ this.lastFrontendToolNames = new Set(options.tools
107
+ .map(t => t?.name)
108
+ .filter((name) => Boolean(name)));
109
+ }
110
+ else {
111
+ this.lastFrontendToolNames = new Set();
112
+ }
113
+ // Reset assistant content tracking for fresh (non-continuation) messages
114
+ if (!this.isContinuation) {
115
+ this.lastAssistantText = '';
116
+ this.deferredToolMeta.clear();
117
+ }
118
+ try {
119
+ let vercelMessages;
120
+ if (options?._vercelMessages) {
121
+ // Continuation: use pre-built messages
122
+ vercelMessages = options._vercelMessages;
123
+ }
124
+ else {
125
+ // Use full message history if provided, otherwise just the new message
126
+ const allMessages = options?.messages || [message];
127
+ vercelMessages = allMessages.map(msg => {
128
+ const messageContent = typeof msg.content === 'string'
129
+ ? msg.content
130
+ : String(msg.content ?? '');
131
+ const parts = [
132
+ {
133
+ type: 'text',
134
+ text: messageContent,
135
+ },
136
+ ];
137
+ // For assistant messages with tool calls, add tool-invocation parts
138
+ if (msg.role === 'assistant' &&
139
+ msg.toolCalls &&
140
+ msg.toolCalls.length > 0) {
141
+ for (const tc of msg.toolCalls) {
142
+ parts.push({
143
+ type: 'tool-invocation',
144
+ toolInvocationId: tc.toolCallId,
145
+ toolName: tc.toolName,
146
+ args: tc.args,
147
+ state: 'result',
148
+ result: tc.result,
149
+ });
150
+ }
151
+ }
152
+ return {
153
+ id: msg.id,
154
+ role: msg.role,
155
+ parts,
156
+ };
157
+ });
158
+ // For tool-result messages, add them as separate tool parts
159
+ // (handled inline above via toolCalls on assistant messages)
160
+ }
161
+ // Store message history for continuation
162
+ if (!this.isContinuation) {
163
+ this.messageHistory = [...vercelMessages];
164
+ }
165
+ else {
166
+ this.messageHistory = [...vercelMessages];
167
+ }
168
+ // Build Vercel AI request
169
+ const requestBody = {
170
+ id: requestId,
171
+ messages: vercelMessages,
172
+ // Required for pydantic-ai deferred tool approval continuations.
173
+ // sdkVersion 6 enables parsing approval-responded tool parts.
174
+ sdkVersion: 6,
175
+ trigger: 'submit-message',
176
+ ...(options?.tools && { tools: options.tools }),
177
+ ...(options?.model && { model: options.model }),
178
+ ...(options?.builtinTools &&
179
+ options.builtinTools.length > 0 && {
180
+ builtinTools: options.builtinTools,
181
+ }),
182
+ ...(options?.skills &&
183
+ options.skills.length > 0 && {
184
+ skills: options.skills,
185
+ }),
186
+ ...(options?.identities &&
187
+ options.identities.length > 0 && {
188
+ identities: options.identities,
189
+ }),
190
+ };
191
+ if (options?.tools && options.tools.length > 0) {
192
+ console.log('[VercelAIAdapter] Sending with frontend tools:', options.tools.map((t) => t.name));
193
+ }
194
+ else {
195
+ console.log('[VercelAIAdapter] No frontend tools in request');
196
+ }
197
+ if (options?.model) {
198
+ console.log('[VercelAIAdapter] Sending with model:', options.model);
199
+ }
200
+ if (options?.builtinTools && options.builtinTools.length > 0) {
201
+ console.log('[VercelAIAdapter] Sending with builtinTools:', options.builtinTools);
202
+ }
203
+ if (options?.skills && options.skills.length > 0) {
204
+ console.log('[VercelAIAdapter] Sending with skills:', options.skills);
205
+ }
206
+ if (options?.identities && options.identities.length > 0) {
207
+ console.log('[VercelAIAdapter] Sending with identities:', options.identities.map(i => i.provider));
208
+ }
209
+ // Merge custom headers with defaults
210
+ const headers = {
211
+ 'Content-Type': 'application/json',
212
+ Accept: 'text/event-stream',
213
+ ...this.vercelConfig.headers,
214
+ };
215
+ // Add auth token if provided
216
+ if (this.vercelConfig.authToken) {
217
+ headers['Authorization'] = `token ${this.vercelConfig.authToken}`;
218
+ }
219
+ const response = await fetch(this.vercelConfig.baseUrl, {
220
+ method: 'POST',
221
+ headers,
222
+ body: JSON.stringify(requestBody),
223
+ signal: this.abortController.signal,
224
+ mode: this.vercelConfig.fetchOptions?.mode,
225
+ credentials: this.vercelConfig.fetchOptions?.credentials,
226
+ });
227
+ if (!response.ok) {
228
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
229
+ }
230
+ if (!response.body) {
231
+ throw new Error('Response body is null');
232
+ }
233
+ // Parse SSE stream
234
+ await this.parseSSEStream(response.body);
235
+ }
236
+ catch (error) {
237
+ if (error.name !== 'AbortError') {
238
+ console.error('[VercelAIAdapter] Send error:', error);
239
+ throw error;
240
+ }
241
+ }
242
+ finally {
243
+ this.abortController = null;
244
+ }
245
+ }
246
+ /**
247
+ * Parse SSE stream from Vercel AI
248
+ */
249
+ async parseSSEStream(stream) {
250
+ const reader = stream.getReader();
251
+ const decoder = new TextDecoder();
252
+ let buffer = '';
253
+ let currentMessageId = generateMessageId();
254
+ let accumulatedText = '';
255
+ const pendingToolInputs = new Map();
256
+ let doneEmitted = false;
257
+ // Consume the continuation flag — set by sendToolResult for this call only
258
+ this.isContinuation = false;
259
+ // Track stream parsing depth for sendToolResult synchronisation
260
+ if (this._streamParsingDepth === 0) {
261
+ this._streamDonePromise = new Promise(resolve => {
262
+ this._streamDoneResolve = resolve;
263
+ });
264
+ }
265
+ this._streamParsingDepth++;
266
+ const emitDoneOnce = () => {
267
+ if (doneEmitted)
268
+ return;
269
+ // Don't emit 'done' if there are pending frontend tool calls
270
+ // — the continuation triggered by sendToolResult will do it later
271
+ if (this.pendingToolCalls.size > 0)
272
+ return;
273
+ doneEmitted = true;
274
+ this.emit({
275
+ type: 'done',
276
+ timestamp: new Date(),
277
+ });
278
+ };
279
+ const normalizeToolArgs = (rawArgs, fallbackText = '') => {
280
+ if (rawArgs && typeof rawArgs === 'object' && !Array.isArray(rawArgs)) {
281
+ return rawArgs;
282
+ }
283
+ const asText = typeof rawArgs === 'string' && rawArgs.trim().length > 0
284
+ ? rawArgs
285
+ : fallbackText;
286
+ if (!asText.trim()) {
287
+ return {};
288
+ }
289
+ try {
290
+ const parsed = JSON.parse(asText);
291
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
292
+ return parsed;
293
+ }
294
+ }
295
+ catch {
296
+ // Keep empty args if we can't parse structured input.
297
+ }
298
+ return {};
299
+ };
300
+ try {
301
+ while (true) {
302
+ const { done, value } = await reader.read();
303
+ if (done) {
304
+ // Stream ended - emit final message if we have accumulated text
305
+ if (accumulatedText) {
306
+ this.lastAssistantText = accumulatedText;
307
+ const message = createAssistantMessage(accumulatedText);
308
+ message.id = currentMessageId;
309
+ this.emit({
310
+ type: 'message',
311
+ message,
312
+ timestamp: new Date(),
313
+ });
314
+ }
315
+ emitDoneOnce();
316
+ break;
317
+ }
318
+ buffer += decoder.decode(value, { stream: true });
319
+ const lines = buffer.split('\n');
320
+ buffer = lines.pop() || '';
321
+ for (const line of lines) {
322
+ if (!line.trim() || line.startsWith(':')) {
323
+ continue;
324
+ }
325
+ // Log raw line for debugging
326
+ console.debug('[VercelAIAdapter] SSE line:', line);
327
+ if (line.startsWith('data: ')) {
328
+ const data = line.slice(6);
329
+ if (data === '[DONE]') {
330
+ // Stream complete
331
+ if (accumulatedText) {
332
+ this.lastAssistantText = accumulatedText;
333
+ const message = createAssistantMessage(accumulatedText);
334
+ message.id = currentMessageId;
335
+ this.emit({
336
+ type: 'message',
337
+ message,
338
+ timestamp: new Date(),
339
+ });
340
+ }
341
+ emitDoneOnce();
342
+ break;
343
+ }
344
+ try {
345
+ const event = JSON.parse(data);
346
+ console.debug('[VercelAIAdapter] Parsed event:', event);
347
+ // Handle Vercel AI event types
348
+ // Server sends: {"type":"text-delta","delta":"Hello","id":"..."}
349
+ if (event.type === 'text-delta' && event.delta) {
350
+ accumulatedText += event.delta;
351
+ // Emit 'message' event with accumulated content for useChat
352
+ const message = createAssistantMessage(accumulatedText);
353
+ message.id = currentMessageId;
354
+ this.emit({
355
+ type: 'message',
356
+ message,
357
+ timestamp: new Date(),
358
+ });
359
+ }
360
+ else if (event.type === 'text-start') {
361
+ // New text block starting
362
+ currentMessageId = event.id || generateMessageId();
363
+ accumulatedText = '';
364
+ }
365
+ else if (event.type === 'finish' ||
366
+ event.type === 'end-step' ||
367
+ event.type === 'finish-step') {
368
+ if (accumulatedText) {
369
+ const message = createAssistantMessage(accumulatedText);
370
+ message.id = currentMessageId;
371
+ this.emit({
372
+ type: 'message',
373
+ message,
374
+ timestamp: new Date(),
375
+ });
376
+ }
377
+ // Extract and emit usage data from finish events
378
+ if (event.usage) {
379
+ const usage = event.usage;
380
+ this.emit({
381
+ type: 'message',
382
+ usage: {
383
+ promptTokens: usage.promptTokens ?? 0,
384
+ completionTokens: usage.completionTokens ?? 0,
385
+ totalTokens: usage.totalTokens ??
386
+ (usage.promptTokens ?? 0) +
387
+ (usage.completionTokens ?? 0),
388
+ },
389
+ timestamp: new Date(),
390
+ });
391
+ }
392
+ const finishReason = String(event.finishReason || event.finish_reason || '').toLowerCase();
393
+ if (event.type === 'finish' &&
394
+ (finishReason === 'tool-calls' ||
395
+ finishReason === 'tool_calls') &&
396
+ pendingToolInputs.size > 0) {
397
+ // Only emit pending_approval for tool calls that are NOT in
398
+ // pendingToolCalls (i.e., server-side tools waiting for approval,
399
+ // not frontend tools that will be handled by sendToolResult)
400
+ for (const [toolCallId] of pendingToolInputs.entries()) {
401
+ if (!this.pendingToolCalls.has(toolCallId)) {
402
+ this.emit({
403
+ type: 'tool-result',
404
+ toolResult: {
405
+ toolCallId,
406
+ success: true,
407
+ result: {
408
+ pending_approval: true,
409
+ message: 'Awaiting user approval',
410
+ },
411
+ },
412
+ timestamp: new Date(),
413
+ });
414
+ }
415
+ }
416
+ }
417
+ if (event.type === 'finish') {
418
+ emitDoneOnce();
419
+ }
420
+ }
421
+ else if (event.type === 'tool-input-start') {
422
+ const toolCallId = event.toolCallId ||
423
+ event.tool_call_id ||
424
+ event.id ||
425
+ generateMessageId();
426
+ const toolName = event.toolName ||
427
+ event.tool_name ||
428
+ event.name ||
429
+ event.tool?.name;
430
+ pendingToolInputs.set(toolCallId, {
431
+ toolName,
432
+ inputText: '',
433
+ });
434
+ }
435
+ else if (event.type === 'tool-input-delta') {
436
+ const toolCallId = event.toolCallId || event.tool_call_id || event.id;
437
+ if (toolCallId && pendingToolInputs.has(toolCallId)) {
438
+ const existing = pendingToolInputs.get(toolCallId);
439
+ if (existing) {
440
+ existing.inputText += event.inputTextDelta || '';
441
+ pendingToolInputs.set(toolCallId, existing);
442
+ }
443
+ }
444
+ }
445
+ else if (event.type === 'tool-input-available') {
446
+ const toolCallId = event.toolCallId ||
447
+ event.tool_call_id ||
448
+ event.id ||
449
+ generateMessageId();
450
+ const pending = pendingToolInputs.get(toolCallId);
451
+ const toolName = event.toolName ||
452
+ event.tool_name ||
453
+ event.name ||
454
+ pending?.toolName ||
455
+ event.tool?.name;
456
+ const args = normalizeToolArgs(event.input || event.args || event.arguments, pending?.inputText || '');
457
+ if (toolName) {
458
+ // Emit tool-call for all tools so UI can render a tool entry.
459
+ // Only client-declared frontend tools should participate in
460
+ // frontend continuation batching via pendingToolCalls.
461
+ this.emit({
462
+ type: 'tool-call',
463
+ toolCall: {
464
+ toolCallId,
465
+ toolName,
466
+ args,
467
+ },
468
+ timestamp: new Date(),
469
+ });
470
+ // Track metadata for ALL deferred tools so sendToolResult
471
+ // can build proper continuation messages (tool name + args).
472
+ this.deferredToolMeta.set(toolCallId, {
473
+ toolCallId,
474
+ toolName,
475
+ args,
476
+ });
477
+ if (this.lastFrontendToolNames.has(toolName)) {
478
+ this.pendingToolCalls.set(toolCallId, {
479
+ toolCallId,
480
+ toolName,
481
+ args,
482
+ });
483
+ }
484
+ }
485
+ }
486
+ else if (event.type === 'tool-output-available') {
487
+ const toolCallId = event.toolCallId ||
488
+ event.tool_call_id ||
489
+ event.id ||
490
+ generateMessageId();
491
+ const output = event.output ?? event.result ?? event.data ?? event.content;
492
+ this.emit({
493
+ type: 'tool-result',
494
+ toolResult: {
495
+ toolCallId,
496
+ success: true,
497
+ result: output,
498
+ },
499
+ timestamp: new Date(),
500
+ });
501
+ pendingToolInputs.delete(toolCallId);
502
+ // Server already executed this tool — remove from pending
503
+ // frontend tool calls so emitDoneOnce is not blocked.
504
+ this.pendingToolCalls.delete(toolCallId);
505
+ this.deferredToolMeta.delete(toolCallId);
506
+ }
507
+ else if (event.type === 'tool-output-error' ||
508
+ event.type === 'tool-error') {
509
+ const toolCallId = event.toolCallId ||
510
+ event.tool_call_id ||
511
+ event.id ||
512
+ generateMessageId();
513
+ const errorMessage = event.error ||
514
+ event.errorText ||
515
+ event.message ||
516
+ 'Tool error';
517
+ // Server handled the error — clear from pending frontend
518
+ // tool calls so emitDoneOnce is not blocked.
519
+ this.pendingToolCalls.delete(toolCallId);
520
+ this.deferredToolMeta.delete(toolCallId);
521
+ this.emit({
522
+ type: 'tool-result',
523
+ toolResult: {
524
+ toolCallId,
525
+ success: false,
526
+ error: errorMessage,
527
+ result: event.output ?? event.result,
528
+ },
529
+ timestamp: new Date(),
530
+ });
531
+ pendingToolInputs.delete(toolCallId);
532
+ }
533
+ else if (event.type === 'error') {
534
+ const errorMessage = event.error ||
535
+ event.errorText ||
536
+ event.message ||
537
+ event.detail ||
538
+ 'Unknown server error';
539
+ console.error('[VercelAIAdapter] Server error event:', event);
540
+ this.emit({
541
+ type: 'error',
542
+ error: new Error(errorMessage),
543
+ timestamp: new Date(),
544
+ });
545
+ }
546
+ else if (event.type === 'tool-call' ||
547
+ event.type === 'tool-call-start' ||
548
+ event.type === 'tool-approval-request') {
549
+ const toolName = event.toolName ||
550
+ event.tool_name ||
551
+ event.name ||
552
+ event.tool?.name;
553
+ const args = normalizeToolArgs(event.args ||
554
+ event.arguments ||
555
+ event.input ||
556
+ event.tool?.arguments) || {};
557
+ const toolCallId = event.toolCallId ||
558
+ event.tool_call_id ||
559
+ event.id ||
560
+ generateMessageId();
561
+ if (toolName) {
562
+ this.emit({
563
+ type: 'tool-call',
564
+ toolCall: {
565
+ toolCallId,
566
+ toolName,
567
+ args,
568
+ },
569
+ timestamp: new Date(),
570
+ });
571
+ }
572
+ }
573
+ }
574
+ catch (parseError) {
575
+ console.error('[VercelAIAdapter] Failed to parse SSE data:', parseError);
576
+ }
577
+ }
578
+ }
579
+ }
580
+ }
581
+ finally {
582
+ reader.releaseLock();
583
+ this._streamParsingDepth--;
584
+ if (this._streamParsingDepth === 0) {
585
+ const resolve = this._streamDoneResolve;
586
+ this._streamDonePromise = null;
587
+ this._streamDoneResolve = null;
588
+ resolve?.();
589
+ }
590
+ }
591
+ }
592
+ /**
593
+ * Send tool result back and continue the conversation.
594
+ *
595
+ * When the agent makes multiple frontend tool calls in a single run, each
596
+ * call triggers an independent async execution in ChatBase. This method
597
+ * batches the results: it stores each result as it arrives and only sends
598
+ * ONE continuation request once ALL pending tool calls have been resolved.
599
+ */
600
+ async sendToolResult(toolCallId, result) {
601
+ // 1. Emit local event for UI updates
602
+ this.emit({
603
+ type: 'tool-result',
604
+ toolResult: result,
605
+ timestamp: new Date(),
606
+ });
607
+ // 2. Retrieve tool metadata from pending map (frontend tools) or
608
+ // deferred tool meta (approval / all deferred tools).
609
+ const pendingToolCall = this.pendingToolCalls.get(toolCallId) ??
610
+ this.deferredToolMeta.get(toolCallId);
611
+ if (!pendingToolCall) {
612
+ console.warn('[VercelAIAdapter] No pending tool call found for ID:', toolCallId);
613
+ }
614
+ const toolName = pendingToolCall?.toolName ?? 'unknown';
615
+ const toolArgs = pendingToolCall?.args ?? {};
616
+ // 3. Collect this result (batching)
617
+ this.collectedToolResults.set(toolCallId, {
618
+ toolCallId,
619
+ toolName,
620
+ args: toolArgs,
621
+ result,
622
+ });
623
+ // 4. Check whether ALL pending tool calls now have results
624
+ let allResolved = Array.from(this.pendingToolCalls.keys()).every(id => this.collectedToolResults.has(id));
625
+ if (!allResolved) {
626
+ return;
627
+ }
628
+ // 4b. Guard against premature continuations while stream is still parsing
629
+ if (this._streamParsingDepth > 0 && this._streamDonePromise) {
630
+ await this._streamDonePromise;
631
+ allResolved = Array.from(this.pendingToolCalls.keys()).every(id => this.collectedToolResults.has(id));
632
+ if (!allResolved) {
633
+ return;
634
+ }
635
+ }
636
+ // ── All tool results collected — build ONE continuation request ──
637
+ // 5. Build an assistant message with DynamicToolUIParts (output-available)
638
+ const assistantParts = [];
639
+ // Include the assistant text if any was produced before tool calls
640
+ if (this.lastAssistantText) {
641
+ assistantParts.push({
642
+ type: 'text',
643
+ text: this.lastAssistantText,
644
+ state: 'done',
645
+ });
646
+ }
647
+ // Add each tool call with its result as a dynamic-tool part.
648
+ // pydantic-ai parses DynamicTool* parts with output-available / output-error
649
+ // and approval-responded states for deferred approval continuations.
650
+ for (const tr of this.collectedToolResults.values()) {
651
+ const resultObj = tr.result.result && typeof tr.result.result === 'object'
652
+ ? tr.result.result
653
+ : undefined;
654
+ const isApprovalDecision = !!resultObj && typeof resultObj.approved === 'boolean';
655
+ if (isApprovalDecision) {
656
+ const approvalId = typeof resultObj?.approvalId === 'string'
657
+ ? resultObj.approvalId
658
+ : tr.toolCallId;
659
+ const approved = Boolean(resultObj?.approved);
660
+ const reason = typeof resultObj?.message === 'string' ? resultObj.message : undefined;
661
+ assistantParts.push({
662
+ type: 'dynamic-tool',
663
+ toolName: tr.toolName,
664
+ toolCallId: tr.toolCallId,
665
+ state: 'approval-responded',
666
+ input: tr.args,
667
+ approval: {
668
+ id: approvalId,
669
+ approved,
670
+ ...(reason ? { reason } : {}),
671
+ },
672
+ });
673
+ }
674
+ else if (tr.result.success) {
675
+ assistantParts.push({
676
+ type: 'dynamic-tool',
677
+ toolName: tr.toolName,
678
+ toolCallId: tr.toolCallId,
679
+ state: 'output-available',
680
+ input: tr.args,
681
+ output: tr.result.result,
682
+ });
683
+ }
684
+ else {
685
+ assistantParts.push({
686
+ type: 'dynamic-tool',
687
+ toolName: tr.toolName,
688
+ toolCallId: tr.toolCallId,
689
+ state: 'output-error',
690
+ input: tr.args,
691
+ errorText: tr.result.error ?? 'Tool execution failed',
692
+ });
693
+ }
694
+ }
695
+ const assistantMessage = {
696
+ id: generateMessageId(),
697
+ role: 'assistant',
698
+ parts: assistantParts,
699
+ };
700
+ // 6. Build full continuation messages
701
+ const continuationMessages = [...this.messageHistory, assistantMessage];
702
+ // 7. Clear batching state BEFORE the async sendMessage call
703
+ this.pendingToolCalls.clear();
704
+ this.collectedToolResults.clear();
705
+ this.deferredToolMeta.clear();
706
+ // 8. Update stored message history
707
+ this.messageHistory = continuationMessages;
708
+ // 9. Mark as continuation
709
+ this.isContinuation = true;
710
+ // 10. Send ONE continuation request with all tool results
711
+ const dummyMessage = {
712
+ id: generateMessageId(),
713
+ role: 'user',
714
+ content: '',
715
+ createdAt: new Date(),
716
+ };
717
+ await this.sendMessage(dummyMessage, {
718
+ _vercelMessages: continuationMessages,
719
+ tools: this.lastTools,
720
+ threadId: this.currentRequestId ?? undefined,
721
+ });
722
+ }
723
+ /**
724
+ * Request permission (not supported in Vercel AI)
725
+ */
726
+ async requestPermission(_permission) {
727
+ return true;
728
+ }
729
+ /**
730
+ * Check feature support
731
+ */
732
+ supportsFeature(feature) {
733
+ const supportedFeatures = [
734
+ 'streaming',
735
+ 'tools',
736
+ 'frontend-tools',
737
+ 'backend-tools',
738
+ ];
739
+ return supportedFeatures.includes(feature);
740
+ }
741
+ /**
742
+ * Stop generation
743
+ */
744
+ stopGeneration() {
745
+ this.abortController?.abort();
746
+ this.abortController = null;
747
+ }
748
+ }