@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,504 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * ACP (Agent Communication Protocol) adapter using WebSocket transport.
7
+ *
8
+ * Implements the Agent Client Protocol as specified at:
9
+ * https://agentclientprotocol.com
10
+ *
11
+ * Key Protocol Features:
12
+ * - JSON-RPC 2.0 message format
13
+ * - Protocol version: 1 (integer for MAJOR version)
14
+ * - Methods: initialize, session/new, session/prompt, session/cancel
15
+ * - Session updates via session/update notifications
16
+ * - Permission handling via session/request_permission
17
+ *
18
+ * @module components/chat/protocols/ACPAdapter
19
+ */
20
+ import { PROTOCOL_VERSION as ACP_PROTOCOL_VERSION, AGENT_METHODS, CLIENT_METHODS, } from '@agentclientprotocol/sdk';
21
+ import { generateMessageId, createAssistantMessage } from '../types/message';
22
+ import { BaseProtocolAdapter } from './BaseProtocolAdapter';
23
+ /**
24
+ * ACP protocol adapter
25
+ * Uses WebSocket with JSON-RPC 2.0 for bidirectional communication
26
+ */
27
+ export class ACPAdapter extends BaseProtocolAdapter {
28
+ type = 'acp';
29
+ transport = 'websocket';
30
+ acpConfig;
31
+ ws = null;
32
+ session = null;
33
+ agent = null;
34
+ streamingContent = '';
35
+ streamingMessageId = null;
36
+ pendingPermission = null;
37
+ pendingRequests = new Map();
38
+ constructor(config) {
39
+ super(config);
40
+ this.acpConfig = config;
41
+ }
42
+ /**
43
+ * Get current session
44
+ */
45
+ getSession() {
46
+ return this.session;
47
+ }
48
+ /**
49
+ * Get agent info
50
+ */
51
+ getAgent() {
52
+ return this.agent;
53
+ }
54
+ /**
55
+ * Get pending permission request
56
+ */
57
+ getPendingPermission() {
58
+ return this.pendingPermission;
59
+ }
60
+ /**
61
+ * Connect to ACP WebSocket endpoint
62
+ */
63
+ async connect() {
64
+ if (this.ws?.readyState === WebSocket.OPEN) {
65
+ return;
66
+ }
67
+ this.setConnectionState('connecting');
68
+ return new Promise((resolve, reject) => {
69
+ try {
70
+ const wsUrl = this.acpConfig.wsUrl || this.config.baseUrl;
71
+ const agentId = this.config.agentId;
72
+ const fullUrl = agentId ? `${wsUrl}/${agentId}` : wsUrl;
73
+ this.ws = new WebSocket(fullUrl);
74
+ this.ws.onopen = async () => {
75
+ this.reconnectAttempts = 0;
76
+ try {
77
+ // Initialize connection per ACP spec
78
+ const initResult = (await this.sendRequest('initialize', {
79
+ protocolVersion: ACP_PROTOCOL_VERSION,
80
+ clientCapabilities: this.acpConfig.clientCapabilities || {
81
+ fs: {
82
+ readTextFile: false,
83
+ writeTextFile: false,
84
+ },
85
+ terminal: false,
86
+ },
87
+ }));
88
+ if (initResult.agentCapabilities?.agent) {
89
+ this.agent = initResult.agentCapabilities.agent;
90
+ }
91
+ // Create new session per ACP spec
92
+ const sessionResult = (await this.sendRequest(AGENT_METHODS.session_new, {}));
93
+ if (sessionResult.sessionId) {
94
+ this.session = {
95
+ sessionId: sessionResult.sessionId,
96
+ agentId: this.config.agentId || '',
97
+ createdAt: new Date().toISOString(),
98
+ status: 'active',
99
+ };
100
+ }
101
+ else if (initResult.session_id) {
102
+ // Fallback for implementations that include session in initialize
103
+ this.session = {
104
+ sessionId: initResult.session_id,
105
+ agentId: this.config.agentId || '',
106
+ createdAt: new Date().toISOString(),
107
+ status: 'active',
108
+ };
109
+ }
110
+ this.setConnectionState('connected');
111
+ resolve();
112
+ }
113
+ catch (e) {
114
+ console.error('[ACPAdapter] Initialization error:', e);
115
+ // Still mark as connected if WebSocket is open
116
+ this.setConnectionState('connected');
117
+ resolve();
118
+ }
119
+ };
120
+ this.ws.onmessage = (event) => {
121
+ this.handleMessage(event);
122
+ };
123
+ this.ws.onerror = (event) => {
124
+ console.error('[ACPAdapter] WebSocket error:', event);
125
+ this.emit({
126
+ type: 'error',
127
+ error: new Error('WebSocket error'),
128
+ timestamp: new Date(),
129
+ });
130
+ };
131
+ this.ws.onclose = () => {
132
+ this.ws = null;
133
+ this.setConnectionState('disconnected');
134
+ this.handleReconnect();
135
+ };
136
+ }
137
+ catch (error) {
138
+ this.setConnectionState('error');
139
+ this.emit({
140
+ type: 'error',
141
+ error: error instanceof Error ? error : new Error(String(error)),
142
+ timestamp: new Date(),
143
+ });
144
+ reject(error);
145
+ }
146
+ });
147
+ }
148
+ /**
149
+ * Disconnect from WebSocket and terminate any running session
150
+ */
151
+ disconnect() {
152
+ // Send session/cancel if we have an active session
153
+ if (this.session && this.ws && this.ws.readyState === WebSocket.OPEN) {
154
+ this.terminateSession(this.session.sessionId).catch(err => {
155
+ console.warn('[ACPAdapter] Failed to terminate session:', err);
156
+ });
157
+ }
158
+ // Clear pending requests
159
+ for (const [, { reject }] of this.pendingRequests) {
160
+ reject(new Error('Connection closed'));
161
+ }
162
+ this.pendingRequests.clear();
163
+ if (this.ws) {
164
+ this.ws.close();
165
+ this.ws = null;
166
+ }
167
+ this.session = null;
168
+ this.agent = null;
169
+ this.pendingPermission = null;
170
+ this.setConnectionState('disconnected');
171
+ }
172
+ /**
173
+ * Terminate a running session on the backend via session/cancel
174
+ */
175
+ async terminateSession(sessionId) {
176
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
177
+ console.warn('[ACPAdapter] Cannot terminate: WebSocket not connected');
178
+ return;
179
+ }
180
+ try {
181
+ const targetSessionId = sessionId || this.session?.sessionId;
182
+ if (!targetSessionId) {
183
+ console.warn('[ACPAdapter] Cannot terminate: No session ID');
184
+ return;
185
+ }
186
+ // Send session/cancel JSON-RPC request
187
+ const requestId = `cancel-${Date.now()}`;
188
+ const cancelRequest = {
189
+ jsonrpc: '2.0',
190
+ method: 'session/cancel',
191
+ params: {
192
+ sessionId: targetSessionId,
193
+ },
194
+ id: requestId,
195
+ };
196
+ this.ws.send(JSON.stringify(cancelRequest));
197
+ console.debug('[ACPAdapter] Sent session/cancel for:', targetSessionId);
198
+ }
199
+ catch (err) {
200
+ console.debug('[ACPAdapter] Terminate request error:', err);
201
+ }
202
+ }
203
+ /**
204
+ * Send a message through ACP protocol
205
+ */
206
+ async sendMessage(message, _options) {
207
+ if (!this.session) {
208
+ throw new Error('No active session');
209
+ }
210
+ // Reset streaming state and generate a stable ID for this response
211
+ this.streamingContent = '';
212
+ this.streamingMessageId = generateMessageId();
213
+ // Note: User message is already added to displayItems by ChatBase before calling sendMessage
214
+ // Do NOT emit user message event here to avoid duplication
215
+ try {
216
+ // Use ACP spec method: session/prompt
217
+ // Content is an array of ContentBlocks per ACP spec
218
+ const content = typeof message.content === 'string'
219
+ ? message.content
220
+ : message.content
221
+ .filter(c => c.type === 'text')
222
+ .map(c => c.text || '')
223
+ .join('');
224
+ await this.sendRequest(AGENT_METHODS.session_prompt, {
225
+ sessionId: this.session.sessionId,
226
+ content: [{ type: 'text', text: content }],
227
+ });
228
+ }
229
+ catch (error) {
230
+ this.emit({
231
+ type: 'error',
232
+ error: error instanceof Error ? error : new Error(String(error)),
233
+ timestamp: new Date(),
234
+ });
235
+ throw error;
236
+ }
237
+ }
238
+ /**
239
+ * Send tool result back through ACP
240
+ */
241
+ async sendToolResult(toolCallId, result) {
242
+ if (!this.session) {
243
+ throw new Error('No active session');
244
+ }
245
+ // Emit tool result event
246
+ this.emit({
247
+ type: 'tool-result',
248
+ toolResult: result,
249
+ timestamp: new Date(),
250
+ });
251
+ // ACP handles tool results through the permission response flow
252
+ // If there's a pending permission, respond to it
253
+ if (this.pendingPermission) {
254
+ this.grantPermission();
255
+ }
256
+ }
257
+ /**
258
+ * Grant permission (respond to session/request_permission)
259
+ */
260
+ grantPermission(optionId) {
261
+ if (this.pendingPermission) {
262
+ const selectedOptionId = optionId || this.pendingPermission.options[0]?.optionId || 'allow';
263
+ this.sendResponse(this.pendingPermission.requestId, {
264
+ outcome: {
265
+ outcome: 'selected',
266
+ optionId: selectedOptionId,
267
+ },
268
+ });
269
+ this.pendingPermission = null;
270
+ }
271
+ }
272
+ /**
273
+ * Deny permission (respond with cancelled)
274
+ */
275
+ denyPermission() {
276
+ if (this.pendingPermission) {
277
+ this.sendResponse(this.pendingPermission.requestId, {
278
+ outcome: {
279
+ outcome: 'cancelled',
280
+ },
281
+ });
282
+ this.pendingPermission = null;
283
+ }
284
+ }
285
+ /**
286
+ * Check feature support
287
+ */
288
+ supportsFeature(feature) {
289
+ const supportedFeatures = [
290
+ 'streaming',
291
+ 'tools',
292
+ 'permissions',
293
+ 'session-management',
294
+ 'bidirectional',
295
+ ];
296
+ return supportedFeatures.includes(feature);
297
+ }
298
+ /**
299
+ * Generate unique message ID
300
+ */
301
+ generateId() {
302
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
303
+ }
304
+ /**
305
+ * Send ACP JSON-RPC request
306
+ */
307
+ async sendRequest(method, params = {}) {
308
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
309
+ throw new Error('Not connected to agent');
310
+ }
311
+ const id = this.generateId();
312
+ const message = {
313
+ jsonrpc: '2.0',
314
+ id,
315
+ method,
316
+ params,
317
+ };
318
+ return new Promise((resolve, reject) => {
319
+ this.pendingRequests.set(id, { resolve, reject });
320
+ if (this.ws) {
321
+ this.ws.send(JSON.stringify(message));
322
+ }
323
+ // Timeout after configured timeout or 30 seconds
324
+ setTimeout(() => {
325
+ if (this.pendingRequests.has(id)) {
326
+ this.pendingRequests.delete(id);
327
+ reject(new Error('Request timeout'));
328
+ }
329
+ }, this.config.timeout || 30000);
330
+ });
331
+ }
332
+ /**
333
+ * Send ACP JSON-RPC response
334
+ */
335
+ sendResponse(id, result) {
336
+ if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
337
+ console.error('[ACPAdapter] Cannot send response: not connected');
338
+ return;
339
+ }
340
+ const message = {
341
+ jsonrpc: '2.0',
342
+ id,
343
+ result,
344
+ };
345
+ this.ws.send(JSON.stringify(message));
346
+ }
347
+ /**
348
+ * Handle incoming WebSocket message
349
+ */
350
+ handleMessage(event) {
351
+ try {
352
+ const data = JSON.parse(event.data);
353
+ // Handle response to pending request
354
+ if (data.id && this.pendingRequests.has(data.id)) {
355
+ const pending = this.pendingRequests.get(data.id);
356
+ if (!pending)
357
+ return;
358
+ const { resolve, reject } = pending;
359
+ this.pendingRequests.delete(data.id);
360
+ if (data.error) {
361
+ reject(new Error(data.error.message));
362
+ }
363
+ else {
364
+ resolve(data.result);
365
+ }
366
+ // Handle stopReason for prompt completion
367
+ if (data.result &&
368
+ typeof data.result === 'object' &&
369
+ 'stopReason' in data.result) {
370
+ this.handleCompletion(data.result);
371
+ }
372
+ return;
373
+ }
374
+ // Handle ACP session/update notifications
375
+ if (data.method === 'session/update') {
376
+ this.handleSessionUpdate(data.params || {});
377
+ return;
378
+ }
379
+ // Handle permission request from agent
380
+ if (data.method === CLIENT_METHODS.session_request_permission &&
381
+ data.id) {
382
+ this.handlePermissionRequest(data.id, data.params);
383
+ return;
384
+ }
385
+ // Handle response with stopReason
386
+ if (data.result &&
387
+ typeof data.result === 'object' &&
388
+ 'stopReason' in data.result) {
389
+ this.handleCompletion(data.result);
390
+ }
391
+ }
392
+ catch (e) {
393
+ console.error('[ACPAdapter] Failed to parse message:', e);
394
+ }
395
+ }
396
+ /**
397
+ * Handle session update notifications
398
+ */
399
+ handleSessionUpdate(params) {
400
+ const updateType = params.sessionUpdate;
401
+ // Handle streaming text chunks
402
+ if (updateType === 'agent_message_chunk' && params.chunk) {
403
+ const chunk = params.chunk;
404
+ // Filter out debug StreamEvent strings
405
+ if (!chunk.startsWith('StreamEvent(')) {
406
+ this.streamingContent += chunk;
407
+ // Use stable message ID for streaming updates
408
+ const streamingMessage = createAssistantMessage(this.streamingContent);
409
+ if (this.streamingMessageId) {
410
+ streamingMessage.id = this.streamingMessageId;
411
+ }
412
+ this.emit({
413
+ type: 'message',
414
+ message: streamingMessage,
415
+ timestamp: new Date(),
416
+ });
417
+ }
418
+ }
419
+ // Handle tool calls
420
+ if (updateType === 'tool_call') {
421
+ this.emit({
422
+ type: 'tool-call',
423
+ toolCall: {
424
+ toolCallId: params.toolCallId || generateMessageId(),
425
+ toolName: params.title || '',
426
+ args: params.rawInput || {},
427
+ },
428
+ timestamp: new Date(),
429
+ });
430
+ }
431
+ // Handle tool results
432
+ if (updateType === 'tool_call_update') {
433
+ this.emit({
434
+ type: 'tool-result',
435
+ toolResult: {
436
+ success: true,
437
+ result: params.rawOutput,
438
+ },
439
+ timestamp: new Date(),
440
+ });
441
+ }
442
+ // Handle thought chunks (could be displayed differently)
443
+ if (updateType === 'agent_thought_chunk' && params.chunk) {
444
+ this.emit({
445
+ type: 'activity',
446
+ activity: {
447
+ type: 'thought',
448
+ data: params.chunk,
449
+ },
450
+ timestamp: new Date(),
451
+ });
452
+ }
453
+ }
454
+ /**
455
+ * Handle permission request from agent
456
+ */
457
+ handlePermissionRequest(requestId, params) {
458
+ this.pendingPermission = {
459
+ requestId,
460
+ sessionId: params.sessionId,
461
+ toolCall: params.toolCall,
462
+ options: params.options,
463
+ };
464
+ // Emit as tool-call event for HITL handling
465
+ this.emit({
466
+ type: 'tool-call',
467
+ toolCall: {
468
+ toolCallId: params.toolCall.toolCallId,
469
+ toolName: params.toolCall.title || '',
470
+ args: params.toolCall.rawInput || {},
471
+ },
472
+ timestamp: new Date(),
473
+ });
474
+ // Also call the callback if provided
475
+ this.acpConfig.onPermissionRequest?.(this.pendingPermission);
476
+ }
477
+ /**
478
+ * Handle completion (stopReason received)
479
+ */
480
+ handleCompletion(result) {
481
+ // Finalize any streamed content
482
+ if (this.streamingContent) {
483
+ const finalMessage = createAssistantMessage(this.streamingContent);
484
+ // Use the stable streaming message ID for the final message
485
+ finalMessage.id = this.streamingMessageId || generateMessageId();
486
+ this.emit({
487
+ type: 'message',
488
+ message: finalMessage,
489
+ timestamp: new Date(),
490
+ });
491
+ this.streamingContent = '';
492
+ this.streamingMessageId = null;
493
+ }
494
+ // Emit activity for completion
495
+ this.emit({
496
+ type: 'activity',
497
+ activity: {
498
+ type: 'completed',
499
+ data: { stopReason: result.stopReason },
500
+ },
501
+ timestamp: new Date(),
502
+ });
503
+ }
504
+ }
@@ -0,0 +1,82 @@
1
+ /**
2
+ * AG-UI protocol adapter using SSE transport.
3
+ *
4
+ * @module components/chat/protocols/AGUIAdapter
5
+ */
6
+ import type { ProtocolAdapterConfig } from '../types/protocol';
7
+ import type { ChatMessage } from '../types/message';
8
+ import type { ToolDefinition, ToolExecutionResult } from '../types/tool';
9
+ import { BaseProtocolAdapter } from './BaseProtocolAdapter';
10
+ /**
11
+ * AG-UI specific configuration
12
+ */
13
+ export interface AGUIAdapterConfig extends ProtocolAdapterConfig {
14
+ /** Runtime URL (e.g., /api/copilotkit) */
15
+ runtimeUrl?: string;
16
+ }
17
+ /**
18
+ * AG-UI protocol adapter
19
+ * Uses HTTP POST with SSE streaming for responses
20
+ */
21
+ export declare class AGUIAdapter extends BaseProtocolAdapter {
22
+ readonly type: "ag-ui";
23
+ readonly transport: "sse";
24
+ private aguiConfig;
25
+ private abortController;
26
+ private currentThreadId;
27
+ private pendingToolCalls;
28
+ private messageHistory;
29
+ private lastAssistantContent;
30
+ private lastTools;
31
+ constructor(config: AGUIAdapterConfig);
32
+ /**
33
+ * Connect to AG-UI endpoint (SSE doesn't require persistent connection)
34
+ */
35
+ connect(): Promise<void>;
36
+ /**
37
+ * Disconnect and terminate any ongoing agent execution
38
+ */
39
+ disconnect(): void;
40
+ /**
41
+ * Terminate a running agent thread on the backend
42
+ */
43
+ terminateAgent(threadId?: string): Promise<void>;
44
+ /**
45
+ * Send a message through AG-UI protocol
46
+ * @param message - The new message to send
47
+ * @param options - Options including full message history
48
+ */
49
+ sendMessage(message: ChatMessage, options?: {
50
+ tools?: ToolDefinition[];
51
+ threadId?: string;
52
+ metadata?: Record<string, unknown>;
53
+ /** Full conversation history to send with the message */
54
+ messages?: ChatMessage[];
55
+ }): Promise<void>;
56
+ /**
57
+ * Send tool result back through AG-UI and continue the conversation
58
+ *
59
+ * AG-UI requires tool results to be sent as a new request with the full
60
+ * message history including the tool result as a message with role: "tool"
61
+ */
62
+ sendToolResult(toolCallId: string, result: ToolExecutionResult): Promise<void>;
63
+ /**
64
+ * Check feature support
65
+ */
66
+ supportsFeature(feature: string): boolean;
67
+ /**
68
+ * Parse SSE stream from AG-UI response
69
+ */
70
+ private parseSSEStream;
71
+ /**
72
+ * Handle individual AG-UI events
73
+ *
74
+ * AG-UI event format:
75
+ * - type: Event type (e.g., "TEXT_MESSAGE_CONTENT")
76
+ * - timestamp: Event timestamp
77
+ * - messageId: Message ID (for message events)
78
+ * - delta: Content delta (for TEXT_MESSAGE_CONTENT)
79
+ * - Other fields at top level, NOT nested in 'data'
80
+ */
81
+ private handleAGUIEvent;
82
+ }