@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,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgUiSharedStateExample
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates bidirectional state synchronization between the frontend
|
|
5
|
+
* and the AI agent using AG-UI. This example shows a recipe builder where
|
|
6
|
+
* both the user and the AI can modify the shared state.
|
|
7
|
+
*
|
|
8
|
+
* Backend: /api/v1/examples/shared_state/
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
/**
|
|
12
|
+
* AgUiSharedStateExample Component
|
|
13
|
+
*
|
|
14
|
+
* Demonstrates bidirectional shared state with AG-UI.
|
|
15
|
+
* Both the frontend and the AI agent can modify the recipe state,
|
|
16
|
+
* with changes synchronized via STATE_SNAPSHOT events.
|
|
17
|
+
*
|
|
18
|
+
* Features demonstrated:
|
|
19
|
+
* - Bidirectional state synchronization
|
|
20
|
+
* - StateDeps for passing state to agent
|
|
21
|
+
* - STATE_SNAPSHOT for receiving state from agent
|
|
22
|
+
* - Editable UI that updates shared state
|
|
23
|
+
*/
|
|
24
|
+
declare const AgUiSharedStateExample: React.FC;
|
|
25
|
+
export default AgUiSharedStateExample;
|
|
@@ -0,0 +1,181 @@
|
|
|
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
|
+
* AgUiSharedStateExample
|
|
8
|
+
*
|
|
9
|
+
* Demonstrates bidirectional state synchronization between the frontend
|
|
10
|
+
* and the AI agent using AG-UI. This example shows a recipe builder where
|
|
11
|
+
* both the user and the AI can modify the shared state.
|
|
12
|
+
*
|
|
13
|
+
* Backend: /api/v1/examples/shared_state/
|
|
14
|
+
*/
|
|
15
|
+
import { useState, useCallback } from 'react';
|
|
16
|
+
import { Text, Button, TextInput, Label } from '@primer/react';
|
|
17
|
+
import { Box } from '@datalayer/primer-addons';
|
|
18
|
+
import { datalayerTheme, DatalayerThemeProvider } from '@datalayer/core';
|
|
19
|
+
import { ChatFloating } from '../components/chat';
|
|
20
|
+
import { PlusIcon, XIcon, BeakerIcon, ClockIcon, PersonIcon, } from '@primer/octicons-react';
|
|
21
|
+
// AG-UI endpoint for shared state example
|
|
22
|
+
const SHARED_STATE_ENDPOINT = 'http://localhost:8765/api/v1/examples/shared_state/';
|
|
23
|
+
const DEFAULT_RECIPE = {
|
|
24
|
+
title: '',
|
|
25
|
+
description: '',
|
|
26
|
+
ingredients: [],
|
|
27
|
+
instructions: [],
|
|
28
|
+
servings: 4,
|
|
29
|
+
prepTime: '',
|
|
30
|
+
cookTime: '',
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* IngredientsList Component
|
|
34
|
+
* Editable list of ingredients
|
|
35
|
+
*/
|
|
36
|
+
const IngredientsList = ({ ingredients, onAdd, onRemove }) => {
|
|
37
|
+
const [newIngredient, setNewIngredient] = useState('');
|
|
38
|
+
const handleAdd = () => {
|
|
39
|
+
if (newIngredient.trim()) {
|
|
40
|
+
onAdd(newIngredient.trim());
|
|
41
|
+
setNewIngredient('');
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
return (_jsxs(Box, { children: [_jsx(Text, { as: "h4", sx: { fontSize: 1, fontWeight: 'semibold', marginBottom: 2 }, children: "Ingredients" }), _jsxs(Box, { sx: { display: 'flex', gap: 2, marginBottom: 2 }, children: [_jsx(TextInput, { value: newIngredient, onChange: e => setNewIngredient(e.target.value), placeholder: "Add an ingredient...", onKeyDown: e => e.key === 'Enter' && handleAdd(), sx: { flex: 1 } }), _jsx(Button, { onClick: handleAdd, leadingVisual: PlusIcon, size: "small", children: "Add" })] }), ingredients.length === 0 ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', fontStyle: 'italic' }, children: "No ingredients yet" })) : (_jsx(Box, { as: "ul", sx: { listStyle: 'none', padding: 0, margin: 0 }, children: ingredients.map((ingredient, index) => (_jsxs(Box, { as: "li", sx: {
|
|
45
|
+
display: 'flex',
|
|
46
|
+
justifyContent: 'space-between',
|
|
47
|
+
alignItems: 'center',
|
|
48
|
+
padding: 1,
|
|
49
|
+
borderBottom: '1px solid',
|
|
50
|
+
borderColor: 'border.default',
|
|
51
|
+
'&:last-child': { borderBottom: 'none' },
|
|
52
|
+
}, children: [_jsx(Text, { sx: { fontSize: 1 }, children: ingredient }), _jsx(Button, { variant: "invisible", size: "small", onClick: () => onRemove(index), "aria-label": "Remove", children: _jsx(XIcon, { size: 12 }) })] }, index))) }))] }));
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* InstructionsList Component
|
|
56
|
+
* Editable list of cooking instructions
|
|
57
|
+
*/
|
|
58
|
+
const InstructionsList = ({ instructions, onAdd, onRemove }) => {
|
|
59
|
+
const [newInstruction, setNewInstruction] = useState('');
|
|
60
|
+
const handleAdd = () => {
|
|
61
|
+
if (newInstruction.trim()) {
|
|
62
|
+
onAdd(newInstruction.trim());
|
|
63
|
+
setNewInstruction('');
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return (_jsxs(Box, { children: [_jsx(Text, { as: "h4", sx: { fontSize: 1, fontWeight: 'semibold', marginBottom: 2 }, children: "Instructions" }), _jsxs(Box, { sx: { display: 'flex', gap: 2, marginBottom: 2 }, children: [_jsx(TextInput, { value: newInstruction, onChange: e => setNewInstruction(e.target.value), placeholder: "Add an instruction...", onKeyDown: e => e.key === 'Enter' && handleAdd(), sx: { flex: 1 } }), _jsx(Button, { onClick: handleAdd, leadingVisual: PlusIcon, size: "small", children: "Add" })] }), instructions.length === 0 ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', fontStyle: 'italic' }, children: "No instructions yet" })) : (_jsx(Box, { as: "ol", sx: { paddingLeft: 3, margin: 0 }, children: instructions.map((instruction, index) => (_jsxs(Box, { as: "li", sx: {
|
|
67
|
+
display: 'flex',
|
|
68
|
+
justifyContent: 'space-between',
|
|
69
|
+
alignItems: 'flex-start',
|
|
70
|
+
marginBottom: 2,
|
|
71
|
+
}, children: [_jsx(Text, { sx: { fontSize: 1, flex: 1 }, children: instruction }), _jsx(Button, { variant: "invisible", size: "small", onClick: () => onRemove(index), "aria-label": "Remove", children: _jsx(XIcon, { size: 12 }) })] }, index))) }))] }));
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* RecipeDisplay Component
|
|
75
|
+
* Main recipe editor/display
|
|
76
|
+
*/
|
|
77
|
+
const RecipeDisplay = ({ recipe, onUpdate }) => {
|
|
78
|
+
return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsxs(Box, { children: [_jsx(TextInput, { value: recipe.title, onChange: e => onUpdate({ title: e.target.value }), placeholder: "Recipe title...", sx: {
|
|
79
|
+
fontSize: 2,
|
|
80
|
+
fontWeight: 'bold',
|
|
81
|
+
marginBottom: 2,
|
|
82
|
+
width: '100%',
|
|
83
|
+
} }), _jsx(TextInput, { as: "textarea", value: recipe.description, onChange: e => onUpdate({ description: e.target.value }), placeholder: "Recipe description...", sx: { width: '100%', minHeight: '60px', resize: 'vertical' } })] }), _jsxs(Box, { sx: { display: 'flex', gap: 4, flexWrap: 'wrap' }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1 }, children: [_jsx(PersonIcon, { size: 14 }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "Servings:" }), _jsx(TextInput, { type: "number", value: recipe.servings, onChange: e => onUpdate({ servings: parseInt(e.target.value) || 0 }), sx: { width: '60px' }, min: 1 })] }), _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1 }, children: [_jsx(ClockIcon, { size: 14 }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "Prep:" }), _jsx(TextInput, { value: recipe.prepTime, onChange: e => onUpdate({ prepTime: e.target.value }), placeholder: "30 min", sx: { width: '80px' } })] }), _jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 1 }, children: [_jsx(BeakerIcon, { size: 14 }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "Cook:" }), _jsx(TextInput, { value: recipe.cookTime, onChange: e => onUpdate({ cookTime: e.target.value }), placeholder: "1 hour", sx: { width: '80px' } })] })] }), _jsxs(Box, { sx: {
|
|
84
|
+
display: 'grid',
|
|
85
|
+
gridTemplateColumns: ['1fr', '1fr 1fr'],
|
|
86
|
+
gap: 4,
|
|
87
|
+
}, children: [_jsx(IngredientsList, { ingredients: recipe.ingredients, onAdd: ingredient => onUpdate({ ingredients: [...recipe.ingredients, ingredient] }), onRemove: index => onUpdate({
|
|
88
|
+
ingredients: recipe.ingredients.filter((_, i) => i !== index),
|
|
89
|
+
}) }), _jsx(InstructionsList, { instructions: recipe.instructions, onAdd: instruction => onUpdate({ instructions: [...recipe.instructions, instruction] }), onRemove: index => onUpdate({
|
|
90
|
+
instructions: recipe.instructions.filter((_, i) => i !== index),
|
|
91
|
+
}) })] })] }));
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* AgUiSharedStateExample Component
|
|
95
|
+
*
|
|
96
|
+
* Demonstrates bidirectional shared state with AG-UI.
|
|
97
|
+
* Both the frontend and the AI agent can modify the recipe state,
|
|
98
|
+
* with changes synchronized via STATE_SNAPSHOT events.
|
|
99
|
+
*
|
|
100
|
+
* Features demonstrated:
|
|
101
|
+
* - Bidirectional state synchronization
|
|
102
|
+
* - StateDeps for passing state to agent
|
|
103
|
+
* - STATE_SNAPSHOT for receiving state from agent
|
|
104
|
+
* - Editable UI that updates shared state
|
|
105
|
+
*/
|
|
106
|
+
const AgUiSharedStateExample = () => {
|
|
107
|
+
const [recipe, setRecipe] = useState(DEFAULT_RECIPE);
|
|
108
|
+
// Handle state updates from AG-UI
|
|
109
|
+
const handleStateUpdate = useCallback((state) => {
|
|
110
|
+
const s = state;
|
|
111
|
+
if (s) {
|
|
112
|
+
setRecipe(prev => ({
|
|
113
|
+
...prev,
|
|
114
|
+
...s,
|
|
115
|
+
ingredients: s.ingredients || prev.ingredients,
|
|
116
|
+
instructions: s.instructions || prev.instructions,
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
}, []);
|
|
120
|
+
// Handle local updates
|
|
121
|
+
const handleLocalUpdate = useCallback((updates) => {
|
|
122
|
+
setRecipe(prev => ({ ...prev, ...updates }));
|
|
123
|
+
}, []);
|
|
124
|
+
// Clear recipe
|
|
125
|
+
const handleClear = useCallback(() => {
|
|
126
|
+
setRecipe(DEFAULT_RECIPE);
|
|
127
|
+
}, []);
|
|
128
|
+
return (_jsx(DatalayerThemeProvider, { theme: datalayerTheme, children: _jsxs(Box, { sx: {
|
|
129
|
+
minHeight: '100vh',
|
|
130
|
+
backgroundColor: 'canvas.default',
|
|
131
|
+
padding: 4,
|
|
132
|
+
}, children: [_jsxs(Box, { sx: {
|
|
133
|
+
maxWidth: '900px',
|
|
134
|
+
margin: '0 auto',
|
|
135
|
+
}, children: [_jsxs(Box, { sx: {
|
|
136
|
+
display: 'flex',
|
|
137
|
+
justifyContent: 'space-between',
|
|
138
|
+
alignItems: 'flex-start',
|
|
139
|
+
marginBottom: 4,
|
|
140
|
+
}, children: [_jsxs(Box, { children: [_jsx(Text, { as: "h1", sx: {
|
|
141
|
+
fontSize: 4,
|
|
142
|
+
fontWeight: 'bold',
|
|
143
|
+
marginBottom: 2,
|
|
144
|
+
}, children: "AG-UI: Shared State Example" }), _jsx(Text, { as: "p", sx: {
|
|
145
|
+
fontSize: 2,
|
|
146
|
+
color: 'fg.muted',
|
|
147
|
+
}, children: "Build a recipe together with AI. Both you and the agent can edit the recipe." })] }), _jsx(Button, { variant: "danger", onClick: handleClear, children: "Clear Recipe" })] }), _jsxs(Box, { sx: {
|
|
148
|
+
padding: 4,
|
|
149
|
+
backgroundColor: 'canvas.subtle',
|
|
150
|
+
borderRadius: 2,
|
|
151
|
+
border: '1px solid',
|
|
152
|
+
borderColor: 'border.default',
|
|
153
|
+
marginBottom: 4,
|
|
154
|
+
}, children: [_jsxs(Box, { sx: {
|
|
155
|
+
display: 'flex',
|
|
156
|
+
justifyContent: 'space-between',
|
|
157
|
+
alignItems: 'center',
|
|
158
|
+
marginBottom: 3,
|
|
159
|
+
}, children: [_jsx(Text, { as: "h2", sx: { fontSize: 2, fontWeight: 'semibold' }, children: "Recipe Builder" }), _jsx(Label, { variant: "accent", children: "Shared State" })] }), _jsx(RecipeDisplay, { recipe: recipe, onUpdate: handleLocalUpdate })] }), _jsxs(Box, { sx: {
|
|
160
|
+
padding: 4,
|
|
161
|
+
backgroundColor: 'canvas.subtle',
|
|
162
|
+
borderRadius: 2,
|
|
163
|
+
border: '1px solid',
|
|
164
|
+
borderColor: 'border.default',
|
|
165
|
+
}, children: [_jsx(Text, { as: "h2", sx: { fontSize: 2, fontWeight: 'semibold', marginBottom: 2 }, children: "About This Example" }), _jsxs(Text, { as: "p", sx: { fontSize: 1, color: 'fg.muted' }, children: ["This demonstrates bidirectional shared state with AG-UI. The recipe state is shared between the frontend and the AI agent. When you make changes, they're available to the agent. When the agent updates the recipe (via", _jsx("code", { children: "display_recipe" }), " tool), it emits STATE_SNAPSHOT events that update the frontend."] }), _jsxs(Box, { sx: { marginTop: 3 }, children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'medium' }, children: "Try these prompts:" }), _jsxs(Box, { as: "ul", sx: {
|
|
166
|
+
paddingLeft: 3,
|
|
167
|
+
marginTop: 1,
|
|
168
|
+
fontSize: 1,
|
|
169
|
+
color: 'fg.muted',
|
|
170
|
+
}, children: [_jsx("li", { children: "\"Create a recipe for chocolate chip cookies\"" }), _jsx("li", { children: "\"Add butter and sugar to the ingredients\"" }), _jsx("li", { children: "\"Update the prep time to 20 minutes\"" }), _jsx("li", { children: "\"Suggest 3 more ingredients for my recipe\"" })] })] })] })] }), _jsx(ChatFloating, { endpoint: SHARED_STATE_ENDPOINT, title: "Recipe Assistant", description: "Let's build a recipe together! I can add ingredients, instructions, and more.", position: "bottom-right", brandColor: "#be185d", onStateUpdate: handleStateUpdate, suggestions: [
|
|
171
|
+
{
|
|
172
|
+
title: 'Pasta recipe',
|
|
173
|
+
message: 'Help me create a simple pasta recipe.',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
title: 'Add ingredient',
|
|
177
|
+
message: 'Add tomatoes to the recipe.',
|
|
178
|
+
},
|
|
179
|
+
] })] }) }));
|
|
180
|
+
};
|
|
181
|
+
export default AgUiSharedStateExample;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgUiToolsBasedGenUIExample
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates tool-based generative UI where the backend calls tools
|
|
5
|
+
* that render UI components. Unlike frontend tools, these are backend
|
|
6
|
+
* tools that return structured data to be rendered on the frontend.
|
|
7
|
+
*
|
|
8
|
+
* Backend: /api/v1/examples/agentic_generative_ui/
|
|
9
|
+
*/
|
|
10
|
+
import React from 'react';
|
|
11
|
+
/**
|
|
12
|
+
* AgUiToolsBasedGenUIExample Component
|
|
13
|
+
*
|
|
14
|
+
* Demonstrates tool-based generative UI with AG-UI.
|
|
15
|
+
* The agent uses tools (create_plan, update_plan_step) that emit
|
|
16
|
+
* STATE_SNAPSHOT and STATE_DELTA events to update the UI.
|
|
17
|
+
*
|
|
18
|
+
* Features demonstrated:
|
|
19
|
+
* - STATE_SNAPSHOT events for full state updates
|
|
20
|
+
* - STATE_DELTA events with JSON Patch for incremental updates
|
|
21
|
+
* - Real-time UI updates as agent works
|
|
22
|
+
* - Interactive step selection with Confirm/Reject buttons
|
|
23
|
+
*/
|
|
24
|
+
declare const AgUiToolsBasedGenUIExample: React.FC;
|
|
25
|
+
export default AgUiToolsBasedGenUIExample;
|
|
@@ -0,0 +1,257 @@
|
|
|
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
|
+
* AgUiToolsBasedGenUIExample
|
|
8
|
+
*
|
|
9
|
+
* Demonstrates tool-based generative UI where the backend calls tools
|
|
10
|
+
* that render UI components. Unlike frontend tools, these are backend
|
|
11
|
+
* tools that return structured data to be rendered on the frontend.
|
|
12
|
+
*
|
|
13
|
+
* Backend: /api/v1/examples/agentic_generative_ui/
|
|
14
|
+
*/
|
|
15
|
+
import { useState, useCallback } from 'react';
|
|
16
|
+
import { Text, ProgressBar, Button } from '@primer/react';
|
|
17
|
+
import { Box } from '@datalayer/primer-addons';
|
|
18
|
+
import { datalayerTheme, DatalayerThemeProvider } from '@datalayer/core';
|
|
19
|
+
import { ChatFloating } from '../components/chat';
|
|
20
|
+
import { CheckCircleIcon, CircleIcon, DotFillIcon, CheckIcon, XIcon, } from '@primer/octicons-react';
|
|
21
|
+
// AG-UI endpoint for agentic generative UI example
|
|
22
|
+
const AGENTIC_GENERATIVE_UI_ENDPOINT = 'http://localhost:8765/api/v1/examples/agentic_generative_ui/';
|
|
23
|
+
/**
|
|
24
|
+
* PlanStepItem Component
|
|
25
|
+
* Renders a single plan step with status indicator and optional click handler
|
|
26
|
+
*/
|
|
27
|
+
const PlanStepItem = ({ step, index, onClick, isInteractive = false }) => {
|
|
28
|
+
const statusIcon = {
|
|
29
|
+
pending: _jsx(CircleIcon, { size: 16 }),
|
|
30
|
+
in_progress: _jsx(DotFillIcon, { size: 16 }),
|
|
31
|
+
completed: _jsx(CheckCircleIcon, { size: 16 }),
|
|
32
|
+
};
|
|
33
|
+
const statusColor = {
|
|
34
|
+
pending: 'fg.muted',
|
|
35
|
+
in_progress: 'attention.fg',
|
|
36
|
+
completed: 'success.fg',
|
|
37
|
+
};
|
|
38
|
+
const isEnabled = step.enabled !== false;
|
|
39
|
+
return (_jsxs(Box, { as: isInteractive ? 'button' : 'div', onClick: isInteractive ? onClick : undefined, sx: {
|
|
40
|
+
display: 'flex',
|
|
41
|
+
gap: 2,
|
|
42
|
+
padding: 3,
|
|
43
|
+
borderRadius: 2,
|
|
44
|
+
backgroundColor: step.status === 'in_progress'
|
|
45
|
+
? 'attention.subtle'
|
|
46
|
+
: step.status === 'completed'
|
|
47
|
+
? 'success.subtle'
|
|
48
|
+
: isEnabled
|
|
49
|
+
? 'canvas.subtle'
|
|
50
|
+
: 'canvas.default',
|
|
51
|
+
border: '1px solid',
|
|
52
|
+
borderColor: step.status === 'in_progress'
|
|
53
|
+
? 'attention.muted'
|
|
54
|
+
: step.status === 'completed'
|
|
55
|
+
? 'success.muted'
|
|
56
|
+
: isEnabled
|
|
57
|
+
? 'border.default'
|
|
58
|
+
: 'border.muted',
|
|
59
|
+
cursor: isInteractive ? 'pointer' : 'default',
|
|
60
|
+
opacity: isEnabled ? 1 : 0.6,
|
|
61
|
+
transition: 'all 0.2s ease',
|
|
62
|
+
textAlign: 'left',
|
|
63
|
+
width: '100%',
|
|
64
|
+
'&:hover': isInteractive
|
|
65
|
+
? {
|
|
66
|
+
backgroundColor: step.status === 'completed' ? 'success.subtle' : 'canvas.inset',
|
|
67
|
+
borderColor: 'accent.muted',
|
|
68
|
+
}
|
|
69
|
+
: {},
|
|
70
|
+
}, children: [_jsx(Box, { sx: {
|
|
71
|
+
color: statusColor[step.status],
|
|
72
|
+
flexShrink: 0,
|
|
73
|
+
marginTop: '2px',
|
|
74
|
+
display: 'flex',
|
|
75
|
+
alignItems: 'center',
|
|
76
|
+
justifyContent: 'center',
|
|
77
|
+
width: 20,
|
|
78
|
+
height: 20,
|
|
79
|
+
}, children: isInteractive ? (_jsx(Box, { sx: {
|
|
80
|
+
width: 18,
|
|
81
|
+
height: 18,
|
|
82
|
+
borderRadius: 1,
|
|
83
|
+
border: '2px solid',
|
|
84
|
+
borderColor: isEnabled ? 'accent.fg' : 'border.muted',
|
|
85
|
+
backgroundColor: isEnabled ? 'accent.fg' : 'transparent',
|
|
86
|
+
display: 'flex',
|
|
87
|
+
alignItems: 'center',
|
|
88
|
+
justifyContent: 'center',
|
|
89
|
+
}, children: isEnabled && _jsx(CheckIcon, { size: 12, fill: "white" }) })) : (statusIcon[step.status]) }), _jsx(Box, { sx: { flex: 1 }, children: _jsxs(Text, { sx: {
|
|
90
|
+
fontWeight: 'medium',
|
|
91
|
+
fontSize: 1,
|
|
92
|
+
textDecoration: !isEnabled ? 'line-through' : 'none',
|
|
93
|
+
color: !isEnabled ? 'fg.muted' : 'fg.default',
|
|
94
|
+
}, children: [index + 1, ". ", step.description] }) }), step.status !== 'pending' && (_jsx(Box, { sx: {
|
|
95
|
+
fontSize: 0,
|
|
96
|
+
color: step.status === 'completed' ? 'success.fg' : 'attention.fg',
|
|
97
|
+
textTransform: 'capitalize',
|
|
98
|
+
}, children: step.status === 'in_progress' ? 'In Progress' : step.status }))] }));
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* PlanDisplay Component
|
|
102
|
+
* Renders the full plan with progress, clickable items, and Confirm/Reject buttons
|
|
103
|
+
*/
|
|
104
|
+
const PlanDisplay = ({ plan, isInteractive = true, onStepToggle, onConfirm, onReject, decision, }) => {
|
|
105
|
+
if (!plan) {
|
|
106
|
+
return (_jsxs(Box, { sx: {
|
|
107
|
+
textAlign: 'center',
|
|
108
|
+
padding: 5,
|
|
109
|
+
color: 'fg.muted',
|
|
110
|
+
border: '2px dashed',
|
|
111
|
+
borderColor: 'border.muted',
|
|
112
|
+
borderRadius: 2,
|
|
113
|
+
}, children: [_jsx(Text, { sx: { fontSize: 2, display: 'block', marginBottom: 2 }, children: "\uD83D\uDCCB No plan created yet" }), _jsx(Text, { sx: { fontSize: 1, display: 'block' }, children: "Ask the AI to create a plan for you." }), _jsx(Text, { sx: {
|
|
114
|
+
fontSize: 0,
|
|
115
|
+
display: 'block',
|
|
116
|
+
marginTop: 2,
|
|
117
|
+
fontStyle: 'italic',
|
|
118
|
+
}, children: "Try: \"Create a plan to learn machine learning\"" })] }));
|
|
119
|
+
}
|
|
120
|
+
const enabledSteps = plan.steps.filter(s => s.enabled !== false).length;
|
|
121
|
+
const completedSteps = plan.steps.filter(s => s.status === 'completed').length;
|
|
122
|
+
const totalSteps = plan.steps.length;
|
|
123
|
+
const progress = totalSteps > 0 ? (completedSteps / totalSteps) * 100 : 0;
|
|
124
|
+
return (_jsxs(Box, { children: [_jsxs(Box, { sx: { marginBottom: 4 }, children: [_jsxs(Box, { sx: {
|
|
125
|
+
display: 'flex',
|
|
126
|
+
justifyContent: 'space-between',
|
|
127
|
+
alignItems: 'center',
|
|
128
|
+
marginBottom: 2,
|
|
129
|
+
}, children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'semibold', color: 'fg.default' }, children: "Select Steps" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: isInteractive
|
|
130
|
+
? `${enabledSteps}/${totalSteps} selected`
|
|
131
|
+
: `${completedSteps}/${totalSteps} completed` })] }), _jsx(ProgressBar, { progress: progress })] }), _jsx(Box, { sx: {
|
|
132
|
+
display: 'flex',
|
|
133
|
+
flexDirection: 'column',
|
|
134
|
+
gap: 2,
|
|
135
|
+
marginBottom: 4,
|
|
136
|
+
}, children: plan.steps.map((step, index) => (_jsx(PlanStepItem, { step: step, index: index, isInteractive: isInteractive && !decision, onClick: () => onStepToggle?.(index) }, index))) }), isInteractive && !decision && (_jsxs(Box, { sx: {
|
|
137
|
+
display: 'flex',
|
|
138
|
+
justifyContent: 'center',
|
|
139
|
+
gap: 3,
|
|
140
|
+
paddingTop: 3,
|
|
141
|
+
borderTop: '1px solid',
|
|
142
|
+
borderColor: 'border.default',
|
|
143
|
+
}, children: [_jsxs(Button, { variant: "danger", onClick: onReject, size: "large", children: [_jsx(XIcon, { size: 16 }), _jsx(Text, { sx: { marginLeft: 1 }, children: "Reject" })] }), _jsxs(Button, { variant: "primary", onClick: onConfirm, size: "large", children: [_jsx(CheckIcon, { size: 16 }), _jsxs(Text, { sx: { marginLeft: 1 }, children: ["Confirm (", enabledSteps, ")"] })] })] })), decision && (_jsx(Box, { sx: {
|
|
144
|
+
display: 'flex',
|
|
145
|
+
justifyContent: 'center',
|
|
146
|
+
padding: 3,
|
|
147
|
+
backgroundColor: decision === 'confirmed' ? 'success.subtle' : 'danger.subtle',
|
|
148
|
+
borderRadius: 2,
|
|
149
|
+
border: '1px solid',
|
|
150
|
+
borderColor: decision === 'confirmed' ? 'success.muted' : 'danger.muted',
|
|
151
|
+
}, children: _jsx(Text, { sx: {
|
|
152
|
+
fontWeight: 'semibold',
|
|
153
|
+
color: decision === 'confirmed' ? 'success.fg' : 'danger.fg',
|
|
154
|
+
}, children: decision === 'confirmed'
|
|
155
|
+
? `✓ Plan confirmed with ${enabledSteps} steps`
|
|
156
|
+
: '✗ Plan rejected' }) }))] }));
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* AgUiToolsBasedGenUIExample Component
|
|
160
|
+
*
|
|
161
|
+
* Demonstrates tool-based generative UI with AG-UI.
|
|
162
|
+
* The agent uses tools (create_plan, update_plan_step) that emit
|
|
163
|
+
* STATE_SNAPSHOT and STATE_DELTA events to update the UI.
|
|
164
|
+
*
|
|
165
|
+
* Features demonstrated:
|
|
166
|
+
* - STATE_SNAPSHOT events for full state updates
|
|
167
|
+
* - STATE_DELTA events with JSON Patch for incremental updates
|
|
168
|
+
* - Real-time UI updates as agent works
|
|
169
|
+
* - Interactive step selection with Confirm/Reject buttons
|
|
170
|
+
*/
|
|
171
|
+
const AgUiToolsBasedGenUIExample = () => {
|
|
172
|
+
const [plan, setPlan] = useState(null);
|
|
173
|
+
const [decision, setDecision] = useState(null);
|
|
174
|
+
// Handle state updates from AG-UI events
|
|
175
|
+
const handleStateUpdate = useCallback((state) => {
|
|
176
|
+
const s = state;
|
|
177
|
+
if (s && s.steps && Array.isArray(s.steps)) {
|
|
178
|
+
// Initialize enabled state for new steps
|
|
179
|
+
const stepsWithEnabled = s.steps.map(step => ({
|
|
180
|
+
...step,
|
|
181
|
+
enabled: step.enabled !== undefined ? step.enabled : true,
|
|
182
|
+
}));
|
|
183
|
+
setPlan({ steps: stepsWithEnabled });
|
|
184
|
+
// Reset decision when new plan arrives
|
|
185
|
+
setDecision(null);
|
|
186
|
+
}
|
|
187
|
+
}, []);
|
|
188
|
+
// Toggle step enabled state
|
|
189
|
+
const handleStepToggle = useCallback((index) => {
|
|
190
|
+
setPlan(prev => {
|
|
191
|
+
if (!prev)
|
|
192
|
+
return prev;
|
|
193
|
+
const newSteps = [...prev.steps];
|
|
194
|
+
newSteps[index] = {
|
|
195
|
+
...newSteps[index],
|
|
196
|
+
enabled: !newSteps[index].enabled,
|
|
197
|
+
};
|
|
198
|
+
return { steps: newSteps };
|
|
199
|
+
});
|
|
200
|
+
}, []);
|
|
201
|
+
// Confirm the plan
|
|
202
|
+
const handleConfirm = useCallback(() => {
|
|
203
|
+
setDecision('confirmed');
|
|
204
|
+
// Here you could send the confirmed steps back to the agent
|
|
205
|
+
console.log('Plan confirmed with steps:', plan?.steps.filter(s => s.enabled !== false).map(s => s.description));
|
|
206
|
+
}, [plan]);
|
|
207
|
+
// Reject the plan
|
|
208
|
+
const handleReject = useCallback(() => {
|
|
209
|
+
setDecision('rejected');
|
|
210
|
+
console.log('Plan rejected');
|
|
211
|
+
}, []);
|
|
212
|
+
return (_jsx(DatalayerThemeProvider, { theme: datalayerTheme, children: _jsxs(Box, { sx: {
|
|
213
|
+
minHeight: '100vh',
|
|
214
|
+
backgroundColor: 'canvas.default',
|
|
215
|
+
padding: 4,
|
|
216
|
+
}, children: [_jsxs(Box, { sx: {
|
|
217
|
+
maxWidth: '800px',
|
|
218
|
+
margin: '0 auto',
|
|
219
|
+
}, children: [_jsx(Text, { as: "h1", sx: {
|
|
220
|
+
fontSize: 4,
|
|
221
|
+
fontWeight: 'bold',
|
|
222
|
+
marginBottom: 2,
|
|
223
|
+
}, children: "AG-UI: Tool-Based Generative UI Example" }), _jsx(Text, { as: "p", sx: {
|
|
224
|
+
fontSize: 2,
|
|
225
|
+
color: 'fg.muted',
|
|
226
|
+
marginBottom: 4,
|
|
227
|
+
}, children: "Watch the AI create and update a plan in real-time using STATE_SNAPSHOT and STATE_DELTA events." }), _jsxs(Box, { sx: {
|
|
228
|
+
padding: 4,
|
|
229
|
+
backgroundColor: 'canvas.subtle',
|
|
230
|
+
borderRadius: 2,
|
|
231
|
+
border: '1px solid',
|
|
232
|
+
borderColor: 'border.default',
|
|
233
|
+
marginBottom: 4,
|
|
234
|
+
minHeight: '300px',
|
|
235
|
+
}, children: [_jsx(Text, { as: "h2", sx: { fontSize: 2, fontWeight: 'semibold', marginBottom: 3 }, children: "Generated Plan" }), _jsx(PlanDisplay, { plan: plan, isInteractive: true, onStepToggle: handleStepToggle, onConfirm: handleConfirm, onReject: handleReject, decision: decision })] }), _jsxs(Box, { sx: {
|
|
236
|
+
padding: 4,
|
|
237
|
+
backgroundColor: 'canvas.subtle',
|
|
238
|
+
borderRadius: 2,
|
|
239
|
+
border: '1px solid',
|
|
240
|
+
borderColor: 'border.default',
|
|
241
|
+
}, children: [_jsx(Text, { as: "h2", sx: { fontSize: 2, fontWeight: 'semibold', marginBottom: 2 }, children: "About This Example" }), _jsxs(Text, { as: "p", sx: { fontSize: 1, color: 'fg.muted' }, children: ["This example shows how AG-UI enables tool-based generative UI. The agent has two tools: ", _jsx("code", { children: "create_plan" }), " emits a STATE_SNAPSHOT with the full plan, and", ' ', _jsx("code", { children: "update_plan_step" }), " emits STATE_DELTA events with JSON Patch operations for efficient incremental updates."] }), _jsxs(Box, { sx: { marginTop: 3 }, children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'medium' }, children: "AG-UI Events Used:" }), _jsxs(Box, { as: "ul", sx: {
|
|
242
|
+
paddingLeft: 3,
|
|
243
|
+
marginTop: 1,
|
|
244
|
+
fontSize: 1,
|
|
245
|
+
color: 'fg.muted',
|
|
246
|
+
}, children: [_jsx("li", { children: "STATE_SNAPSHOT - Full state replacement" }), _jsx("li", { children: "STATE_DELTA - Incremental JSON Patch updates (RFC 6902)" }), _jsx("li", { children: "TOOL_CALL_START / TOOL_CALL_END - Tool execution tracking" })] })] })] })] }), _jsx(ChatFloating, { endpoint: AGENTIC_GENERATIVE_UI_ENDPOINT, title: "Plan Generator", description: "I can create detailed plans and update them in real-time.", position: "bottom-right", brandColor: "#0969da", onStateUpdate: handleStateUpdate, suggestions: [
|
|
247
|
+
{
|
|
248
|
+
title: 'Project plan',
|
|
249
|
+
message: 'Create a project plan for building a mobile app.',
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
title: 'Marketing strategy',
|
|
253
|
+
message: 'Generate a marketing strategy for a new product launch.',
|
|
254
|
+
},
|
|
255
|
+
] })] }) }));
|
|
256
|
+
};
|
|
257
|
+
export default AgUiToolsBasedGenUIExample;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Runtime Custom Example Component
|
|
3
|
+
*
|
|
4
|
+
* Demonstrates the unified Chat component with Simple transport
|
|
5
|
+
* and all necessary providers:
|
|
6
|
+
* - QueryClientProvider for data fetching
|
|
7
|
+
*/
|
|
8
|
+
declare const AgentRuntimeCustomExample: React.FC;
|
|
9
|
+
export default AgentRuntimeCustomExample;
|
|
@@ -0,0 +1,68 @@
|
|
|
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
|
+
import { Text } from '@primer/react';
|
|
7
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
8
|
+
import { Box } from '@datalayer/primer-addons';
|
|
9
|
+
import { datalayerTheme, DatalayerThemeProvider } from '@datalayer/core';
|
|
10
|
+
import { Chat } from '../components/chat';
|
|
11
|
+
// Create a query client for React Query
|
|
12
|
+
const queryClient = new QueryClient({
|
|
13
|
+
defaultOptions: {
|
|
14
|
+
queries: {
|
|
15
|
+
staleTime: 1000 * 60 * 5, // 5 minutes
|
|
16
|
+
gcTime: 1000 * 60 * 10, // 10 minutes
|
|
17
|
+
retry: 1,
|
|
18
|
+
refetchOnWindowFocus: false,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* Agent Runtime Custom Example Component
|
|
24
|
+
*
|
|
25
|
+
* Demonstrates the unified Chat component with Simple transport
|
|
26
|
+
* and all necessary providers:
|
|
27
|
+
* - QueryClientProvider for data fetching
|
|
28
|
+
*/
|
|
29
|
+
const AgentRuntimeCustomExample = () => {
|
|
30
|
+
return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(DatalayerThemeProvider, { theme: datalayerTheme, children: _jsxs(Box, { sx: {
|
|
31
|
+
display: 'flex',
|
|
32
|
+
flexDirection: 'column',
|
|
33
|
+
height: '100vh',
|
|
34
|
+
backgroundColor: 'canvas.default',
|
|
35
|
+
}, children: [_jsxs(Box, { as: "header", sx: {
|
|
36
|
+
borderBottom: '1px solid',
|
|
37
|
+
borderColor: 'border.default',
|
|
38
|
+
padding: 3,
|
|
39
|
+
}, children: [_jsx(Text, { sx: {
|
|
40
|
+
fontSize: 3,
|
|
41
|
+
fontWeight: 'bold',
|
|
42
|
+
display: 'block',
|
|
43
|
+
marginBottom: 1,
|
|
44
|
+
}, children: "Agent Runtime Custom Example" }), _jsx(Text, { sx: { fontSize: 1, color: 'fg.muted' }, children: "Interactive chat interface with AI assistance" })] }), _jsx(Box, { as: "main", sx: {
|
|
45
|
+
flex: 1,
|
|
46
|
+
overflow: 'hidden',
|
|
47
|
+
display: 'flex',
|
|
48
|
+
flexDirection: 'column',
|
|
49
|
+
}, children: _jsx(Chat, { transport: "vercel-ai-jupyter", showModelSelector: true, showToolsMenu: true, height: "100%", suggestions: [
|
|
50
|
+
{
|
|
51
|
+
title: '👋 Say hello',
|
|
52
|
+
message: 'Hello! What can you help me with today?',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
title: '💡 Explain concepts',
|
|
56
|
+
message: 'Can you explain how AI agents work?',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
title: '🔧 Help with code',
|
|
60
|
+
message: 'Can you help me write some Python code?',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
title: '📊 Data analysis',
|
|
64
|
+
message: 'How do I analyze data with pandas?',
|
|
65
|
+
},
|
|
66
|
+
] }) })] }) }) }));
|
|
67
|
+
};
|
|
68
|
+
export default AgentRuntimeCustomExample;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat Lexical Example - Floating popup chat with Lexical editor.
|
|
3
|
+
*
|
|
4
|
+
* This example demonstrates using the chat popup component with:
|
|
5
|
+
* - Floating popup window that appears in a corner
|
|
6
|
+
* - Lexical editor integration
|
|
7
|
+
* - Frontend tool execution
|
|
8
|
+
* - Escape to close, click outside to close
|
|
9
|
+
* - Keyboard shortcuts
|
|
10
|
+
*
|
|
11
|
+
* To run this example, create a .env file with:
|
|
12
|
+
* - VITE_DATALAYER_API_TOKEN: Get from https://datalayer.app/settings/iam/tokens
|
|
13
|
+
*
|
|
14
|
+
* @module examples/ChatLexicalExample
|
|
15
|
+
*/
|
|
16
|
+
import 'prismjs';
|
|
17
|
+
import 'prismjs/components/prism-clike';
|
|
18
|
+
import 'prismjs/components/prism-javascript';
|
|
19
|
+
import 'prismjs/components/prism-markup';
|
|
20
|
+
import 'prismjs/components/prism-markdown';
|
|
21
|
+
import 'prismjs/components/prism-c';
|
|
22
|
+
import 'prismjs/components/prism-css';
|
|
23
|
+
import 'prismjs/components/prism-objectivec';
|
|
24
|
+
import 'prismjs/components/prism-sql';
|
|
25
|
+
import 'prismjs/components/prism-python';
|
|
26
|
+
import 'prismjs/components/prism-rust';
|
|
27
|
+
import 'prismjs/components/prism-swift';
|
|
28
|
+
import type { ServiceManager } from '@jupyterlab/services';
|
|
29
|
+
import '@datalayer/jupyter-lexical/style/index.css';
|
|
30
|
+
import './lexical/lexical-theme.css';
|
|
31
|
+
/**
|
|
32
|
+
* Chat Lexical Example with Simple integration
|
|
33
|
+
*/
|
|
34
|
+
interface ChatLexicalExampleProps {
|
|
35
|
+
serviceManager?: ServiceManager.IManager;
|
|
36
|
+
}
|
|
37
|
+
export declare function ChatLexicalExampleInner({ serviceManager, }: ChatLexicalExampleProps): import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
/**
|
|
39
|
+
* Main example component with Simple wrapper
|
|
40
|
+
*/
|
|
41
|
+
export declare function AgentRuntimePopupLexicalExample(): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export default AgentRuntimePopupLexicalExample;
|