@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,518 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
import { generateMessageId, createAssistantMessage } from '../types/message';
|
|
6
|
+
import { BaseProtocolAdapter } from './BaseProtocolAdapter';
|
|
7
|
+
/**
|
|
8
|
+
* AG-UI protocol adapter
|
|
9
|
+
* Uses HTTP POST with SSE streaming for responses
|
|
10
|
+
*/
|
|
11
|
+
export class AGUIAdapter extends BaseProtocolAdapter {
|
|
12
|
+
type = 'ag-ui';
|
|
13
|
+
transport = 'sse';
|
|
14
|
+
aguiConfig;
|
|
15
|
+
abortController = null;
|
|
16
|
+
currentThreadId = null;
|
|
17
|
+
// Track in-progress tool calls to accumulate args and emit results
|
|
18
|
+
pendingToolCalls = new Map();
|
|
19
|
+
// Store conversation history for tool result continuation
|
|
20
|
+
messageHistory = [];
|
|
21
|
+
lastAssistantContent = '';
|
|
22
|
+
lastTools = [];
|
|
23
|
+
constructor(config) {
|
|
24
|
+
super(config);
|
|
25
|
+
this.aguiConfig = config;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Connect to AG-UI endpoint (SSE doesn't require persistent connection)
|
|
29
|
+
*/
|
|
30
|
+
async connect() {
|
|
31
|
+
this.setConnectionState('connecting');
|
|
32
|
+
// AG-UI uses request-based SSE, no persistent connection needed
|
|
33
|
+
// Just mark as connected - the actual endpoint will be verified on first message
|
|
34
|
+
this.setConnectionState('connected');
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Disconnect and terminate any ongoing agent execution
|
|
38
|
+
*/
|
|
39
|
+
disconnect() {
|
|
40
|
+
// Abort any ongoing fetch request
|
|
41
|
+
if (this.abortController) {
|
|
42
|
+
this.abortController.abort();
|
|
43
|
+
this.abortController = null;
|
|
44
|
+
}
|
|
45
|
+
// Send terminate request to backend if we have a thread ID
|
|
46
|
+
if (this.currentThreadId) {
|
|
47
|
+
this.terminateAgent(this.currentThreadId).catch(err => {
|
|
48
|
+
console.warn('[AGUIAdapter] Failed to terminate agent:', err);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
this.setConnectionState('disconnected');
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Terminate a running agent thread on the backend
|
|
55
|
+
*/
|
|
56
|
+
async terminateAgent(threadId) {
|
|
57
|
+
try {
|
|
58
|
+
// Derive the terminate endpoint from the base URL
|
|
59
|
+
// e.g., http://localhost:8765/api/v1/examples/agentic_chat/ -> http://localhost:8765/api/v1/ag-ui/terminate
|
|
60
|
+
const baseUrl = new URL(this.aguiConfig.baseUrl);
|
|
61
|
+
const terminateUrl = `${baseUrl.origin}/api/v1/ag-ui/terminate`;
|
|
62
|
+
const response = await fetch(terminateUrl, {
|
|
63
|
+
method: 'POST',
|
|
64
|
+
headers: {
|
|
65
|
+
'Content-Type': 'application/json',
|
|
66
|
+
},
|
|
67
|
+
body: JSON.stringify({
|
|
68
|
+
thread_id: threadId || this.currentThreadId,
|
|
69
|
+
}),
|
|
70
|
+
});
|
|
71
|
+
if (!response.ok) {
|
|
72
|
+
console.warn(`[AGUIAdapter] Terminate request failed: ${response.status}`);
|
|
73
|
+
}
|
|
74
|
+
// else: Successfully terminated, no action needed
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Ignore errors - agent may have already completed
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Send a message through AG-UI protocol
|
|
82
|
+
* @param message - The new message to send
|
|
83
|
+
* @param options - Options including full message history
|
|
84
|
+
*/
|
|
85
|
+
async sendMessage(message, options) {
|
|
86
|
+
this.abortController = new AbortController();
|
|
87
|
+
const threadId = options?.threadId || this.currentThreadId || generateMessageId();
|
|
88
|
+
this.currentThreadId = threadId;
|
|
89
|
+
// Use full message history if provided, otherwise just the new message
|
|
90
|
+
// AG-UI expects the complete conversation history
|
|
91
|
+
const allMessages = options?.messages || [message];
|
|
92
|
+
// Store message history and tools for potential tool result continuation
|
|
93
|
+
this.messageHistory = [...allMessages];
|
|
94
|
+
this.lastTools = options?.tools || [];
|
|
95
|
+
this.lastAssistantContent = '';
|
|
96
|
+
// Convert ChatMessages to AG-UI message format
|
|
97
|
+
// AG-UI expects:
|
|
98
|
+
// - Assistant messages with tool_calls array for tool invocations
|
|
99
|
+
// - Tool messages with tool_call_id at top level (snake_case per OpenAI format)
|
|
100
|
+
const aguiMessages = allMessages.map(msg => {
|
|
101
|
+
const baseMessage = {
|
|
102
|
+
id: msg.id,
|
|
103
|
+
role: msg.role,
|
|
104
|
+
content: msg.content,
|
|
105
|
+
};
|
|
106
|
+
// For tool messages, add the tool_call_id (snake_case for AG-UI/OpenAI format)
|
|
107
|
+
if (msg.role === 'tool' && msg.metadata?.toolCallId) {
|
|
108
|
+
baseMessage.tool_call_id = msg.metadata.toolCallId;
|
|
109
|
+
}
|
|
110
|
+
// For assistant messages with tool calls, convert to AG-UI format
|
|
111
|
+
// Content should be null when there are tool calls (OpenAI format)
|
|
112
|
+
if (msg.role === 'assistant' &&
|
|
113
|
+
msg.toolCalls &&
|
|
114
|
+
msg.toolCalls.length > 0) {
|
|
115
|
+
baseMessage.content =
|
|
116
|
+
typeof msg.content === 'string' && msg.content.trim()
|
|
117
|
+
? msg.content
|
|
118
|
+
: null;
|
|
119
|
+
baseMessage.tool_calls = msg.toolCalls.map(tc => ({
|
|
120
|
+
id: tc.toolCallId,
|
|
121
|
+
type: 'function',
|
|
122
|
+
function: {
|
|
123
|
+
name: tc.toolName,
|
|
124
|
+
arguments: JSON.stringify(tc.args || {}),
|
|
125
|
+
},
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
return baseMessage;
|
|
129
|
+
});
|
|
130
|
+
const runAgentInput = {
|
|
131
|
+
threadId,
|
|
132
|
+
runId: generateMessageId(),
|
|
133
|
+
messages: aguiMessages,
|
|
134
|
+
state: null,
|
|
135
|
+
tools: options?.tools || [],
|
|
136
|
+
context: [],
|
|
137
|
+
forwardedProps: null,
|
|
138
|
+
};
|
|
139
|
+
try {
|
|
140
|
+
const response = await fetch(this.aguiConfig.baseUrl, {
|
|
141
|
+
method: 'POST',
|
|
142
|
+
headers: this.buildHeaders({
|
|
143
|
+
Accept: 'text/event-stream',
|
|
144
|
+
}),
|
|
145
|
+
body: JSON.stringify(runAgentInput),
|
|
146
|
+
signal: this.abortController.signal,
|
|
147
|
+
});
|
|
148
|
+
if (!response.ok) {
|
|
149
|
+
throw new Error(`AG-UI request failed: ${response.status} ${response.statusText}`);
|
|
150
|
+
}
|
|
151
|
+
// Parse SSE stream
|
|
152
|
+
await this.parseSSEStream(response);
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (error.name === 'AbortError') {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.emit({
|
|
159
|
+
type: 'error',
|
|
160
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
161
|
+
timestamp: new Date(),
|
|
162
|
+
});
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
this.abortController = null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Send tool result back through AG-UI and continue the conversation
|
|
171
|
+
*
|
|
172
|
+
* AG-UI requires tool results to be sent as a new request with the full
|
|
173
|
+
* message history including the tool result as a message with role: "tool"
|
|
174
|
+
*/
|
|
175
|
+
async sendToolResult(toolCallId, result) {
|
|
176
|
+
// First emit local event for UI updates
|
|
177
|
+
this.emit({
|
|
178
|
+
type: 'tool-result',
|
|
179
|
+
toolResult: result,
|
|
180
|
+
timestamp: new Date(),
|
|
181
|
+
});
|
|
182
|
+
// Get the tool name and args from pending tool calls
|
|
183
|
+
const pendingToolCall = this.pendingToolCalls.get(toolCallId);
|
|
184
|
+
if (!pendingToolCall) {
|
|
185
|
+
console.warn('[AGUIAdapter] No pending tool call found for ID:', toolCallId);
|
|
186
|
+
console.log('[AGUIAdapter] Pending tool calls:', Array.from(this.pendingToolCalls.keys()));
|
|
187
|
+
}
|
|
188
|
+
const toolName = pendingToolCall?.toolName || 'unknown';
|
|
189
|
+
// Parse the args safely
|
|
190
|
+
let parsedArgs = {};
|
|
191
|
+
if (pendingToolCall?.argsJson) {
|
|
192
|
+
try {
|
|
193
|
+
parsedArgs = JSON.parse(pendingToolCall.argsJson);
|
|
194
|
+
}
|
|
195
|
+
catch (e) {
|
|
196
|
+
console.warn('[AGUIAdapter] Failed to parse tool args:', e);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Build the assistant message that contained the tool call
|
|
200
|
+
// AG-UI expects assistant messages with tool_calls to potentially have empty content
|
|
201
|
+
const assistantMessageWithToolCall = {
|
|
202
|
+
id: generateMessageId(),
|
|
203
|
+
role: 'assistant',
|
|
204
|
+
content: this.lastAssistantContent || '',
|
|
205
|
+
createdAt: new Date(),
|
|
206
|
+
toolCalls: [
|
|
207
|
+
{
|
|
208
|
+
type: 'tool-call',
|
|
209
|
+
toolCallId,
|
|
210
|
+
toolName,
|
|
211
|
+
args: parsedArgs,
|
|
212
|
+
status: 'completed',
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
};
|
|
216
|
+
// Build the tool result message
|
|
217
|
+
const toolResultMessage = {
|
|
218
|
+
id: generateMessageId(),
|
|
219
|
+
role: 'tool',
|
|
220
|
+
content: typeof result.result === 'string'
|
|
221
|
+
? result.result
|
|
222
|
+
: JSON.stringify(result.result),
|
|
223
|
+
createdAt: new Date(),
|
|
224
|
+
metadata: {
|
|
225
|
+
toolCallId,
|
|
226
|
+
toolName,
|
|
227
|
+
isError: !result.success,
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
// Build full message history for continuation
|
|
231
|
+
const continuationMessages = [
|
|
232
|
+
...this.messageHistory,
|
|
233
|
+
assistantMessageWithToolCall,
|
|
234
|
+
toolResultMessage,
|
|
235
|
+
];
|
|
236
|
+
// Update stored message history
|
|
237
|
+
this.messageHistory = continuationMessages;
|
|
238
|
+
// Send continuation request to get agent's response to the tool result
|
|
239
|
+
// This will trigger a new SSE stream with the agent's response
|
|
240
|
+
await this.sendMessage(toolResultMessage, {
|
|
241
|
+
messages: continuationMessages,
|
|
242
|
+
tools: this.lastTools,
|
|
243
|
+
threadId: this.currentThreadId || undefined,
|
|
244
|
+
});
|
|
245
|
+
// Clear the pending tool call
|
|
246
|
+
this.pendingToolCalls.delete(toolCallId);
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Check feature support
|
|
250
|
+
*/
|
|
251
|
+
supportsFeature(feature) {
|
|
252
|
+
const supportedFeatures = [
|
|
253
|
+
'streaming',
|
|
254
|
+
'tools',
|
|
255
|
+
'frontend-tools',
|
|
256
|
+
'backend-tools',
|
|
257
|
+
'activity-messages',
|
|
258
|
+
];
|
|
259
|
+
return supportedFeatures.includes(feature);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Parse SSE stream from AG-UI response
|
|
263
|
+
*/
|
|
264
|
+
async parseSSEStream(response) {
|
|
265
|
+
const reader = response.body?.getReader();
|
|
266
|
+
if (!reader) {
|
|
267
|
+
throw new Error('Response body is not readable');
|
|
268
|
+
}
|
|
269
|
+
const decoder = new TextDecoder();
|
|
270
|
+
let buffer = '';
|
|
271
|
+
let currentMessageId = null;
|
|
272
|
+
let currentContent = '';
|
|
273
|
+
try {
|
|
274
|
+
while (true) {
|
|
275
|
+
const { done, value } = await reader.read();
|
|
276
|
+
if (done)
|
|
277
|
+
break;
|
|
278
|
+
buffer += decoder.decode(value, { stream: true });
|
|
279
|
+
const lines = buffer.split('\n');
|
|
280
|
+
buffer = lines.pop() || '';
|
|
281
|
+
for (const line of lines) {
|
|
282
|
+
if (line.startsWith('event: ')) {
|
|
283
|
+
// Event type (currently unused)
|
|
284
|
+
// const eventType = line.slice(7);
|
|
285
|
+
// Handle event type if needed
|
|
286
|
+
}
|
|
287
|
+
else if (line.startsWith('data: ')) {
|
|
288
|
+
const data = line.slice(6);
|
|
289
|
+
try {
|
|
290
|
+
const event = JSON.parse(data);
|
|
291
|
+
this.handleAGUIEvent(event, {
|
|
292
|
+
getCurrentMessageId: () => currentMessageId,
|
|
293
|
+
setCurrentMessageId: id => {
|
|
294
|
+
currentMessageId = id;
|
|
295
|
+
},
|
|
296
|
+
getCurrentContent: () => currentContent,
|
|
297
|
+
appendContent: content => {
|
|
298
|
+
currentContent += content;
|
|
299
|
+
},
|
|
300
|
+
resetContent: () => {
|
|
301
|
+
currentContent = '';
|
|
302
|
+
},
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
catch (e) {
|
|
306
|
+
// Non-JSON data, might be raw content
|
|
307
|
+
console.warn('[AGUIAdapter] Failed to parse event data:', e);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
finally {
|
|
314
|
+
reader.releaseLock();
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* Handle individual AG-UI events
|
|
319
|
+
*
|
|
320
|
+
* AG-UI event format:
|
|
321
|
+
* - type: Event type (e.g., "TEXT_MESSAGE_CONTENT")
|
|
322
|
+
* - timestamp: Event timestamp
|
|
323
|
+
* - messageId: Message ID (for message events)
|
|
324
|
+
* - delta: Content delta (for TEXT_MESSAGE_CONTENT)
|
|
325
|
+
* - Other fields at top level, NOT nested in 'data'
|
|
326
|
+
*/
|
|
327
|
+
handleAGUIEvent(event, context) {
|
|
328
|
+
const eventType = event.type;
|
|
329
|
+
switch (eventType) {
|
|
330
|
+
case 'RUN_STARTED':
|
|
331
|
+
context.setCurrentMessageId(generateMessageId());
|
|
332
|
+
context.resetContent();
|
|
333
|
+
break;
|
|
334
|
+
case 'TEXT_MESSAGE_START': {
|
|
335
|
+
const messageId = event.messageId;
|
|
336
|
+
context.setCurrentMessageId(messageId || generateMessageId());
|
|
337
|
+
context.resetContent();
|
|
338
|
+
break;
|
|
339
|
+
}
|
|
340
|
+
case 'TEXT_MESSAGE_CONTENT': {
|
|
341
|
+
// AG-UI sends delta at top level, not nested in data
|
|
342
|
+
const delta = event.delta;
|
|
343
|
+
if (delta) {
|
|
344
|
+
context.appendContent(delta);
|
|
345
|
+
const message = createAssistantMessage(context.getCurrentContent());
|
|
346
|
+
message.id = context.getCurrentMessageId() || generateMessageId();
|
|
347
|
+
this.emit({
|
|
348
|
+
type: 'message',
|
|
349
|
+
message,
|
|
350
|
+
timestamp: new Date(),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
case 'TEXT_MESSAGE_END': {
|
|
356
|
+
const finalMessage = createAssistantMessage(context.getCurrentContent());
|
|
357
|
+
finalMessage.id = context.getCurrentMessageId() || generateMessageId();
|
|
358
|
+
// Store the assistant content for tool result continuation
|
|
359
|
+
this.lastAssistantContent = context.getCurrentContent();
|
|
360
|
+
this.emit({
|
|
361
|
+
type: 'message',
|
|
362
|
+
message: finalMessage,
|
|
363
|
+
timestamp: new Date(),
|
|
364
|
+
});
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
case 'TOOL_CALL_START': {
|
|
368
|
+
// AG-UI protocol uses camelCase (toolCallId, toolCallName)
|
|
369
|
+
const toolCallId = event.toolCallId ||
|
|
370
|
+
event.tool_call_id ||
|
|
371
|
+
generateMessageId();
|
|
372
|
+
const toolName = event.toolCallName ||
|
|
373
|
+
event.tool_call_name ||
|
|
374
|
+
event.name ||
|
|
375
|
+
'';
|
|
376
|
+
// Initialize pending tool call
|
|
377
|
+
this.pendingToolCalls.set(toolCallId, {
|
|
378
|
+
toolCallId,
|
|
379
|
+
toolName,
|
|
380
|
+
argsJson: '',
|
|
381
|
+
});
|
|
382
|
+
this.emit({
|
|
383
|
+
type: 'tool-call',
|
|
384
|
+
toolCall: {
|
|
385
|
+
toolCallId,
|
|
386
|
+
toolName,
|
|
387
|
+
args: {},
|
|
388
|
+
},
|
|
389
|
+
timestamp: new Date(),
|
|
390
|
+
});
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
case 'TOOL_CALL_ARGS': {
|
|
394
|
+
// Accumulate tool call arguments (streamed as JSON deltas)
|
|
395
|
+
// AG-UI uses camelCase (toolCallId)
|
|
396
|
+
const toolCallId = event.toolCallId || event.tool_call_id;
|
|
397
|
+
const delta = event.delta;
|
|
398
|
+
if (toolCallId && delta && this.pendingToolCalls.has(toolCallId)) {
|
|
399
|
+
const pending = this.pendingToolCalls.get(toolCallId);
|
|
400
|
+
if (pending) {
|
|
401
|
+
pending.argsJson += delta;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
break;
|
|
405
|
+
}
|
|
406
|
+
case 'TOOL_CALL_END': {
|
|
407
|
+
// Tool call completed - emit tool-call event with accumulated args
|
|
408
|
+
// AG-UI uses camelCase (toolCallId)
|
|
409
|
+
const toolCallIdEnd = event.toolCallId || event.tool_call_id;
|
|
410
|
+
if (toolCallIdEnd && this.pendingToolCalls.has(toolCallIdEnd)) {
|
|
411
|
+
const pending = this.pendingToolCalls.get(toolCallIdEnd);
|
|
412
|
+
if (pending) {
|
|
413
|
+
// Parse accumulated args JSON
|
|
414
|
+
let parsedArgs = {};
|
|
415
|
+
if (pending.argsJson) {
|
|
416
|
+
try {
|
|
417
|
+
parsedArgs = JSON.parse(pending.argsJson);
|
|
418
|
+
}
|
|
419
|
+
catch {
|
|
420
|
+
// Keep empty if JSON parsing fails
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
// Emit tool-call event with the parsed arguments
|
|
424
|
+
// This updates the tool call with the complete args
|
|
425
|
+
this.emit({
|
|
426
|
+
type: 'tool-call',
|
|
427
|
+
toolCall: {
|
|
428
|
+
toolCallId: pending.toolCallId,
|
|
429
|
+
toolName: pending.toolName,
|
|
430
|
+
args: parsedArgs,
|
|
431
|
+
},
|
|
432
|
+
timestamp: new Date(),
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
break;
|
|
437
|
+
}
|
|
438
|
+
case 'TOOL_CALL_RESULT': {
|
|
439
|
+
// Tool execution result with actual output
|
|
440
|
+
// AG-UI uses camelCase (toolCallId)
|
|
441
|
+
const toolCallId = event.toolCallId || event.tool_call_id;
|
|
442
|
+
let content = event.content;
|
|
443
|
+
// Parse JSON content if it's a string
|
|
444
|
+
if (typeof content === 'string') {
|
|
445
|
+
try {
|
|
446
|
+
content = JSON.parse(content);
|
|
447
|
+
}
|
|
448
|
+
catch {
|
|
449
|
+
// Keep as string if not valid JSON
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
if (toolCallId) {
|
|
453
|
+
// Emit tool result event with the actual content
|
|
454
|
+
this.emit({
|
|
455
|
+
type: 'tool-result',
|
|
456
|
+
toolResult: {
|
|
457
|
+
toolCallId,
|
|
458
|
+
success: true,
|
|
459
|
+
result: content,
|
|
460
|
+
},
|
|
461
|
+
timestamp: new Date(),
|
|
462
|
+
});
|
|
463
|
+
// Clean up
|
|
464
|
+
this.pendingToolCalls.delete(toolCallId);
|
|
465
|
+
}
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
case 'STATE_SNAPSHOT': {
|
|
469
|
+
const state = event.snapshot;
|
|
470
|
+
this.emit({
|
|
471
|
+
type: 'state-update',
|
|
472
|
+
data: state,
|
|
473
|
+
timestamp: new Date(),
|
|
474
|
+
});
|
|
475
|
+
break;
|
|
476
|
+
}
|
|
477
|
+
case 'STATE_DELTA': {
|
|
478
|
+
// State delta contains JSON Patch operations (RFC 6902)
|
|
479
|
+
// Emit as state-update with the delta for the ChatBase to handle
|
|
480
|
+
const delta = event.delta;
|
|
481
|
+
this.emit({
|
|
482
|
+
type: 'state-update',
|
|
483
|
+
data: { __delta: delta },
|
|
484
|
+
timestamp: new Date(),
|
|
485
|
+
});
|
|
486
|
+
break;
|
|
487
|
+
}
|
|
488
|
+
case 'CUSTOM': {
|
|
489
|
+
const name = event.name;
|
|
490
|
+
const value = event.value;
|
|
491
|
+
this.emit({
|
|
492
|
+
type: 'activity',
|
|
493
|
+
activity: {
|
|
494
|
+
type: name || 'custom',
|
|
495
|
+
data: value,
|
|
496
|
+
},
|
|
497
|
+
timestamp: new Date(),
|
|
498
|
+
});
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
case 'RUN_FINISHED':
|
|
502
|
+
// Run completed successfully
|
|
503
|
+
break;
|
|
504
|
+
case 'RUN_ERROR': {
|
|
505
|
+
const errorMessage = event.message;
|
|
506
|
+
this.emit({
|
|
507
|
+
type: 'error',
|
|
508
|
+
error: new Error(errorMessage || 'Run failed'),
|
|
509
|
+
timestamp: new Date(),
|
|
510
|
+
});
|
|
511
|
+
break;
|
|
512
|
+
}
|
|
513
|
+
default:
|
|
514
|
+
// Unknown event type - ignore
|
|
515
|
+
break;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base protocol adapter class with common functionality.
|
|
3
|
+
*
|
|
4
|
+
* @module components/chat/protocols/BaseProtocolAdapter
|
|
5
|
+
*/
|
|
6
|
+
import type { ProtocolAdapter, ProtocolAdapterConfig, TransportType, ProtocolTransport, ProtocolConnectionState, ProtocolEvent, ProtocolEventHandler, AgentCard } from '../types/protocol';
|
|
7
|
+
import type { ChatMessage } from '../types/message';
|
|
8
|
+
import type { ToolDefinition, ToolExecutionResult } from '../types/tool';
|
|
9
|
+
/**
|
|
10
|
+
* Abstract base class for protocol adapters
|
|
11
|
+
*/
|
|
12
|
+
export declare abstract class BaseProtocolAdapter implements ProtocolAdapter {
|
|
13
|
+
abstract readonly type: TransportType;
|
|
14
|
+
abstract readonly transport: ProtocolTransport;
|
|
15
|
+
protected config: ProtocolAdapterConfig;
|
|
16
|
+
protected _connectionState: ProtocolConnectionState;
|
|
17
|
+
protected eventHandlers: Set<ProtocolEventHandler>;
|
|
18
|
+
protected reconnectAttempts: number;
|
|
19
|
+
constructor(config: ProtocolAdapterConfig);
|
|
20
|
+
get connectionState(): ProtocolConnectionState;
|
|
21
|
+
/**
|
|
22
|
+
* Connect to the protocol endpoint
|
|
23
|
+
*/
|
|
24
|
+
abstract connect(): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Disconnect from the endpoint
|
|
27
|
+
*/
|
|
28
|
+
abstract disconnect(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Send a message through the protocol
|
|
31
|
+
*/
|
|
32
|
+
abstract sendMessage(message: ChatMessage, options?: {
|
|
33
|
+
tools?: ToolDefinition[];
|
|
34
|
+
threadId?: string;
|
|
35
|
+
metadata?: Record<string, unknown>;
|
|
36
|
+
/** Full conversation history to send with the message */
|
|
37
|
+
messages?: ChatMessage[];
|
|
38
|
+
}): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Send tool execution result back
|
|
41
|
+
*/
|
|
42
|
+
abstract sendToolResult(toolCallId: string, result: ToolExecutionResult): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Subscribe to protocol events
|
|
45
|
+
*/
|
|
46
|
+
subscribe(handler: ProtocolEventHandler): () => void;
|
|
47
|
+
/**
|
|
48
|
+
* Get agent card (optional, mainly for A2A)
|
|
49
|
+
*/
|
|
50
|
+
getAgentCard(): Promise<AgentCard | null>;
|
|
51
|
+
/**
|
|
52
|
+
* Check if protocol supports a specific feature
|
|
53
|
+
*/
|
|
54
|
+
supportsFeature(feature: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Emit an event to all subscribers
|
|
57
|
+
*/
|
|
58
|
+
protected emit(event: ProtocolEvent): void;
|
|
59
|
+
/**
|
|
60
|
+
* Update connection state and emit event
|
|
61
|
+
*/
|
|
62
|
+
protected setConnectionState(state: ProtocolConnectionState): void;
|
|
63
|
+
/**
|
|
64
|
+
* Handle reconnection logic
|
|
65
|
+
*/
|
|
66
|
+
protected handleReconnect(): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Build headers for HTTP requests
|
|
69
|
+
*/
|
|
70
|
+
protected buildHeaders(additionalHeaders?: Record<string, string>): Record<string, string>;
|
|
71
|
+
/**
|
|
72
|
+
* Create abort signal with timeout
|
|
73
|
+
*/
|
|
74
|
+
protected createTimeoutSignal(): AbortSignal;
|
|
75
|
+
}
|