@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,62 @@
1
+ import type { ChatMessage } from '../components/chat/types/message';
2
+ import type { InferenceRequestOptions } from '../components/chat/types/inference';
3
+ /**
4
+ * Return type for useChat hook
5
+ */
6
+ export interface UseChatReturn {
7
+ /** All messages in the conversation */
8
+ messages: ChatMessage[];
9
+ /** Whether a request is in progress */
10
+ isLoading: boolean;
11
+ /** Whether currently streaming a response */
12
+ isStreaming: boolean;
13
+ /** Current error, if any */
14
+ error: Error | null;
15
+ /** Send a user message */
16
+ sendMessage: (content: string, options?: InferenceRequestOptions) => Promise<void>;
17
+ /** Append a message directly (useful for tool results) */
18
+ appendMessage: (message: ChatMessage) => void;
19
+ /** Update an existing message */
20
+ updateMessage: (messageId: string, updates: Partial<ChatMessage>) => void;
21
+ /** Delete a message */
22
+ deleteMessage: (messageId: string) => void;
23
+ /** Clear all messages */
24
+ clearMessages: () => void;
25
+ /** Stop current generation */
26
+ stopGeneration: () => void;
27
+ /** Reload/regenerate from a specific message */
28
+ reloadMessages: (fromMessageId: string) => Promise<void>;
29
+ /** Check if chat is available (provider configured) */
30
+ isAvailable: boolean;
31
+ /** Current suggestions */
32
+ suggestions: string[];
33
+ /** Set suggestions */
34
+ setSuggestions: (suggestions: string[]) => void;
35
+ }
36
+ /**
37
+ * Main hook for chat functionality
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * function ChatUI() {
42
+ * const {
43
+ * messages,
44
+ * sendMessage,
45
+ * isLoading,
46
+ * isStreaming
47
+ * } = useChat();
48
+ *
49
+ * const handleSubmit = async (text: string) => {
50
+ * await sendMessage(text);
51
+ * };
52
+ *
53
+ * return (
54
+ * <div>
55
+ * {messages.map(msg => <Message key={msg.id} message={msg} />)}
56
+ * <Input onSubmit={handleSubmit} disabled={isLoading} />
57
+ * </div>
58
+ * );
59
+ * }
60
+ * ```
61
+ */
62
+ export declare function useChat(): UseChatReturn;
@@ -0,0 +1,363 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * Main chat hook for chat component.
7
+ * Provides chat state, message sending, and streaming functionality.
8
+ *
9
+ * @module components/chat/hooks/useChat
10
+ */
11
+ import { useCallback, useMemo } from 'react';
12
+ import { useChatStore } from '../components/chat/store';
13
+ import { createUserMessage, createAssistantMessage, generateMessageId, } from '../components/chat/types/message';
14
+ /**
15
+ * Main hook for chat functionality
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * function ChatUI() {
20
+ * const {
21
+ * messages,
22
+ * sendMessage,
23
+ * isLoading,
24
+ * isStreaming
25
+ * } = useChat();
26
+ *
27
+ * const handleSubmit = async (text: string) => {
28
+ * await sendMessage(text);
29
+ * };
30
+ *
31
+ * return (
32
+ * <div>
33
+ * {messages.map(msg => <Message key={msg.id} message={msg} />)}
34
+ * <Input onSubmit={handleSubmit} disabled={isLoading} />
35
+ * </div>
36
+ * );
37
+ * }
38
+ * ```
39
+ */
40
+ export function useChat() {
41
+ // Get instances from store (set via useChatStore.getState().setInferenceProvider())
42
+ const inferenceProvider = useChatStore(state => state.inferenceProvider);
43
+ const protocolAdapter = useChatStore(state => state.protocolAdapter);
44
+ const toolExecutor = useChatStore(state => state.toolExecutor);
45
+ // Get state from store
46
+ const messages = useChatStore(state => state.messages);
47
+ const isLoading = useChatStore(state => state.isLoading);
48
+ const isStreaming = useChatStore(state => state.isStreaming);
49
+ const error = useChatStore(state => state.error);
50
+ const suggestions = useChatStore(state => state.suggestions);
51
+ // Get actions from store
52
+ const addMessage = useChatStore(state => state.addMessage);
53
+ const updateMessage = useChatStore(state => state.updateMessage);
54
+ const deleteMessage = useChatStore(state => state.deleteMessage);
55
+ const clearMessages = useChatStore(state => state.clearMessages);
56
+ const setLoading = useChatStore(state => state.setLoading);
57
+ const setError = useChatStore(state => state.setError);
58
+ const startStreaming = useChatStore(state => state.startStreaming);
59
+ const appendToStream = useChatStore(state => state.appendToStream);
60
+ const stopStreaming = useChatStore(state => state.stopStreaming);
61
+ const setSuggestions = useChatStore(state => state.setSuggestions);
62
+ const getTools = useChatStore(state => state.getTools);
63
+ /**
64
+ * Send a user message and get AI response
65
+ */
66
+ const sendMessage = useCallback(async (content, options) => {
67
+ // Check if we have a way to send messages
68
+ if (!inferenceProvider && !protocolAdapter) {
69
+ setError(new Error('No inference provider or protocol adapter configured.'));
70
+ return;
71
+ }
72
+ // Create and add user message
73
+ const userMessage = createUserMessage(content);
74
+ addMessage(userMessage);
75
+ // Clear error and set loading
76
+ setError(null);
77
+ setLoading(true);
78
+ try {
79
+ // Get registered tools
80
+ const tools = getTools();
81
+ // Merge options
82
+ const requestOptions = {
83
+ ...options,
84
+ tools: tools.length > 0 ? tools : undefined,
85
+ };
86
+ // Get all messages for context
87
+ const allMessages = [...messages, userMessage];
88
+ // Create placeholder for assistant message
89
+ const assistantMessageId = generateMessageId();
90
+ const assistantMessage = createAssistantMessage('');
91
+ assistantMessage.id = assistantMessageId;
92
+ addMessage(assistantMessage);
93
+ // Stream the response
94
+ startStreaming(assistantMessageId);
95
+ // Use protocol adapter if available (for ag-ui, a2a, acp)
96
+ // Otherwise fall back to inference provider (for vercel-ai, OpenAI-compatible)
97
+ if (protocolAdapter) {
98
+ // Track pending tool calls for this run
99
+ const pendingToolCalls = new Map();
100
+ let currentAssistantContent = '';
101
+ // Subscribe to adapter events
102
+ const unsubscribe = protocolAdapter.subscribe(event => {
103
+ switch (event.type) {
104
+ case 'message':
105
+ // AG-UI sends incremental messages with accumulating content
106
+ if (event.message) {
107
+ currentAssistantContent =
108
+ typeof event.message.content === 'string'
109
+ ? event.message.content
110
+ : '';
111
+ // Update the assistant message with the current content
112
+ updateMessage(assistantMessageId, {
113
+ content: currentAssistantContent,
114
+ toolCalls: event.message.toolCalls,
115
+ });
116
+ }
117
+ break;
118
+ case 'tool-call':
119
+ // Track tool call for execution after stream completes
120
+ if (event.toolCall) {
121
+ console.log('[useChat] Tool call received:', event.toolCall.toolCallId, event.toolCall.toolName);
122
+ pendingToolCalls.set(event.toolCall.toolCallId, {
123
+ toolName: event.toolCall.toolName,
124
+ args: event.toolCall.args,
125
+ });
126
+ }
127
+ break;
128
+ case 'error':
129
+ if (event.error) {
130
+ setError(event.error);
131
+ }
132
+ break;
133
+ }
134
+ });
135
+ try {
136
+ // Send the initial message
137
+ await protocolAdapter.sendMessage(userMessage, {
138
+ tools: requestOptions.tools,
139
+ messages: allMessages,
140
+ });
141
+ // After stream completes, execute any pending tool calls
142
+ if (pendingToolCalls.size > 0 && toolExecutor) {
143
+ console.log('[useChat] Executing', pendingToolCalls.size, 'tool calls');
144
+ // Execute tool calls and collect results
145
+ const toolResults = [];
146
+ for (const [toolCallId, { toolName, args }] of pendingToolCalls) {
147
+ console.log('[useChat] Executing tool:', toolName, 'with args:', args);
148
+ const result = await toolExecutor.execute({
149
+ toolCallId,
150
+ toolName,
151
+ args,
152
+ });
153
+ console.log('[useChat] Tool result:', result);
154
+ toolResults.push({
155
+ toolCallId,
156
+ toolName,
157
+ result: result.result,
158
+ isError: !result.success,
159
+ });
160
+ }
161
+ // Build messages array with tool results for continuation
162
+ // Include the assistant message with tool calls
163
+ const assistantWithToolCalls = {
164
+ id: assistantMessageId,
165
+ role: 'assistant',
166
+ content: currentAssistantContent,
167
+ createdAt: new Date(),
168
+ toolCalls: Array.from(pendingToolCalls.entries()).map(([toolCallId, { toolName, args }]) => ({
169
+ type: 'tool-call',
170
+ toolCallId,
171
+ toolName,
172
+ args,
173
+ status: 'completed',
174
+ })),
175
+ };
176
+ // Create tool result messages
177
+ const toolResultMessages = toolResults.map(tr => ({
178
+ id: generateMessageId(),
179
+ role: 'tool',
180
+ content: JSON.stringify(tr.result),
181
+ createdAt: new Date(),
182
+ metadata: {
183
+ toolCallId: tr.toolCallId,
184
+ toolName: tr.toolName,
185
+ isError: tr.isError,
186
+ },
187
+ }));
188
+ // Update stored messages
189
+ updateMessage(assistantMessageId, assistantWithToolCalls);
190
+ toolResultMessages.forEach(msg => addMessage(msg));
191
+ // Create new assistant message for the continuation
192
+ const continuationAssistantId = generateMessageId();
193
+ const continuationMessage = createAssistantMessage('');
194
+ continuationMessage.id = continuationAssistantId;
195
+ addMessage(continuationMessage);
196
+ startStreaming(continuationAssistantId);
197
+ // Subscribe to continuation events
198
+ const unsubscribeContinuation = protocolAdapter.subscribe(event => {
199
+ if (event.type === 'message' && event.message) {
200
+ const content = typeof event.message.content === 'string'
201
+ ? event.message.content
202
+ : '';
203
+ updateMessage(continuationAssistantId, {
204
+ content,
205
+ toolCalls: event.message.toolCalls,
206
+ });
207
+ }
208
+ else if (event.type === 'error' && event.error) {
209
+ setError(event.error);
210
+ }
211
+ });
212
+ try {
213
+ // Build the full message history for continuation
214
+ const continuationMessages = [
215
+ ...allMessages,
216
+ assistantWithToolCalls,
217
+ ...toolResultMessages,
218
+ ];
219
+ // Send continuation request with tool results
220
+ // AG-UI expects tool results as messages with role: "tool"
221
+ await protocolAdapter.sendMessage(toolResultMessages[toolResultMessages.length - 1], {
222
+ tools: requestOptions.tools,
223
+ messages: continuationMessages,
224
+ });
225
+ }
226
+ finally {
227
+ unsubscribeContinuation();
228
+ }
229
+ }
230
+ }
231
+ finally {
232
+ unsubscribe();
233
+ }
234
+ }
235
+ else if (inferenceProvider) {
236
+ const response = await inferenceProvider.streamMessage(allMessages, requestOptions, event => {
237
+ switch (event.type) {
238
+ case 'content-delta':
239
+ if (event.delta?.delta.content) {
240
+ appendToStream(assistantMessageId, event.delta.delta.content);
241
+ }
242
+ break;
243
+ case 'tool-call-start':
244
+ // Handle tool call UI update
245
+ if (event.toolCall) {
246
+ // Tool calls are handled by the tool executor
247
+ console.log('[useChat] Tool call started:', event.toolCall);
248
+ }
249
+ break;
250
+ case 'error':
251
+ if (event.error) {
252
+ setError(event.error);
253
+ }
254
+ break;
255
+ }
256
+ });
257
+ // Update final message with complete content and tool calls
258
+ updateMessage(assistantMessageId, {
259
+ content: response.message.content,
260
+ toolCalls: response.message.toolCalls,
261
+ });
262
+ // Handle tool calls if present
263
+ if (response.message.toolCalls &&
264
+ response.message.toolCalls.length > 0) {
265
+ // Tool calls are executed by the tool executor if configured
266
+ if (toolExecutor) {
267
+ for (const toolCall of response.message.toolCalls) {
268
+ await toolExecutor.execute({
269
+ toolCallId: toolCall.toolCallId,
270
+ toolName: toolCall.toolName,
271
+ args: toolCall.args,
272
+ });
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+ catch (err) {
279
+ setError(err instanceof Error ? err : new Error(String(err)));
280
+ }
281
+ finally {
282
+ setLoading(false);
283
+ stopStreaming();
284
+ }
285
+ }, [
286
+ inferenceProvider,
287
+ protocolAdapter,
288
+ toolExecutor,
289
+ messages,
290
+ addMessage,
291
+ updateMessage,
292
+ setLoading,
293
+ setError,
294
+ startStreaming,
295
+ appendToStream,
296
+ stopStreaming,
297
+ getTools,
298
+ ]);
299
+ /**
300
+ * Append a message directly
301
+ */
302
+ const appendMessage = useCallback((message) => {
303
+ addMessage(message);
304
+ }, [addMessage]);
305
+ /**
306
+ * Stop current generation
307
+ */
308
+ const stopGeneration = useCallback(() => {
309
+ inferenceProvider?.cancelRequest();
310
+ protocolAdapter?.disconnect?.();
311
+ stopStreaming();
312
+ setLoading(false);
313
+ }, [inferenceProvider, protocolAdapter, stopStreaming, setLoading]);
314
+ /**
315
+ * Reload/regenerate from a specific message
316
+ */
317
+ const reloadMessages = useCallback(async (fromMessageId) => {
318
+ // Find the message index
319
+ const messageIndex = messages.findIndex(m => m.id === fromMessageId);
320
+ if (messageIndex === -1)
321
+ return;
322
+ // Find the last user message before this point
323
+ let lastUserMessageIndex = messageIndex;
324
+ for (let i = messageIndex; i >= 0; i--) {
325
+ if (messages[i].role === 'user') {
326
+ lastUserMessageIndex = i;
327
+ break;
328
+ }
329
+ }
330
+ // Get the user message content
331
+ const userMessage = messages[lastUserMessageIndex];
332
+ const userContent = typeof userMessage.content === 'string'
333
+ ? userMessage.content
334
+ : 'Regenerate response';
335
+ // Remove messages from the found index onwards
336
+ const previousMessages = messages.slice(0, lastUserMessageIndex);
337
+ // Clear and restore messages
338
+ clearMessages();
339
+ previousMessages.forEach(msg => addMessage(msg));
340
+ // Resend the user message
341
+ await sendMessage(userContent);
342
+ }, [messages, clearMessages, addMessage, sendMessage]);
343
+ /**
344
+ * Check if chat is available
345
+ */
346
+ const isAvailable = useMemo(() => (inferenceProvider?.isAvailable() ?? false) || protocolAdapter !== null, [inferenceProvider, protocolAdapter]);
347
+ return {
348
+ messages,
349
+ isLoading,
350
+ isStreaming,
351
+ error,
352
+ sendMessage,
353
+ appendMessage,
354
+ updateMessage,
355
+ deleteMessage,
356
+ clearMessages,
357
+ stopGeneration,
358
+ reloadMessages,
359
+ isAvailable,
360
+ suggestions,
361
+ setSuggestions,
362
+ };
363
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Keyboard shortcut configuration
3
+ */
4
+ export interface KeyboardShortcut {
5
+ /** Key to press (e.g., 'k', 'Escape') */
6
+ key: string;
7
+ /** Whether Ctrl (or Cmd on Mac) is required */
8
+ ctrlOrCmd?: boolean;
9
+ /** Whether Shift is required */
10
+ shift?: boolean;
11
+ /** Whether Alt is required */
12
+ alt?: boolean;
13
+ /** Callback when shortcut is triggered */
14
+ handler: () => void;
15
+ /** Description for accessibility */
16
+ description?: string;
17
+ /** Whether shortcut works in input fields */
18
+ allowInInput?: boolean;
19
+ }
20
+ /**
21
+ * Hook options
22
+ */
23
+ export interface UseKeyboardShortcutsOptions {
24
+ /** Whether shortcuts are enabled */
25
+ enabled?: boolean;
26
+ /** Shortcuts to register */
27
+ shortcuts: KeyboardShortcut[];
28
+ }
29
+ /**
30
+ * Hook to handle keyboard shortcuts
31
+ */
32
+ export declare function useKeyboardShortcuts({ enabled, shortcuts, }: UseKeyboardShortcutsOptions): void;
33
+ /**
34
+ * Default chat shortcuts
35
+ */
36
+ export declare function useChatKeyboardShortcuts({ onToggle, onNewChat, onClear, onFocusInput, enabled, }: {
37
+ onToggle?: () => void;
38
+ onNewChat?: () => void;
39
+ onClear?: () => void;
40
+ onFocusInput?: () => void;
41
+ enabled?: boolean;
42
+ }): void;
43
+ /**
44
+ * Get shortcut display string
45
+ */
46
+ export declare function getShortcutDisplay(shortcut: KeyboardShortcut): string;
47
+ export default useKeyboardShortcuts;
@@ -0,0 +1,153 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /**
6
+ * Keyboard shortcuts hook for Chat.
7
+ * Provides keyboard shortcut handling for the chat interface.
8
+ *
9
+ * @module components/chat/hooks/useKeyboardShortcuts
10
+ */
11
+ import { useEffect, useCallback } from 'react';
12
+ /**
13
+ * Platform detection - check if running on macOS
14
+ */
15
+ function isMacOS() {
16
+ if (typeof navigator === 'undefined')
17
+ return false;
18
+ return /Mac|iPod|iPhone|iPad/.test(navigator.platform);
19
+ }
20
+ /**
21
+ * Hook to handle keyboard shortcuts
22
+ */
23
+ export function useKeyboardShortcuts({ enabled = true, shortcuts, }) {
24
+ const handleKeyDown = useCallback((event) => {
25
+ if (!enabled)
26
+ return;
27
+ const target = event.target;
28
+ const isInInput = target.tagName === 'INPUT' ||
29
+ target.tagName === 'SELECT' ||
30
+ target.tagName === 'TEXTAREA' ||
31
+ target.isContentEditable;
32
+ for (const shortcut of shortcuts) {
33
+ // Skip if in input and not allowed
34
+ if (isInInput && !shortcut.allowInInput) {
35
+ // Exception: always allow Escape
36
+ if (shortcut.key !== 'Escape') {
37
+ continue;
38
+ }
39
+ }
40
+ // Check key match
41
+ if (event.key.toLowerCase() !== shortcut.key.toLowerCase()) {
42
+ continue;
43
+ }
44
+ // Check modifiers
45
+ const ctrlOrCmdPressed = isMacOS() ? event.metaKey : event.ctrlKey;
46
+ if (shortcut.ctrlOrCmd && !ctrlOrCmdPressed) {
47
+ continue;
48
+ }
49
+ if (!shortcut.ctrlOrCmd &&
50
+ ctrlOrCmdPressed &&
51
+ shortcut.key !== 'Escape') {
52
+ continue;
53
+ }
54
+ if (shortcut.shift && !event.shiftKey) {
55
+ continue;
56
+ }
57
+ if (shortcut.alt && !event.altKey) {
58
+ continue;
59
+ }
60
+ // Prevent default and execute handler
61
+ event.preventDefault();
62
+ event.stopPropagation();
63
+ shortcut.handler();
64
+ break;
65
+ }
66
+ }, [enabled, shortcuts]);
67
+ useEffect(() => {
68
+ if (!enabled)
69
+ return;
70
+ document.addEventListener('keydown', handleKeyDown);
71
+ return () => {
72
+ document.removeEventListener('keydown', handleKeyDown);
73
+ };
74
+ }, [enabled, handleKeyDown]);
75
+ }
76
+ /**
77
+ * Default chat shortcuts
78
+ */
79
+ export function useChatKeyboardShortcuts({ onToggle, onNewChat, onClear, onFocusInput, enabled = true, }) {
80
+ const shortcuts = [];
81
+ // Toggle chat: Ctrl/Cmd + K
82
+ if (onToggle) {
83
+ shortcuts.push({
84
+ key: 'k',
85
+ ctrlOrCmd: true,
86
+ handler: onToggle,
87
+ description: 'Toggle chat sidebar',
88
+ });
89
+ }
90
+ // New chat: Ctrl/Cmd + Shift + N
91
+ if (onNewChat) {
92
+ shortcuts.push({
93
+ key: 'n',
94
+ ctrlOrCmd: true,
95
+ shift: true,
96
+ handler: onNewChat,
97
+ description: 'Start new chat',
98
+ });
99
+ }
100
+ // Clear: Ctrl/Cmd + Shift + Delete
101
+ if (onClear) {
102
+ shortcuts.push({
103
+ key: 'Backspace',
104
+ ctrlOrCmd: true,
105
+ shift: true,
106
+ handler: onClear,
107
+ description: 'Clear chat messages',
108
+ });
109
+ }
110
+ // Focus input: /
111
+ if (onFocusInput) {
112
+ shortcuts.push({
113
+ key: '/',
114
+ handler: onFocusInput,
115
+ description: 'Focus chat input',
116
+ });
117
+ }
118
+ // Close on Escape
119
+ if (onToggle) {
120
+ shortcuts.push({
121
+ key: 'Escape',
122
+ handler: onToggle,
123
+ description: 'Close chat sidebar',
124
+ allowInInput: true,
125
+ });
126
+ }
127
+ useKeyboardShortcuts({ enabled, shortcuts });
128
+ }
129
+ /**
130
+ * Get shortcut display string
131
+ */
132
+ export function getShortcutDisplay(shortcut) {
133
+ const parts = [];
134
+ const isMac = isMacOS();
135
+ if (shortcut.ctrlOrCmd) {
136
+ parts.push(isMac ? '⌘' : 'Ctrl');
137
+ }
138
+ if (shortcut.shift) {
139
+ parts.push(isMac ? '⇧' : 'Shift');
140
+ }
141
+ if (shortcut.alt) {
142
+ parts.push(isMac ? '⌥' : 'Alt');
143
+ }
144
+ // Format key name
145
+ let keyDisplay = shortcut.key.toUpperCase();
146
+ if (shortcut.key === 'Escape')
147
+ keyDisplay = 'Esc';
148
+ if (shortcut.key === 'Backspace')
149
+ keyDisplay = isMac ? '⌫' : 'Del';
150
+ parts.push(keyDisplay);
151
+ return parts.join(isMac ? '' : '+');
152
+ }
153
+ export default useKeyboardShortcuts;
@@ -0,0 +1 @@
1
+ export declare function useIsMobile(): boolean;
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Copyright (c) 2025-2026 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ import * as React from 'react';
6
+ const MOBILE_BREAKPOINT = 768;
7
+ export function useIsMobile() {
8
+ const [isMobile, setIsMobile] = React.useState(undefined);
9
+ React.useEffect(() => {
10
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
11
+ const onChange = () => {
12
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
13
+ };
14
+ mql.addEventListener('change', onChange);
15
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT);
16
+ return () => mql.removeEventListener('change', onChange);
17
+ }, []);
18
+ return !!isMobile;
19
+ }
@@ -0,0 +1,8 @@
1
+ import type { IAIAgent } from '../models';
2
+ /**
3
+ * Get the document AI Agent if any.
4
+ *
5
+ * It handles checking the AI Agent is alive so it should only be use once per document.
6
+ */
7
+ export declare function useNotebookAIAgent(notebookId: string): IAIAgent | undefined;
8
+ export default useNotebookAIAgent;