@datalayer/agent-runtimes 0.0.2

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 (571) hide show
  1. package/LICENSE +32 -0
  2. package/README.md +56 -0
  3. package/lib/App.css +47 -0
  4. package/lib/App.d.ts +3 -0
  5. package/lib/App.js +18 -0
  6. package/lib/components/chat/components/AgentDetails.d.ts +19 -0
  7. package/lib/components/chat/components/AgentDetails.js +170 -0
  8. package/lib/components/chat/components/Chat.d.ts +105 -0
  9. package/lib/components/chat/components/Chat.js +275 -0
  10. package/lib/components/chat/components/ChatFloating.d.ts +146 -0
  11. package/lib/components/chat/components/ChatFloating.js +381 -0
  12. package/lib/components/chat/components/ChatInline.d.ts +42 -0
  13. package/lib/components/chat/components/ChatInline.js +327 -0
  14. package/lib/components/chat/components/ChatPopupStandalone.d.ts +110 -0
  15. package/lib/components/chat/components/ChatPopupStandalone.js +422 -0
  16. package/lib/components/chat/components/ChatSidebar.d.ts +78 -0
  17. package/lib/components/chat/components/ChatSidebar.js +224 -0
  18. package/lib/components/chat/components/ChatStandalone.d.ts +105 -0
  19. package/lib/components/chat/components/ChatStandalone.js +320 -0
  20. package/lib/components/chat/components/base/ChatBase.d.ts +285 -0
  21. package/lib/components/chat/components/base/ChatBase.js +1192 -0
  22. package/lib/components/chat/components/display/ToolCallDisplay.d.ts +26 -0
  23. package/lib/components/chat/components/display/ToolCallDisplay.js +225 -0
  24. package/lib/components/chat/components/display/index.d.ts +6 -0
  25. package/lib/components/chat/components/display/index.js +10 -0
  26. package/lib/components/chat/components/elements/ChatHeader.d.ts +43 -0
  27. package/lib/components/chat/components/elements/ChatHeader.js +67 -0
  28. package/lib/components/chat/components/elements/ChatInputPrompt.d.ts +26 -0
  29. package/lib/components/chat/components/elements/ChatInputPrompt.js +145 -0
  30. package/lib/components/chat/components/elements/ChatMessages.d.ts +36 -0
  31. package/lib/components/chat/components/elements/ChatMessages.js +195 -0
  32. package/lib/components/chat/components/elements/FloatingBrandButton.d.ts +34 -0
  33. package/lib/components/chat/components/elements/FloatingBrandButton.js +88 -0
  34. package/lib/components/chat/components/elements/MessagePart.d.ts +50 -0
  35. package/lib/components/chat/components/elements/MessagePart.js +48 -0
  36. package/lib/components/chat/components/elements/PoweredByTag.d.ts +26 -0
  37. package/lib/components/chat/components/elements/PoweredByTag.js +33 -0
  38. package/lib/components/chat/components/elements/ToolApprovalDialog.d.ts +42 -0
  39. package/lib/components/chat/components/elements/ToolApprovalDialog.js +96 -0
  40. package/lib/components/chat/components/index.d.ts +21 -0
  41. package/lib/components/chat/components/index.js +34 -0
  42. package/lib/components/chat/components/parts/DynamicToolPart.d.ts +20 -0
  43. package/lib/components/chat/components/parts/DynamicToolPart.js +13 -0
  44. package/lib/components/chat/components/parts/ReasoningPart.d.ts +17 -0
  45. package/lib/components/chat/components/parts/ReasoningPart.js +69 -0
  46. package/lib/components/chat/components/parts/TextPart.d.ts +28 -0
  47. package/lib/components/chat/components/parts/TextPart.js +103 -0
  48. package/lib/components/chat/components/parts/ToolPart.d.ts +17 -0
  49. package/lib/components/chat/components/parts/ToolPart.js +163 -0
  50. package/lib/components/chat/components/parts/index.d.ts +9 -0
  51. package/lib/components/chat/components/parts/index.js +13 -0
  52. package/lib/components/chat/extensions/A2UIExtension.d.ts +87 -0
  53. package/lib/components/chat/extensions/A2UIExtension.js +312 -0
  54. package/lib/components/chat/extensions/ExtensionRegistry.d.ts +66 -0
  55. package/lib/components/chat/extensions/ExtensionRegistry.js +128 -0
  56. package/lib/components/chat/extensions/MCPUIExtension.d.ts +77 -0
  57. package/lib/components/chat/extensions/MCPUIExtension.js +212 -0
  58. package/lib/components/chat/extensions/index.d.ts +9 -0
  59. package/lib/components/chat/extensions/index.js +12 -0
  60. package/lib/components/chat/handler.d.ts +20 -0
  61. package/lib/components/chat/handler.js +56 -0
  62. package/lib/components/chat/index.d.ts +61 -0
  63. package/lib/components/chat/index.js +76 -0
  64. package/lib/components/chat/inference/BaseInferenceProvider.d.ts +57 -0
  65. package/lib/components/chat/inference/BaseInferenceProvider.js +69 -0
  66. package/lib/components/chat/inference/DatalayerInferenceProvider.d.ts +83 -0
  67. package/lib/components/chat/inference/DatalayerInferenceProvider.js +305 -0
  68. package/lib/components/chat/inference/SelfHostedInferenceProvider.d.ts +54 -0
  69. package/lib/components/chat/inference/SelfHostedInferenceProvider.js +246 -0
  70. package/lib/components/chat/inference/index.d.ts +9 -0
  71. package/lib/components/chat/inference/index.js +12 -0
  72. package/lib/components/chat/middleware/MiddlewarePipeline.d.ts +118 -0
  73. package/lib/components/chat/middleware/MiddlewarePipeline.js +255 -0
  74. package/lib/components/chat/middleware/index.d.ts +7 -0
  75. package/lib/components/chat/middleware/index.js +10 -0
  76. package/lib/components/chat/protocols/A2AAdapter.d.ts +79 -0
  77. package/lib/components/chat/protocols/A2AAdapter.js +388 -0
  78. package/lib/components/chat/protocols/ACPAdapter.d.ts +161 -0
  79. package/lib/components/chat/protocols/ACPAdapter.js +504 -0
  80. package/lib/components/chat/protocols/AGUIAdapter.d.ts +82 -0
  81. package/lib/components/chat/protocols/AGUIAdapter.js +518 -0
  82. package/lib/components/chat/protocols/BaseProtocolAdapter.d.ts +75 -0
  83. package/lib/components/chat/protocols/BaseProtocolAdapter.js +119 -0
  84. package/lib/components/chat/protocols/VercelAIAdapter.d.ts +77 -0
  85. package/lib/components/chat/protocols/VercelAIAdapter.js +252 -0
  86. package/lib/components/chat/protocols/index.d.ts +11 -0
  87. package/lib/components/chat/protocols/index.js +14 -0
  88. package/lib/components/chat/store/chatStore.d.ts +158 -0
  89. package/lib/components/chat/store/chatStore.js +313 -0
  90. package/lib/components/chat/store/index.d.ts +6 -0
  91. package/lib/components/chat/store/index.js +10 -0
  92. package/lib/components/chat/tools/ToolExecutor.d.ts +49 -0
  93. package/lib/components/chat/tools/ToolExecutor.js +151 -0
  94. package/lib/components/chat/tools/index.d.ts +8 -0
  95. package/lib/components/chat/tools/index.js +11 -0
  96. package/lib/components/chat/types/extension.d.ts +181 -0
  97. package/lib/components/chat/types/extension.js +46 -0
  98. package/lib/components/chat/types/index.d.ts +11 -0
  99. package/lib/components/chat/types/index.js +16 -0
  100. package/lib/components/chat/types/inference.d.ts +117 -0
  101. package/lib/components/chat/types/inference.js +5 -0
  102. package/lib/components/chat/types/message.d.ts +117 -0
  103. package/lib/components/chat/types/message.js +50 -0
  104. package/lib/components/chat/types/middleware.d.ts +153 -0
  105. package/lib/components/chat/types/middleware.js +32 -0
  106. package/lib/components/chat/types/protocol.d.ts +209 -0
  107. package/lib/components/chat/types/protocol.js +5 -0
  108. package/lib/components/chat/types/tool.d.ts +140 -0
  109. package/lib/components/chat/types/tool.js +23 -0
  110. package/lib/components/index.d.ts +1 -0
  111. package/lib/components/index.js +6 -0
  112. package/lib/components/sparklines/Sparklines.d.ts +16 -0
  113. package/lib/components/sparklines/Sparklines.js +65 -0
  114. package/lib/components/sparklines/SparklinesLine.d.ts +8 -0
  115. package/lib/components/sparklines/SparklinesLine.js +37 -0
  116. package/lib/components/sparklines/dataProcessing.d.ts +25 -0
  117. package/lib/components/sparklines/dataProcessing.js +35 -0
  118. package/lib/components/sparklines/index.d.ts +4 -0
  119. package/lib/components/sparklines/index.js +7 -0
  120. package/lib/components/sparklines/types.d.ts +36 -0
  121. package/lib/components/sparklines/types.js +5 -0
  122. package/lib/components/ui/accordion.d.ts +7 -0
  123. package/lib/components/ui/accordion.js +22 -0
  124. package/lib/components/ui/alert-dialog.d.ts +14 -0
  125. package/lib/components/ui/alert-dialog.js +43 -0
  126. package/lib/components/ui/alert.d.ts +9 -0
  127. package/lib/components/ui/alert.js +24 -0
  128. package/lib/components/ui/aspect-ratio.d.ts +3 -0
  129. package/lib/components/ui/aspect-ratio.js +11 -0
  130. package/lib/components/ui/avatar.d.ts +6 -0
  131. package/lib/components/ui/avatar.js +18 -0
  132. package/lib/components/ui/badge.d.ts +9 -0
  133. package/lib/components/ui/badge.js +22 -0
  134. package/lib/components/ui/breadcrumb.d.ts +11 -0
  135. package/lib/components/ui/breadcrumb.js +27 -0
  136. package/lib/components/ui/button-group.d.ts +11 -0
  137. package/lib/components/ui/button-group.js +31 -0
  138. package/lib/components/ui/button.d.ts +13 -0
  139. package/lib/components/ui/button.js +39 -0
  140. package/lib/components/ui/calendar.d.ts +8 -0
  141. package/lib/components/ui/calendar.js +80 -0
  142. package/lib/components/ui/card.d.ts +9 -0
  143. package/lib/components/ui/card.js +24 -0
  144. package/lib/components/ui/carousel.d.ts +19 -0
  145. package/lib/components/ui/carousel.js +95 -0
  146. package/lib/components/ui/chart.d.ts +53 -0
  147. package/lib/components/ui/chart.js +136 -0
  148. package/lib/components/ui/checkbox.d.ts +4 -0
  149. package/lib/components/ui/checkbox.js +13 -0
  150. package/lib/components/ui/collapsible.d.ts +5 -0
  151. package/lib/components/ui/collapsible.js +17 -0
  152. package/lib/components/ui/command.d.ts +18 -0
  153. package/lib/components/ui/command.js +38 -0
  154. package/lib/components/ui/context-menu.d.ts +25 -0
  155. package/lib/components/ui/context-menu.js +55 -0
  156. package/lib/components/ui/dialog.d.ts +15 -0
  157. package/lib/components/ui/dialog.js +40 -0
  158. package/lib/components/ui/drawer.d.ts +13 -0
  159. package/lib/components/ui/drawer.js +39 -0
  160. package/lib/components/ui/dropdown-menu.d.ts +25 -0
  161. package/lib/components/ui/dropdown-menu.js +55 -0
  162. package/lib/components/ui/empty.d.ts +11 -0
  163. package/lib/components/ui/empty.js +37 -0
  164. package/lib/components/ui/field.d.ts +24 -0
  165. package/lib/components/ui/field.js +80 -0
  166. package/lib/components/ui/form.d.ts +24 -0
  167. package/lib/components/ui/form.js +63 -0
  168. package/lib/components/ui/hover-card.d.ts +6 -0
  169. package/lib/components/ui/hover-card.js +18 -0
  170. package/lib/components/ui/input-group.d.ts +19 -0
  171. package/lib/components/ui/input-group.js +69 -0
  172. package/lib/components/ui/input-otp.d.ts +11 -0
  173. package/lib/components/ui/input-otp.js +25 -0
  174. package/lib/components/ui/input.d.ts +3 -0
  175. package/lib/components/ui/input.js +6 -0
  176. package/lib/components/ui/item.d.ts +23 -0
  177. package/lib/components/ui/item.js +66 -0
  178. package/lib/components/ui/kbd.d.ts +3 -0
  179. package/lib/components/ui/kbd.js +13 -0
  180. package/lib/components/ui/label.d.ts +4 -0
  181. package/lib/components/ui/label.js +12 -0
  182. package/lib/components/ui/menubar.d.ts +26 -0
  183. package/lib/components/ui/menubar.js +58 -0
  184. package/lib/components/ui/navigation-menu.d.ts +14 -0
  185. package/lib/components/ui/navigation-menu.js +31 -0
  186. package/lib/components/ui/pagination.d.ts +13 -0
  187. package/lib/components/ui/pagination.js +29 -0
  188. package/lib/components/ui/popover.d.ts +7 -0
  189. package/lib/components/ui/popover.js +21 -0
  190. package/lib/components/ui/progress.d.ts +4 -0
  191. package/lib/components/ui/progress.js +12 -0
  192. package/lib/components/ui/radio-group.d.ts +5 -0
  193. package/lib/components/ui/radio-group.js +16 -0
  194. package/lib/components/ui/resizable.d.ts +8 -0
  195. package/lib/components/ui/resizable.js +19 -0
  196. package/lib/components/ui/scroll-area.d.ts +5 -0
  197. package/lib/components/ui/scroll-area.js +17 -0
  198. package/lib/components/ui/select.d.ts +15 -0
  199. package/lib/components/ui/select.js +42 -0
  200. package/lib/components/ui/separator.d.ts +4 -0
  201. package/lib/components/ui/separator.js +12 -0
  202. package/lib/components/ui/sheet.d.ts +13 -0
  203. package/lib/components/ui/sheet.js +44 -0
  204. package/lib/components/ui/sidebar.d.ts +69 -0
  205. package/lib/components/ui/sidebar.js +216 -0
  206. package/lib/components/ui/skeleton.d.ts +2 -0
  207. package/lib/components/ui/skeleton.js +10 -0
  208. package/lib/components/ui/slider.d.ts +4 -0
  209. package/lib/components/ui/slider.js +18 -0
  210. package/lib/components/ui/sonner.d.ts +3 -0
  211. package/lib/components/ui/sonner.js +25 -0
  212. package/lib/components/ui/spinner.d.ts +2 -0
  213. package/lib/components/ui/spinner.js +11 -0
  214. package/lib/components/ui/switch.d.ts +4 -0
  215. package/lib/components/ui/switch.js +12 -0
  216. package/lib/components/ui/table.d.ts +10 -0
  217. package/lib/components/ui/table.js +32 -0
  218. package/lib/components/ui/tabs.d.ts +7 -0
  219. package/lib/components/ui/tabs.js +21 -0
  220. package/lib/components/ui/textarea.d.ts +3 -0
  221. package/lib/components/ui/textarea.js +6 -0
  222. package/lib/components/ui/toast.d.ts +15 -0
  223. package/lib/components/ui/toast.js +38 -0
  224. package/lib/components/ui/toaster.d.ts +1 -0
  225. package/lib/components/ui/toaster.js +14 -0
  226. package/lib/components/ui/toggle-group.d.ts +9 -0
  227. package/lib/components/ui/toggle-group.js +26 -0
  228. package/lib/components/ui/toggle.d.ts +9 -0
  229. package/lib/components/ui/toggle.js +30 -0
  230. package/lib/components/ui/tooltip.d.ts +7 -0
  231. package/lib/components/ui/tooltip.js +21 -0
  232. package/lib/components/vercel-ai-elements/artifact.d.ts +23 -0
  233. package/lib/components/vercel-ai-elements/artifact.js +24 -0
  234. package/lib/components/vercel-ai-elements/code-block.d.ts +17 -0
  235. package/lib/components/vercel-ai-elements/code-block.js +94 -0
  236. package/lib/components/vercel-ai-elements/conversation.d.ts +15 -0
  237. package/lib/components/vercel-ai-elements/conversation.js +21 -0
  238. package/lib/components/vercel-ai-elements/loader.d.ts +5 -0
  239. package/lib/components/vercel-ai-elements/loader.js +8 -0
  240. package/lib/components/vercel-ai-elements/message.d.ts +46 -0
  241. package/lib/components/vercel-ai-elements/message.js +109 -0
  242. package/lib/components/vercel-ai-elements/model-selector.d.ts +35 -0
  243. package/lib/components/vercel-ai-elements/model-selector.js +22 -0
  244. package/lib/components/vercel-ai-elements/prompt-input.d.ts +195 -0
  245. package/lib/components/vercel-ai-elements/prompt-input.js +589 -0
  246. package/lib/components/vercel-ai-elements/reasoning.d.ts +26 -0
  247. package/lib/components/vercel-ai-elements/reasoning.js +80 -0
  248. package/lib/components/vercel-ai-elements/shimmer.d.ts +9 -0
  249. package/lib/components/vercel-ai-elements/shimmer.js +22 -0
  250. package/lib/components/vercel-ai-elements/sources.d.ts +12 -0
  251. package/lib/components/vercel-ai-elements/sources.js +13 -0
  252. package/lib/components/vercel-ai-elements/suggestion.d.ts +10 -0
  253. package/lib/components/vercel-ai-elements/suggestion.js +16 -0
  254. package/lib/components/vercel-ai-elements/tool.d.ts +23 -0
  255. package/lib/components/vercel-ai-elements/tool.js +52 -0
  256. package/lib/examples/A2UiRestaurantExample.d.ts +25 -0
  257. package/lib/examples/A2UiRestaurantExample.js +305 -0
  258. package/lib/examples/AgUiAgenticExample.d.ts +25 -0
  259. package/lib/examples/AgUiAgenticExample.js +63 -0
  260. package/lib/examples/AgUiBackendToolRenderingExample.d.ts +30 -0
  261. package/lib/examples/AgUiBackendToolRenderingExample.js +103 -0
  262. package/lib/examples/AgUiHaikuGenUIExample.d.ts +44 -0
  263. package/lib/examples/AgUiHaikuGenUIExample.js +151 -0
  264. package/lib/examples/AgUiHumanInTheLoopExample.d.ts +26 -0
  265. package/lib/examples/AgUiHumanInTheLoopExample.js +220 -0
  266. package/lib/examples/AgUiSharedStateExample.d.ts +25 -0
  267. package/lib/examples/AgUiSharedStateExample.js +181 -0
  268. package/lib/examples/AgUiToolsBasedGenUIExample.d.ts +25 -0
  269. package/lib/examples/AgUiToolsBasedGenUIExample.js +257 -0
  270. package/lib/examples/AgentRuntimeCustomExample.d.ts +9 -0
  271. package/lib/examples/AgentRuntimeCustomExample.js +68 -0
  272. package/lib/examples/AgentRuntimeLexical2Example.d.ts +42 -0
  273. package/lib/examples/AgentRuntimeLexical2Example.js +236 -0
  274. package/lib/examples/AgentRuntimeLexicalExample.d.ts +36 -0
  275. package/lib/examples/AgentRuntimeLexicalExample.js +260 -0
  276. package/lib/examples/AgentRuntimeLexicalSidebarExample.d.ts +41 -0
  277. package/lib/examples/AgentRuntimeLexicalSidebarExample.js +166 -0
  278. package/lib/examples/AgentRuntimeNotebookExample.d.ts +9 -0
  279. package/lib/examples/AgentRuntimeNotebookExample.js +148 -0
  280. package/lib/examples/AgentRuntimeNotebookSidebarExample.d.ts +13 -0
  281. package/lib/examples/AgentRuntimeNotebookSidebarExample.js +121 -0
  282. package/lib/examples/AgentRuntimeStandaloneExample.d.ts +21 -0
  283. package/lib/examples/AgentRuntimeStandaloneExample.js +158 -0
  284. package/lib/examples/AgentSpaceFormExample.d.ts +22 -0
  285. package/lib/examples/AgentSpaceFormExample.js +296 -0
  286. package/lib/examples/AgentSpaceHomeExample.d.ts +8 -0
  287. package/lib/examples/AgentSpaceHomeExample.js +171 -0
  288. package/lib/examples/CopilotKitLexicalExample.d.ts +38 -0
  289. package/lib/examples/CopilotKitLexicalExample.js +161 -0
  290. package/lib/examples/CopilotKitNotebookExample.d.ts +11 -0
  291. package/lib/examples/CopilotKitNotebookExample.js +70 -0
  292. package/lib/examples/DatalayerNotebookExample.d.ts +16 -0
  293. package/lib/examples/DatalayerNotebookExample.js +99 -0
  294. package/lib/examples/JupyterCellExample.d.ts +6 -0
  295. package/lib/examples/JupyterCellExample.js +19 -0
  296. package/lib/examples/JupyterNotebookExample.d.ts +6 -0
  297. package/lib/examples/JupyterNotebookExample.js +21 -0
  298. package/lib/examples/ag-ui/haiku/HaikuDisplay.d.ts +18 -0
  299. package/lib/examples/ag-ui/haiku/HaikuDisplay.js +110 -0
  300. package/lib/examples/ag-ui/haiku/InlineHaikuCard.d.ts +39 -0
  301. package/lib/examples/ag-ui/haiku/InlineHaikuCard.js +117 -0
  302. package/lib/examples/ag-ui/haiku/index.d.ts +11 -0
  303. package/lib/examples/ag-ui/haiku/index.js +15 -0
  304. package/lib/examples/ag-ui/index.d.ts +10 -0
  305. package/lib/examples/ag-ui/index.js +16 -0
  306. package/lib/examples/ag-ui/weather/InlineWeatherCard.d.ts +43 -0
  307. package/lib/examples/ag-ui/weather/InlineWeatherCard.js +180 -0
  308. package/lib/examples/ag-ui/weather/index.d.ts +9 -0
  309. package/lib/examples/ag-ui/weather/index.js +13 -0
  310. package/lib/examples/components/AgentConfiguration.d.ts +50 -0
  311. package/lib/examples/components/AgentConfiguration.js +115 -0
  312. package/lib/examples/components/AgentsDataTable.d.ts +13 -0
  313. package/lib/examples/components/AgentsDataTable.js +74 -0
  314. package/lib/examples/components/FooterMetrics.d.ts +12 -0
  315. package/lib/examples/components/FooterMetrics.js +17 -0
  316. package/lib/examples/components/Header.d.ts +27 -0
  317. package/lib/examples/components/Header.js +294 -0
  318. package/lib/examples/components/HeaderControls.d.ts +11 -0
  319. package/lib/examples/components/HeaderControls.js +24 -0
  320. package/lib/examples/components/LexicalEditor.d.ts +27 -0
  321. package/lib/examples/components/LexicalEditor.js +118 -0
  322. package/lib/examples/components/MainContent.d.ts +19 -0
  323. package/lib/examples/components/MainContent.js +68 -0
  324. package/lib/examples/components/MockFileBrowser.d.ts +12 -0
  325. package/lib/examples/components/MockFileBrowser.js +131 -0
  326. package/lib/examples/components/Rating.d.ts +14 -0
  327. package/lib/examples/components/Rating.js +12 -0
  328. package/lib/examples/components/SessionTabs.d.ts +21 -0
  329. package/lib/examples/components/SessionTabs.js +11 -0
  330. package/lib/examples/components/TimeTravel.d.ts +15 -0
  331. package/lib/examples/components/TimeTravel.js +23 -0
  332. package/lib/examples/components/index.d.ts +11 -0
  333. package/lib/examples/components/index.js +14 -0
  334. package/lib/examples/example-selector.d.ts +22 -0
  335. package/lib/examples/example-selector.js +62 -0
  336. package/lib/examples/index.d.ts +21 -0
  337. package/lib/examples/index.js +25 -0
  338. package/lib/examples/lexical/editorConfig.d.ts +76 -0
  339. package/lib/examples/lexical/editorConfig.js +55 -0
  340. package/lib/examples/lexical/lexical-theme.css +436 -0
  341. package/lib/examples/lexical/theme.d.ts +61 -0
  342. package/lib/examples/lexical/theme.js +72 -0
  343. package/lib/examples/main.d.ts +2 -0
  344. package/lib/examples/main.js +334 -0
  345. package/lib/examples/stores/agents/earthquake-detector.ipynb.json +111 -0
  346. package/lib/examples/stores/agents/earthquake-detector.json +13 -0
  347. package/lib/examples/stores/agents/earthquake-detector.lexical.json +2988 -0
  348. package/lib/examples/stores/agents/sales-forecaster.ipynb.json +111 -0
  349. package/lib/examples/stores/agents/sales-forecaster.json +13 -0
  350. package/lib/examples/stores/agents/sales-forecaster.lexical.json +2988 -0
  351. package/lib/examples/stores/agents/social-post-generator.ipynb.json +111 -0
  352. package/lib/examples/stores/agents/social-post-generator.json +13 -0
  353. package/lib/examples/stores/agents/social-post-generator.lexical.json +2988 -0
  354. package/lib/examples/stores/agents/stock-market.ipynb.json +56 -0
  355. package/lib/examples/stores/agents/stock-market.json +13 -0
  356. package/lib/examples/stores/agents/stock-market.lexical.json +1026 -0
  357. package/lib/examples/stores/examplesStore.d.ts +26 -0
  358. package/lib/examples/stores/examplesStore.js +60 -0
  359. package/lib/examples/stores/notebooks/Empty.ipynb.json +33 -0
  360. package/lib/examples/stores/notebooks/IPyWidgetsExample.ipynb.json +101 -0
  361. package/lib/examples/stores/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
  362. package/lib/examples/stores/notebooks/Lite.ipynb.json +128 -0
  363. package/lib/examples/stores/notebooks/Matplotlib.ipynb.json +137 -0
  364. package/lib/examples/stores/notebooks/NotebookExample1.ipynb.json +126 -0
  365. package/lib/examples/stores/notebooks/NotebookExample2.ipynb.json +48 -0
  366. package/lib/examples/stores/notebooks/NotebookOutputs.ipynb.json +49 -0
  367. package/lib/examples/stores/notebooks/NotebookToCExample.ipynb.json +102 -0
  368. package/lib/examples/stores/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
  369. package/lib/examples/stores/notebooks/OutputIPyWidgetsExample.js +153 -0
  370. package/lib/examples/stores/notebooks/PyGWalker.ipynb.json +55 -0
  371. package/lib/examples/vercel-ai-elements/VercelAiElementsShowcase.d.ts +12 -0
  372. package/lib/examples/vercel-ai-elements/VercelAiElementsShowcase.js +69 -0
  373. package/lib/examples/vercel-ai-elements/components/ArtifactShowcase.d.ts +1 -0
  374. package/lib/examples/vercel-ai-elements/components/ArtifactShowcase.js +85 -0
  375. package/lib/examples/vercel-ai-elements/components/CodeBlockShowcase.d.ts +1 -0
  376. package/lib/examples/vercel-ai-elements/components/CodeBlockShowcase.js +62 -0
  377. package/lib/examples/vercel-ai-elements/components/ConversationShowcase.d.ts +1 -0
  378. package/lib/examples/vercel-ai-elements/components/ConversationShowcase.js +51 -0
  379. package/lib/examples/vercel-ai-elements/components/LoaderShowcase.d.ts +1 -0
  380. package/lib/examples/vercel-ai-elements/components/LoaderShowcase.js +9 -0
  381. package/lib/examples/vercel-ai-elements/components/MessageShowcase.d.ts +1 -0
  382. package/lib/examples/vercel-ai-elements/components/MessageShowcase.js +56 -0
  383. package/lib/examples/vercel-ai-elements/components/ModelSelectorShowcase.d.ts +1 -0
  384. package/lib/examples/vercel-ai-elements/components/ModelSelectorShowcase.js +50 -0
  385. package/lib/examples/vercel-ai-elements/components/PromptInputShowcase.d.ts +1 -0
  386. package/lib/examples/vercel-ai-elements/components/PromptInputShowcase.js +16 -0
  387. package/lib/examples/vercel-ai-elements/components/ReasoningShowcase.d.ts +1 -0
  388. package/lib/examples/vercel-ai-elements/components/ReasoningShowcase.js +72 -0
  389. package/lib/examples/vercel-ai-elements/components/ShimmerShowcase.d.ts +1 -0
  390. package/lib/examples/vercel-ai-elements/components/ShimmerShowcase.js +9 -0
  391. package/lib/examples/vercel-ai-elements/components/SourcesShowcase.d.ts +1 -0
  392. package/lib/examples/vercel-ai-elements/components/SourcesShowcase.js +43 -0
  393. package/lib/examples/vercel-ai-elements/components/SuggestionShowcase.d.ts +1 -0
  394. package/lib/examples/vercel-ai-elements/components/SuggestionShowcase.js +31 -0
  395. package/lib/examples/vercel-ai-elements/components/ToolShowcase.d.ts +1 -0
  396. package/lib/examples/vercel-ai-elements/components/ToolShowcase.js +54 -0
  397. package/lib/examples/vercel-ai-elements/index.d.ts +13 -0
  398. package/lib/examples/vercel-ai-elements/index.js +17 -0
  399. package/lib/examples/vercel-ai-elements/main.d.ts +1 -0
  400. package/lib/examples/vercel-ai-elements/main.js +9 -0
  401. package/lib/examples/vercel-ai-elements/showcase.css +128 -0
  402. package/lib/hooks/index.d.ts +68 -0
  403. package/lib/hooks/index.js +81 -0
  404. package/lib/hooks/useA2A.d.ts +75 -0
  405. package/lib/hooks/useA2A.js +368 -0
  406. package/lib/hooks/useAGUI.d.ts +63 -0
  407. package/lib/hooks/useAGUI.js +162 -0
  408. package/lib/hooks/useAcp.d.ts +121 -0
  409. package/lib/hooks/useAcp.js +459 -0
  410. package/lib/hooks/useAgents.d.ts +13 -0
  411. package/lib/hooks/useAgents.js +71 -0
  412. package/lib/hooks/useChat.d.ts +62 -0
  413. package/lib/hooks/useChat.js +363 -0
  414. package/lib/hooks/useKeyboardShortcuts.d.ts +47 -0
  415. package/lib/hooks/useKeyboardShortcuts.js +153 -0
  416. package/lib/hooks/useMobile.d.ts +1 -0
  417. package/lib/hooks/useMobile.js +19 -0
  418. package/lib/hooks/useNotebookAIAgent.d.ts +8 -0
  419. package/lib/hooks/useNotebookAIAgent.js +56 -0
  420. package/lib/hooks/useToast.d.ts +44 -0
  421. package/lib/hooks/useToast.js +128 -0
  422. package/lib/hooks/useTools.d.ts +107 -0
  423. package/lib/hooks/useTools.js +130 -0
  424. package/lib/hooks/useVercelChat.d.ts +45 -0
  425. package/lib/hooks/useVercelChat.js +62 -0
  426. package/lib/index.css +73 -0
  427. package/lib/index.d.ts +1 -0
  428. package/lib/index.js +5 -0
  429. package/lib/lexical/ChatInlinePlugin.d.ts +21 -0
  430. package/lib/lexical/ChatInlinePlugin.js +379 -0
  431. package/lib/lexical/index.d.ts +6 -0
  432. package/lib/lexical/index.js +10 -0
  433. package/lib/lib/utils.d.ts +2 -0
  434. package/lib/lib/utils.js +9 -0
  435. package/lib/main.d.ts +1 -0
  436. package/lib/main.js +12 -0
  437. package/lib/models/AIAgent.d.ts +17 -0
  438. package/lib/models/AIAgent.js +5 -0
  439. package/lib/models/index.d.ts +1 -0
  440. package/lib/models/index.js +5 -0
  441. package/lib/renderers/a2ui/components/A2UIRenderer.d.ts +7 -0
  442. package/lib/renderers/a2ui/components/A2UIRenderer.js +102 -0
  443. package/lib/renderers/a2ui/components/SurfaceRenderer.d.ts +7 -0
  444. package/lib/renderers/a2ui/components/SurfaceRenderer.js +101 -0
  445. package/lib/renderers/a2ui/components/content/AudioPlayer.d.ts +9 -0
  446. package/lib/renderers/a2ui/components/content/AudioPlayer.js +38 -0
  447. package/lib/renderers/a2ui/components/content/Divider.d.ts +9 -0
  448. package/lib/renderers/a2ui/components/content/Divider.js +35 -0
  449. package/lib/renderers/a2ui/components/content/Icon.d.ts +9 -0
  450. package/lib/renderers/a2ui/components/content/Icon.js +110 -0
  451. package/lib/renderers/a2ui/components/content/Image.d.ts +9 -0
  452. package/lib/renderers/a2ui/components/content/Image.js +61 -0
  453. package/lib/renderers/a2ui/components/content/Text.d.ts +9 -0
  454. package/lib/renderers/a2ui/components/content/Text.js +64 -0
  455. package/lib/renderers/a2ui/components/content/Video.d.ts +9 -0
  456. package/lib/renderers/a2ui/components/content/Video.js +37 -0
  457. package/lib/renderers/a2ui/components/content/index.d.ts +6 -0
  458. package/lib/renderers/a2ui/components/content/index.js +25 -0
  459. package/lib/renderers/a2ui/components/index.d.ts +5 -0
  460. package/lib/renderers/a2ui/components/index.js +24 -0
  461. package/lib/renderers/a2ui/components/interactive/Button.d.ts +11 -0
  462. package/lib/renderers/a2ui/components/interactive/Button.js +71 -0
  463. package/lib/renderers/a2ui/components/interactive/CheckBox.d.ts +9 -0
  464. package/lib/renderers/a2ui/components/interactive/CheckBox.js +48 -0
  465. package/lib/renderers/a2ui/components/interactive/DateTimeInput.d.ts +9 -0
  466. package/lib/renderers/a2ui/components/interactive/DateTimeInput.js +62 -0
  467. package/lib/renderers/a2ui/components/interactive/MultipleChoice.d.ts +9 -0
  468. package/lib/renderers/a2ui/components/interactive/MultipleChoice.js +73 -0
  469. package/lib/renderers/a2ui/components/interactive/Slider.d.ts +9 -0
  470. package/lib/renderers/a2ui/components/interactive/Slider.js +53 -0
  471. package/lib/renderers/a2ui/components/interactive/TextField.d.ts +9 -0
  472. package/lib/renderers/a2ui/components/interactive/TextField.js +72 -0
  473. package/lib/renderers/a2ui/components/interactive/index.d.ts +6 -0
  474. package/lib/renderers/a2ui/components/interactive/index.js +25 -0
  475. package/lib/renderers/a2ui/components/layout/Card.d.ts +11 -0
  476. package/lib/renderers/a2ui/components/layout/Card.js +30 -0
  477. package/lib/renderers/a2ui/components/layout/Column.d.ts +11 -0
  478. package/lib/renderers/a2ui/components/layout/Column.js +65 -0
  479. package/lib/renderers/a2ui/components/layout/List.d.ts +11 -0
  480. package/lib/renderers/a2ui/components/layout/List.js +55 -0
  481. package/lib/renderers/a2ui/components/layout/Modal.d.ts +11 -0
  482. package/lib/renderers/a2ui/components/layout/Modal.js +58 -0
  483. package/lib/renderers/a2ui/components/layout/Row.d.ts +11 -0
  484. package/lib/renderers/a2ui/components/layout/Row.js +65 -0
  485. package/lib/renderers/a2ui/components/layout/Tabs.d.ts +11 -0
  486. package/lib/renderers/a2ui/components/layout/Tabs.js +48 -0
  487. package/lib/renderers/a2ui/components/layout/index.d.ts +6 -0
  488. package/lib/renderers/a2ui/components/layout/index.js +25 -0
  489. package/lib/renderers/a2ui/context/A2UIContext.d.ts +17 -0
  490. package/lib/renderers/a2ui/context/A2UIContext.js +54 -0
  491. package/lib/renderers/a2ui/context/ThemeContext.d.ts +20 -0
  492. package/lib/renderers/a2ui/context/ThemeContext.js +333 -0
  493. package/lib/renderers/a2ui/hooks/useA2UI.d.ts +36 -0
  494. package/lib/renderers/a2ui/hooks/useA2UI.js +62 -0
  495. package/lib/renderers/a2ui/hooks/useDataBinding.d.ts +8 -0
  496. package/lib/renderers/a2ui/hooks/useDataBinding.js +83 -0
  497. package/lib/renderers/a2ui/index.d.ts +9 -0
  498. package/lib/renderers/a2ui/index.js +28 -0
  499. package/lib/renderers/a2ui/lib/utils.d.ts +11 -0
  500. package/lib/renderers/a2ui/lib/utils.js +38 -0
  501. package/lib/renderers/a2ui/types/index.d.ts +17 -0
  502. package/lib/renderers/a2ui/types/index.js +5 -0
  503. package/lib/renderers/index.d.ts +1 -0
  504. package/lib/renderers/index.js +5 -0
  505. package/lib/state/index.d.ts +1 -0
  506. package/lib/state/index.js +5 -0
  507. package/lib/state/substates/AIAgentState.d.ts +11 -0
  508. package/lib/state/substates/AIAgentState.js +42 -0
  509. package/lib/state/substates/index.d.ts +1 -0
  510. package/lib/state/substates/index.js +5 -0
  511. package/lib/stories/Button.d.ts +15 -0
  512. package/lib/stories/Button.js +13 -0
  513. package/lib/stories/Button.stories.d.ts +23 -0
  514. package/lib/stories/Button.stories.js +48 -0
  515. package/lib/stories/Cell.stories.d.ts +12 -0
  516. package/lib/stories/Cell.stories.js +123 -0
  517. package/lib/stories/Header.d.ts +12 -0
  518. package/lib/stories/Header.js +8 -0
  519. package/lib/stories/Header.stories.d.ts +18 -0
  520. package/lib/stories/Header.stories.js +30 -0
  521. package/lib/stories/Page.d.ts +3 -0
  522. package/lib/stories/Page.js +12 -0
  523. package/lib/stories/Page.stories.d.ts +12 -0
  524. package/lib/stories/Page.stories.js +28 -0
  525. package/lib/stories/assets/accessibility.png +0 -0
  526. package/lib/stories/assets/accessibility.svg +1 -0
  527. package/lib/stories/assets/addon-library.png +0 -0
  528. package/lib/stories/assets/assets.png +0 -0
  529. package/lib/stories/assets/context.png +0 -0
  530. package/lib/stories/assets/discord.svg +1 -0
  531. package/lib/stories/assets/docs.png +0 -0
  532. package/lib/stories/assets/figma-plugin.png +0 -0
  533. package/lib/stories/assets/github.svg +1 -0
  534. package/lib/stories/assets/share.png +0 -0
  535. package/lib/stories/assets/styling.png +0 -0
  536. package/lib/stories/assets/testing.png +0 -0
  537. package/lib/stories/assets/theming.png +0 -0
  538. package/lib/stories/assets/tutorials.svg +1 -0
  539. package/lib/stories/assets/youtube.svg +1 -0
  540. package/lib/stories/button.css +35 -0
  541. package/lib/stories/header.css +37 -0
  542. package/lib/stories/page.css +73 -0
  543. package/lib/test-setup.d.ts +1 -0
  544. package/lib/test-setup.js +80 -0
  545. package/lib/tools/adapters/agent-runtimes/AgentRuntimesToolAdapter.d.ts +40 -0
  546. package/lib/tools/adapters/agent-runtimes/AgentRuntimesToolAdapter.js +110 -0
  547. package/lib/tools/adapters/agent-runtimes/index.d.ts +9 -0
  548. package/lib/tools/adapters/agent-runtimes/index.js +13 -0
  549. package/lib/tools/adapters/agent-runtimes/lexicalHooks.d.ts +24 -0
  550. package/lib/tools/adapters/agent-runtimes/lexicalHooks.js +50 -0
  551. package/lib/tools/adapters/agent-runtimes/notebookHooks.d.ts +24 -0
  552. package/lib/tools/adapters/agent-runtimes/notebookHooks.js +51 -0
  553. package/lib/tools/adapters/copilotkit/CopilotKitToolAdapter.d.ts +73 -0
  554. package/lib/tools/adapters/copilotkit/CopilotKitToolAdapter.js +244 -0
  555. package/lib/tools/adapters/copilotkit/index.d.ts +10 -0
  556. package/lib/tools/adapters/copilotkit/index.js +14 -0
  557. package/lib/tools/adapters/copilotkit/lexicalHooks.d.ts +27 -0
  558. package/lib/tools/adapters/copilotkit/lexicalHooks.js +59 -0
  559. package/lib/tools/adapters/copilotkit/notebookHooks.d.ts +27 -0
  560. package/lib/tools/adapters/copilotkit/notebookHooks.js +58 -0
  561. package/lib/tools/adapters/index.d.ts +1 -0
  562. package/lib/tools/adapters/index.js +5 -0
  563. package/lib/tools/index.d.ts +6 -0
  564. package/lib/tools/index.js +18 -0
  565. package/lib/types.d.ts +5 -0
  566. package/lib/types.js +5 -0
  567. package/package.json +327 -0
  568. package/style/animation/Animation.module.css +174 -0
  569. package/style/base.css +204 -0
  570. package/style/index.css +6 -0
  571. package/style/showcase-vercel-ai.css +137 -0
