@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,119 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Abstract base class for protocol adapters
|
|
7
|
+
*/
|
|
8
|
+
export class BaseProtocolAdapter {
|
|
9
|
+
config;
|
|
10
|
+
_connectionState = 'disconnected';
|
|
11
|
+
eventHandlers = new Set();
|
|
12
|
+
reconnectAttempts = 0;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = {
|
|
15
|
+
autoReconnect: true,
|
|
16
|
+
reconnectDelay: 1000,
|
|
17
|
+
maxReconnectAttempts: 5,
|
|
18
|
+
timeout: 30000,
|
|
19
|
+
...config,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
get connectionState() {
|
|
23
|
+
return this._connectionState;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Subscribe to protocol events
|
|
27
|
+
*/
|
|
28
|
+
subscribe(handler) {
|
|
29
|
+
this.eventHandlers.add(handler);
|
|
30
|
+
return () => {
|
|
31
|
+
this.eventHandlers.delete(handler);
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get agent card (optional, mainly for A2A)
|
|
36
|
+
*/
|
|
37
|
+
async getAgentCard() {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if protocol supports a specific feature
|
|
42
|
+
*/
|
|
43
|
+
supportsFeature(feature) {
|
|
44
|
+
// Override in subclasses
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Emit an event to all subscribers
|
|
49
|
+
*/
|
|
50
|
+
emit(event) {
|
|
51
|
+
for (const handler of this.eventHandlers) {
|
|
52
|
+
try {
|
|
53
|
+
handler(event);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error(`[${this.type}] Error in event handler:`, error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Update connection state and emit event
|
|
62
|
+
*/
|
|
63
|
+
setConnectionState(state) {
|
|
64
|
+
const previousState = this._connectionState;
|
|
65
|
+
this._connectionState = state;
|
|
66
|
+
if (previousState !== state) {
|
|
67
|
+
this.emit({
|
|
68
|
+
type: state === 'connected' ? 'connected' : 'disconnected',
|
|
69
|
+
timestamp: new Date(),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Handle reconnection logic
|
|
75
|
+
*/
|
|
76
|
+
async handleReconnect() {
|
|
77
|
+
if (!this.config.autoReconnect) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (this.reconnectAttempts >= (this.config.maxReconnectAttempts || 5)) {
|
|
81
|
+
this.setConnectionState('error');
|
|
82
|
+
this.emit({
|
|
83
|
+
type: 'error',
|
|
84
|
+
error: new Error('Max reconnection attempts reached'),
|
|
85
|
+
timestamp: new Date(),
|
|
86
|
+
});
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
this.setConnectionState('reconnecting');
|
|
90
|
+
this.reconnectAttempts++;
|
|
91
|
+
const delay = this.config.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
|
|
92
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
93
|
+
try {
|
|
94
|
+
await this.connect();
|
|
95
|
+
this.reconnectAttempts = 0;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
await this.handleReconnect();
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Build headers for HTTP requests
|
|
103
|
+
*/
|
|
104
|
+
buildHeaders(additionalHeaders) {
|
|
105
|
+
const headers = {
|
|
106
|
+
'Content-Type': 'application/json',
|
|
107
|
+
};
|
|
108
|
+
if (this.config.authToken) {
|
|
109
|
+
headers['Authorization'] = `Bearer ${this.config.authToken}`;
|
|
110
|
+
}
|
|
111
|
+
return { ...headers, ...additionalHeaders };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Create abort signal with timeout
|
|
115
|
+
*/
|
|
116
|
+
createTimeoutSignal() {
|
|
117
|
+
return AbortSignal.timeout(this.config.timeout || 30000);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vercel AI protocol adapter using SSE transport.
|
|
3
|
+
* Implements Pydantic AI's Vercel AI Data Stream Protocol.
|
|
4
|
+
*
|
|
5
|
+
* @see https://ai.pydantic.dev/ui/vercel-ai/
|
|
6
|
+
*
|
|
7
|
+
* @module components/chat/protocols/VercelAIAdapter
|
|
8
|
+
*/
|
|
9
|
+
import type { ProtocolAdapterConfig } from '../types/protocol';
|
|
10
|
+
import type { ChatMessage } from '../types/message';
|
|
11
|
+
import type { ToolDefinition, ToolExecutionResult } from '../types/tool';
|
|
12
|
+
import { BaseProtocolAdapter } from './BaseProtocolAdapter';
|
|
13
|
+
/**
|
|
14
|
+
* Vercel AI specific configuration
|
|
15
|
+
*/
|
|
16
|
+
export interface VercelAIAdapterConfig extends ProtocolAdapterConfig {
|
|
17
|
+
/** Agent ID */
|
|
18
|
+
agentId?: string;
|
|
19
|
+
/** Custom headers for requests (e.g., for Jupyter authentication) */
|
|
20
|
+
headers?: Record<string, string>;
|
|
21
|
+
/** Custom fetch options */
|
|
22
|
+
fetchOptions?: {
|
|
23
|
+
/** Request mode */
|
|
24
|
+
mode?: RequestMode;
|
|
25
|
+
/** Credentials mode */
|
|
26
|
+
credentials?: RequestCredentials;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Vercel AI protocol adapter
|
|
31
|
+
* Uses HTTP POST with SSE streaming for responses
|
|
32
|
+
* Compatible with Pydantic AI's Vercel AI Data Stream Protocol
|
|
33
|
+
*/
|
|
34
|
+
export declare class VercelAIAdapter extends BaseProtocolAdapter {
|
|
35
|
+
readonly type: "vercel-ai";
|
|
36
|
+
readonly transport: "sse";
|
|
37
|
+
private vercelConfig;
|
|
38
|
+
private abortController;
|
|
39
|
+
private currentRequestId;
|
|
40
|
+
constructor(config: VercelAIAdapterConfig);
|
|
41
|
+
/**
|
|
42
|
+
* Connect to Vercel AI endpoint (SSE doesn't require persistent connection)
|
|
43
|
+
*/
|
|
44
|
+
connect(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Disconnect and terminate any ongoing request
|
|
47
|
+
*/
|
|
48
|
+
disconnect(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Terminate a running request on the backend
|
|
51
|
+
*/
|
|
52
|
+
terminateRequest(requestId?: string): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Send a message using Vercel AI Data Stream Protocol
|
|
55
|
+
*/
|
|
56
|
+
sendMessage(message: ChatMessage, options?: {
|
|
57
|
+
tools?: ToolDefinition[];
|
|
58
|
+
threadId?: string;
|
|
59
|
+
metadata?: Record<string, unknown>;
|
|
60
|
+
}): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Parse SSE stream from Vercel AI
|
|
63
|
+
*/
|
|
64
|
+
private parseSSEStream;
|
|
65
|
+
/**
|
|
66
|
+
* Send tool result (not supported in Vercel AI adapter)
|
|
67
|
+
*/
|
|
68
|
+
sendToolResult(_toolCallId: string, _result: ToolExecutionResult): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Request permission (not supported in Vercel AI)
|
|
71
|
+
*/
|
|
72
|
+
requestPermission(_permission: string): Promise<boolean>;
|
|
73
|
+
/**
|
|
74
|
+
* Stop generation
|
|
75
|
+
*/
|
|
76
|
+
stopGeneration(): void;
|
|
77
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
import { generateMessageId, createAssistantMessage } from '../types/message';
|
|
6
|
+
import { BaseProtocolAdapter } from './BaseProtocolAdapter';
|
|
7
|
+
/**
|
|
8
|
+
* Vercel AI protocol adapter
|
|
9
|
+
* Uses HTTP POST with SSE streaming for responses
|
|
10
|
+
* Compatible with Pydantic AI's Vercel AI Data Stream Protocol
|
|
11
|
+
*/
|
|
12
|
+
export class VercelAIAdapter extends BaseProtocolAdapter {
|
|
13
|
+
type = 'vercel-ai';
|
|
14
|
+
transport = 'sse';
|
|
15
|
+
vercelConfig;
|
|
16
|
+
abortController = null;
|
|
17
|
+
currentRequestId = null;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
super(config);
|
|
20
|
+
this.vercelConfig = config;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Connect to Vercel AI endpoint (SSE doesn't require persistent connection)
|
|
24
|
+
*/
|
|
25
|
+
async connect() {
|
|
26
|
+
this.setConnectionState('connecting');
|
|
27
|
+
// Vercel AI uses SSE, no persistent connection needed
|
|
28
|
+
// Just mark as connected
|
|
29
|
+
this.setConnectionState('connected');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Disconnect and terminate any ongoing request
|
|
33
|
+
*/
|
|
34
|
+
disconnect() {
|
|
35
|
+
this.abortController?.abort();
|
|
36
|
+
this.abortController = null;
|
|
37
|
+
// Send terminate request to backend if we have a request ID
|
|
38
|
+
if (this.currentRequestId) {
|
|
39
|
+
this.terminateRequest(this.currentRequestId).catch(err => {
|
|
40
|
+
console.warn('[VercelAIAdapter] Failed to terminate request:', err);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
this.setConnectionState('disconnected');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Terminate a running request on the backend
|
|
47
|
+
*/
|
|
48
|
+
async terminateRequest(requestId) {
|
|
49
|
+
try {
|
|
50
|
+
// Derive the terminate endpoint from the base URL
|
|
51
|
+
const baseUrl = new URL(this.vercelConfig.baseUrl);
|
|
52
|
+
const terminateUrl = `${baseUrl.origin}/api/v1/vercel-ai/terminate`;
|
|
53
|
+
const response = await fetch(terminateUrl, {
|
|
54
|
+
method: 'POST',
|
|
55
|
+
headers: {
|
|
56
|
+
'Content-Type': 'application/json',
|
|
57
|
+
},
|
|
58
|
+
body: JSON.stringify({
|
|
59
|
+
request_id: requestId || this.currentRequestId,
|
|
60
|
+
}),
|
|
61
|
+
});
|
|
62
|
+
if (!response.ok) {
|
|
63
|
+
console.warn(`[VercelAIAdapter] Terminate request failed: ${response.status}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Consume the response (terminate result)
|
|
67
|
+
await response.json();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Ignore errors - request may have already completed
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Send a message using Vercel AI Data Stream Protocol
|
|
76
|
+
*/
|
|
77
|
+
async sendMessage(message, options) {
|
|
78
|
+
if (this.abortController) {
|
|
79
|
+
this.abortController.abort();
|
|
80
|
+
}
|
|
81
|
+
this.abortController = new AbortController();
|
|
82
|
+
// Generate request ID for tracking
|
|
83
|
+
const requestId = options?.threadId || generateMessageId();
|
|
84
|
+
this.currentRequestId = requestId;
|
|
85
|
+
try {
|
|
86
|
+
// Extract the message content as a string
|
|
87
|
+
const messageContent = typeof message.content === 'string'
|
|
88
|
+
? message.content
|
|
89
|
+
: String(message.content);
|
|
90
|
+
// Build single message in Vercel AI SDK format
|
|
91
|
+
const vercelMessage = {
|
|
92
|
+
id: message.id,
|
|
93
|
+
role: message.role,
|
|
94
|
+
parts: [
|
|
95
|
+
{
|
|
96
|
+
type: 'text',
|
|
97
|
+
text: messageContent,
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
};
|
|
101
|
+
// Build Vercel AI request
|
|
102
|
+
const requestBody = {
|
|
103
|
+
id: requestId, // Run ID for tracking
|
|
104
|
+
messages: [vercelMessage],
|
|
105
|
+
trigger: 'submit-message',
|
|
106
|
+
// Optional fields based on Pydantic AI's Vercel adapter
|
|
107
|
+
...(options?.tools && { tools: options.tools }),
|
|
108
|
+
};
|
|
109
|
+
// Merge custom headers with defaults
|
|
110
|
+
const headers = {
|
|
111
|
+
'Content-Type': 'application/json',
|
|
112
|
+
Accept: 'text/event-stream',
|
|
113
|
+
...this.vercelConfig.headers,
|
|
114
|
+
};
|
|
115
|
+
// Add auth token if provided
|
|
116
|
+
if (this.vercelConfig.authToken) {
|
|
117
|
+
headers['Authorization'] = `token ${this.vercelConfig.authToken}`;
|
|
118
|
+
}
|
|
119
|
+
const response = await fetch(this.vercelConfig.baseUrl, {
|
|
120
|
+
method: 'POST',
|
|
121
|
+
headers,
|
|
122
|
+
body: JSON.stringify(requestBody),
|
|
123
|
+
signal: this.abortController.signal,
|
|
124
|
+
mode: this.vercelConfig.fetchOptions?.mode,
|
|
125
|
+
credentials: this.vercelConfig.fetchOptions?.credentials,
|
|
126
|
+
});
|
|
127
|
+
if (!response.ok) {
|
|
128
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
129
|
+
}
|
|
130
|
+
if (!response.body) {
|
|
131
|
+
throw new Error('Response body is null');
|
|
132
|
+
}
|
|
133
|
+
// Parse SSE stream
|
|
134
|
+
await this.parseSSEStream(response.body);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
if (error.name !== 'AbortError') {
|
|
138
|
+
console.error('[VercelAIAdapter] Send error:', error);
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
finally {
|
|
143
|
+
this.abortController = null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Parse SSE stream from Vercel AI
|
|
148
|
+
*/
|
|
149
|
+
async parseSSEStream(stream) {
|
|
150
|
+
const reader = stream.getReader();
|
|
151
|
+
const decoder = new TextDecoder();
|
|
152
|
+
let buffer = '';
|
|
153
|
+
let currentMessageId = generateMessageId();
|
|
154
|
+
let accumulatedText = '';
|
|
155
|
+
try {
|
|
156
|
+
while (true) {
|
|
157
|
+
const { done, value } = await reader.read();
|
|
158
|
+
if (done) {
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
buffer += decoder.decode(value, { stream: true });
|
|
162
|
+
const lines = buffer.split('\n');
|
|
163
|
+
buffer = lines.pop() || '';
|
|
164
|
+
for (const line of lines) {
|
|
165
|
+
if (!line.trim() || line.startsWith(':')) {
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (line.startsWith('data: ')) {
|
|
169
|
+
const data = line.slice(6);
|
|
170
|
+
if (data === '[DONE]') {
|
|
171
|
+
// Stream complete
|
|
172
|
+
if (accumulatedText) {
|
|
173
|
+
const message = createAssistantMessage(accumulatedText);
|
|
174
|
+
message.id = currentMessageId;
|
|
175
|
+
this.emit({
|
|
176
|
+
type: 'message',
|
|
177
|
+
message,
|
|
178
|
+
timestamp: new Date(),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
const event = JSON.parse(data);
|
|
185
|
+
// Handle Vercel AI event types
|
|
186
|
+
// Server sends: {"type":"text-delta","delta":"Hello","id":"..."}
|
|
187
|
+
if (event.type === 'text-delta' && event.delta) {
|
|
188
|
+
accumulatedText += event.delta;
|
|
189
|
+
// Emit 'message' event with accumulated content for useChat
|
|
190
|
+
const message = createAssistantMessage(accumulatedText);
|
|
191
|
+
message.id = currentMessageId;
|
|
192
|
+
this.emit({
|
|
193
|
+
type: 'message',
|
|
194
|
+
message,
|
|
195
|
+
timestamp: new Date(),
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
else if (event.type === 'text-start') {
|
|
199
|
+
// New text block starting
|
|
200
|
+
currentMessageId = event.id || generateMessageId();
|
|
201
|
+
accumulatedText = '';
|
|
202
|
+
}
|
|
203
|
+
else if (event.type === 'finish' || event.type === 'end-step') {
|
|
204
|
+
if (accumulatedText) {
|
|
205
|
+
const message = createAssistantMessage(accumulatedText);
|
|
206
|
+
message.id = currentMessageId;
|
|
207
|
+
this.emit({
|
|
208
|
+
type: 'message',
|
|
209
|
+
message,
|
|
210
|
+
timestamp: new Date(),
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else if (event.type === 'error') {
|
|
215
|
+
this.emit({
|
|
216
|
+
type: 'error',
|
|
217
|
+
error: new Error(event.error || 'Unknown error'),
|
|
218
|
+
timestamp: new Date(),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch (parseError) {
|
|
223
|
+
console.error('[VercelAIAdapter] Failed to parse SSE data:', parseError);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
finally {
|
|
230
|
+
reader.releaseLock();
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Send tool result (not supported in Vercel AI adapter)
|
|
235
|
+
*/
|
|
236
|
+
async sendToolResult(_toolCallId, _result) {
|
|
237
|
+
throw new Error('Tool result not supported in Vercel AI adapter');
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Request permission (not supported in Vercel AI)
|
|
241
|
+
*/
|
|
242
|
+
async requestPermission(_permission) {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Stop generation
|
|
247
|
+
*/
|
|
248
|
+
stopGeneration() {
|
|
249
|
+
this.abortController?.abort();
|
|
250
|
+
this.abortController = null;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol adapter exports for chat component.
|
|
3
|
+
*
|
|
4
|
+
* @module components/chat/protocols
|
|
5
|
+
*/
|
|
6
|
+
export { BaseProtocolAdapter } from './BaseProtocolAdapter';
|
|
7
|
+
export { AGUIAdapter, type AGUIAdapterConfig } from './AGUIAdapter';
|
|
8
|
+
export { A2AAdapter, type A2AAdapterConfig } from './A2AAdapter';
|
|
9
|
+
export { VercelAIAdapter, type VercelAIAdapterConfig } from './VercelAIAdapter';
|
|
10
|
+
export { ACPAdapter, type ACPAdapterConfig, type ACPSession, type ACPAgent, type ACPPendingPermission, } from './ACPAdapter';
|
|
11
|
+
export type { ProtocolAdapter, ProtocolAdapterConfig, ProtocolAdapterFactory, TransportType, ProtocolTransport, ProtocolConnectionState, ProtocolEvent, ProtocolEventType, ProtocolEventHandler, ProtocolMessageConverter, AgentCard, AGUI, A2A, ACP, } from '../types/protocol';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Protocol adapter exports for chat component.
|
|
7
|
+
*
|
|
8
|
+
* @module components/chat/protocols
|
|
9
|
+
*/
|
|
10
|
+
export { BaseProtocolAdapter } from './BaseProtocolAdapter';
|
|
11
|
+
export { AGUIAdapter } from './AGUIAdapter';
|
|
12
|
+
export { A2AAdapter } from './A2AAdapter';
|
|
13
|
+
export { VercelAIAdapter } from './VercelAIAdapter';
|
|
14
|
+
export { ACPAdapter, } from './ACPAdapter';
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import type { ChatMessage, ChatThread, ToolRegistryEntry, ToolDefinition, ChatExtension, ExtensionRegistryEntry, ChatMiddleware, ToolCallStatus } from '../types';
|
|
2
|
+
import type { InferenceProvider } from '../types/inference';
|
|
3
|
+
import type { ProtocolAdapter } from '../types/protocol';
|
|
4
|
+
import type { ToolExecutor } from '../tools/ToolExecutor';
|
|
5
|
+
import type { MiddlewarePipeline } from '../middleware/MiddlewarePipeline';
|
|
6
|
+
import type { ExtensionRegistry } from '../extensions/ExtensionRegistry';
|
|
7
|
+
/**
|
|
8
|
+
* Chat configuration options
|
|
9
|
+
*/
|
|
10
|
+
export interface ChatConfig {
|
|
11
|
+
/** Default inference provider type */
|
|
12
|
+
defaultProvider?: 'datalayer' | 'openai' | 'anthropic' | 'self-hosted';
|
|
13
|
+
/** Default protocol type */
|
|
14
|
+
defaultProtocol?: 'ag-ui' | 'a2a' | 'acp' | 'mcp-ui';
|
|
15
|
+
/** API base URL for inference */
|
|
16
|
+
apiBaseUrl?: string;
|
|
17
|
+
/** API key for inference */
|
|
18
|
+
apiKey?: string;
|
|
19
|
+
/** Default model to use */
|
|
20
|
+
defaultModel?: string;
|
|
21
|
+
/** Enable tool approval by default */
|
|
22
|
+
requireToolApproval?: boolean;
|
|
23
|
+
/** Enable streaming by default */
|
|
24
|
+
enableStreaming?: boolean;
|
|
25
|
+
/** Enable debug logging */
|
|
26
|
+
debug?: boolean;
|
|
27
|
+
/** Session ID for persistence */
|
|
28
|
+
sessionId?: string;
|
|
29
|
+
/** Enable local storage persistence */
|
|
30
|
+
persistToLocalStorage?: boolean;
|
|
31
|
+
/** Custom headers for API requests */
|
|
32
|
+
customHeaders?: Record<string, string>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Default configuration
|
|
36
|
+
*/
|
|
37
|
+
export declare const defaultChatConfig: ChatConfig;
|
|
38
|
+
/**
|
|
39
|
+
* Tool call tracking state
|
|
40
|
+
*/
|
|
41
|
+
export interface ToolCallState {
|
|
42
|
+
toolCallId: string;
|
|
43
|
+
toolName: string;
|
|
44
|
+
args: Record<string, unknown>;
|
|
45
|
+
status: ToolCallStatus;
|
|
46
|
+
result?: unknown;
|
|
47
|
+
error?: string;
|
|
48
|
+
startedAt: Date;
|
|
49
|
+
completedAt?: Date;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Chat store state
|
|
53
|
+
*/
|
|
54
|
+
interface ChatState {
|
|
55
|
+
config: ChatConfig;
|
|
56
|
+
ready: boolean;
|
|
57
|
+
inferenceProvider: InferenceProvider | null;
|
|
58
|
+
protocolAdapter: ProtocolAdapter | null;
|
|
59
|
+
toolExecutor: ToolExecutor | null;
|
|
60
|
+
middlewarePipeline: MiddlewarePipeline | null;
|
|
61
|
+
extensionRegistry: ExtensionRegistry | null;
|
|
62
|
+
messages: ChatMessage[];
|
|
63
|
+
isLoading: boolean;
|
|
64
|
+
isStreaming: boolean;
|
|
65
|
+
streamingMessageId: string | null;
|
|
66
|
+
currentThreadId: string | null;
|
|
67
|
+
threads: Map<string, ChatThread>;
|
|
68
|
+
tools: Map<string, ToolRegistryEntry>;
|
|
69
|
+
pendingToolCalls: Map<string, ToolCallState>;
|
|
70
|
+
extensions: Map<string, ExtensionRegistryEntry>;
|
|
71
|
+
middlewares: ChatMiddleware[];
|
|
72
|
+
isOpen: boolean;
|
|
73
|
+
error: Error | null;
|
|
74
|
+
suggestions: string[];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Chat store actions
|
|
78
|
+
*/
|
|
79
|
+
interface ChatActions {
|
|
80
|
+
setConfig: (config: Partial<ChatConfig>) => void;
|
|
81
|
+
setReady: (ready: boolean) => void;
|
|
82
|
+
setInferenceProvider: (provider: InferenceProvider | null) => void;
|
|
83
|
+
setProtocolAdapter: (adapter: ProtocolAdapter | null) => void;
|
|
84
|
+
setToolExecutor: (executor: ToolExecutor | null) => void;
|
|
85
|
+
setMiddlewarePipeline: (pipeline: MiddlewarePipeline | null) => void;
|
|
86
|
+
setExtensionRegistry: (registry: ExtensionRegistry | null) => void;
|
|
87
|
+
addMessage: (message: ChatMessage) => void;
|
|
88
|
+
updateMessage: (messageId: string, updates: Partial<ChatMessage>) => void;
|
|
89
|
+
deleteMessage: (messageId: string) => void;
|
|
90
|
+
setMessages: (messages: ChatMessage[]) => void;
|
|
91
|
+
clearMessages: () => void;
|
|
92
|
+
startStreaming: (messageId: string) => void;
|
|
93
|
+
appendToStream: (messageId: string, content: string) => void;
|
|
94
|
+
stopStreaming: () => void;
|
|
95
|
+
setLoading: (loading: boolean) => void;
|
|
96
|
+
setError: (error: Error | null) => void;
|
|
97
|
+
setCurrentThread: (threadId: string | null) => void;
|
|
98
|
+
createThread: (title?: string) => string;
|
|
99
|
+
deleteThread: (threadId: string) => void;
|
|
100
|
+
registerTool: (definition: ToolDefinition) => void;
|
|
101
|
+
unregisterTool: (name: string) => void;
|
|
102
|
+
getTool: (name: string) => ToolRegistryEntry | undefined;
|
|
103
|
+
getTools: () => ToolDefinition[];
|
|
104
|
+
startToolCall: (toolCallId: string, toolName: string, args: Record<string, unknown>) => void;
|
|
105
|
+
updateToolCallStatus: (toolCallId: string, status: ToolCallStatus, result?: unknown, error?: string) => void;
|
|
106
|
+
getPendingToolCalls: () => ToolCallState[];
|
|
107
|
+
registerExtension: (extension: ChatExtension, options?: {
|
|
108
|
+
enabled?: boolean;
|
|
109
|
+
}) => void;
|
|
110
|
+
unregisterExtension: (name: string) => void;
|
|
111
|
+
enableExtension: (name: string) => void;
|
|
112
|
+
disableExtension: (name: string) => void;
|
|
113
|
+
getExtensions: <T extends ChatExtension>(type?: T['type']) => T[];
|
|
114
|
+
addMiddleware: (middleware: ChatMiddleware) => void;
|
|
115
|
+
removeMiddleware: (name: string) => void;
|
|
116
|
+
getMiddlewares: () => ChatMiddleware[];
|
|
117
|
+
setOpen: (open: boolean) => void;
|
|
118
|
+
toggleOpen: () => void;
|
|
119
|
+
setSuggestions: (suggestions: string[]) => void;
|
|
120
|
+
reset: () => void;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Combined store type
|
|
124
|
+
*/
|
|
125
|
+
export type ChatStore = ChatState & ChatActions;
|
|
126
|
+
/**
|
|
127
|
+
* Create the chat store
|
|
128
|
+
*/
|
|
129
|
+
export declare const useChatStore: import("zustand").UseBoundStore<Omit<Omit<import("zustand").StoreApi<ChatStore>, "setState"> & {
|
|
130
|
+
setState<A extends string | {
|
|
131
|
+
type: string;
|
|
132
|
+
}>(partial: ChatStore | Partial<ChatStore> | ((state: ChatStore) => ChatStore | Partial<ChatStore>), replace?: boolean | undefined, action?: A | undefined): void;
|
|
133
|
+
}, "subscribe"> & {
|
|
134
|
+
subscribe: {
|
|
135
|
+
(listener: (selectedState: ChatStore, previousSelectedState: ChatStore) => void): () => void;
|
|
136
|
+
<U>(selector: (state: ChatStore) => U, listener: (selectedState: U, previousSelectedState: U) => void, options?: {
|
|
137
|
+
equalityFn?: ((a: U, b: U) => boolean) | undefined;
|
|
138
|
+
fireImmediately?: boolean;
|
|
139
|
+
} | undefined): () => void;
|
|
140
|
+
};
|
|
141
|
+
}>;
|
|
142
|
+
/**
|
|
143
|
+
* Selector hooks for specific state slices
|
|
144
|
+
*/
|
|
145
|
+
export declare const useChatMessages: () => ChatMessage[];
|
|
146
|
+
export declare const useChatLoading: () => boolean;
|
|
147
|
+
export declare const useChatStreaming: () => {
|
|
148
|
+
isStreaming: boolean;
|
|
149
|
+
streamingMessageId: string | null;
|
|
150
|
+
};
|
|
151
|
+
export declare const useChatError: () => Error | null;
|
|
152
|
+
export declare const useChatTools: () => ToolDefinition[];
|
|
153
|
+
export declare const useChatOpen: () => boolean;
|
|
154
|
+
export declare const useChatConfig: () => ChatConfig;
|
|
155
|
+
export declare const useChatReady: () => boolean;
|
|
156
|
+
export declare const useChatInferenceProvider: () => InferenceProvider | null;
|
|
157
|
+
export declare const useChatExtensionRegistry: () => ExtensionRegistry | null;
|
|
158
|
+
export {};
|