@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.
- package/LICENSE +32 -0
- package/README.md +56 -0
- package/lib/App.css +47 -0
- package/lib/App.d.ts +3 -0
- package/lib/App.js +18 -0
- package/lib/components/chat/components/AgentDetails.d.ts +19 -0
- package/lib/components/chat/components/AgentDetails.js +170 -0
- package/lib/components/chat/components/Chat.d.ts +105 -0
- package/lib/components/chat/components/Chat.js +275 -0
- package/lib/components/chat/components/ChatFloating.d.ts +146 -0
- package/lib/components/chat/components/ChatFloating.js +381 -0
- package/lib/components/chat/components/ChatInline.d.ts +42 -0
- package/lib/components/chat/components/ChatInline.js +327 -0
- package/lib/components/chat/components/ChatPopupStandalone.d.ts +110 -0
- package/lib/components/chat/components/ChatPopupStandalone.js +422 -0
- package/lib/components/chat/components/ChatSidebar.d.ts +78 -0
- package/lib/components/chat/components/ChatSidebar.js +224 -0
- package/lib/components/chat/components/ChatStandalone.d.ts +105 -0
- package/lib/components/chat/components/ChatStandalone.js +320 -0
- package/lib/components/chat/components/base/ChatBase.d.ts +285 -0
- package/lib/components/chat/components/base/ChatBase.js +1192 -0
- package/lib/components/chat/components/display/ToolCallDisplay.d.ts +26 -0
- package/lib/components/chat/components/display/ToolCallDisplay.js +225 -0
- package/lib/components/chat/components/display/index.d.ts +6 -0
- package/lib/components/chat/components/display/index.js +10 -0
- package/lib/components/chat/components/elements/ChatHeader.d.ts +43 -0
- package/lib/components/chat/components/elements/ChatHeader.js +67 -0
- package/lib/components/chat/components/elements/ChatInputPrompt.d.ts +26 -0
- package/lib/components/chat/components/elements/ChatInputPrompt.js +145 -0
- package/lib/components/chat/components/elements/ChatMessages.d.ts +36 -0
- package/lib/components/chat/components/elements/ChatMessages.js +195 -0
- package/lib/components/chat/components/elements/FloatingBrandButton.d.ts +34 -0
- package/lib/components/chat/components/elements/FloatingBrandButton.js +88 -0
- package/lib/components/chat/components/elements/MessagePart.d.ts +50 -0
- package/lib/components/chat/components/elements/MessagePart.js +48 -0
- package/lib/components/chat/components/elements/PoweredByTag.d.ts +26 -0
- package/lib/components/chat/components/elements/PoweredByTag.js +33 -0
- package/lib/components/chat/components/elements/ToolApprovalDialog.d.ts +42 -0
- package/lib/components/chat/components/elements/ToolApprovalDialog.js +96 -0
- package/lib/components/chat/components/index.d.ts +21 -0
- package/lib/components/chat/components/index.js +34 -0
- package/lib/components/chat/components/parts/DynamicToolPart.d.ts +20 -0
- package/lib/components/chat/components/parts/DynamicToolPart.js +13 -0
- package/lib/components/chat/components/parts/ReasoningPart.d.ts +17 -0
- package/lib/components/chat/components/parts/ReasoningPart.js +69 -0
- package/lib/components/chat/components/parts/TextPart.d.ts +28 -0
- package/lib/components/chat/components/parts/TextPart.js +103 -0
- package/lib/components/chat/components/parts/ToolPart.d.ts +17 -0
- package/lib/components/chat/components/parts/ToolPart.js +163 -0
- package/lib/components/chat/components/parts/index.d.ts +9 -0
- package/lib/components/chat/components/parts/index.js +13 -0
- package/lib/components/chat/extensions/A2UIExtension.d.ts +87 -0
- package/lib/components/chat/extensions/A2UIExtension.js +312 -0
- package/lib/components/chat/extensions/ExtensionRegistry.d.ts +66 -0
- package/lib/components/chat/extensions/ExtensionRegistry.js +128 -0
- package/lib/components/chat/extensions/MCPUIExtension.d.ts +77 -0
- package/lib/components/chat/extensions/MCPUIExtension.js +212 -0
- package/lib/components/chat/extensions/index.d.ts +9 -0
- package/lib/components/chat/extensions/index.js +12 -0
- package/lib/components/chat/handler.d.ts +20 -0
- package/lib/components/chat/handler.js +56 -0
- package/lib/components/chat/index.d.ts +61 -0
- package/lib/components/chat/index.js +76 -0
- package/lib/components/chat/inference/BaseInferenceProvider.d.ts +57 -0
- package/lib/components/chat/inference/BaseInferenceProvider.js +69 -0
- package/lib/components/chat/inference/DatalayerInferenceProvider.d.ts +83 -0
- package/lib/components/chat/inference/DatalayerInferenceProvider.js +305 -0
- package/lib/components/chat/inference/SelfHostedInferenceProvider.d.ts +54 -0
- package/lib/components/chat/inference/SelfHostedInferenceProvider.js +246 -0
- package/lib/components/chat/inference/index.d.ts +9 -0
- package/lib/components/chat/inference/index.js +12 -0
- package/lib/components/chat/middleware/MiddlewarePipeline.d.ts +118 -0
- package/lib/components/chat/middleware/MiddlewarePipeline.js +255 -0
- package/lib/components/chat/middleware/index.d.ts +7 -0
- package/lib/components/chat/middleware/index.js +10 -0
- package/lib/components/chat/protocols/A2AAdapter.d.ts +79 -0
- package/lib/components/chat/protocols/A2AAdapter.js +388 -0
- package/lib/components/chat/protocols/ACPAdapter.d.ts +161 -0
- package/lib/components/chat/protocols/ACPAdapter.js +504 -0
- package/lib/components/chat/protocols/AGUIAdapter.d.ts +82 -0
- package/lib/components/chat/protocols/AGUIAdapter.js +518 -0
- package/lib/components/chat/protocols/BaseProtocolAdapter.d.ts +75 -0
- package/lib/components/chat/protocols/BaseProtocolAdapter.js +119 -0
- package/lib/components/chat/protocols/VercelAIAdapter.d.ts +77 -0
- package/lib/components/chat/protocols/VercelAIAdapter.js +252 -0
- package/lib/components/chat/protocols/index.d.ts +11 -0
- package/lib/components/chat/protocols/index.js +14 -0
- package/lib/components/chat/store/chatStore.d.ts +158 -0
- package/lib/components/chat/store/chatStore.js +313 -0
- package/lib/components/chat/store/index.d.ts +6 -0
- package/lib/components/chat/store/index.js +10 -0
- package/lib/components/chat/tools/ToolExecutor.d.ts +49 -0
- package/lib/components/chat/tools/ToolExecutor.js +151 -0
- package/lib/components/chat/tools/index.d.ts +8 -0
- package/lib/components/chat/tools/index.js +11 -0
- package/lib/components/chat/types/extension.d.ts +181 -0
- package/lib/components/chat/types/extension.js +46 -0
- package/lib/components/chat/types/index.d.ts +11 -0
- package/lib/components/chat/types/index.js +16 -0
- package/lib/components/chat/types/inference.d.ts +117 -0
- package/lib/components/chat/types/inference.js +5 -0
- package/lib/components/chat/types/message.d.ts +117 -0
- package/lib/components/chat/types/message.js +50 -0
- package/lib/components/chat/types/middleware.d.ts +153 -0
- package/lib/components/chat/types/middleware.js +32 -0
- package/lib/components/chat/types/protocol.d.ts +209 -0
- package/lib/components/chat/types/protocol.js +5 -0
- package/lib/components/chat/types/tool.d.ts +140 -0
- package/lib/components/chat/types/tool.js +23 -0
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +6 -0
- package/lib/components/sparklines/Sparklines.d.ts +16 -0
- package/lib/components/sparklines/Sparklines.js +65 -0
- package/lib/components/sparklines/SparklinesLine.d.ts +8 -0
- package/lib/components/sparklines/SparklinesLine.js +37 -0
- package/lib/components/sparklines/dataProcessing.d.ts +25 -0
- package/lib/components/sparklines/dataProcessing.js +35 -0
- package/lib/components/sparklines/index.d.ts +4 -0
- package/lib/components/sparklines/index.js +7 -0
- package/lib/components/sparklines/types.d.ts +36 -0
- package/lib/components/sparklines/types.js +5 -0
- package/lib/components/ui/accordion.d.ts +7 -0
- package/lib/components/ui/accordion.js +22 -0
- package/lib/components/ui/alert-dialog.d.ts +14 -0
- package/lib/components/ui/alert-dialog.js +43 -0
- package/lib/components/ui/alert.d.ts +9 -0
- package/lib/components/ui/alert.js +24 -0
- package/lib/components/ui/aspect-ratio.d.ts +3 -0
- package/lib/components/ui/aspect-ratio.js +11 -0
- package/lib/components/ui/avatar.d.ts +6 -0
- package/lib/components/ui/avatar.js +18 -0
- package/lib/components/ui/badge.d.ts +9 -0
- package/lib/components/ui/badge.js +22 -0
- package/lib/components/ui/breadcrumb.d.ts +11 -0
- package/lib/components/ui/breadcrumb.js +27 -0
- package/lib/components/ui/button-group.d.ts +11 -0
- package/lib/components/ui/button-group.js +31 -0
- package/lib/components/ui/button.d.ts +13 -0
- package/lib/components/ui/button.js +39 -0
- package/lib/components/ui/calendar.d.ts +8 -0
- package/lib/components/ui/calendar.js +80 -0
- package/lib/components/ui/card.d.ts +9 -0
- package/lib/components/ui/card.js +24 -0
- package/lib/components/ui/carousel.d.ts +19 -0
- package/lib/components/ui/carousel.js +95 -0
- package/lib/components/ui/chart.d.ts +53 -0
- package/lib/components/ui/chart.js +136 -0
- package/lib/components/ui/checkbox.d.ts +4 -0
- package/lib/components/ui/checkbox.js +13 -0
- package/lib/components/ui/collapsible.d.ts +5 -0
- package/lib/components/ui/collapsible.js +17 -0
- package/lib/components/ui/command.d.ts +18 -0
- package/lib/components/ui/command.js +38 -0
- package/lib/components/ui/context-menu.d.ts +25 -0
- package/lib/components/ui/context-menu.js +55 -0
- package/lib/components/ui/dialog.d.ts +15 -0
- package/lib/components/ui/dialog.js +40 -0
- package/lib/components/ui/drawer.d.ts +13 -0
- package/lib/components/ui/drawer.js +39 -0
- package/lib/components/ui/dropdown-menu.d.ts +25 -0
- package/lib/components/ui/dropdown-menu.js +55 -0
- package/lib/components/ui/empty.d.ts +11 -0
- package/lib/components/ui/empty.js +37 -0
- package/lib/components/ui/field.d.ts +24 -0
- package/lib/components/ui/field.js +80 -0
- package/lib/components/ui/form.d.ts +24 -0
- package/lib/components/ui/form.js +63 -0
- package/lib/components/ui/hover-card.d.ts +6 -0
- package/lib/components/ui/hover-card.js +18 -0
- package/lib/components/ui/input-group.d.ts +19 -0
- package/lib/components/ui/input-group.js +69 -0
- package/lib/components/ui/input-otp.d.ts +11 -0
- package/lib/components/ui/input-otp.js +25 -0
- package/lib/components/ui/input.d.ts +3 -0
- package/lib/components/ui/input.js +6 -0
- package/lib/components/ui/item.d.ts +23 -0
- package/lib/components/ui/item.js +66 -0
- package/lib/components/ui/kbd.d.ts +3 -0
- package/lib/components/ui/kbd.js +13 -0
- package/lib/components/ui/label.d.ts +4 -0
- package/lib/components/ui/label.js +12 -0
- package/lib/components/ui/menubar.d.ts +26 -0
- package/lib/components/ui/menubar.js +58 -0
- package/lib/components/ui/navigation-menu.d.ts +14 -0
- package/lib/components/ui/navigation-menu.js +31 -0
- package/lib/components/ui/pagination.d.ts +13 -0
- package/lib/components/ui/pagination.js +29 -0
- package/lib/components/ui/popover.d.ts +7 -0
- package/lib/components/ui/popover.js +21 -0
- package/lib/components/ui/progress.d.ts +4 -0
- package/lib/components/ui/progress.js +12 -0
- package/lib/components/ui/radio-group.d.ts +5 -0
- package/lib/components/ui/radio-group.js +16 -0
- package/lib/components/ui/resizable.d.ts +8 -0
- package/lib/components/ui/resizable.js +19 -0
- package/lib/components/ui/scroll-area.d.ts +5 -0
- package/lib/components/ui/scroll-area.js +17 -0
- package/lib/components/ui/select.d.ts +15 -0
- package/lib/components/ui/select.js +42 -0
- package/lib/components/ui/separator.d.ts +4 -0
- package/lib/components/ui/separator.js +12 -0
- package/lib/components/ui/sheet.d.ts +13 -0
- package/lib/components/ui/sheet.js +44 -0
- package/lib/components/ui/sidebar.d.ts +69 -0
- package/lib/components/ui/sidebar.js +216 -0
- package/lib/components/ui/skeleton.d.ts +2 -0
- package/lib/components/ui/skeleton.js +10 -0
- package/lib/components/ui/slider.d.ts +4 -0
- package/lib/components/ui/slider.js +18 -0
- package/lib/components/ui/sonner.d.ts +3 -0
- package/lib/components/ui/sonner.js +25 -0
- package/lib/components/ui/spinner.d.ts +2 -0
- package/lib/components/ui/spinner.js +11 -0
- package/lib/components/ui/switch.d.ts +4 -0
- package/lib/components/ui/switch.js +12 -0
- package/lib/components/ui/table.d.ts +10 -0
- package/lib/components/ui/table.js +32 -0
- package/lib/components/ui/tabs.d.ts +7 -0
- package/lib/components/ui/tabs.js +21 -0
- package/lib/components/ui/textarea.d.ts +3 -0
- package/lib/components/ui/textarea.js +6 -0
- package/lib/components/ui/toast.d.ts +15 -0
- package/lib/components/ui/toast.js +38 -0
- package/lib/components/ui/toaster.d.ts +1 -0
- package/lib/components/ui/toaster.js +14 -0
- package/lib/components/ui/toggle-group.d.ts +9 -0
- package/lib/components/ui/toggle-group.js +26 -0
- package/lib/components/ui/toggle.d.ts +9 -0
- package/lib/components/ui/toggle.js +30 -0
- package/lib/components/ui/tooltip.d.ts +7 -0
- package/lib/components/ui/tooltip.js +21 -0
- package/lib/components/vercel-ai-elements/artifact.d.ts +23 -0
- package/lib/components/vercel-ai-elements/artifact.js +24 -0
- package/lib/components/vercel-ai-elements/code-block.d.ts +17 -0
- package/lib/components/vercel-ai-elements/code-block.js +94 -0
- package/lib/components/vercel-ai-elements/conversation.d.ts +15 -0
- package/lib/components/vercel-ai-elements/conversation.js +21 -0
- package/lib/components/vercel-ai-elements/loader.d.ts +5 -0
- package/lib/components/vercel-ai-elements/loader.js +8 -0
- package/lib/components/vercel-ai-elements/message.d.ts +46 -0
- package/lib/components/vercel-ai-elements/message.js +109 -0
- package/lib/components/vercel-ai-elements/model-selector.d.ts +35 -0
- package/lib/components/vercel-ai-elements/model-selector.js +22 -0
- package/lib/components/vercel-ai-elements/prompt-input.d.ts +195 -0
- package/lib/components/vercel-ai-elements/prompt-input.js +589 -0
- package/lib/components/vercel-ai-elements/reasoning.d.ts +26 -0
- package/lib/components/vercel-ai-elements/reasoning.js +80 -0
- package/lib/components/vercel-ai-elements/shimmer.d.ts +9 -0
- package/lib/components/vercel-ai-elements/shimmer.js +22 -0
- package/lib/components/vercel-ai-elements/sources.d.ts +12 -0
- package/lib/components/vercel-ai-elements/sources.js +13 -0
- package/lib/components/vercel-ai-elements/suggestion.d.ts +10 -0
- package/lib/components/vercel-ai-elements/suggestion.js +16 -0
- package/lib/components/vercel-ai-elements/tool.d.ts +23 -0
- package/lib/components/vercel-ai-elements/tool.js +52 -0
- package/lib/examples/A2UiRestaurantExample.d.ts +25 -0
- package/lib/examples/A2UiRestaurantExample.js +305 -0
- package/lib/examples/AgUiAgenticExample.d.ts +25 -0
- package/lib/examples/AgUiAgenticExample.js +63 -0
- package/lib/examples/AgUiBackendToolRenderingExample.d.ts +30 -0
- package/lib/examples/AgUiBackendToolRenderingExample.js +103 -0
- package/lib/examples/AgUiHaikuGenUIExample.d.ts +44 -0
- package/lib/examples/AgUiHaikuGenUIExample.js +151 -0
- package/lib/examples/AgUiHumanInTheLoopExample.d.ts +26 -0
- package/lib/examples/AgUiHumanInTheLoopExample.js +220 -0
- package/lib/examples/AgUiSharedStateExample.d.ts +25 -0
- package/lib/examples/AgUiSharedStateExample.js +181 -0
- package/lib/examples/AgUiToolsBasedGenUIExample.d.ts +25 -0
- package/lib/examples/AgUiToolsBasedGenUIExample.js +257 -0
- package/lib/examples/AgentRuntimeCustomExample.d.ts +9 -0
- package/lib/examples/AgentRuntimeCustomExample.js +68 -0
- package/lib/examples/AgentRuntimeLexical2Example.d.ts +42 -0
- package/lib/examples/AgentRuntimeLexical2Example.js +236 -0
- package/lib/examples/AgentRuntimeLexicalExample.d.ts +36 -0
- package/lib/examples/AgentRuntimeLexicalExample.js +260 -0
- package/lib/examples/AgentRuntimeLexicalSidebarExample.d.ts +41 -0
- package/lib/examples/AgentRuntimeLexicalSidebarExample.js +166 -0
- package/lib/examples/AgentRuntimeNotebookExample.d.ts +9 -0
- package/lib/examples/AgentRuntimeNotebookExample.js +148 -0
- package/lib/examples/AgentRuntimeNotebookSidebarExample.d.ts +13 -0
- package/lib/examples/AgentRuntimeNotebookSidebarExample.js +121 -0
- package/lib/examples/AgentRuntimeStandaloneExample.d.ts +21 -0
- package/lib/examples/AgentRuntimeStandaloneExample.js +158 -0
- package/lib/examples/AgentSpaceFormExample.d.ts +22 -0
- package/lib/examples/AgentSpaceFormExample.js +296 -0
- package/lib/examples/AgentSpaceHomeExample.d.ts +8 -0
- package/lib/examples/AgentSpaceHomeExample.js +171 -0
- package/lib/examples/CopilotKitLexicalExample.d.ts +38 -0
- package/lib/examples/CopilotKitLexicalExample.js +161 -0
- package/lib/examples/CopilotKitNotebookExample.d.ts +11 -0
- package/lib/examples/CopilotKitNotebookExample.js +70 -0
- package/lib/examples/DatalayerNotebookExample.d.ts +16 -0
- package/lib/examples/DatalayerNotebookExample.js +99 -0
- package/lib/examples/JupyterCellExample.d.ts +6 -0
- package/lib/examples/JupyterCellExample.js +19 -0
- package/lib/examples/JupyterNotebookExample.d.ts +6 -0
- package/lib/examples/JupyterNotebookExample.js +21 -0
- package/lib/examples/ag-ui/haiku/HaikuDisplay.d.ts +18 -0
- package/lib/examples/ag-ui/haiku/HaikuDisplay.js +110 -0
- package/lib/examples/ag-ui/haiku/InlineHaikuCard.d.ts +39 -0
- package/lib/examples/ag-ui/haiku/InlineHaikuCard.js +117 -0
- package/lib/examples/ag-ui/haiku/index.d.ts +11 -0
- package/lib/examples/ag-ui/haiku/index.js +15 -0
- package/lib/examples/ag-ui/index.d.ts +10 -0
- package/lib/examples/ag-ui/index.js +16 -0
- package/lib/examples/ag-ui/weather/InlineWeatherCard.d.ts +43 -0
- package/lib/examples/ag-ui/weather/InlineWeatherCard.js +180 -0
- package/lib/examples/ag-ui/weather/index.d.ts +9 -0
- package/lib/examples/ag-ui/weather/index.js +13 -0
- package/lib/examples/components/AgentConfiguration.d.ts +50 -0
- package/lib/examples/components/AgentConfiguration.js +115 -0
- package/lib/examples/components/AgentsDataTable.d.ts +13 -0
- package/lib/examples/components/AgentsDataTable.js +74 -0
- package/lib/examples/components/FooterMetrics.d.ts +12 -0
- package/lib/examples/components/FooterMetrics.js +17 -0
- package/lib/examples/components/Header.d.ts +27 -0
- package/lib/examples/components/Header.js +294 -0
- package/lib/examples/components/HeaderControls.d.ts +11 -0
- package/lib/examples/components/HeaderControls.js +24 -0
- package/lib/examples/components/LexicalEditor.d.ts +27 -0
- package/lib/examples/components/LexicalEditor.js +118 -0
- package/lib/examples/components/MainContent.d.ts +19 -0
- package/lib/examples/components/MainContent.js +68 -0
- package/lib/examples/components/MockFileBrowser.d.ts +12 -0
- package/lib/examples/components/MockFileBrowser.js +131 -0
- package/lib/examples/components/Rating.d.ts +14 -0
- package/lib/examples/components/Rating.js +12 -0
- package/lib/examples/components/SessionTabs.d.ts +21 -0
- package/lib/examples/components/SessionTabs.js +11 -0
- package/lib/examples/components/TimeTravel.d.ts +15 -0
- package/lib/examples/components/TimeTravel.js +23 -0
- package/lib/examples/components/index.d.ts +11 -0
- package/lib/examples/components/index.js +14 -0
- package/lib/examples/example-selector.d.ts +22 -0
- package/lib/examples/example-selector.js +62 -0
- package/lib/examples/index.d.ts +21 -0
- package/lib/examples/index.js +25 -0
- package/lib/examples/lexical/editorConfig.d.ts +76 -0
- package/lib/examples/lexical/editorConfig.js +55 -0
- package/lib/examples/lexical/lexical-theme.css +436 -0
- package/lib/examples/lexical/theme.d.ts +61 -0
- package/lib/examples/lexical/theme.js +72 -0
- package/lib/examples/main.d.ts +2 -0
- package/lib/examples/main.js +334 -0
- package/lib/examples/stores/agents/earthquake-detector.ipynb.json +111 -0
- package/lib/examples/stores/agents/earthquake-detector.json +13 -0
- package/lib/examples/stores/agents/earthquake-detector.lexical.json +2988 -0
- package/lib/examples/stores/agents/sales-forecaster.ipynb.json +111 -0
- package/lib/examples/stores/agents/sales-forecaster.json +13 -0
- package/lib/examples/stores/agents/sales-forecaster.lexical.json +2988 -0
- package/lib/examples/stores/agents/social-post-generator.ipynb.json +111 -0
- package/lib/examples/stores/agents/social-post-generator.json +13 -0
- package/lib/examples/stores/agents/social-post-generator.lexical.json +2988 -0
- package/lib/examples/stores/agents/stock-market.ipynb.json +56 -0
- package/lib/examples/stores/agents/stock-market.json +13 -0
- package/lib/examples/stores/agents/stock-market.lexical.json +1026 -0
- package/lib/examples/stores/examplesStore.d.ts +26 -0
- package/lib/examples/stores/examplesStore.js +60 -0
- package/lib/examples/stores/notebooks/Empty.ipynb.json +33 -0
- package/lib/examples/stores/notebooks/IPyWidgetsExample.ipynb.json +101 -0
- package/lib/examples/stores/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
- package/lib/examples/stores/notebooks/Lite.ipynb.json +128 -0
- package/lib/examples/stores/notebooks/Matplotlib.ipynb.json +137 -0
- package/lib/examples/stores/notebooks/NotebookExample1.ipynb.json +126 -0
- package/lib/examples/stores/notebooks/NotebookExample2.ipynb.json +48 -0
- package/lib/examples/stores/notebooks/NotebookOutputs.ipynb.json +49 -0
- package/lib/examples/stores/notebooks/NotebookToCExample.ipynb.json +102 -0
- package/lib/examples/stores/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
- package/lib/examples/stores/notebooks/OutputIPyWidgetsExample.js +153 -0
- package/lib/examples/stores/notebooks/PyGWalker.ipynb.json +55 -0
- package/lib/examples/vercel-ai-elements/VercelAiElementsShowcase.d.ts +12 -0
- package/lib/examples/vercel-ai-elements/VercelAiElementsShowcase.js +69 -0
- package/lib/examples/vercel-ai-elements/components/ArtifactShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/ArtifactShowcase.js +85 -0
- package/lib/examples/vercel-ai-elements/components/CodeBlockShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/CodeBlockShowcase.js +62 -0
- package/lib/examples/vercel-ai-elements/components/ConversationShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/ConversationShowcase.js +51 -0
- package/lib/examples/vercel-ai-elements/components/LoaderShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/LoaderShowcase.js +9 -0
- package/lib/examples/vercel-ai-elements/components/MessageShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/MessageShowcase.js +56 -0
- package/lib/examples/vercel-ai-elements/components/ModelSelectorShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/ModelSelectorShowcase.js +50 -0
- package/lib/examples/vercel-ai-elements/components/PromptInputShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/PromptInputShowcase.js +16 -0
- package/lib/examples/vercel-ai-elements/components/ReasoningShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/ReasoningShowcase.js +72 -0
- package/lib/examples/vercel-ai-elements/components/ShimmerShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/ShimmerShowcase.js +9 -0
- package/lib/examples/vercel-ai-elements/components/SourcesShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/SourcesShowcase.js +43 -0
- package/lib/examples/vercel-ai-elements/components/SuggestionShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/SuggestionShowcase.js +31 -0
- package/lib/examples/vercel-ai-elements/components/ToolShowcase.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/components/ToolShowcase.js +54 -0
- package/lib/examples/vercel-ai-elements/index.d.ts +13 -0
- package/lib/examples/vercel-ai-elements/index.js +17 -0
- package/lib/examples/vercel-ai-elements/main.d.ts +1 -0
- package/lib/examples/vercel-ai-elements/main.js +9 -0
- package/lib/examples/vercel-ai-elements/showcase.css +128 -0
- package/lib/hooks/index.d.ts +68 -0
- package/lib/hooks/index.js +81 -0
- package/lib/hooks/useA2A.d.ts +75 -0
- package/lib/hooks/useA2A.js +368 -0
- package/lib/hooks/useAGUI.d.ts +63 -0
- package/lib/hooks/useAGUI.js +162 -0
- package/lib/hooks/useAcp.d.ts +121 -0
- package/lib/hooks/useAcp.js +459 -0
- package/lib/hooks/useAgents.d.ts +13 -0
- package/lib/hooks/useAgents.js +71 -0
- package/lib/hooks/useChat.d.ts +62 -0
- package/lib/hooks/useChat.js +363 -0
- package/lib/hooks/useKeyboardShortcuts.d.ts +47 -0
- package/lib/hooks/useKeyboardShortcuts.js +153 -0
- package/lib/hooks/useMobile.d.ts +1 -0
- package/lib/hooks/useMobile.js +19 -0
- package/lib/hooks/useNotebookAIAgent.d.ts +8 -0
- package/lib/hooks/useNotebookAIAgent.js +56 -0
- package/lib/hooks/useToast.d.ts +44 -0
- package/lib/hooks/useToast.js +128 -0
- package/lib/hooks/useTools.d.ts +107 -0
- package/lib/hooks/useTools.js +130 -0
- package/lib/hooks/useVercelChat.d.ts +45 -0
- package/lib/hooks/useVercelChat.js +62 -0
- package/lib/index.css +73 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +5 -0
- package/lib/lexical/ChatInlinePlugin.d.ts +21 -0
- package/lib/lexical/ChatInlinePlugin.js +379 -0
- package/lib/lexical/index.d.ts +6 -0
- package/lib/lexical/index.js +10 -0
- package/lib/lib/utils.d.ts +2 -0
- package/lib/lib/utils.js +9 -0
- package/lib/main.d.ts +1 -0
- package/lib/main.js +12 -0
- package/lib/models/AIAgent.d.ts +17 -0
- package/lib/models/AIAgent.js +5 -0
- package/lib/models/index.d.ts +1 -0
- package/lib/models/index.js +5 -0
- package/lib/renderers/a2ui/components/A2UIRenderer.d.ts +7 -0
- package/lib/renderers/a2ui/components/A2UIRenderer.js +102 -0
- package/lib/renderers/a2ui/components/SurfaceRenderer.d.ts +7 -0
- package/lib/renderers/a2ui/components/SurfaceRenderer.js +101 -0
- package/lib/renderers/a2ui/components/content/AudioPlayer.d.ts +9 -0
- package/lib/renderers/a2ui/components/content/AudioPlayer.js +38 -0
- package/lib/renderers/a2ui/components/content/Divider.d.ts +9 -0
- package/lib/renderers/a2ui/components/content/Divider.js +35 -0
- package/lib/renderers/a2ui/components/content/Icon.d.ts +9 -0
- package/lib/renderers/a2ui/components/content/Icon.js +110 -0
- package/lib/renderers/a2ui/components/content/Image.d.ts +9 -0
- package/lib/renderers/a2ui/components/content/Image.js +61 -0
- package/lib/renderers/a2ui/components/content/Text.d.ts +9 -0
- package/lib/renderers/a2ui/components/content/Text.js +64 -0
- package/lib/renderers/a2ui/components/content/Video.d.ts +9 -0
- package/lib/renderers/a2ui/components/content/Video.js +37 -0
- package/lib/renderers/a2ui/components/content/index.d.ts +6 -0
- package/lib/renderers/a2ui/components/content/index.js +25 -0
- package/lib/renderers/a2ui/components/index.d.ts +5 -0
- package/lib/renderers/a2ui/components/index.js +24 -0
- package/lib/renderers/a2ui/components/interactive/Button.d.ts +11 -0
- package/lib/renderers/a2ui/components/interactive/Button.js +71 -0
- package/lib/renderers/a2ui/components/interactive/CheckBox.d.ts +9 -0
- package/lib/renderers/a2ui/components/interactive/CheckBox.js +48 -0
- package/lib/renderers/a2ui/components/interactive/DateTimeInput.d.ts +9 -0
- package/lib/renderers/a2ui/components/interactive/DateTimeInput.js +62 -0
- package/lib/renderers/a2ui/components/interactive/MultipleChoice.d.ts +9 -0
- package/lib/renderers/a2ui/components/interactive/MultipleChoice.js +73 -0
- package/lib/renderers/a2ui/components/interactive/Slider.d.ts +9 -0
- package/lib/renderers/a2ui/components/interactive/Slider.js +53 -0
- package/lib/renderers/a2ui/components/interactive/TextField.d.ts +9 -0
- package/lib/renderers/a2ui/components/interactive/TextField.js +72 -0
- package/lib/renderers/a2ui/components/interactive/index.d.ts +6 -0
- package/lib/renderers/a2ui/components/interactive/index.js +25 -0
- package/lib/renderers/a2ui/components/layout/Card.d.ts +11 -0
- package/lib/renderers/a2ui/components/layout/Card.js +30 -0
- package/lib/renderers/a2ui/components/layout/Column.d.ts +11 -0
- package/lib/renderers/a2ui/components/layout/Column.js +65 -0
- package/lib/renderers/a2ui/components/layout/List.d.ts +11 -0
- package/lib/renderers/a2ui/components/layout/List.js +55 -0
- package/lib/renderers/a2ui/components/layout/Modal.d.ts +11 -0
- package/lib/renderers/a2ui/components/layout/Modal.js +58 -0
- package/lib/renderers/a2ui/components/layout/Row.d.ts +11 -0
- package/lib/renderers/a2ui/components/layout/Row.js +65 -0
- package/lib/renderers/a2ui/components/layout/Tabs.d.ts +11 -0
- package/lib/renderers/a2ui/components/layout/Tabs.js +48 -0
- package/lib/renderers/a2ui/components/layout/index.d.ts +6 -0
- package/lib/renderers/a2ui/components/layout/index.js +25 -0
- package/lib/renderers/a2ui/context/A2UIContext.d.ts +17 -0
- package/lib/renderers/a2ui/context/A2UIContext.js +54 -0
- package/lib/renderers/a2ui/context/ThemeContext.d.ts +20 -0
- package/lib/renderers/a2ui/context/ThemeContext.js +333 -0
- package/lib/renderers/a2ui/hooks/useA2UI.d.ts +36 -0
- package/lib/renderers/a2ui/hooks/useA2UI.js +62 -0
- package/lib/renderers/a2ui/hooks/useDataBinding.d.ts +8 -0
- package/lib/renderers/a2ui/hooks/useDataBinding.js +83 -0
- package/lib/renderers/a2ui/index.d.ts +9 -0
- package/lib/renderers/a2ui/index.js +28 -0
- package/lib/renderers/a2ui/lib/utils.d.ts +11 -0
- package/lib/renderers/a2ui/lib/utils.js +38 -0
- package/lib/renderers/a2ui/types/index.d.ts +17 -0
- package/lib/renderers/a2ui/types/index.js +5 -0
- package/lib/renderers/index.d.ts +1 -0
- package/lib/renderers/index.js +5 -0
- package/lib/state/index.d.ts +1 -0
- package/lib/state/index.js +5 -0
- package/lib/state/substates/AIAgentState.d.ts +11 -0
- package/lib/state/substates/AIAgentState.js +42 -0
- package/lib/state/substates/index.d.ts +1 -0
- package/lib/state/substates/index.js +5 -0
- package/lib/stories/Button.d.ts +15 -0
- package/lib/stories/Button.js +13 -0
- package/lib/stories/Button.stories.d.ts +23 -0
- package/lib/stories/Button.stories.js +48 -0
- package/lib/stories/Cell.stories.d.ts +12 -0
- package/lib/stories/Cell.stories.js +123 -0
- package/lib/stories/Header.d.ts +12 -0
- package/lib/stories/Header.js +8 -0
- package/lib/stories/Header.stories.d.ts +18 -0
- package/lib/stories/Header.stories.js +30 -0
- package/lib/stories/Page.d.ts +3 -0
- package/lib/stories/Page.js +12 -0
- package/lib/stories/Page.stories.d.ts +12 -0
- package/lib/stories/Page.stories.js +28 -0
- package/lib/stories/assets/accessibility.png +0 -0
- package/lib/stories/assets/accessibility.svg +1 -0
- package/lib/stories/assets/addon-library.png +0 -0
- package/lib/stories/assets/assets.png +0 -0
- package/lib/stories/assets/context.png +0 -0
- package/lib/stories/assets/discord.svg +1 -0
- package/lib/stories/assets/docs.png +0 -0
- package/lib/stories/assets/figma-plugin.png +0 -0
- package/lib/stories/assets/github.svg +1 -0
- package/lib/stories/assets/share.png +0 -0
- package/lib/stories/assets/styling.png +0 -0
- package/lib/stories/assets/testing.png +0 -0
- package/lib/stories/assets/theming.png +0 -0
- package/lib/stories/assets/tutorials.svg +1 -0
- package/lib/stories/assets/youtube.svg +1 -0
- package/lib/stories/button.css +35 -0
- package/lib/stories/header.css +37 -0
- package/lib/stories/page.css +73 -0
- package/lib/test-setup.d.ts +1 -0
- package/lib/test-setup.js +80 -0
- package/lib/tools/adapters/agent-runtimes/AgentRuntimesToolAdapter.d.ts +40 -0
- package/lib/tools/adapters/agent-runtimes/AgentRuntimesToolAdapter.js +110 -0
- package/lib/tools/adapters/agent-runtimes/index.d.ts +9 -0
- package/lib/tools/adapters/agent-runtimes/index.js +13 -0
- package/lib/tools/adapters/agent-runtimes/lexicalHooks.d.ts +24 -0
- package/lib/tools/adapters/agent-runtimes/lexicalHooks.js +50 -0
- package/lib/tools/adapters/agent-runtimes/notebookHooks.d.ts +24 -0
- package/lib/tools/adapters/agent-runtimes/notebookHooks.js +51 -0
- package/lib/tools/adapters/copilotkit/CopilotKitToolAdapter.d.ts +73 -0
- package/lib/tools/adapters/copilotkit/CopilotKitToolAdapter.js +244 -0
- package/lib/tools/adapters/copilotkit/index.d.ts +10 -0
- package/lib/tools/adapters/copilotkit/index.js +14 -0
- package/lib/tools/adapters/copilotkit/lexicalHooks.d.ts +27 -0
- package/lib/tools/adapters/copilotkit/lexicalHooks.js +59 -0
- package/lib/tools/adapters/copilotkit/notebookHooks.d.ts +27 -0
- package/lib/tools/adapters/copilotkit/notebookHooks.js +58 -0
- package/lib/tools/adapters/index.d.ts +1 -0
- package/lib/tools/adapters/index.js +5 -0
- package/lib/tools/index.d.ts +6 -0
- package/lib/tools/index.js +18 -0
- package/lib/types.d.ts +5 -0
- package/lib/types.js +5 -0
- package/package.json +327 -0
- package/style/animation/Animation.module.css +174 -0
- package/style/base.css +204 -0
- package/style/index.css +6 -0
- 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;
|