@@ -0,0 +1,518 @@
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/message';
6
+ import { BaseProtocolAdapter } from './BaseProtocolAdapter';
7
+ /**
8
+ * AG-UI protocol adapter
9
+ * Uses HTTP POST with SSE streaming for responses
10
+ */
11
+ export class AGUIAdapter extends BaseProtocolAdapter {
12
+ type = 'ag-ui';
13
+ transport = 'sse';
14
+ aguiConfig;
15
+ abortController = null;
16
+ currentThreadId = null;
17
+ // Track in-progress tool calls to accumulate args and emit results
18
+ pendingToolCalls = new Map();
19
+ // Store conversation history for tool result continuation
20
+ messageHistory = [];
21
+ lastAssistantContent = '';
22
+ lastTools = [];
23
+ constructor(config) {
24
+ super(config);
25
+ this.aguiConfig = config;
26
+ }
27
+ /**
28
+ * Connect to AG-UI endpoint (SSE doesn't require persistent connection)
29
+ */
30
+ async connect() {
31
+ this.setConnectionState('connecting');
32
+ // AG-UI uses request-based SSE, no persistent connection needed
33
+ // Just mark as connected - the actual endpoint will be verified on first message
34
+ this.setConnectionState('connected');
35
+ }
36
+ /**
37
+ * Disconnect and terminate any ongoing agent execution
38
+ */
39
+ disconnect() {
40
+ // Abort any ongoing fetch request
41
+ if (this.abortController) {
42
+ this.abortController.abort();
43
+ this.abortController = null;
44
+ }
45
+ // Send terminate request to backend if we have a thread ID
46
+ if (this.currentThreadId) {
47
+ this.terminateAgent(this.currentThreadId).catch(err => {
48
+ console.warn('[AGUIAdapter] Failed to terminate agent:', err);
49
+ });
50
+ }
51
+ this.setConnectionState('disconnected');
52
+ }
53
+ /**
54
+ * Terminate a running agent thread on the backend
55
+ */
56
+ async terminateAgent(threadId) {
57
+ try {
58
+ // Derive the terminate endpoint from the base URL
59
+ // e.g., http://localhost:8765/api/v1/examples/agentic_chat/ -> http://localhost:8765/api/v1/ag-ui/terminate
60
+ const baseUrl = new URL(this.aguiConfig.baseUrl);
61
+ const terminateUrl = `${baseUrl.origin}/api/v1/ag-ui/terminate`;
62
+ const response = await fetch(terminateUrl, {
63
+ method: 'POST',
64
+ headers: {
65
+ 'Content-Type': 'application/json',
66
+ },
67
+ body: JSON.stringify({
68
+ thread_id: threadId || this.currentThreadId,
69
+ }),
70
+ });
71
+ if (!response.ok) {
72
+ console.warn(`[AGUIAdapter] Terminate request failed: ${response.status}`);
73
+ }
74
+ // else: Successfully terminated, no action needed
75
+ }
76
+ catch {
77
+ // Ignore errors - agent may have already completed
78
+ }
79
+ }
80
+ /**
81
+ * Send a message through AG-UI protocol
82
+ * @param message - The new message to send
83
+ * @param options - Options including full message history
84
+ */
85
+ async sendMessage(message, options) {
86
+ this.abortController = new AbortController();
87
+ const threadId = options?.threadId || this.currentThreadId || generateMessageId();
88
+ this.currentThreadId = threadId;
89
+ // Use full message history if provided, otherwise just the new message
90
+ // AG-UI expects the complete conversation history
91
+ const allMessages = options?.messages || [message];
92
+ // Store message history and tools for potential tool result continuation
93
+ this.messageHistory = [...allMessages];
94
+ this.lastTools = options?.tools || [];
95
+ this.lastAssistantContent = '';
96
+ // Convert ChatMessages to AG-UI message format
97
+ // AG-UI expects:
98
+ // - Assistant messages with tool_calls array for tool invocations
99
+ // - Tool messages with tool_call_id at top level (snake_case per OpenAI format)
100
+ const aguiMessages = allMessages.map(msg => {
101
+ const baseMessage = {
102
+ id: msg.id,
103
+ role: msg.role,
104
+ content: msg.content,
105
+ };
106
+ // For tool messages, add the tool_call_id (snake_case for AG-UI/OpenAI format)
107
+ if (msg.role === 'tool' && msg.metadata?.toolCallId) {
108
+ baseMessage.tool_call_id = msg.metadata.toolCallId;
109
+ }
110
+ // For assistant messages with tool calls, convert to AG-UI format
111
+ // Content should be null when there are tool calls (OpenAI format)
112
+ if (msg.role === 'assistant' &&
113
+ msg.toolCalls &&
114
+ msg.toolCalls.length > 0) {
115
+ baseMessage.content =
116
+ typeof msg.content === 'string' && msg.content.trim()
117
+ ? msg.content
118
+ : null;
119
+ baseMessage.tool_calls = msg.toolCalls.map(tc => ({
120
+ id: tc.toolCallId,
121
+ type: 'function',
122
+ function: {
123
+ name: tc.toolName,
124
+ arguments: JSON.stringify(tc.args || {}),
125
+ },
126
+ }));
127
+ }
128
+ return baseMessage;
129
+ });
130
+ const runAgentInput = {
131
+ threadId,
132
+ runId: generateMessageId(),
133
+ messages: aguiMessages,
134
+ state: null,
135
+ tools: options?.tools || [],
136
+ context: [],
137
+ forwardedProps: null,
138
+ };
139
+ try {
140
+ const response = await fetch(this.aguiConfig.baseUrl, {
141
+ method: 'POST',
142
+ headers: this.buildHeaders({
143
+ Accept: 'text/event-stream',
144
+ }),
145
+ body: JSON.stringify(runAgentInput),
146
+ signal: this.abortController.signal,
147
+ });
148
+ if (!response.ok) {
149
+ throw new Error(`AG-UI request failed: ${response.status} ${response.statusText}`);
150
+ }
151
+ // Parse SSE stream
152
+ await this.parseSSEStream(response);
153
+ }
154
+ catch (error) {
155
+ if (error.name === 'AbortError') {
156
+ return;
157
+ }
158
+ this.emit({
159
+ type: 'error',
160
+ error: error instanceof Error ? error : new Error(String(error)),
161
+ timestamp: new Date(),
162
+ });
163
+ throw error;
164
+ }
165
+ finally {
166
+ this.abortController = null;
167
+ }
168
+ }
169
+ /**
170
+ * Send tool result back through AG-UI and continue the conversation
171
+ *
172
+ * AG-UI requires tool results to be sent as a new request with the full
173
+ * message history including the tool result as a message with role: "tool"
174
+ */
175
+ async sendToolResult(toolCallId, result) {
176
+ // First emit local event for UI updates
177
+ this.emit({
178
+ type: 'tool-result',
179
+ toolResult: result,
180
+ timestamp: new Date(),
181
+ });
182
+ // Get the tool name and args from pending tool calls
183
+ const pendingToolCall = this.pendingToolCalls.get(toolCallId);
184
+ if (!pendingToolCall) {
185
+ console.warn('[AGUIAdapter] No pending tool call found for ID:', toolCallId);
186
+ console.log('[AGUIAdapter] Pending tool calls:', Array.from(this.pendingToolCalls.keys()));
187
+ }
188
+ const toolName = pendingToolCall?.toolName || 'unknown';
189
+ // Parse the args safely
190
+ let parsedArgs = {};
191
+ if (pendingToolCall?.argsJson) {
192
+ try {
193
+ parsedArgs = JSON.parse(pendingToolCall.argsJson);
194
+ }
195
+ catch (e) {
196
+ console.warn('[AGUIAdapter] Failed to parse tool args:', e);
197
+ }
198
+ }
199
+ // Build the assistant message that contained the tool call
200
+ // AG-UI expects assistant messages with tool_calls to potentially have empty content
201
+ const assistantMessageWithToolCall = {
202
+ id: generateMessageId(),
203
+ role: 'assistant',
204
+ content: this.lastAssistantContent || '',
205
+ createdAt: new Date(),
206
+ toolCalls: [
207
+ {
208
+ type: 'tool-call',
209
+ toolCallId,
210
+ toolName,
211
+ args: parsedArgs,
212
+ status: 'completed',
213
+ },
214
+ ],
215
+ };
216
+ // Build the tool result message
217
+ const toolResultMessage = {
218
+ id: generateMessageId(),
219
+ role: 'tool',
220
+ content: typeof result.result === 'string'
221
+ ? result.result
222
+ : JSON.stringify(result.result),
223
+ createdAt: new Date(),
224
+ metadata: {
225
+ toolCallId,
226
+ toolName,
227
+ isError: !result.success,
228
+ },
229
+ };
230
+ // Build full message history for continuation
231
+ const continuationMessages = [
232
+ ...this.messageHistory,
233
+ assistantMessageWithToolCall,
234
+ toolResultMessage,
235
+ ];
236
+ // Update stored message history
237
+ this.messageHistory = continuationMessages;
238
+ // Send continuation request to get agent's response to the tool result
239
+ // This will trigger a new SSE stream with the agent's response
240
+ await this.sendMessage(toolResultMessage, {
241
+ messages: continuationMessages,
242
+ tools: this.lastTools,
243
+ threadId: this.currentThreadId || undefined,
244
+ });
245
+ // Clear the pending tool call
246
+ this.pendingToolCalls.delete(toolCallId);
247
+ }
248
+ /**
249
+ * Check feature support
250
+ */
251
+ supportsFeature(feature) {
252
+ const supportedFeatures = [
253
+ 'streaming',
254
+ 'tools',
255
+ 'frontend-tools',
256
+ 'backend-tools',
257
+ 'activity-messages',
258
+ ];
259
+ return supportedFeatures.includes(feature);
260
+ }
261
+ /**
262
+ * Parse SSE stream from AG-UI response
263
+ */
264
+ async parseSSEStream(response) {
265
+ const reader = response.body?.getReader();
266
+ if (!reader) {
267
+ throw new Error('Response body is not readable');
268
+ }
269
+ const decoder = new TextDecoder();
270
+ let buffer = '';
271
+ let currentMessageId = null;
272
+ let currentContent = '';
273
+ try {
274
+ while (true) {
275
+ const { done, value } = await reader.read();
276
+ if (done)
277
+ break;
278
+ buffer += decoder.decode(value, { stream: true });
279
+ const lines = buffer.split('\n');
280
+ buffer = lines.pop() || '';
281
+ for (const line of lines) {
282
+ if (line.startsWith('event: ')) {
283
+ // Event type (currently unused)
284
+ // const eventType = line.slice(7);
285
+ // Handle event type if needed
286
+ }
287
+ else if (line.startsWith('data: ')) {
288
+ const data = line.slice(6);
289
+ try {
290
+ const event = JSON.parse(data);
291
+ this.handleAGUIEvent(event, {
292
+ getCurrentMessageId: () => currentMessageId,
293
+ setCurrentMessageId: id => {
294
+ currentMessageId = id;
295
+ },
296
+ getCurrentContent: () => currentContent,
297
+ appendContent: content => {
298
+ currentContent += content;
299
+ },
300
+ resetContent: () => {
301
+ currentContent = '';
302
+ },
303
+ });
304
+ }
305
+ catch (e) {
306
+ // Non-JSON data, might be raw content
307
+ console.warn('[AGUIAdapter] Failed to parse event data:', e);
308
+ }
309
+ }
310
+ }
311
+ }
312
+ }
313
+ finally {
314
+ reader.releaseLock();
315
+ }
316
+ }
317
+ /**
318
+ * Handle individual AG-UI events
319
+ *
320
+ * AG-UI event format:
321
+ * - type: Event type (e.g., "TEXT_MESSAGE_CONTENT")
322
+ * - timestamp: Event timestamp
323
+ * - messageId: Message ID (for message events)
324
+ * - delta: Content delta (for TEXT_MESSAGE_CONTENT)
325
+ * - Other fields at top level, NOT nested in 'data'
326
+ */
327
+ handleAGUIEvent(event, context) {
328
+ const eventType = event.type;
329
+ switch (eventType) {
330
+ case 'RUN_STARTED':
331
+ context.setCurrentMessageId(generateMessageId());
332
+ context.resetContent();
333
+ break;
334
+ case 'TEXT_MESSAGE_START': {
335
+ const messageId = event.messageId;
336
+ context.setCurrentMessageId(messageId || generateMessageId());
337
+ context.resetContent();
338
+ break;
339
+ }
340
+ case 'TEXT_MESSAGE_CONTENT': {
341
+ // AG-UI sends delta at top level, not nested in data
342
+ const delta = event.delta;
343
+ if (delta) {
344
+ context.appendContent(delta);
345
+ const message = createAssistantMessage(context.getCurrentContent());
346
+ message.id = context.getCurrentMessageId() || generateMessageId();
347
+ this.emit({
348
+ type: 'message',
349
+ message,
350
+ timestamp: new Date(),
351
+ });
352
+ }
353
+ break;
354
+ }
355
+ case 'TEXT_MESSAGE_END': {
356
+ const finalMessage = createAssistantMessage(context.getCurrentContent());
357
+ finalMessage.id = context.getCurrentMessageId() || generateMessageId();
358
+ // Store the assistant content for tool result continuation
359
+ this.lastAssistantContent = context.getCurrentContent();
360
+ this.emit({
361
+ type: 'message',
362
+ message: finalMessage,
363
+ timestamp: new Date(),
364
+ });
365
+ break;
366
+ }
367
+ case 'TOOL_CALL_START': {
368
+ // AG-UI protocol uses camelCase (toolCallId, toolCallName)
369
+ const toolCallId = event.toolCallId ||
370
+ event.tool_call_id ||
371
+ generateMessageId();
372
+ const toolName = event.toolCallName ||
373
+ event.tool_call_name ||
374
+ event.name ||
375
+ '';
376
+ // Initialize pending tool call
377
+ this.pendingToolCalls.set(toolCallId, {
378
+ toolCallId,
379
+ toolName,
380
+ argsJson: '',
381
+ });
382
+ this.emit({
383
+ type: 'tool-call',
384
+ toolCall: {
385
+ toolCallId,
386
+ toolName,
387
+ args: {},
388
+ },
389
+ timestamp: new Date(),
390
+ });
391
+ break;
392
+ }
393
+ case 'TOOL_CALL_ARGS': {
394
+ // Accumulate tool call arguments (streamed as JSON deltas)
395
+ // AG-UI uses camelCase (toolCallId)
396
+ const toolCallId = event.toolCallId || event.tool_call_id;
397
+ const delta = event.delta;
398
+ if (toolCallId && delta && this.pendingToolCalls.has(toolCallId)) {
399
+ const pending = this.pendingToolCalls.get(toolCallId);
400
+ if (pending) {
401
+ pending.argsJson += delta;
402
+ }
403
+ }
404
+ break;
405
+ }
406
+ case 'TOOL_CALL_END': {
407
+ // Tool call completed - emit tool-call event with accumulated args
408
+ // AG-UI uses camelCase (toolCallId)
409
+ const toolCallIdEnd = event.toolCallId || event.tool_call_id;
410
+ if (toolCallIdEnd && this.pendingToolCalls.has(toolCallIdEnd)) {
411
+ const pending = this.pendingToolCalls.get(toolCallIdEnd);
412
+ if (pending) {
413
+ // Parse accumulated args JSON
414
+ let parsedArgs = {};
415
+ if (pending.argsJson) {
416
+ try {
417
+ parsedArgs = JSON.parse(pending.argsJson);
418
+ }
419
+ catch {
420
+ // Keep empty if JSON parsing fails
421
+ }
422
+ }
423
+ // Emit tool-call event with the parsed arguments
424
+ // This updates the tool call with the complete args
425
+ this.emit({
426
+ type: 'tool-call',
427
+ toolCall: {
428
+ toolCallId: pending.toolCallId,
429
+ toolName: pending.toolName,
430
+ args: parsedArgs,
431
+ },
432
+ timestamp: new Date(),
433
+ });
434
+ }
435
+ }
436
+ break;
437
+ }
438
+ case 'TOOL_CALL_RESULT': {
439
+ // Tool execution result with actual output
440
+ // AG-UI uses camelCase (toolCallId)
441
+ const toolCallId = event.toolCallId || event.tool_call_id;
442
+ let content = event.content;
443
+ // Parse JSON content if it's a string
444
+ if (typeof content === 'string') {
445
+ try {
446
+ content = JSON.parse(content);
447
+ }
448
+ catch {
449
+ // Keep as string if not valid JSON
450
+ }
451
+ }
452
+ if (toolCallId) {
453
+ // Emit tool result event with the actual content
454
+ this.emit({
455
+ type: 'tool-result',
456
+ toolResult: {
457
+ toolCallId,
458
+ success: true,
459
+ result: content,
460
+ },
461
+ timestamp: new Date(),
462
+ });
463
+ // Clean up
464
+ this.pendingToolCalls.delete(toolCallId);
465
+ }
466
+ break;
467
+ }
468
+ case 'STATE_SNAPSHOT': {
469
+ const state = event.snapshot;
470
+ this.emit({
471
+ type: 'state-update',
472
+ data: state,
473
+ timestamp: new Date(),
474
+ });
475
+ break;
476
+ }
477
+ case 'STATE_DELTA': {
478
+ // State delta contains JSON Patch operations (RFC 6902)
479
+ // Emit as state-update with the delta for the ChatBase to handle
480
+ const delta = event.delta;
481
+ this.emit({
482
+ type: 'state-update',
483
+ data: { __delta: delta },
484
+ timestamp: new Date(),
485
+ });
486
+ break;
487
+ }
488
+ case 'CUSTOM': {
489
+ const name = event.name;
490
+ const value = event.value;
491
+ this.emit({
492
+ type: 'activity',
493
+ activity: {
494
+ type: name || 'custom',
495
+ data: value,
496
+ },
497
+ timestamp: new Date(),
498
+ });
499
+ break;
500
+ }
501
+ case 'RUN_FINISHED':
502
+ // Run completed successfully
503
+ break;
504
+ case 'RUN_ERROR': {
505
+ const errorMessage = event.message;
506
+ this.emit({
507
+ type: 'error',
508
+ error: new Error(errorMessage || 'Run failed'),
509
+ timestamp: new Date(),
510
+ });
511
+ break;
512
+ }
513
+ default:
514
+ // Unknown event type - ignore
515
+ break;
516
+ }
517
+ }
518
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Base protocol adapter class with common functionality.
3
+ *
4
+ * @module components/chat/protocols/BaseProtocolAdapter
5
+ */
6
+ import type { ProtocolAdapter, ProtocolAdapterConfig, TransportType, ProtocolTransport, ProtocolConnectionState, ProtocolEvent, ProtocolEventHandler, AgentCard } from '../types/protocol';
7
+ import type { ChatMessage } from '../types/message';
8
+ import type { ToolDefinition, ToolExecutionResult } from '../types/tool';
9
+ /**
10
+ * Abstract base class for protocol adapters
11
+ */
12
+ export declare abstract class BaseProtocolAdapter implements ProtocolAdapter {
13
+ abstract readonly type: TransportType;
14
+ abstract readonly transport: ProtocolTransport;
15
+ protected config: ProtocolAdapterConfig;
16
+ protected _connectionState: ProtocolConnectionState;
17
+ protected eventHandlers: Set<ProtocolEventHandler>;
18
+ protected reconnectAttempts: number;
19
+ constructor(config: ProtocolAdapterConfig);
20
+ get connectionState(): ProtocolConnectionState;
21
+ /**
22
+ * Connect to the protocol endpoint
23
+ */
24
+ abstract connect(): Promise<void>;
25
+ /**
26
+ * Disconnect from the endpoint
27
+ */
28
+ abstract disconnect(): void;
29
+ /**
30
+ * Send a message through the protocol
31
+ */
32
+ abstract sendMessage(message: ChatMessage, options?: {
33
+ tools?: ToolDefinition[];
34
+ threadId?: string;
35
+ metadata?: Record<string, unknown>;
36
+ /** Full conversation history to send with the message */
37
+ messages?: ChatMessage[];
38
+ }): Promise<void>;
39
+ /**
40
+ * Send tool execution result back
41
+ */
42
+ abstract sendToolResult(toolCallId: string, result: ToolExecutionResult): Promise<void>;
43
+ /**
44
+ * Subscribe to protocol events
45
+ */
46
+ subscribe(handler: ProtocolEventHandler): () => void;
47
+ /**
48
+ * Get agent card (optional, mainly for A2A)
49
+ */
50
+ getAgentCard(): Promise<AgentCard | null>;
51
+ /**
52
+ * Check if protocol supports a specific feature
53
+ */
54
+ supportsFeature(feature: string): boolean;
55
+ /**
56
+ * Emit an event to all subscribers
57
+ */
58
+ protected emit(event: ProtocolEvent): void;
59
+ /**
60
+ * Update connection state and emit event
61
+ */
62
+ protected setConnectionState(state: ProtocolConnectionState): void;
63
+ /**
64
+ * Handle reconnection logic
65
+ */
66
+ protected handleReconnect(): Promise<void>;
67
+ /**
68
+ * Build headers for HTTP requests
69
+ */
70
+ protected buildHeaders(additionalHeaders?: Record<string, string>): Record<string, string>;
71
+ /**
72
+ * Create abort signal with timeout
73
+ */
74
+ protected createTimeoutSignal(): AbortSignal;
75
+ }