@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,166 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Agent Runtime Lexical Example - Next generation chat with Lexical editor.
|
|
8
|
+
*
|
|
9
|
+
* This example demonstrates using the chat component with:
|
|
10
|
+
* - Lexical editor integration
|
|
11
|
+
* - Frontend tool execution
|
|
12
|
+
* - Multiple protocol support (AG-UI, A2A)
|
|
13
|
+
* - Middleware and extensions
|
|
14
|
+
*
|
|
15
|
+
* To run this example, create a .env file with:
|
|
16
|
+
* - VITE_DATALAYER_API_TOKEN: Get from https://datalayer.app/settings/iam/tokens
|
|
17
|
+
*
|
|
18
|
+
* @module examples/ChatLexicalExample
|
|
19
|
+
*/
|
|
20
|
+
import 'prismjs';
|
|
21
|
+
import 'prismjs/components/prism-clike';
|
|
22
|
+
import 'prismjs/components/prism-javascript';
|
|
23
|
+
import 'prismjs/components/prism-markup';
|
|
24
|
+
import 'prismjs/components/prism-markdown';
|
|
25
|
+
import 'prismjs/components/prism-c';
|
|
26
|
+
import 'prismjs/components/prism-css';
|
|
27
|
+
import 'prismjs/components/prism-objectivec';
|
|
28
|
+
import 'prismjs/components/prism-sql';
|
|
29
|
+
import 'prismjs/components/prism-python';
|
|
30
|
+
import 'prismjs/components/prism-rust';
|
|
31
|
+
import 'prismjs/components/prism-swift';
|
|
32
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
33
|
+
import { LexicalComposer } from '@lexical/react/LexicalComposer';
|
|
34
|
+
import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';
|
|
35
|
+
import { ContentEditable } from '@lexical/react/LexicalContentEditable';
|
|
36
|
+
import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';
|
|
37
|
+
import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';
|
|
38
|
+
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
39
|
+
import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';
|
|
40
|
+
import { AutoFocusPlugin } from '@lexical/react/LexicalAutoFocusPlugin';
|
|
41
|
+
import { MarkdownShortcutPlugin } from '@lexical/react/LexicalMarkdownShortcutPlugin';
|
|
42
|
+
import { TRANSFORMERS } from '@lexical/markdown';
|
|
43
|
+
import { registerCodeHighlighting } from '@lexical/code';
|
|
44
|
+
import { ListPlugin } from '@lexical/react/LexicalListPlugin';
|
|
45
|
+
import { CheckListPlugin } from '@lexical/react/LexicalCheckListPlugin';
|
|
46
|
+
import { LinkPlugin } from '@lexical/react/LexicalLinkPlugin';
|
|
47
|
+
import { Box } from '@datalayer/primer-addons';
|
|
48
|
+
import { JupyterReactTheme, useJupyter } from '@datalayer/jupyter-react';
|
|
49
|
+
import { ComponentPickerMenuPlugin, JupyterCellPlugin, JupyterInputOutputPlugin, DraggableBlockPlugin, ImagesPlugin, HorizontalRulePlugin, EquationsPlugin, YouTubePlugin, AutoLinkPlugin, AutoEmbedPlugin, FloatingTextFormatToolbarPlugin, CodeActionMenuPlugin, ListMaxIndentLevelPlugin, LexicalConfigProvider, LexicalStatePlugin, } from '@datalayer/jupyter-lexical';
|
|
50
|
+
// Import Chat components
|
|
51
|
+
import { ChatSidebar, } from '../components/chat';
|
|
52
|
+
import { useLexicalTools } from '../tools/adapters/agent-runtimes/lexicalHooks';
|
|
53
|
+
import { editorConfig } from './lexical/editorConfig';
|
|
54
|
+
import '@datalayer/jupyter-lexical/style/index.css';
|
|
55
|
+
import './lexical/lexical-theme.css';
|
|
56
|
+
// Fixed lexical document ID
|
|
57
|
+
const LEXICAL_ID = 'chat-lexical-example';
|
|
58
|
+
// Default configuration
|
|
59
|
+
const DEFAULT_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
|
|
60
|
+
const DEFAULT_AGENT_ID = import.meta.env.VITE_AGENT_ID || 'agentic_chat';
|
|
61
|
+
/**
|
|
62
|
+
* Lexical plugin for code highlighting
|
|
63
|
+
*/
|
|
64
|
+
function CodeHighlightingPlugin() {
|
|
65
|
+
const [editor] = useLexicalComposerContext();
|
|
66
|
+
useEffect(() => {
|
|
67
|
+
return registerCodeHighlighting(editor);
|
|
68
|
+
}, [editor]);
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
function LexicalEditor({ serviceManager }) {
|
|
72
|
+
const [floatingAnchorElem, setFloatingAnchorElem] = useState(null);
|
|
73
|
+
const onRef = (_floatingAnchorElem) => {
|
|
74
|
+
if (_floatingAnchorElem !== null) {
|
|
75
|
+
setFloatingAnchorElem(_floatingAnchorElem);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
// Handle editor changes
|
|
79
|
+
const onChange = useCallback((_editorState) => {
|
|
80
|
+
// Could persist state here
|
|
81
|
+
}, []);
|
|
82
|
+
return (_jsx(LexicalConfigProvider, { lexicalId: LEXICAL_ID, serviceManager: serviceManager, children: _jsxs(LexicalComposer, { initialConfig: editorConfig, children: [_jsx(LexicalStatePlugin, {}), _jsxs(Box, { sx: {
|
|
83
|
+
position: 'relative',
|
|
84
|
+
flex: 1,
|
|
85
|
+
display: 'flex',
|
|
86
|
+
flexDirection: 'column',
|
|
87
|
+
overflow: 'hidden',
|
|
88
|
+
}, children: [_jsx(RichTextPlugin, { contentEditable: _jsx("div", { ref: onRef, style: { flex: 1, display: 'flex', flexDirection: 'column' }, children: _jsx(ContentEditable, { className: "lexical-editor-content", style: {
|
|
89
|
+
flex: 1,
|
|
90
|
+
padding: '24px',
|
|
91
|
+
outline: 'none',
|
|
92
|
+
overflow: 'auto',
|
|
93
|
+
} }) }), placeholder: _jsx("div", { style: {
|
|
94
|
+
position: 'absolute',
|
|
95
|
+
top: '24px',
|
|
96
|
+
left: '24px',
|
|
97
|
+
color: 'var(--fgColor-muted)',
|
|
98
|
+
pointerEvents: 'none',
|
|
99
|
+
}, children: "Start typing or use the chat to create content..." }), ErrorBoundary: LexicalErrorBoundary }), _jsx(HistoryPlugin, {}), _jsx(AutoFocusPlugin, {}), _jsx(OnChangePlugin, { onChange: onChange }), _jsx(MarkdownShortcutPlugin, { transformers: TRANSFORMERS }), _jsx(CodeHighlightingPlugin, {}), _jsx(ListPlugin, {}), _jsx(CheckListPlugin, {}), _jsx(LinkPlugin, {}), _jsx(JupyterCellPlugin, {}), _jsx(JupyterInputOutputPlugin, {}), _jsx(ImagesPlugin, {}), _jsx(HorizontalRulePlugin, {}), _jsx(EquationsPlugin, {}), _jsx(YouTubePlugin, {}), _jsx(AutoLinkPlugin, {}), _jsx(AutoEmbedPlugin, {}), _jsx(ListMaxIndentLevelPlugin, { maxDepth: 7 }), floatingAnchorElem && (_jsxs(_Fragment, { children: [_jsx(ComponentPickerMenuPlugin, {}), _jsx(DraggableBlockPlugin, { anchorElem: floatingAnchorElem }), _jsx(FloatingTextFormatToolbarPlugin, { anchorElem: floatingAnchorElem }), _jsx(CodeActionMenuPlugin, { anchorElem: floatingAnchorElem })] }))] })] }) }));
|
|
100
|
+
}
|
|
101
|
+
export function ChatLexicalExampleInner({ serviceManager, }) {
|
|
102
|
+
// Get lexical tools for ChatSidebar
|
|
103
|
+
const tools = useLexicalTools(LEXICAL_ID);
|
|
104
|
+
// Build AG-UI protocol config
|
|
105
|
+
const protocolConfig = useMemo(() => {
|
|
106
|
+
return {
|
|
107
|
+
type: 'ag-ui',
|
|
108
|
+
endpoint: `${DEFAULT_BASE_URL}/api/v1/examples/${DEFAULT_AGENT_ID}/`,
|
|
109
|
+
agentId: DEFAULT_AGENT_ID,
|
|
110
|
+
};
|
|
111
|
+
}, []);
|
|
112
|
+
return (_jsx(_Fragment, { children: _jsxs(Box, { sx: {
|
|
113
|
+
height: '100vh',
|
|
114
|
+
width: '100vw',
|
|
115
|
+
display: 'flex',
|
|
116
|
+
overflow: 'hidden',
|
|
117
|
+
}, children: [_jsxs(Box, { sx: {
|
|
118
|
+
flex: 1,
|
|
119
|
+
display: 'flex',
|
|
120
|
+
flexDirection: 'column',
|
|
121
|
+
overflow: 'hidden',
|
|
122
|
+
}, children: [_jsxs(Box, { sx: {
|
|
123
|
+
p: 3,
|
|
124
|
+
borderBottom: '1px solid',
|
|
125
|
+
borderColor: 'border.default',
|
|
126
|
+
bg: 'canvas.subtle',
|
|
127
|
+
}, children: [_jsx("h1", { style: { margin: 0, fontSize: '1.5rem' }, children: "Agent Runtime Lexical Sidebar Example" }), _jsx("p", { style: { margin: '8px 0 0', color: 'var(--fgColor-muted)' }, children: "Next generation chat with Lexical editor integration (NO Provider!)" })] }), _jsx(Box, { sx: {
|
|
128
|
+
flex: 1,
|
|
129
|
+
display: 'flex',
|
|
130
|
+
overflow: 'hidden',
|
|
131
|
+
bg: 'canvas.default',
|
|
132
|
+
}, children: _jsx(LexicalEditor, { serviceManager: serviceManager }) })] }), _jsx(ChatSidebar, { title: "AI Assistant", position: "right", width: 400, showNewChatButton: true, showClearButton: true, showSettingsButton: true, defaultOpen: true, panelProps: {
|
|
133
|
+
protocol: protocolConfig,
|
|
134
|
+
frontendTools: tools,
|
|
135
|
+
useStore: true,
|
|
136
|
+
suggestions: [
|
|
137
|
+
{
|
|
138
|
+
title: '✍️ Help me write',
|
|
139
|
+
message: 'Can you help me write a document?',
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
title: '📝 Summarize text',
|
|
143
|
+
message: 'Can you summarize the content in the editor?',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
title: '🔍 Proofread',
|
|
147
|
+
message: 'Can you proofread and improve my text?',
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
title: '💡 Generate ideas',
|
|
151
|
+
message: 'Can you suggest some ideas for content?',
|
|
152
|
+
},
|
|
153
|
+
],
|
|
154
|
+
} })] }) }));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Main example component with Simple wrapper
|
|
158
|
+
*/
|
|
159
|
+
export function AgentRuntimeLexicalSidebarExample() {
|
|
160
|
+
return (_jsx(JupyterReactTheme, { children: _jsx(SimpleWrapper, {}) }));
|
|
161
|
+
}
|
|
162
|
+
function SimpleWrapper() {
|
|
163
|
+
const { serviceManager } = useJupyter();
|
|
164
|
+
return _jsx(ChatLexicalExampleInner, { serviceManager: serviceManager });
|
|
165
|
+
}
|
|
166
|
+
export default AgentRuntimeLexicalSidebarExample;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ServiceManager } from '@jupyterlab/services';
|
|
2
|
+
/**
|
|
3
|
+
* Main Agent Runtime notebook example component
|
|
4
|
+
*/
|
|
5
|
+
interface AgentRuntimeNotebookExampleProps {
|
|
6
|
+
serviceManager?: ServiceManager.IManager;
|
|
7
|
+
}
|
|
8
|
+
declare function AgentRuntimeNotebookExample({ serviceManager, }: AgentRuntimeNotebookExampleProps): JSX.Element;
|
|
9
|
+
export default AgentRuntimeNotebookExample;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Agent Runtime Notebook Example with Agent-Runtimes Integration
|
|
8
|
+
*
|
|
9
|
+
* This example demonstrates using the agent-runtimes ChatFloating component
|
|
10
|
+
* with notebook tools for AI-assisted notebook editing.
|
|
11
|
+
*
|
|
12
|
+
* To run this example:
|
|
13
|
+
* 1. Start the agent-runtimes server: `npm run start:server`
|
|
14
|
+
* 2. Start the frontend: `npm run dev`
|
|
15
|
+
*
|
|
16
|
+
* @module examples/AgentRuntimeNotebookExample
|
|
17
|
+
*/
|
|
18
|
+
import React, { useEffect, useState } from 'react';
|
|
19
|
+
import { Box } from '@datalayer/primer-addons';
|
|
20
|
+
import { Notebook } from '@datalayer/jupyter-react';
|
|
21
|
+
// Agent-runtimes imports
|
|
22
|
+
import { ChatFloating } from '../components/chat';
|
|
23
|
+
import { useNotebookTools } from '../tools/adapters/agent-runtimes/notebookHooks';
|
|
24
|
+
// Import Matplotlib notebook
|
|
25
|
+
import MatplotlibNotebook from './stores/notebooks/Matplotlib.ipynb.json';
|
|
26
|
+
// Fixed notebook ID
|
|
27
|
+
const NOTEBOOK_ID = 'agui-notebook-example';
|
|
28
|
+
// Use the imported Matplotlib notebook
|
|
29
|
+
const NOTEBOOK_CONTENT = MatplotlibNotebook;
|
|
30
|
+
// Base URL for agent-runtimes server
|
|
31
|
+
const BASE_URL = 'http://localhost:8765';
|
|
32
|
+
const AGENT_ID = 'notebook-agent-runtime-example';
|
|
33
|
+
// AG-UI endpoint for notebook operations
|
|
34
|
+
const AG_UI_ENDPOINT = `${BASE_URL}/api/v1/ag-ui/${AGENT_ID}/`;
|
|
35
|
+
/**
|
|
36
|
+
* Hook to ensure the demo-agent exists on the server.
|
|
37
|
+
* Creates it if it doesn't exist.
|
|
38
|
+
*/
|
|
39
|
+
function useEnsureAgent(agentId, baseUrl) {
|
|
40
|
+
const [isReady, setIsReady] = useState(false);
|
|
41
|
+
const [error, setError] = useState(null);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
let mounted = true;
|
|
44
|
+
async function ensureAgent() {
|
|
45
|
+
try {
|
|
46
|
+
// Try to create the agent (will fail if already exists, which is fine)
|
|
47
|
+
const response = await fetch(`${baseUrl}/api/v1/agents`, {
|
|
48
|
+
method: 'POST',
|
|
49
|
+
headers: {
|
|
50
|
+
'Content-Type': 'application/json',
|
|
51
|
+
},
|
|
52
|
+
body: JSON.stringify({
|
|
53
|
+
name: agentId,
|
|
54
|
+
description: 'Demo agent for notebook example',
|
|
55
|
+
agent_library: 'pydantic-ai',
|
|
56
|
+
transport: 'ag-ui',
|
|
57
|
+
model: 'openai:gpt-4o-mini',
|
|
58
|
+
system_prompt: 'You are a helpful AI assistant that helps users work with Jupyter notebooks. You can help with code, explanations, and data analysis.',
|
|
59
|
+
}),
|
|
60
|
+
});
|
|
61
|
+
if (mounted) {
|
|
62
|
+
if (response.ok) {
|
|
63
|
+
console.log(`[AgentRuntimeExample] Created agent: ${agentId}`);
|
|
64
|
+
setIsReady(true);
|
|
65
|
+
}
|
|
66
|
+
else if (response.status === 400) {
|
|
67
|
+
// Agent already exists, which is fine
|
|
68
|
+
console.log(`[AgentRuntimeExample] Agent already exists: ${agentId}`);
|
|
69
|
+
setIsReady(true);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const errorData = await response.json().catch(() => ({}));
|
|
73
|
+
setError(errorData.detail || `Failed to create agent: ${response.status}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
if (mounted) {
|
|
79
|
+
console.error('[AgentRuntimeExample] Error creating agent:', err);
|
|
80
|
+
setError(err instanceof Error ? err.message : 'Failed to connect to server');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
ensureAgent();
|
|
85
|
+
return () => {
|
|
86
|
+
mounted = false;
|
|
87
|
+
};
|
|
88
|
+
}, [agentId, baseUrl]);
|
|
89
|
+
return { isReady, error };
|
|
90
|
+
}
|
|
91
|
+
const NotebookUI = React.memo(function NotebookUI({ serviceManager, }) {
|
|
92
|
+
return (_jsxs(Box, { sx: {
|
|
93
|
+
flex: 1,
|
|
94
|
+
display: 'flex',
|
|
95
|
+
flexDirection: 'column',
|
|
96
|
+
overflow: 'auto',
|
|
97
|
+
padding: 3,
|
|
98
|
+
}, children: [_jsxs(Box, { sx: {
|
|
99
|
+
marginBottom: 3,
|
|
100
|
+
paddingBottom: 3,
|
|
101
|
+
borderBottom: '1px solid',
|
|
102
|
+
borderColor: 'border.default',
|
|
103
|
+
}, children: [_jsx(Box, { as: "h1", children: "Agent Runtime Notebook Example" }), _jsx("p", { children: "Platform-agnostic tool usage with agent-runtimes integration. Use the AI copilot to manipulate the notebook." })] }), _jsx(Box, { sx: {
|
|
104
|
+
border: '1px solid',
|
|
105
|
+
borderColor: 'border.default',
|
|
106
|
+
borderRadius: 2,
|
|
107
|
+
padding: 3,
|
|
108
|
+
backgroundColor: 'canvas.default',
|
|
109
|
+
}, children: serviceManager ? (_jsx(Notebook, { nbformat: NOTEBOOK_CONTENT, id: NOTEBOOK_ID, serviceManager: serviceManager, height: "600px", cellSidebarMargin: 120, startDefaultKernel: true })) : (_jsx(Box, { sx: { padding: 3 }, children: _jsx("p", { children: "Loading service manager..." }) })) })] }));
|
|
110
|
+
});
|
|
111
|
+
function NotebookWithChat({ serviceManager, }) {
|
|
112
|
+
// Ensure the agent exists before rendering chat
|
|
113
|
+
const { isReady, error } = useEnsureAgent(AGENT_ID, BASE_URL);
|
|
114
|
+
// Get notebook tools for ChatFloating
|
|
115
|
+
const tools = useNotebookTools(NOTEBOOK_ID);
|
|
116
|
+
return (_jsxs(Box, { sx: {
|
|
117
|
+
height: '100vh',
|
|
118
|
+
width: '100vw',
|
|
119
|
+
display: 'flex',
|
|
120
|
+
overflow: 'hidden',
|
|
121
|
+
}, children: [_jsx(NotebookUI, { serviceManager: serviceManager }), error && (_jsxs(Box, { sx: {
|
|
122
|
+
position: 'fixed',
|
|
123
|
+
bottom: 20,
|
|
124
|
+
right: 20,
|
|
125
|
+
padding: 3,
|
|
126
|
+
backgroundColor: 'danger.subtle',
|
|
127
|
+
color: 'danger.fg',
|
|
128
|
+
borderRadius: 2,
|
|
129
|
+
maxWidth: 300,
|
|
130
|
+
}, children: [_jsx("strong", { children: "Error:" }), " ", error] })), isReady && (_jsx(ChatFloating, { endpoint: AG_UI_ENDPOINT, title: "Notebook AI Agent Runtime", description: "Hi! I can help you edit notebook cells. Try: 'Add a new code cell', 'Run cell 1', or 'Delete the last cell'", defaultOpen: true, defaultViewMode: "panel", position: "bottom-right", brandColor: "#7c3aed", tools: tools, useStore: false, suggestions: [
|
|
131
|
+
{
|
|
132
|
+
title: 'Add a cell',
|
|
133
|
+
message: 'Insert a random cell to the notebook',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
title: 'Run the first cell',
|
|
137
|
+
message: 'Run the first cell in the notebook',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
title: 'Show cells',
|
|
141
|
+
message: 'Show the notebook cells content and compute the number of cells',
|
|
142
|
+
},
|
|
143
|
+
] }))] }));
|
|
144
|
+
}
|
|
145
|
+
function AgentRuntimeNotebookExample({ serviceManager, }) {
|
|
146
|
+
return _jsx(NotebookWithChat, { serviceManager: serviceManager });
|
|
147
|
+
}
|
|
148
|
+
export default AgentRuntimeNotebookExample;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ServiceManager } from '@jupyterlab/services';
|
|
2
|
+
/**
|
|
3
|
+
* Agent Runtime Notebook Sidebar Example with Simple integration
|
|
4
|
+
*/
|
|
5
|
+
interface ChatJupyterNotebookExampleProps {
|
|
6
|
+
serviceManager?: ServiceManager.IManager;
|
|
7
|
+
}
|
|
8
|
+
export declare function AgentRuntimeNotebookExampleInner({ serviceManager, }: ChatJupyterNotebookExampleProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
/**
|
|
10
|
+
* Main example component with Simple wrapper
|
|
11
|
+
*/
|
|
12
|
+
export declare function AgentRuntimeNotebookSidebarExample(): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export default AgentRuntimeNotebookSidebarExample;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Agent Runtime Notebook Example - Next generation chat with Jupyter Notebook.
|
|
8
|
+
*
|
|
9
|
+
* This example demonstrates using the chat component with:
|
|
10
|
+
* - Jupyter Notebook integration
|
|
11
|
+
* - Frontend tool execution for notebook operations
|
|
12
|
+
* - AG-UI protocol support
|
|
13
|
+
* - HITL (Human-in-the-loop) tool approval
|
|
14
|
+
*
|
|
15
|
+
* To run this example:
|
|
16
|
+
* 1. Start the agent-runtimes server: `npm run start:ag-ui`
|
|
17
|
+
* 2. Create a .env file with VITE_BASE_URL if not using defaults
|
|
18
|
+
*
|
|
19
|
+
* @module examples/ChatJupyterNotebookExample
|
|
20
|
+
*/
|
|
21
|
+
import { useMemo } from 'react';
|
|
22
|
+
import { Box } from '@datalayer/primer-addons';
|
|
23
|
+
import { Notebook, JupyterReactTheme, useJupyter, } from '@datalayer/jupyter-react';
|
|
24
|
+
// Import Chat components
|
|
25
|
+
import { ChatSidebar, } from '../components/chat';
|
|
26
|
+
// Import agent-runtimes notebook tools
|
|
27
|
+
import { useNotebookTools } from '../tools/adapters/agent-runtimes/notebookHooks';
|
|
28
|
+
// Import sample notebook
|
|
29
|
+
import MatplotlibNotebook from './stores/notebooks/Matplotlib.ipynb.json';
|
|
30
|
+
// Fixed notebook ID
|
|
31
|
+
const NOTEBOOK_ID = 'chat-notebook-example';
|
|
32
|
+
// Use the imported Matplotlib notebook
|
|
33
|
+
const NOTEBOOK_CONTENT = MatplotlibNotebook;
|
|
34
|
+
// Default configuration
|
|
35
|
+
const DEFAULT_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
|
|
36
|
+
const DEFAULT_AGENT_ID = import.meta.env.VITE_AGENT_ID || 'agentic_chat';
|
|
37
|
+
function NotebookUI({ serviceManager }) {
|
|
38
|
+
if (!serviceManager) {
|
|
39
|
+
return (_jsx(Box, { sx: {
|
|
40
|
+
display: 'flex',
|
|
41
|
+
alignItems: 'center',
|
|
42
|
+
justifyContent: 'center',
|
|
43
|
+
height: '100%',
|
|
44
|
+
color: 'fg.muted',
|
|
45
|
+
}, children: "Loading Simple services..." }));
|
|
46
|
+
}
|
|
47
|
+
return (_jsx(Notebook, { nbformat: NOTEBOOK_CONTENT, id: NOTEBOOK_ID, serviceManager: serviceManager, height: "100%", cellSidebarMargin: 120, startDefaultKernel: true }));
|
|
48
|
+
}
|
|
49
|
+
export function AgentRuntimeNotebookExampleInner({ serviceManager, }) {
|
|
50
|
+
// Get notebook tools for ChatSidebar
|
|
51
|
+
const tools = useNotebookTools(NOTEBOOK_ID);
|
|
52
|
+
// Build AG-UI protocol config
|
|
53
|
+
const protocolConfig = useMemo(() => {
|
|
54
|
+
return {
|
|
55
|
+
type: 'ag-ui',
|
|
56
|
+
endpoint: `${DEFAULT_BASE_URL}/api/v1/examples/${DEFAULT_AGENT_ID}/`,
|
|
57
|
+
agentId: DEFAULT_AGENT_ID,
|
|
58
|
+
};
|
|
59
|
+
}, []);
|
|
60
|
+
return (_jsx(_Fragment, { children: _jsxs(Box, { sx: {
|
|
61
|
+
height: '100vh',
|
|
62
|
+
width: '100vw',
|
|
63
|
+
display: 'flex',
|
|
64
|
+
overflow: 'hidden',
|
|
65
|
+
}, children: [_jsxs(Box, { sx: {
|
|
66
|
+
flex: 1,
|
|
67
|
+
display: 'flex',
|
|
68
|
+
flexDirection: 'column',
|
|
69
|
+
overflow: 'hidden',
|
|
70
|
+
}, children: [_jsxs(Box, { sx: {
|
|
71
|
+
p: 3,
|
|
72
|
+
borderBottom: '1px solid',
|
|
73
|
+
borderColor: 'border.default',
|
|
74
|
+
bg: 'canvas.subtle',
|
|
75
|
+
}, children: [_jsx("h1", { style: { margin: 0, fontSize: '1.5rem' }, children: "Agent Runtime Notebook Sidebar Example" }), _jsx("p", { style: { margin: '8px 0 0', color: 'var(--fgColor-muted)' }, children: "Next generation chat with Jupyter Notebook integration" })] }), _jsx(Box, { sx: {
|
|
76
|
+
flex: 1,
|
|
77
|
+
display: 'flex',
|
|
78
|
+
overflow: 'hidden',
|
|
79
|
+
bg: 'canvas.default',
|
|
80
|
+
p: 3,
|
|
81
|
+
}, children: _jsx(Box, { sx: {
|
|
82
|
+
flex: 1,
|
|
83
|
+
border: '1px solid',
|
|
84
|
+
borderColor: 'border.default',
|
|
85
|
+
borderRadius: 2,
|
|
86
|
+
overflow: 'hidden',
|
|
87
|
+
}, children: _jsx(NotebookUI, { serviceManager: serviceManager }) }) })] }), _jsx(ChatSidebar, { title: "AI Assistant", position: "right", width: 400, showNewChatButton: true, showClearButton: true, showSettingsButton: true, defaultOpen: true, panelProps: {
|
|
88
|
+
protocol: protocolConfig,
|
|
89
|
+
frontendTools: tools,
|
|
90
|
+
useStore: true,
|
|
91
|
+
suggestions: [
|
|
92
|
+
{
|
|
93
|
+
title: '📓 Explain notebook',
|
|
94
|
+
message: 'Can you explain what this notebook does?',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
title: '🔧 Fix errors',
|
|
98
|
+
message: 'Can you help me fix any errors in the notebook?',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
title: '📊 Add visualization',
|
|
102
|
+
message: 'Can you add a visualization to the notebook?',
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
title: '✨ Improve code',
|
|
106
|
+
message: 'Can you suggest improvements for the code?',
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
} })] }) }));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Main example component with Simple wrapper
|
|
113
|
+
*/
|
|
114
|
+
export function AgentRuntimeNotebookSidebarExample() {
|
|
115
|
+
return (_jsx(JupyterReactTheme, { children: _jsx(SimpleWrapper, {}) }));
|
|
116
|
+
}
|
|
117
|
+
function SimpleWrapper() {
|
|
118
|
+
const { serviceManager } = useJupyter();
|
|
119
|
+
return _jsx(AgentRuntimeNotebookExampleInner, { serviceManager: serviceManager });
|
|
120
|
+
}
|
|
121
|
+
export default AgentRuntimeNotebookSidebarExample;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ChatStandaloneExample
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates the ChatStandalone component which provides a floating
|
|
5
|
+
* chat popup with props-based message handling. This is perfect for custom
|
|
6
|
+
* integrations where you want full control over the inference logic.
|
|
7
|
+
*
|
|
8
|
+
* Unlike ChatFloating (which uses protocol adapters like AG-UI), this component
|
|
9
|
+
* lets you provide your own message handler function.
|
|
10
|
+
*
|
|
11
|
+
* This example simulates an AI assistant that can respond to various queries.
|
|
12
|
+
*/
|
|
13
|
+
import React from 'react';
|
|
14
|
+
/**
|
|
15
|
+
* AgentRuntimePopupStandaloneExample Component
|
|
16
|
+
*
|
|
17
|
+
* Demonstrates a standalone floating chat popup with custom message handling.
|
|
18
|
+
* Perfect for integrations where you want full control over the AI logic.
|
|
19
|
+
*/
|
|
20
|
+
declare const AgentRuntimePopupStandaloneExample: React.FC;
|
|
21
|
+
export default AgentRuntimePopupStandaloneExample;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* ChatStandaloneExample
|
|
8
|
+
*
|
|
9
|
+
* Demonstrates the ChatStandalone component which provides a floating
|
|
10
|
+
* chat popup with props-based message handling. This is perfect for custom
|
|
11
|
+
* integrations where you want full control over the inference logic.
|
|
12
|
+
*
|
|
13
|
+
* Unlike ChatFloating (which uses protocol adapters like AG-UI), this component
|
|
14
|
+
* lets you provide your own message handler function.
|
|
15
|
+
*
|
|
16
|
+
* This example simulates an AI assistant that can respond to various queries.
|
|
17
|
+
*/
|
|
18
|
+
import { useCallback } from 'react';
|
|
19
|
+
import { Text } from '@primer/react';
|
|
20
|
+
import { Box } from '@datalayer/primer-addons';
|
|
21
|
+
import { datalayerTheme, DatalayerThemeProvider } from '@datalayer/core';
|
|
22
|
+
import { ChatStandalone } from '../components/chat';
|
|
23
|
+
/**
|
|
24
|
+
* Simulated AI responses for demo purposes.
|
|
25
|
+
* In a real application, this would call your AI backend.
|
|
26
|
+
*/
|
|
27
|
+
const simulateAIResponse = async (message, onChunk) => {
|
|
28
|
+
const lowerMessage = message.toLowerCase();
|
|
29
|
+
// Determine response based on message content
|
|
30
|
+
let response;
|
|
31
|
+
if (lowerMessage.includes('hello') || lowerMessage.includes('hi')) {
|
|
32
|
+
response =
|
|
33
|
+
"Hello! I'm a demo assistant powered by ChatStandalone. I can help you with various questions. Try asking me about the weather, time, or just chat!";
|
|
34
|
+
}
|
|
35
|
+
else if (lowerMessage.includes('weather')) {
|
|
36
|
+
response =
|
|
37
|
+
"I'm a demo assistant, so I can't fetch real weather data. But in a real implementation, you could connect me to a weather API! The ChatStandalone component lets you implement any custom logic you need.";
|
|
38
|
+
}
|
|
39
|
+
else if (lowerMessage.includes('time')) {
|
|
40
|
+
const now = new Date();
|
|
41
|
+
response = `The current time is ${now.toLocaleTimeString()} on ${now.toLocaleDateString()}. This is a real response from your browser!`;
|
|
42
|
+
}
|
|
43
|
+
else if (lowerMessage.includes('help') ||
|
|
44
|
+
lowerMessage.includes('what can you do')) {
|
|
45
|
+
response = `I'm a demo assistant showcasing ChatStandalone. Here's what makes this component special:
|
|
46
|
+
|
|
47
|
+
• **Props-based**: You provide your own message handler
|
|
48
|
+
• **Full control**: Implement any AI backend or logic
|
|
49
|
+
• **Streaming support**: I'm simulating streaming right now!
|
|
50
|
+
• **Customizable**: Brand colors, icons, positions, and more
|
|
51
|
+
|
|
52
|
+
Try asking me about the time, weather, or just say hello!`;
|
|
53
|
+
}
|
|
54
|
+
else if (lowerMessage.includes('joke')) {
|
|
55
|
+
response =
|
|
56
|
+
'Why do programmers prefer dark mode? Because light attracts bugs! 🐛';
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
response = `You said: "${message}"
|
|
60
|
+
|
|
61
|
+
I'm a demo assistant, so I have limited responses. In a real implementation, you would connect ChatStandalone to your preferred AI service (OpenAI, Anthropic, local LLM, etc.) by implementing the \`onSendMessage\` handler.
|
|
62
|
+
|
|
63
|
+
Try asking me for the time, a joke, or what I can do!`;
|
|
64
|
+
}
|
|
65
|
+
// Simulate streaming by sending chunks
|
|
66
|
+
if (onChunk) {
|
|
67
|
+
const words = response.split(' ');
|
|
68
|
+
for (let i = 0; i < words.length; i++) {
|
|
69
|
+
await new Promise(resolve => setTimeout(resolve, 30 + Math.random() * 20));
|
|
70
|
+
onChunk(words.slice(0, i + 1).join(' '));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
// Simulate processing delay
|
|
75
|
+
await new Promise(resolve => setTimeout(resolve, 500));
|
|
76
|
+
}
|
|
77
|
+
return response;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* AgentRuntimePopupStandaloneExample Component
|
|
81
|
+
*
|
|
82
|
+
* Demonstrates a standalone floating chat popup with custom message handling.
|
|
83
|
+
* Perfect for integrations where you want full control over the AI logic.
|
|
84
|
+
*/
|
|
85
|
+
const AgentRuntimePopupStandaloneExample = () => {
|
|
86
|
+
// Message handler - this is where you implement your AI logic
|
|
87
|
+
// The handler receives: message, messages (conversation history), and streaming options
|
|
88
|
+
const handleSendMessage = useCallback(async (message, _messages, options) => {
|
|
89
|
+
try {
|
|
90
|
+
const response = await simulateAIResponse(message, options?.onChunk);
|
|
91
|
+
options?.onComplete?.(response);
|
|
92
|
+
return response;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
96
|
+
options?.onError?.(err);
|
|
97
|
+
throw err;
|
|
98
|
+
}
|
|
99
|
+
}, []);
|
|
100
|
+
return (_jsx(DatalayerThemeProvider, { theme: datalayerTheme, children: _jsxs(Box, { sx: {
|
|
101
|
+
minHeight: '100vh',
|
|
102
|
+
backgroundColor: 'canvas.default',
|
|
103
|
+
padding: 4,
|
|
104
|
+
}, children: [_jsxs(Box, { sx: {
|
|
105
|
+
maxWidth: '800px',
|
|
106
|
+
margin: '0 auto',
|
|
107
|
+
}, children: [_jsx(Text, { as: "h1", sx: {
|
|
108
|
+
fontSize: 4,
|
|
109
|
+
fontWeight: 'bold',
|
|
110
|
+
marginBottom: 2,
|
|
111
|
+
}, children: "Agent Runtime Standalone Example" }), _jsx(Text, { as: "p", sx: {
|
|
112
|
+
fontSize: 2,
|
|
113
|
+
color: 'fg.muted',
|
|
114
|
+
marginBottom: 4,
|
|
115
|
+
}, children: "A standalone floating chat popup with props-based message handling. Click the chat button in the bottom-right corner to start!" }), _jsxs(Box, { sx: {
|
|
116
|
+
padding: 4,
|
|
117
|
+
backgroundColor: 'canvas.subtle',
|
|
118
|
+
borderRadius: 2,
|
|
119
|
+
border: '1px solid',
|
|
120
|
+
borderColor: 'border.default',
|
|
121
|
+
marginBottom: 4,
|
|
122
|
+
}, children: [_jsx(Text, { as: "h2", sx: { fontSize: 2, fontWeight: 'semibold', marginBottom: 2 }, children: "Key Features" }), _jsxs(Box, { as: "ul", sx: { paddingLeft: 3 }, children: [_jsxs(Box, { as: "li", sx: { marginBottom: 2 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: "Props-based Handler" }), _jsxs(Text, { sx: { fontSize: 1, color: 'fg.muted', display: 'block' }, children: ["Implement your own ", _jsx("code", { children: "onSendMessage" }), " function to connect to any AI backend"] })] }), _jsxs(Box, { as: "li", sx: { marginBottom: 2 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: "Streaming Support" }), _jsxs(Text, { sx: { fontSize: 1, color: 'fg.muted', display: 'block' }, children: ["Use the ", _jsx("code", { children: "onChunk" }), " callback for real-time streaming responses"] })] }), _jsxs(Box, { as: "li", sx: { marginBottom: 2 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: "Full Customization" }), _jsx(Text, { sx: { fontSize: 1, color: 'fg.muted', display: 'block' }, children: "Brand colors, icons, position, keyboard shortcuts, and more" })] }), _jsxs(Box, { as: "li", sx: { marginBottom: 2 }, children: [_jsx(Text, { sx: { fontWeight: 'semibold' }, children: "No Backend Required" }), _jsx(Text, { sx: { fontSize: 1, color: 'fg.muted', display: 'block' }, children: "Unlike AG-UI examples, this works without a server (demo mode)" })] })] })] }), _jsxs(Box, { sx: {
|
|
123
|
+
padding: 4,
|
|
124
|
+
backgroundColor: 'canvas.subtle',
|
|
125
|
+
borderRadius: 2,
|
|
126
|
+
border: '1px solid',
|
|
127
|
+
borderColor: 'border.default',
|
|
128
|
+
marginBottom: 4,
|
|
129
|
+
}, children: [_jsx(Text, { as: "h2", sx: { fontSize: 2, fontWeight: 'semibold', marginBottom: 2 }, children: "Usage Example" }), _jsx(Box, { as: "pre", sx: {
|
|
130
|
+
backgroundColor: 'neutral.emphasisPlus',
|
|
131
|
+
color: 'fg.onEmphasis',
|
|
132
|
+
padding: 3,
|
|
133
|
+
borderRadius: 2,
|
|
134
|
+
overflow: 'auto',
|
|
135
|
+
fontSize: 0,
|
|
136
|
+
}, children: _jsx("code", { children: `<ChatStandalone
|
|
137
|
+
title="My Assistant"
|
|
138
|
+
onSendMessage={async (message, options) => {
|
|
139
|
+
// Your custom AI logic here
|
|
140
|
+
const response = await myAI.chat(message);
|
|
141
|
+
|
|
142
|
+
// Support streaming with onChunk
|
|
143
|
+
options?.onChunk?.(response);
|
|
144
|
+
options?.onComplete?.(response);
|
|
145
|
+
|
|
146
|
+
return response;
|
|
147
|
+
}}
|
|
148
|
+
brandColor="#7c3aed"
|
|
149
|
+
position="bottom-right"
|
|
150
|
+
/>` }) })] }), _jsxs(Box, { sx: {
|
|
151
|
+
padding: 4,
|
|
152
|
+
backgroundColor: 'attention.subtle',
|
|
153
|
+
borderRadius: 2,
|
|
154
|
+
border: '1px solid',
|
|
155
|
+
borderColor: 'attention.muted',
|
|
156
|
+
}, children: [_jsx(Text, { as: "h2", sx: { fontSize: 2, fontWeight: 'semibold', marginBottom: 2 }, children: "When to Use" }), _jsxs(Text, { as: "p", sx: { fontSize: 1, marginBottom: 2 }, children: ["Use ", _jsx("strong", { children: "ChatStandalone" }), " when:"] }), _jsxs(Box, { as: "ul", sx: { paddingLeft: 3, fontSize: 1 }, children: [_jsx("li", { children: "You have a custom AI backend that does not use AG-UI/ACP" }), _jsx("li", { children: "You want full control over the message handling logic" }), _jsx("li", { children: "You need to integrate with a specific API (OpenAI, etc.)" }), _jsx("li", { children: "You want a quick demo without setting up a backend server" })] }), _jsxs(Text, { as: "p", sx: { fontSize: 1, marginTop: 2 }, children: ["Use ", _jsx("strong", { children: "ChatFloating" }), " instead when:"] }), _jsxs(Box, { as: "ul", sx: { paddingLeft: 3, fontSize: 1 }, children: [_jsx("li", { children: "You have an AG-UI compatible backend" }), _jsx("li", { children: "You need built-in tool rendering support" }), _jsx("li", { children: "You want automatic protocol handling" })] })] })] }), _jsx(ChatStandalone, { title: "Demo Assistant", onSendMessage: handleSendMessage, position: "bottom-right", brandColor: "#7c3aed", enableStreaming: true, emptyStateMessage: "Hi! I'm a demo assistant. Try asking me for the time, a joke, or what I can do!", buttonTooltip: "Chat with Demo Assistant", showPoweredBy: true })] }) }));
|
|
157
|
+
};
|
|
158
|
+
export default AgentRuntimePopupStandaloneExample;
|