@datalayer/agent-runtimes 1.0.10 → 1.0.17
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/README.md +82 -1
- package/lib/{AgentLexical.d.ts → AgentDocument.d.ts} +5 -5
- package/lib/{AgentLexical.js → AgentDocument.js} +156 -26
- package/lib/AgentNode.js +32 -31
- package/lib/AgentNotebook.js +172 -17
- package/lib/AppExamples2.css +47 -0
- package/lib/AppExamples2.d.ts +3 -0
- package/lib/AppExamples2.js +21 -0
- package/lib/{agent-lexical-main.js → agent-document-main.js} +2 -2
- package/lib/agents/AgentRuntimeChat.d.ts +73 -0
- package/lib/agents/AgentRuntimeChat.js +198 -0
- package/lib/api/index.d.ts +12 -0
- package/lib/api/index.js +46 -0
- package/lib/api/runtimes/checkpoints.d.ts +122 -0
- package/lib/api/runtimes/checkpoints.js +118 -0
- package/lib/api/runtimes/environments.d.ts +9 -0
- package/lib/api/runtimes/environments.js +29 -0
- package/lib/api/runtimes/healthz.d.ts +15 -0
- package/lib/api/runtimes/healthz.js +44 -0
- package/lib/api/runtimes/index.d.ts +12 -0
- package/lib/api/runtimes/index.js +16 -0
- package/lib/api/runtimes/runtimes.d.ts +138 -0
- package/lib/api/runtimes/runtimes.js +230 -0
- package/lib/api/runtimes/snapshots.d.ts +38 -0
- package/lib/api/runtimes/snapshots.js +82 -0
- package/lib/api/scheduler/index.d.ts +6 -0
- package/lib/api/scheduler/index.js +10 -0
- package/lib/api/scheduler/schedules.d.ts +85 -0
- package/lib/api/scheduler/schedules.js +78 -0
- package/lib/api/spacer/documents.d.ts +12 -0
- package/lib/api/spacer/documents.js +43 -0
- package/lib/api/spacer/healthz.d.ts +15 -0
- package/lib/api/spacer/healthz.js +44 -0
- package/lib/api/spacer/index.d.ts +15 -0
- package/lib/api/spacer/index.js +19 -0
- package/lib/api/spacer/items.d.ts +25 -0
- package/lib/api/spacer/items.js +55 -0
- package/lib/api/spacer/lexicals.d.ts +34 -0
- package/lib/api/spacer/lexicals.js +89 -0
- package/lib/api/spacer/notebooks.d.ts +34 -0
- package/lib/api/spacer/notebooks.js +89 -0
- package/lib/api/spacer/spaces.d.ts +84 -0
- package/lib/api/spacer/spaces.js +170 -0
- package/lib/api/spacer/users.d.ts +9 -0
- package/lib/api/spacer/users.js +29 -0
- package/lib/chat/Chat.d.ts +1 -1
- package/lib/chat/Chat.js +54 -54
- package/lib/chat/ChatFloating.d.ts +2 -2
- package/lib/chat/ChatFloating.js +136 -25
- package/lib/chat/ChatSidebar.js +20 -22
- package/lib/chat/base/ChatBase.js +429 -39
- package/lib/chat/display/EmptyState.js +21 -21
- package/lib/chat/document/EphemeralDocument.d.ts +23 -0
- package/lib/chat/document/EphemeralDocument.js +270 -0
- package/lib/chat/header/ChatHeaderBase.d.ts +12 -2
- package/lib/chat/header/ChatHeaderBase.js +78 -23
- package/lib/chat/index.d.ts +1 -0
- package/lib/chat/index.js +2 -0
- package/lib/chat/notebook/EphemeralNotebook.d.ts +24 -0
- package/lib/chat/notebook/EphemeralNotebook.js +252 -0
- package/lib/chat/prompt/InputFooter.js +4 -1
- package/lib/client/AgentRuntimesClient.d.ts +127 -0
- package/lib/client/AgentRuntimesClient.js +36 -0
- package/lib/client/AgentsMixin.js +28 -28
- package/lib/client/SdkAgentRuntimesClient.d.ts +1 -1
- package/lib/client/SdkAgentRuntimesClient.js +1 -1
- package/lib/client/mixins/RuntimesMixin.d.ts +93 -0
- package/lib/client/mixins/RuntimesMixin.js +229 -0
- package/lib/client/mixins/SpacerMixin.d.ts +210 -0
- package/lib/client/mixins/SpacerMixin.js +615 -0
- package/lib/client/utils/spacerUtils.d.ts +18 -0
- package/lib/client/utils/spacerUtils.js +32 -0
- package/lib/collaboration/DatalayerCollaboration.d.ts +13 -0
- package/lib/collaboration/DatalayerCollaboration.js +28 -0
- package/lib/collaboration/DatalayerCollaborationProvider.d.ts +58 -0
- package/lib/collaboration/DatalayerCollaborationProvider.js +148 -0
- package/lib/collaboration/index.d.ts +2 -0
- package/lib/collaboration/index.js +6 -0
- package/lib/components/AgentSummary.d.ts +19 -0
- package/lib/components/AgentSummary.js +89 -0
- package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +13 -0
- package/lib/components/a2ui/A2uiSurfaceComposed.js +110 -0
- package/lib/components/a2ui/index.d.ts +2 -0
- package/lib/components/a2ui/index.js +6 -0
- package/lib/components/a2ui/styles.d.ts +14 -0
- package/lib/components/a2ui/styles.js +142 -0
- package/lib/components/context/SpaceSelect.d.ts +2 -0
- package/lib/components/context/SpaceSelect.js +42 -0
- package/lib/components/flashes/FlashDisclaimer.d.ts +2 -0
- package/lib/components/flashes/FlashDisclaimer.js +17 -0
- package/lib/components/icons/ArtifactIcon.d.ts +10 -0
- package/lib/components/icons/ArtifactIcon.js +58 -0
- package/lib/components/icons/index.d.ts +1 -0
- package/lib/components/icons/index.js +5 -0
- package/lib/components/index.d.ts +5 -0
- package/lib/components/index.js +5 -0
- package/lib/components/nbgrader/NbGradesDetails.d.ts +5 -0
- package/lib/components/nbgrader/NbGradesDetails.js +19 -0
- package/lib/components/nbgrader/index.d.ts +1 -0
- package/lib/components/nbgrader/index.js +5 -0
- package/lib/components/progress/CreditsIndicator.d.ts +33 -0
- package/lib/components/progress/CreditsIndicator.js +23 -0
- package/lib/components/progress/index.d.ts +2 -0
- package/lib/components/progress/index.js +6 -0
- package/lib/components/runtimes/RuntimeCellVariables.d.ts +39 -0
- package/lib/components/runtimes/RuntimeCellVariables.js +172 -0
- package/lib/components/runtimes/RuntimeCellVariablesDialog.d.ts +37 -0
- package/lib/components/runtimes/RuntimeCellVariablesDialog.js +101 -0
- package/lib/components/runtimes/RuntimeLauncherDialog.d.ts +57 -0
- package/lib/components/runtimes/RuntimeLauncherDialog.js +275 -0
- package/lib/components/runtimes/RuntimePickerBase.d.ts +69 -0
- package/lib/components/runtimes/RuntimePickerBase.js +122 -0
- package/lib/components/runtimes/RuntimePickerCell.d.ts +34 -0
- package/lib/components/runtimes/RuntimePickerCell.js +104 -0
- package/lib/components/runtimes/RuntimePickerNotebook.d.ts +42 -0
- package/lib/components/runtimes/RuntimePickerNotebook.js +232 -0
- package/lib/components/runtimes/RuntimeReservationControl.d.ts +47 -0
- package/lib/components/runtimes/RuntimeReservationControl.js +42 -0
- package/lib/components/runtimes/RuntimeSimplePicker.d.ts +38 -0
- package/lib/components/runtimes/RuntimeSimplePicker.js +155 -0
- package/lib/components/runtimes/RuntimeTransfer.d.ts +16 -0
- package/lib/components/runtimes/RuntimeTransfer.js +5 -0
- package/lib/components/runtimes/RuntimeUtils.d.ts +17 -0
- package/lib/components/runtimes/RuntimeUtils.js +178 -0
- package/lib/components/runtimes/RuntimeVariables.d.ts +38 -0
- package/lib/components/runtimes/RuntimeVariables.js +75 -0
- package/lib/components/runtimes/index.d.ts +11 -0
- package/lib/components/runtimes/index.js +15 -0
- package/lib/components/scheduler/ScheduleMenu.d.ts +54 -0
- package/lib/components/scheduler/ScheduleMenu.js +154 -0
- package/lib/components/scheduler/index.d.ts +1 -0
- package/lib/components/scheduler/index.js +5 -0
- package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +33 -0
- package/lib/components/snapshots/SandboxSnapshotMenu.js +169 -0
- package/lib/components/snapshots/index.d.ts +1 -0
- package/lib/components/snapshots/index.js +5 -0
- package/lib/components/snippets/SnippetDialog.d.ts +42 -0
- package/lib/components/snippets/SnippetDialog.js +42 -0
- package/lib/components/students/StudentItemStatus.d.ts +7 -0
- package/lib/components/students/StudentItemStatus.js +68 -0
- package/lib/components/students/index.d.ts +1 -0
- package/lib/components/students/index.js +5 -0
- package/lib/components/tokens/SpaceVariantToken.d.ts +5 -0
- package/lib/components/tokens/SpaceVariantToken.js +23 -0
- package/lib/components/tokens/index.d.ts +1 -0
- package/lib/components/tokens/index.js +5 -0
- package/lib/components/toolbars/AssignmentEditorToolbar.d.ts +4 -0
- package/lib/components/toolbars/AssignmentEditorToolbar.js +18 -0
- package/lib/components/toolbars/DocumentEditorToolbar.d.ts +2 -0
- package/lib/components/toolbars/DocumentEditorToolbar.js +12 -0
- package/lib/components/toolbars/NotebookEditorToolbar.d.ts +29 -0
- package/lib/components/toolbars/NotebookEditorToolbar.js +30 -0
- package/lib/context/ContextInspector.d.ts +1 -14
- package/lib/context/ContextInspector.js +3 -73
- package/lib/context/CostUsageChart.d.ts +4 -3
- package/lib/context/CostUsageChart.js +236 -35
- package/lib/context/MessageHistory.d.ts +30 -0
- package/lib/context/MessageHistory.js +129 -0
- package/lib/context/TokenUsageChart.d.ts +4 -3
- package/lib/context/TokenUsageChart.js +180 -30
- package/lib/context/TurnGraphChart.d.ts +1 -1
- package/lib/context/TurnGraphChart.js +6 -6
- package/lib/examples/A2UiAgentExample.d.ts +22 -0
- package/lib/examples/A2UiAgentExample.js +442 -0
- package/lib/examples/A2UiComponentsGalleryExample.d.ts +3 -0
- package/lib/examples/A2UiComponentsGalleryExample.js +863 -0
- package/lib/examples/A2UiContactCardExample.js +9 -5
- package/lib/examples/A2UiRestaurantExample.js +23 -8
- package/lib/examples/A2UiViewerExample.js +75 -3
- package/lib/examples/AgUiAgenticExample.d.ts +1 -12
- package/lib/examples/AgUiAgenticExample.js +52 -8
- package/lib/examples/AgUiBackendToolRenderingExample.d.ts +1 -16
- package/lib/examples/AgUiBackendToolRenderingExample.js +32 -17
- package/lib/examples/AgUiHaikuGenUiExample.d.ts +1 -17
- package/lib/examples/AgUiHaikuGenUiExample.js +49 -33
- package/lib/examples/AgUiHumanInTheLoopExample.d.ts +1 -12
- package/lib/examples/AgUiHumanInTheLoopExample.js +21 -6
- package/lib/examples/AgUiSharedStateExample.d.ts +1 -14
- package/lib/examples/AgUiSharedStateExample.js +21 -6
- package/lib/examples/AgUiToolsBasedGenUiExample.d.ts +1 -14
- package/lib/examples/AgUiToolsBasedGenUiExample.js +21 -6
- package/lib/examples/AgentCheckpointsExample.d.ts +1 -1
- package/lib/examples/AgentCheckpointsExample.js +9 -10
- package/lib/examples/AgentCodemodeExample.js +3 -3
- package/lib/examples/AgentEvalsExample.js +5 -5
- package/lib/examples/AgentGuardrailsExample.js +17 -12
- package/lib/examples/AgentHooksExample.js +14 -55
- package/lib/examples/AgentInferenceProviderExample.js +4 -4
- package/lib/examples/AgentLoopExample.d.ts +10 -0
- package/lib/examples/AgentLoopExample.js +304 -0
- package/lib/examples/AgentMCPExample.js +7 -7
- package/lib/examples/AgentMemoryExample.js +4 -4
- package/lib/examples/AgentMonitoringExample.js +114 -44
- package/lib/examples/AgentNotificationsExample.js +4 -4
- package/lib/examples/AgentOtelExample.d.ts +3 -3
- package/lib/examples/AgentOtelExample.js +15 -10
- package/lib/examples/AgentOutputsExample.js +6 -6
- package/lib/examples/AgentParametersExample.js +21 -33
- package/lib/examples/AgentSandboxExample.js +5 -5
- package/lib/examples/AgentSkillsExample.js +7 -7
- package/lib/examples/AgentSubagentsExample.js +4 -4
- package/lib/examples/AgentToolApprovalsExample.js +5 -5
- package/lib/examples/AgentTriggersExample.js +9 -9
- package/lib/examples/AgentspecsExample.js +63 -41
- package/lib/examples/ChatCustomExample.js +23 -77
- package/lib/examples/ChatExample.js +13 -44
- package/lib/examples/LexicalAgentExample.js +43 -91
- package/lib/examples/LexicalAgentSidebarExample.js +45 -73
- package/lib/examples/NotebookAgentExample.js +52 -81
- package/lib/examples/NotebookAgentSidebarExample.js +43 -71
- package/lib/examples/NotebookCollaborationExample.js +11 -9
- package/lib/examples/NotebookExample.js +5 -2
- package/lib/examples/components/AuthRequiredView.js +1 -1
- package/lib/examples/components/ExampleErrorBoundary.d.ts +46 -0
- package/lib/examples/components/ExampleErrorBoundary.js +67 -0
- package/lib/examples/components/haiku/haiku-card.css +11 -0
- package/lib/examples/components/weather/weather-card.css +11 -0
- package/lib/examples/example-selector.js +3 -1
- package/lib/examples/hooks/useExampleAgentRuntime.d.ts +35 -0
- package/lib/examples/hooks/useExampleAgentRuntime.js +82 -0
- package/lib/examples/hooks/useSpecRenderToolResult.d.ts +30 -0
- package/lib/examples/hooks/useSpecRenderToolResult.js +61 -0
- package/lib/examples/index.d.ts +3 -1
- package/lib/examples/index.js +3 -1
- package/lib/examples/main.js +340 -93
- package/lib/examples/utils/a2ui.d.ts +2 -0
- package/lib/examples/utils/a2ui.js +97 -2
- package/lib/examples/utils/agentSummaryStore.d.ts +21 -0
- package/lib/examples/utils/agentSummaryStore.js +23 -0
- package/lib/examples/utils/notebooks/Empty.ipynb.json +30 -30
- package/lib/examples/utils/runtimeTargetStore.d.ts +9 -0
- package/lib/examples/utils/runtimeTargetStore.js +27 -0
- package/lib/examples/utils/teardownAgents.d.ts +13 -0
- package/lib/examples/utils/teardownAgents.js +78 -0
- package/lib/examples/utils/useExampleAgentRuntimesUrl.d.ts +2 -0
- package/lib/examples/utils/useExampleAgentRuntimesUrl.js +26 -7
- package/lib/examples2/CellExample.d.ts +6 -0
- package/lib/examples2/CellExample.js +20 -0
- package/lib/examples2/DatalayerNotebookExample.d.ts +16 -0
- package/lib/examples2/DatalayerNotebookExample.js +109 -0
- package/lib/examples2/NativeNavigationExample.d.ts +8 -0
- package/lib/examples2/NativeNavigationExample.js +97 -0
- package/lib/examples2/NotebookExample.d.ts +6 -0
- package/lib/examples2/NotebookExample.js +19 -0
- package/lib/examples2/NotebookMutationsKernel.d.ts +2 -0
- package/lib/examples2/NotebookMutationsKernel.js +105 -0
- package/lib/examples2/NotebookMutationsServiceManager.d.ts +2 -0
- package/lib/examples2/NotebookMutationsServiceManager.js +109 -0
- package/lib/examples2/ReactRouterExample.d.ts +6 -0
- package/lib/examples2/ReactRouterExample.js +175 -0
- package/lib/examples2/example-selector.d.ts +22 -0
- package/lib/examples2/example-selector.js +45 -0
- package/lib/examples2/index.d.ts +2 -0
- package/lib/examples2/index.js +6 -0
- package/lib/examples2/lexical-theme.css +436 -0
- package/lib/examples2/main.d.ts +2 -0
- package/lib/examples2/main.js +330 -0
- package/lib/examples2/notebooks/IPyWidgetsExample.ipynb.json +101 -0
- package/lib/examples2/notebooks/IPyWidgetsExampleWithState.ipynb.json +112 -0
- package/lib/examples2/notebooks/Lite.ipynb.json +128 -0
- package/lib/examples2/notebooks/Matplotlib.ipynb.json +137 -0
- package/lib/examples2/notebooks/NotebookExample1.ipynb.json +126 -0
- package/lib/examples2/notebooks/NotebookExample2.ipynb.json +48 -0
- package/lib/examples2/notebooks/NotebookOutputs.ipynb.json +49 -0
- package/lib/examples2/notebooks/NotebookToCExample.ipynb.json +102 -0
- package/lib/examples2/notebooks/OutputIPyWidgetsExample.d.ts +145 -0
- package/lib/examples2/notebooks/OutputIPyWidgetsExample.js +153 -0
- package/lib/examples2/notebooks/PyGWalker.ipynb.json +55 -0
- package/lib/hooks/index.d.ts +9 -1
- package/lib/hooks/index.js +13 -1
- package/lib/hooks/useAIAgentsWebSocket.d.ts +1 -1
- package/lib/hooks/useAIAgentsWebSocket.js +39 -3
- package/lib/hooks/useAgentRuntimes.d.ts +15 -3
- package/lib/hooks/useAgentRuntimes.js +186 -27
- package/lib/hooks/useAgentsService.js +5 -5
- package/lib/hooks/useCellOutputshot.d.ts +4 -0
- package/lib/hooks/useCellOutputshot.js +25 -0
- package/lib/hooks/useCheckpoints.d.ts +8 -8
- package/lib/hooks/useCheckpoints.js +36 -26
- package/lib/hooks/useConfig.d.ts +1 -1
- package/lib/hooks/useMonitoring.d.ts +7 -5
- package/lib/hooks/useMonitoring.js +16 -10
- package/lib/hooks/useNotifications.d.ts +11 -11
- package/lib/hooks/useNotifications.js +1 -1
- package/lib/hooks/useProgressStore.d.ts +25 -0
- package/lib/hooks/useProgressStore.js +58 -0
- package/lib/hooks/useProgressTask.d.ts +9 -0
- package/lib/hooks/useProgressTask.js +41 -0
- package/lib/hooks/useProjects.d.ts +628 -0
- package/lib/hooks/useProjects.js +190 -0
- package/lib/hooks/useRuntimes.d.ts +5 -0
- package/lib/hooks/useRuntimes.js +34 -0
- package/lib/hooks/useToolApprovals.d.ts +6 -6
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/jupyter/exec/Python.d.ts +5 -0
- package/lib/jupyter/exec/Python.js +100 -0
- package/lib/jupyter/exec/Snippets.d.ts +105 -0
- package/lib/jupyter/exec/Snippets.js +101 -0
- package/lib/jupyter/exec/index.d.ts +2 -0
- package/lib/jupyter/exec/index.js +6 -0
- package/lib/jupyter/index.d.ts +2 -0
- package/lib/jupyter/index.js +6 -0
- package/lib/jupyter/kernelsHandler.d.ts +8 -0
- package/lib/jupyter/kernelsHandler.js +39 -0
- package/lib/mocks/models/CourseMock.d.ts +6 -0
- package/lib/mocks/models/CourseMock.js +29 -0
- package/lib/mocks/models/SpaceMock.d.ts +6 -0
- package/lib/mocks/models/SpaceMock.js +25 -0
- package/lib/models/Assignment.d.ts +7 -0
- package/lib/models/Assignment.js +5 -0
- package/lib/models/Cell.d.ts +8 -0
- package/lib/models/Cell.js +5 -0
- package/lib/models/CodeBlock.d.ts +10 -0
- package/lib/models/CodeBlock.js +5 -0
- package/lib/models/CodeSandboxSnapshot.d.ts +92 -0
- package/lib/models/CodeSandboxSnapshot.js +13 -0
- package/lib/models/CodeSandboxSnapshotDTO.d.ts +173 -0
- package/lib/models/CodeSandboxSnapshotDTO.js +139 -0
- package/lib/models/CodefeedBlocks.d.ts +7 -0
- package/lib/models/CodefeedBlocks.js +5 -0
- package/lib/models/Content.d.ts +5 -0
- package/lib/models/Content.js +5 -0
- package/lib/models/Course.d.ts +17 -0
- package/lib/models/Course.js +5 -0
- package/lib/models/Dataset.d.ts +16 -0
- package/lib/models/Dataset.js +5 -0
- package/lib/models/Document.d.ts +8 -0
- package/lib/models/Document.js +5 -0
- package/lib/models/Environment.d.ts +86 -0
- package/lib/models/Environment.js +5 -0
- package/lib/models/EnvironmentDTO.d.ts +125 -0
- package/lib/models/EnvironmentDTO.js +88 -0
- package/lib/models/Exercise.d.ts +16 -0
- package/lib/models/Exercise.js +5 -0
- package/lib/models/Item.d.ts +20 -0
- package/lib/models/Item.js +5 -0
- package/lib/models/ItemDTO.d.ts +74 -0
- package/lib/models/ItemDTO.js +186 -0
- package/lib/models/ItemType.d.ts +2 -0
- package/lib/models/ItemType.js +5 -0
- package/lib/models/Lesson.d.ts +5 -0
- package/lib/models/Lesson.js +5 -0
- package/lib/models/LexicalDTO.d.ts +155 -0
- package/lib/models/LexicalDTO.js +157 -0
- package/lib/models/Library.d.ts +10 -0
- package/lib/models/Library.js +5 -0
- package/lib/models/Notebook.d.ts +11 -0
- package/lib/models/Notebook.js +5 -0
- package/lib/models/NotebookDTO.d.ts +96 -0
- package/lib/models/NotebookDTO.js +153 -0
- package/lib/models/Page.d.ts +41 -0
- package/lib/models/Page.js +25 -0
- package/lib/models/PageTag.d.ts +19 -0
- package/lib/models/PageTag.js +94 -0
- package/lib/models/ProjectDTO.d.ts +89 -0
- package/lib/models/ProjectDTO.js +131 -0
- package/lib/models/Runtime.d.ts +160 -0
- package/lib/models/Runtime.js +18 -0
- package/lib/models/RuntimeDTO.d.ts +172 -0
- package/lib/models/RuntimeDTO.js +204 -0
- package/lib/models/Space.d.ts +35 -0
- package/lib/models/Space.js +66 -0
- package/lib/models/SpaceDTO.d.ts +334 -0
- package/lib/models/SpaceDTO.js +244 -0
- package/lib/models/SpaceItem.d.ts +10 -0
- package/lib/models/SpaceItem.js +5 -0
- package/lib/models/SpaceMember.d.ts +6 -0
- package/lib/models/SpaceMember.js +5 -0
- package/lib/models/StudentItem.d.ts +21 -0
- package/lib/models/StudentItem.js +5 -0
- package/lib/models/index.d.ts +32 -0
- package/lib/models/index.js +39 -0
- package/lib/protocols/AGUIAdapter.js +1 -1
- package/lib/runtimes/actions.d.ts +102 -0
- package/lib/runtimes/actions.js +249 -0
- package/lib/runtimes/apis.d.ts +273 -0
- package/lib/runtimes/apis.js +5 -0
- package/lib/runtimes/index.d.ts +5 -0
- package/lib/runtimes/index.js +9 -0
- package/lib/runtimes/settings.d.ts +15 -0
- package/lib/runtimes/settings.js +31 -0
- package/lib/runtimes/snapshots.d.ts +25 -0
- package/lib/runtimes/snapshots.js +150 -0
- package/lib/runtimes/utils.d.ts +7 -0
- package/lib/runtimes/utils.js +14 -0
- package/lib/services/DatalayerServiceManager.d.ts +23 -0
- package/lib/services/DatalayerServiceManager.js +90 -0
- package/lib/services/reconnectToRuntime.d.ts +32 -0
- package/lib/services/reconnectToRuntime.js +59 -0
- package/lib/services/sandboxServiceManagers.d.ts +31 -0
- package/lib/services/sandboxServiceManagers.js +57 -0
- package/lib/specs/agents/agents.d.ts +70 -26
- package/lib/specs/agents/agents.js +3994 -1639
- package/lib/specs/index.d.ts +1 -0
- package/lib/specs/index.js +1 -0
- package/lib/specs/loops.d.ts +34 -0
- package/lib/specs/loops.js +188 -0
- package/lib/specs/mcpServers.d.ts +1 -0
- package/lib/specs/mcpServers.js +17 -0
- package/lib/specs/models.d.ts +4 -0
- package/lib/specs/models.js +30 -0
- package/lib/specs/skills.d.ts +1 -0
- package/lib/specs/skills.js +18 -0
- package/lib/specs/tools.d.ts +15 -0
- package/lib/specs/tools.js +285 -0
- package/lib/state/index.d.ts +4 -0
- package/lib/state/index.js +10 -0
- package/lib/state/substates/CellState.d.ts +12 -0
- package/lib/state/substates/CellState.js +22 -0
- package/lib/state/substates/DocumentState.d.ts +10 -0
- package/lib/state/substates/DocumentState.js +14 -0
- package/lib/state/substates/GradeState.d.ts +10 -0
- package/lib/state/substates/GradeState.js +14 -0
- package/lib/state/substates/JupyterLabState.d.ts +16 -0
- package/lib/state/substates/JupyterLabState.js +17 -0
- package/lib/state/substates/NbformatState.d.ts +13 -0
- package/lib/state/substates/NbformatState.js +16 -0
- package/lib/state/substates/RuntimesState.d.ts +87 -0
- package/lib/state/substates/RuntimesState.js +192 -0
- package/lib/state/substates/SpaceState.d.ts +11 -0
- package/lib/state/substates/SpaceState.js +16 -0
- package/lib/state/substates/index.d.ts +8 -0
- package/lib/state/substates/index.js +14 -0
- package/lib/stores/agentRuntimeStore.d.ts +25 -2
- package/lib/stores/agentRuntimeStore.js +114 -19
- package/lib/stories/Button.stories.d.ts +1 -1
- package/lib/stories/Header.stories.d.ts +3 -3
- package/lib/test-setup.js +10 -0
- package/lib/types/agents-lifecycle.d.ts +5 -5
- package/lib/types/agents.d.ts +3 -3
- package/lib/types/agentspecs.d.ts +3 -1
- package/lib/types/chat.d.ts +135 -3
- package/lib/types/config.d.ts +19 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.js +1 -0
- package/lib/types/loops.d.ts +64 -0
- package/lib/types/loops.js +5 -0
- package/lib/types/tools.d.ts +16 -0
- package/lib/utils/Cells.d.ts +2 -0
- package/lib/utils/Cells.js +28 -0
- package/package.json +24 -18
- package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
- package/scripts/codegen/generate_agents.py +21 -4
- package/scripts/codegen/generate_loops.py +443 -0
- package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -3
- package/lib/examples/A2UiComponentGalleryExample.js +0 -361
- /package/lib/{agent-lexical-main.d.ts → agent-document-main.d.ts} +0 -0
|
@@ -25,15 +25,15 @@ import { useNotebookTools } from '../tools/adapters/agent-runtimes/notebookHooks
|
|
|
25
25
|
import { ThemedJupyterProvider } from './utils/themedProvider';
|
|
26
26
|
import { ChatSidebar } from '../chat';
|
|
27
27
|
import { DEFAULT_MODEL } from '../specs';
|
|
28
|
+
import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
|
|
29
|
+
import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
|
|
28
30
|
import MatplotlibNotebook from './utils/notebooks/Matplotlib.ipynb.json';
|
|
29
31
|
// Fixed notebook ID
|
|
30
32
|
const NOTEBOOK_ID = 'chat-notebook-example';
|
|
31
33
|
// Use the imported Matplotlib notebook
|
|
32
34
|
const NOTEBOOK_CONTENT = MatplotlibNotebook;
|
|
33
35
|
// Default configuration
|
|
34
|
-
const DEFAULT_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
|
|
35
36
|
const DEFAULT_AGENT_ID = import.meta.env.VITE_AGENT_ID || 'notebook-sidebar-agent-runtime-example';
|
|
36
|
-
const VERCEL_AI_ENDPOINT = `${DEFAULT_BASE_URL}/api/v1/vercel-ai/${DEFAULT_AGENT_ID}`;
|
|
37
37
|
function getJupyterSandboxUrl(serviceManager) {
|
|
38
38
|
const envUrl = import.meta.env.VITE_JUPYTER_SANDBOX_URL;
|
|
39
39
|
if (envUrl) {
|
|
@@ -53,70 +53,6 @@ function getJupyterSandboxUrl(serviceManager) {
|
|
|
53
53
|
const separator = baseUrl.includes('?') ? '&' : '?';
|
|
54
54
|
return `${baseUrl}${separator}token=${encodeURIComponent(token)}`;
|
|
55
55
|
}
|
|
56
|
-
function useEnsureAgent(agentId, baseUrl, jupyterSandboxUrl) {
|
|
57
|
-
const [isReady, setIsReady] = useState(false);
|
|
58
|
-
const [error, setError] = useState(null);
|
|
59
|
-
useEffect(() => {
|
|
60
|
-
let mounted = true;
|
|
61
|
-
async function ensureAgent() {
|
|
62
|
-
try {
|
|
63
|
-
if (!jupyterSandboxUrl) {
|
|
64
|
-
if (mounted) {
|
|
65
|
-
setError('Could not detect Jupyter server URL from Notebook service manager.');
|
|
66
|
-
setIsReady(false);
|
|
67
|
-
}
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
const response = await fetch(`${baseUrl}/api/v1/agents`, {
|
|
71
|
-
method: 'POST',
|
|
72
|
-
headers: {
|
|
73
|
-
'Content-Type': 'application/json',
|
|
74
|
-
},
|
|
75
|
-
body: JSON.stringify({
|
|
76
|
-
name: agentId,
|
|
77
|
-
description: 'Demo agent for notebook sidebar example',
|
|
78
|
-
agent_library: 'pydantic-ai',
|
|
79
|
-
transport: 'vercel-ai',
|
|
80
|
-
model: DEFAULT_MODEL,
|
|
81
|
-
system_prompt: 'You are a helpful AI assistant that helps users work with Jupyter notebooks. For notebook operations, always use the notebook frontend tools (runCell, readAllCells, readCell, insertCell, updateCell, deleteCells) so actions happen in the live notebook UI. Use executeCode only for temporary inspection code that should not modify notebook cells.',
|
|
82
|
-
enable_codemode: false,
|
|
83
|
-
sandbox_variant: 'jupyter',
|
|
84
|
-
jupyter_sandbox: jupyterSandboxUrl,
|
|
85
|
-
}),
|
|
86
|
-
});
|
|
87
|
-
if (mounted) {
|
|
88
|
-
if (response.ok) {
|
|
89
|
-
console.warn(`[NotebookAgentSidebarExample] Created agent: ${agentId}`);
|
|
90
|
-
setError(null);
|
|
91
|
-
setIsReady(true);
|
|
92
|
-
}
|
|
93
|
-
else if (response.status === 409 || response.status === 400) {
|
|
94
|
-
console.warn(`[NotebookAgentSidebarExample] Reusing existing agent: ${agentId}`);
|
|
95
|
-
setError(null);
|
|
96
|
-
setIsReady(true);
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
const errorData = await response.json().catch(() => ({}));
|
|
100
|
-
setError(errorData.detail || `Failed to create agent: ${response.status}`);
|
|
101
|
-
setIsReady(false);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch (err) {
|
|
106
|
-
if (mounted) {
|
|
107
|
-
console.error('[NotebookAgentSidebarExample] Error creating agent:', err);
|
|
108
|
-
setError(err instanceof Error ? err.message : 'Failed to connect to server');
|
|
109
|
-
setIsReady(false);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
void ensureAgent();
|
|
114
|
-
return () => {
|
|
115
|
-
mounted = false;
|
|
116
|
-
};
|
|
117
|
-
}, [agentId, baseUrl, jupyterSandboxUrl]);
|
|
118
|
-
return { isReady, error };
|
|
119
|
-
}
|
|
120
56
|
function NotebookUI({ serviceManager }) {
|
|
121
57
|
if (!serviceManager) {
|
|
122
58
|
return (_jsx(Box, { sx: {
|
|
@@ -130,20 +66,56 @@ function NotebookUI({ serviceManager }) {
|
|
|
130
66
|
return (_jsx(Notebook, { nbformat: NOTEBOOK_CONTENT, id: NOTEBOOK_ID, serviceManager: serviceManager, height: "100%", cellSidebarMargin: 120, startDefaultKernel: true }));
|
|
131
67
|
}
|
|
132
68
|
export function AgentRuntimeNotebookExampleInner({ serviceManager, }) {
|
|
69
|
+
const baseUrl = useExampleAgentRuntimesUrl();
|
|
70
|
+
const vercelAiEndpoint = `${baseUrl}/api/v1/vercel-ai/${DEFAULT_AGENT_ID}`;
|
|
71
|
+
const [createRequested, setCreateRequested] = useState(false);
|
|
133
72
|
const jupyterSandboxUrl = useMemo(() => getJupyterSandboxUrl(serviceManager), [serviceManager]);
|
|
134
|
-
const { isReady, error } =
|
|
73
|
+
const { agentId, isReady, status, error, createAgent } = useExampleAgentRuntime({
|
|
74
|
+
exampleId: 'NotebookAgentSidebarExample',
|
|
75
|
+
agentName: DEFAULT_AGENT_ID,
|
|
76
|
+
autoCreateAgent: false,
|
|
77
|
+
agentConfig: {
|
|
78
|
+
name: DEFAULT_AGENT_ID,
|
|
79
|
+
description: 'Demo agent for notebook sidebar example',
|
|
80
|
+
protocol: 'vercel-ai',
|
|
81
|
+
model: DEFAULT_MODEL,
|
|
82
|
+
systemPrompt: 'You are a helpful AI assistant that helps users work with Jupyter notebooks. For notebook operations, always use the notebook frontend tools (runCell, readAllCells, readCell, insertCell, updateCell, deleteCells) so actions happen in the live notebook UI. Use executeCode only for temporary inspection code that should not modify notebook cells.',
|
|
83
|
+
enableCodemode: false,
|
|
84
|
+
sandboxVariant: 'jupyter',
|
|
85
|
+
jupyterSandbox: jupyterSandboxUrl,
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
useEffect(() => {
|
|
89
|
+
if (!jupyterSandboxUrl || createRequested || agentId) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
setCreateRequested(true);
|
|
93
|
+
void createAgent({
|
|
94
|
+
name: DEFAULT_AGENT_ID,
|
|
95
|
+
description: 'Demo agent for notebook sidebar example',
|
|
96
|
+
protocol: 'vercel-ai',
|
|
97
|
+
model: DEFAULT_MODEL,
|
|
98
|
+
systemPrompt: 'You are a helpful AI assistant that helps users work with Jupyter notebooks. For notebook operations, always use the notebook frontend tools (runCell, readAllCells, readCell, insertCell, updateCell, deleteCells) so actions happen in the live notebook UI. Use executeCode only for temporary inspection code that should not modify notebook cells.',
|
|
99
|
+
enableCodemode: false,
|
|
100
|
+
sandboxVariant: 'jupyter',
|
|
101
|
+
jupyterSandbox: jupyterSandboxUrl,
|
|
102
|
+
}).catch(() => {
|
|
103
|
+
setCreateRequested(false);
|
|
104
|
+
});
|
|
105
|
+
}, [jupyterSandboxUrl, createRequested, agentId, createAgent]);
|
|
106
|
+
const effectiveReady = isReady || status === 'ready';
|
|
135
107
|
// Get notebook tools for ChatSidebar
|
|
136
108
|
const tools = useNotebookTools(NOTEBOOK_ID);
|
|
137
109
|
// Build Vercel AI protocol config
|
|
138
110
|
const protocolConfig = useMemo(() => {
|
|
139
111
|
return {
|
|
140
112
|
type: 'vercel-ai',
|
|
141
|
-
endpoint:
|
|
113
|
+
endpoint: vercelAiEndpoint,
|
|
142
114
|
agentId: DEFAULT_AGENT_ID,
|
|
143
115
|
enableConfigQuery: true,
|
|
144
|
-
configEndpoint: `${
|
|
116
|
+
configEndpoint: `${baseUrl}/api/v1/configure`,
|
|
145
117
|
};
|
|
146
|
-
}, []);
|
|
118
|
+
}, [baseUrl, vercelAiEndpoint]);
|
|
147
119
|
return (_jsx(_Fragment, { children: _jsxs(Box, { sx: {
|
|
148
120
|
height: 'calc(100vh - 70px)',
|
|
149
121
|
width: '100vw',
|
|
@@ -171,7 +143,7 @@ export function AgentRuntimeNotebookExampleInner({ serviceManager, }) {
|
|
|
171
143
|
borderColor: 'border.default',
|
|
172
144
|
borderRadius: 2,
|
|
173
145
|
overflow: 'hidden',
|
|
174
|
-
}, children: _jsx(NotebookUI, { serviceManager: serviceManager }) }) })] }),
|
|
146
|
+
}, children: _jsx(NotebookUI, { serviceManager: serviceManager }) }) })] }), effectiveReady && (_jsx(ChatSidebar, { title: "AI Assistant", protocol: protocolConfig, position: "right", width: 400, showNewChatButton: true, showClearButton: true, showSettingsButton: true, defaultOpen: true, panelProps: {
|
|
175
147
|
protocol: protocolConfig,
|
|
176
148
|
frontendTools: tools,
|
|
177
149
|
useStore: false,
|
|
@@ -3,11 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
4
|
* Distributed under the terms of the Modified BSD License.
|
|
5
5
|
*/
|
|
6
|
+
import { createDatalayerServiceManager } from '../services/DatalayerServiceManager';
|
|
6
7
|
import { useState, useEffect, useMemo } from 'react';
|
|
7
8
|
import { Checkbox, FormControl, Heading } from '@primer/react';
|
|
8
9
|
import { Box } from '@datalayer/primer-addons';
|
|
9
|
-
import { useCoreStore, createDatalayerServiceManager, DatalayerCollaborationProvider, } from '@datalayer/core';
|
|
10
10
|
import { loadJupyterConfig, Notebook } from '@datalayer/jupyter-react';
|
|
11
|
+
import { DatalayerCollaborationProvider } from '../collaboration';
|
|
12
|
+
import { useCoreStore } from '../state';
|
|
11
13
|
import { ThemedJupyterProvider } from './utils/themedProvider';
|
|
12
14
|
import nbformatExample from './utils/notebooks/NotebookExample1.ipynb.json';
|
|
13
15
|
// This corresponds to the notebook ID in the URL when you open an existing notbook in your library
|
|
@@ -30,7 +32,7 @@ const NotebookCollaborationExample = (props) => {
|
|
|
30
32
|
return;
|
|
31
33
|
}
|
|
32
34
|
// Create DatalayerServiceManager if we have credentials
|
|
33
|
-
if (configuration?.token && configuration?.
|
|
35
|
+
if (configuration?.token && configuration?.datalayerUrl) {
|
|
34
36
|
try {
|
|
35
37
|
// Now we can pass undefined to use config/defaults
|
|
36
38
|
const manager = await createDatalayerServiceManager(configuration?.cpuEnvironment, configuration?.credits);
|
|
@@ -42,7 +44,7 @@ const NotebookCollaborationExample = (props) => {
|
|
|
42
44
|
}
|
|
43
45
|
}
|
|
44
46
|
else {
|
|
45
|
-
console.warn('Datalayer credentials not configured. Please set
|
|
47
|
+
console.warn('Datalayer credentials not configured. Please set datalayerUrl and token.');
|
|
46
48
|
}
|
|
47
49
|
};
|
|
48
50
|
createManager();
|
|
@@ -52,20 +54,20 @@ const NotebookCollaborationExample = (props) => {
|
|
|
52
54
|
if (!enableCollaboration) {
|
|
53
55
|
return undefined;
|
|
54
56
|
}
|
|
55
|
-
const
|
|
57
|
+
const datalayerUrl = configuration?.datalayerUrl;
|
|
56
58
|
const token = configuration?.token;
|
|
57
|
-
if (!
|
|
58
|
-
console.warn('Datalayer collaboration enabled but
|
|
59
|
+
if (!datalayerUrl || !token) {
|
|
60
|
+
console.warn('Datalayer collaboration enabled but datalayerUrl or token not configured. ' +
|
|
59
61
|
'Please configure them in the Datalayer store or environment.');
|
|
60
62
|
return undefined;
|
|
61
63
|
}
|
|
62
64
|
// Create and return the Datalayer collaboration provider
|
|
63
65
|
return new DatalayerCollaborationProvider({
|
|
64
|
-
|
|
66
|
+
datalayerUrl,
|
|
65
67
|
token,
|
|
66
68
|
});
|
|
67
69
|
}, [enableCollaboration, configuration]);
|
|
68
|
-
return (_jsx(ThemedJupyterProvider, { children: _jsxs(Box, { p: 3, children: [_jsx(Heading, { as: "h2", sx: { mb: 3 }, children: "Notebook Collaboration Example" }), _jsx(Box, { sx: { mb: 3 }, children: _jsxs(FormControl, { children: [_jsx(Checkbox, { checked: enableCollaboration, onChange: e => setEnableCollaboration(e.target.checked) }), _jsx(FormControl.Label, { children: "Enable Datalayer Collaboration" })] }) }), (!configuration?.
|
|
70
|
+
return (_jsx(ThemedJupyterProvider, { children: _jsxs(Box, { p: 3, children: [_jsx(Heading, { as: "h2", sx: { mb: 3 }, children: "Notebook Collaboration Example" }), _jsx(Box, { sx: { mb: 3 }, children: _jsxs(FormControl, { children: [_jsx(Checkbox, { checked: enableCollaboration, onChange: e => setEnableCollaboration(e.target.checked) }), _jsx(FormControl.Label, { children: "Enable Datalayer Collaboration" })] }) }), (!configuration?.datalayerUrl || !configuration?.token) && (_jsx(Box, { sx: { mb: 2, p: 2, bg: 'danger.subtle' }, children: "Warning: Datalayer configuration is missing. Please configure datalayerUrl and token to use DatalayerServiceManager and collaboration features." })), !serviceManager && (_jsx(Box, { sx: { mb: 2, p: 2, bg: 'attention.subtle' }, children: "Note: DatalayerServiceManager is not available. Notebook functionality will be limited." })), enableCollaboration ? (_jsxs(Box, { sx: {
|
|
69
71
|
display: 'flex',
|
|
70
72
|
gap: 2,
|
|
71
73
|
flexDirection: 'row',
|
|
@@ -95,6 +97,6 @@ const NotebookCollaborationExample = (props) => {
|
|
|
95
97
|
border: '1px solid',
|
|
96
98
|
borderColor: 'border.default',
|
|
97
99
|
borderRadius: 2,
|
|
98
|
-
}, children: serviceManager ? (_jsx(Notebook, { id: NOTEBOOK_ID, height: "calc(100vh - 200px)", nbformat: nbformat, readonly: readonly, serviceManager: serviceManager, startDefaultKernel: true, collaborationProvider: collaborationProvider })) : (_jsx(Box, { sx: { p: 4, textAlign: 'center' }, children: "Loading ServiceManager..." })) })), _jsxs(Box, { sx: { mt: 2, fontSize: 1, color: 'fg.subtle' }, children: [_jsx("p", { children: "This example demonstrates how to use Datalayer services with Notebook:" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "DatalayerServiceManager:" }), " Connects to Datalayer infrastructure for kernel management"] }), _jsxs("li", { children: [_jsx("strong", { children: "DatalayerCollaborationProvider:" }), " Enables real-time collaboration"] }), _jsx("li", { children: "Both require Datalayer credentials (
|
|
100
|
+
}, children: serviceManager ? (_jsx(Notebook, { id: NOTEBOOK_ID, height: "calc(100vh - 200px)", nbformat: nbformat, readonly: readonly, serviceManager: serviceManager, startDefaultKernel: true, collaborationProvider: collaborationProvider })) : (_jsx(Box, { sx: { p: 4, textAlign: 'center' }, children: "Loading ServiceManager..." })) })), _jsxs(Box, { sx: { mt: 2, fontSize: 1, color: 'fg.subtle' }, children: [_jsx("p", { children: "This example demonstrates how to use Datalayer services with Notebook:" }), _jsxs("ul", { children: [_jsxs("li", { children: [_jsx("strong", { children: "DatalayerServiceManager:" }), " Connects to Datalayer infrastructure for kernel management"] }), _jsxs("li", { children: [_jsx("strong", { children: "DatalayerCollaborationProvider:" }), " Enables real-time collaboration"] }), _jsx("li", { children: "Both require Datalayer credentials (datalayerUrl and token)" }), _jsx("li", { children: "Pass them directly to the base Notebook component" }), _jsx("li", { children: "No wrapper components needed - just create the services and pass them as props" }), _jsx("li", { children: "This shows the explicit, composable pattern for Datalayer integration" })] })] })] }) }));
|
|
99
101
|
};
|
|
100
102
|
export default NotebookCollaborationExample;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/*
|
|
3
3
|
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
4
|
* Distributed under the terms of the Modified BSD License.
|
|
@@ -17,6 +17,9 @@ const NOTEBOOK_ID = 'notebook-example-1';
|
|
|
17
17
|
export const JupyterNotebookExample = (props) => {
|
|
18
18
|
const { serviceManager } = props;
|
|
19
19
|
const extensions = useMemo(() => [new CellSidebarExtension({ factory: CellSidebarButton })], []);
|
|
20
|
-
|
|
20
|
+
if (!serviceManager) {
|
|
21
|
+
return (_jsxs(Box, { as: "h1", children: ["A Jupyter Notebook", _jsx("div", { children: "Loading..." })] }));
|
|
22
|
+
}
|
|
23
|
+
return (_jsxs(ThemedJupyterProvider, { children: [_jsx(Box, { as: "h1", children: "A Jupyter Notebook" }), _jsx(Notebook, { id: NOTEBOOK_ID, nbformat: nbformatExample, serviceManager: serviceManager, startDefaultKernel: true, extensions: extensions, Toolbar: NotebookToolbar })] }));
|
|
21
24
|
};
|
|
22
25
|
export default JupyterNotebookExample;
|
|
@@ -14,7 +14,7 @@ import { useSimpleAuthStore } from '@datalayer/core/lib/views/otel';
|
|
|
14
14
|
export const AuthRequiredView = () => {
|
|
15
15
|
const setAuth = useSimpleAuthStore(s => s.setAuth);
|
|
16
16
|
const syncTokenToIamStore = useCallback((token) => {
|
|
17
|
-
import('
|
|
17
|
+
import('../../state/substates').then(({ iamStore }) => {
|
|
18
18
|
iamStore.setState({ token });
|
|
19
19
|
});
|
|
20
20
|
}, []);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Props for {@link ExampleErrorBoundary}.
|
|
4
|
+
*/
|
|
5
|
+
export interface ExampleErrorBoundaryProps {
|
|
6
|
+
/** Child example tree to protect. */
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
interface ExampleErrorBoundaryState {
|
|
10
|
+
error: Error | null;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Generic error boundary that surfaces render-time exceptions thrown by any
|
|
14
|
+
* example in the UI instead of leaving a blank screen with a console error.
|
|
15
|
+
*
|
|
16
|
+
* Reset it per example by passing a `key` (e.g. the example id) so switching
|
|
17
|
+
* examples clears a previous error.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ExampleErrorBoundary extends React.Component<ExampleErrorBoundaryProps, ExampleErrorBoundaryState> {
|
|
20
|
+
/**
|
|
21
|
+
* Create the boundary with a clean error state.
|
|
22
|
+
*
|
|
23
|
+
* @param props - The boundary props.
|
|
24
|
+
*/
|
|
25
|
+
constructor(props: ExampleErrorBoundaryProps);
|
|
26
|
+
/**
|
|
27
|
+
* Capture a thrown error into state so it can be rendered.
|
|
28
|
+
*
|
|
29
|
+
* @param error - The error thrown by a descendant.
|
|
30
|
+
* @returns The next boundary state.
|
|
31
|
+
*/
|
|
32
|
+
static getDerivedStateFromError(error: Error): ExampleErrorBoundaryState;
|
|
33
|
+
/**
|
|
34
|
+
* Log the error for debugging while it is surfaced in the UI.
|
|
35
|
+
*
|
|
36
|
+
* @param error - The error thrown by a descendant.
|
|
37
|
+
*/
|
|
38
|
+
componentDidCatch(error: Error): void;
|
|
39
|
+
/**
|
|
40
|
+
* Render either the protected children or the error surface.
|
|
41
|
+
*
|
|
42
|
+
* @returns The rendered tree.
|
|
43
|
+
*/
|
|
44
|
+
render(): React.ReactNode;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
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 React from 'react';
|
|
7
|
+
import { Box } from '@datalayer/primer-addons';
|
|
8
|
+
/**
|
|
9
|
+
* Generic error boundary that surfaces render-time exceptions thrown by any
|
|
10
|
+
* example in the UI instead of leaving a blank screen with a console error.
|
|
11
|
+
*
|
|
12
|
+
* Reset it per example by passing a `key` (e.g. the example id) so switching
|
|
13
|
+
* examples clears a previous error.
|
|
14
|
+
*/
|
|
15
|
+
export class ExampleErrorBoundary extends React.Component {
|
|
16
|
+
/**
|
|
17
|
+
* Create the boundary with a clean error state.
|
|
18
|
+
*
|
|
19
|
+
* @param props - The boundary props.
|
|
20
|
+
*/
|
|
21
|
+
constructor(props) {
|
|
22
|
+
super(props);
|
|
23
|
+
this.state = { error: null };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Capture a thrown error into state so it can be rendered.
|
|
27
|
+
*
|
|
28
|
+
* @param error - The error thrown by a descendant.
|
|
29
|
+
* @returns The next boundary state.
|
|
30
|
+
*/
|
|
31
|
+
static getDerivedStateFromError(error) {
|
|
32
|
+
return { error };
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Log the error for debugging while it is surfaced in the UI.
|
|
36
|
+
*
|
|
37
|
+
* @param error - The error thrown by a descendant.
|
|
38
|
+
*/
|
|
39
|
+
componentDidCatch(error) {
|
|
40
|
+
console.error('Example rendering failed:', error);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Render either the protected children or the error surface.
|
|
44
|
+
*
|
|
45
|
+
* @returns The rendered tree.
|
|
46
|
+
*/
|
|
47
|
+
render() {
|
|
48
|
+
const { error } = this.state;
|
|
49
|
+
if (!error) {
|
|
50
|
+
return this.props.children;
|
|
51
|
+
}
|
|
52
|
+
return (_jsx(Box, { sx: { p: 4 }, children: _jsxs(Box, { sx: {
|
|
53
|
+
p: 3,
|
|
54
|
+
border: '1px solid',
|
|
55
|
+
borderColor: 'danger.muted',
|
|
56
|
+
borderRadius: 2,
|
|
57
|
+
bg: 'danger.subtle',
|
|
58
|
+
color: 'danger.fg',
|
|
59
|
+
}, children: [_jsx(Box, { sx: { fontWeight: 600, mb: 2 }, children: "This example failed to load" }), _jsx(Box, { as: "pre", sx: {
|
|
60
|
+
m: 0,
|
|
61
|
+
whiteSpace: 'pre-wrap',
|
|
62
|
+
wordBreak: 'break-word',
|
|
63
|
+
fontFamily: 'mono',
|
|
64
|
+
fontSize: 0,
|
|
65
|
+
}, children: error.message || String(error) })] }) }));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* Loaded on demand from the agent spec's frontend_render_tools css field. */
|
|
7
|
+
/* display: contents keeps the wrapper transparent so it adds no padding or
|
|
8
|
+
box around the card and preserves the card's own margins. */
|
|
9
|
+
.dla-agui-render-haiku-card {
|
|
10
|
+
display: contents;
|
|
11
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/* Loaded on demand from the agent spec's frontend_render_tools css field. */
|
|
7
|
+
/* display: contents keeps the wrapper transparent so it adds no padding or
|
|
8
|
+
box around the card and preserves the card's own margins. */
|
|
9
|
+
.dla-agui-render-weather-card {
|
|
10
|
+
display: contents;
|
|
11
|
+
}
|
|
@@ -64,10 +64,11 @@ function makeEntry(id, loader, description, tags) {
|
|
|
64
64
|
*/
|
|
65
65
|
export const EXAMPLE_ENTRIES = [
|
|
66
66
|
makeEntry('HomeExample', () => import('./HomeExample'), 'Browse all available examples with search and quick navigation.', ['home', 'navigation']),
|
|
67
|
-
makeEntry('
|
|
67
|
+
makeEntry('A2UiComponentsGalleryExample', () => import('./A2UiComponentsGalleryExample'), 'Consolidated A2UI components gallery with Primer-themed color modes.'),
|
|
68
68
|
makeEntry('A2UiContactCardExample', () => import('./A2UiContactCardExample'), 'A2UI example rendering contact card interactions.'),
|
|
69
69
|
makeEntry('A2UiRestaurantExample', () => import('./A2UiRestaurantExample'), 'A2UI restaurant flow example.'),
|
|
70
70
|
makeEntry('A2UiViewerExample', () => import('./A2UiViewerExample'), 'A2UI viewer integration example.'),
|
|
71
|
+
makeEntry('A2UiAgentExample', () => import('./A2UiAgentExample'), 'A2UI Agent with built-in chat component and Python A2UI extension surface.'),
|
|
71
72
|
makeEntry('AgUiAgenticExample', () => import('./AgUiAgenticExample'), 'AG-UI agentic workflow example.'),
|
|
72
73
|
makeEntry('AgUiBackendToolRenderingExample', () => import('./AgUiBackendToolRenderingExample'), 'AG-UI backend tool rendering example.'),
|
|
73
74
|
makeEntry('AgUiHaikuGenUiExample', () => import('./AgUiHaikuGenUiExample'), 'AG-UI generative UI Haiku example.'),
|
|
@@ -87,6 +88,7 @@ export const EXAMPLE_ENTRIES = [
|
|
|
87
88
|
makeEntry('AgentGuardrailsExample', () => import('./AgentGuardrailsExample'), 'Guardrails and safety checks for agent runs.'),
|
|
88
89
|
makeEntry('AgentHooksExample', () => import('./AgentHooksExample'), 'Pre-hooks and post-hooks lifecycle execution example.'),
|
|
89
90
|
makeEntry('AgentInferenceProviderExample', () => import('./AgentInferenceProviderExample'), 'Switch local and datalayer inference providers with live low-level provider events.', ['example', 'agent', 'inference', 'provider', 'runtime']),
|
|
91
|
+
makeEntry('AgentLoopExample', () => import('./AgentLoopExample'), 'Define and launch an agent execution loop (observe/think/act/evaluate) over a live notebook, driven by generic loop specs.', ['example', 'agent', 'loop', 'notebook', 'agentspecs']),
|
|
90
92
|
makeEntry('AgentToolApprovalsExample', () => import('./AgentToolApprovalsExample'), 'Tool approval workflows and manual decisions.'),
|
|
91
93
|
makeEntry('AgentMemoryExample', () => import('./AgentMemoryExample'), 'Memory-aware conversation and retrieval example.'),
|
|
92
94
|
makeEntry('AgentSkillsExample', () => import('./AgentSkillsExample'), 'Skills discovery, execution, and monitoring example.'),
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { AgentConfig } from '../../types/config';
|
|
2
|
+
interface UseExampleAgentRuntimeOptions {
|
|
3
|
+
exampleId: string;
|
|
4
|
+
agentName: string;
|
|
5
|
+
specId?: string;
|
|
6
|
+
environmentName?: string;
|
|
7
|
+
autoStart?: boolean;
|
|
8
|
+
autoCreateAgent?: boolean;
|
|
9
|
+
agentConfig?: AgentConfig;
|
|
10
|
+
}
|
|
11
|
+
interface UseExampleAgentRuntimeResult {
|
|
12
|
+
location: 'local' | 'cloud';
|
|
13
|
+
baseUrl: string;
|
|
14
|
+
agentId?: string;
|
|
15
|
+
agentBaseUrl?: string;
|
|
16
|
+
status: string;
|
|
17
|
+
isReady: boolean;
|
|
18
|
+
error: string | null;
|
|
19
|
+
createAgent: (config?: AgentConfig) => Promise<{
|
|
20
|
+
agentId?: string;
|
|
21
|
+
endpoint?: string;
|
|
22
|
+
isReady?: boolean;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* Tear down the agent launched by this hook: delete it on the server and
|
|
26
|
+
* wipe in-process agent state so a fresh runtime can be launched.
|
|
27
|
+
*/
|
|
28
|
+
teardown: () => Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Connects examples to agent runtimes through shared hooks and supports
|
|
32
|
+
* both local and cloud execution modes.
|
|
33
|
+
*/
|
|
34
|
+
export declare function useExampleAgentRuntime(options: UseExampleAgentRuntimeOptions): UseExampleAgentRuntimeResult;
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
import { useEffect, useMemo } from 'react';
|
|
6
|
+
import { useAgentRuntimes } from '../../hooks/useAgentRuntimes';
|
|
7
|
+
import { useExampleAgentRuntimesUrl } from '../utils/useExampleAgentRuntimesUrl';
|
|
8
|
+
import { useRuntimeTargetStore } from '../utils/runtimeTargetStore';
|
|
9
|
+
import { agentSummaryStore } from '../utils/agentSummaryStore';
|
|
10
|
+
/**
|
|
11
|
+
* Connects examples to agent runtimes through shared hooks and supports
|
|
12
|
+
* both local and cloud execution modes.
|
|
13
|
+
*/
|
|
14
|
+
export function useExampleAgentRuntime(options) {
|
|
15
|
+
const { exampleId, agentName, specId, environmentName = 'local-agent-runtimes', autoStart = true, autoCreateAgent = true, agentConfig, } = options;
|
|
16
|
+
const location = useRuntimeTargetStore(state => state.target);
|
|
17
|
+
const baseUrl = useExampleAgentRuntimesUrl();
|
|
18
|
+
const isCloud = location === 'cloud';
|
|
19
|
+
const combinedConfig = useMemo(() => ({
|
|
20
|
+
name: agentName,
|
|
21
|
+
agentSpecId: specId,
|
|
22
|
+
...agentConfig,
|
|
23
|
+
}), [agentName, specId, agentConfig]);
|
|
24
|
+
const { runtime, status, isReady, error, connectToRuntime, createAgent, teardown, } = useAgentRuntimes({
|
|
25
|
+
agentSpecId: isCloud ? specId : undefined,
|
|
26
|
+
autoCreateAgent,
|
|
27
|
+
autoStart: isCloud ? autoStart : false,
|
|
28
|
+
runtimeCreationTarget: isCloud
|
|
29
|
+
? 'backend-services'
|
|
30
|
+
: 'local-agent-runtimes',
|
|
31
|
+
runtimeCreationBaseUrl: isCloud ? undefined : baseUrl,
|
|
32
|
+
agentConfig: combinedConfig,
|
|
33
|
+
});
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (isCloud) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
connectToRuntime({
|
|
39
|
+
podName: agentName,
|
|
40
|
+
environmentName,
|
|
41
|
+
jupyterBaseUrl: baseUrl,
|
|
42
|
+
});
|
|
43
|
+
}, [isCloud, connectToRuntime, agentName, environmentName, baseUrl]);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
agentSummaryStore.getState().setActive({
|
|
46
|
+
exampleId,
|
|
47
|
+
agentName,
|
|
48
|
+
agentId: runtime?.agentId,
|
|
49
|
+
specId,
|
|
50
|
+
location,
|
|
51
|
+
baseUrl: runtime?.agentBaseUrl || baseUrl,
|
|
52
|
+
status,
|
|
53
|
+
isReady,
|
|
54
|
+
error: error || undefined,
|
|
55
|
+
});
|
|
56
|
+
return () => {
|
|
57
|
+
agentSummaryStore.getState().clearActive(exampleId);
|
|
58
|
+
};
|
|
59
|
+
}, [
|
|
60
|
+
exampleId,
|
|
61
|
+
agentName,
|
|
62
|
+
runtime?.agentId,
|
|
63
|
+
runtime?.agentBaseUrl,
|
|
64
|
+
specId,
|
|
65
|
+
location,
|
|
66
|
+
baseUrl,
|
|
67
|
+
status,
|
|
68
|
+
isReady,
|
|
69
|
+
error,
|
|
70
|
+
]);
|
|
71
|
+
return {
|
|
72
|
+
location,
|
|
73
|
+
baseUrl,
|
|
74
|
+
agentId: runtime?.agentId,
|
|
75
|
+
agentBaseUrl: runtime?.agentBaseUrl,
|
|
76
|
+
status,
|
|
77
|
+
isReady,
|
|
78
|
+
error,
|
|
79
|
+
createAgent,
|
|
80
|
+
teardown,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import type { ToolCallRenderContext, RenderToolResult } from '../../types/chat';
|
|
3
|
+
import type { FrontendRenderToolSpec } from '../../types/tools';
|
|
4
|
+
/**
|
|
5
|
+
* Renderer function keyed by a spec's renderer id.
|
|
6
|
+
*
|
|
7
|
+
* Receives the tool call context plus the matching spec binding so the example
|
|
8
|
+
* can build presentation details (such as a CSS class) from the spec instead of
|
|
9
|
+
* hardcoding them.
|
|
10
|
+
*/
|
|
11
|
+
export type SpecRenderer = (context: ToolCallRenderContext, binding: FrontendRenderToolSpec) => ReactNode;
|
|
12
|
+
/**
|
|
13
|
+
* Builds a `renderToolResult` from an agent spec's `frontendRenderTools`.
|
|
14
|
+
*
|
|
15
|
+
* The example provides only a local map of renderer id to component; the tool
|
|
16
|
+
* name to match and the CSS file to load are read from the spec, so examples do
|
|
17
|
+
* not hardcode tool names or CSS filenames.
|
|
18
|
+
*
|
|
19
|
+
* @param specId - Agent spec id to read render bindings from.
|
|
20
|
+
* @param renderers - Local map of renderer id to renderer function.
|
|
21
|
+
* @returns A render function suitable for the chat components' renderToolResult.
|
|
22
|
+
*/
|
|
23
|
+
export declare function useSpecRenderToolResult(specId: string | undefined, renderers: Record<string, SpecRenderer>): RenderToolResult;
|
|
24
|
+
/**
|
|
25
|
+
* Derives the CSS class a spec renderer loads for its binding.
|
|
26
|
+
*
|
|
27
|
+
* @param binding - The frontend render binding from the spec.
|
|
28
|
+
* @returns A stable CSS class name based on the renderer id.
|
|
29
|
+
*/
|
|
30
|
+
export declare function specRendererClassName(binding: FrontendRenderToolSpec): string;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
import { useEffect, useMemo } from 'react';
|
|
6
|
+
import { getAgentspecs } from '../../specs/agents';
|
|
7
|
+
// Lazy importers for example CSS files, resolved by filename from the spec.
|
|
8
|
+
const cssImporters = import.meta.glob('../components/**/*.css');
|
|
9
|
+
/**
|
|
10
|
+
* Builds a `renderToolResult` from an agent spec's `frontendRenderTools`.
|
|
11
|
+
*
|
|
12
|
+
* The example provides only a local map of renderer id to component; the tool
|
|
13
|
+
* name to match and the CSS file to load are read from the spec, so examples do
|
|
14
|
+
* not hardcode tool names or CSS filenames.
|
|
15
|
+
*
|
|
16
|
+
* @param specId - Agent spec id to read render bindings from.
|
|
17
|
+
* @param renderers - Local map of renderer id to renderer function.
|
|
18
|
+
* @returns A render function suitable for the chat components' renderToolResult.
|
|
19
|
+
*/
|
|
20
|
+
export function useSpecRenderToolResult(specId, renderers) {
|
|
21
|
+
const bindings = useMemo(() => {
|
|
22
|
+
if (!specId) {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
return getAgentspecs(specId)?.frontendRenderTools ?? [];
|
|
26
|
+
}, [specId]);
|
|
27
|
+
// Load any CSS files named by the spec bindings.
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
for (const binding of bindings) {
|
|
30
|
+
if (!binding.css) {
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
const match = Object.keys(cssImporters).find(path => path.endsWith(`/${binding.css}`));
|
|
34
|
+
if (match) {
|
|
35
|
+
void cssImporters[match]();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}, [bindings]);
|
|
39
|
+
return useMemo(() => {
|
|
40
|
+
return (context) => {
|
|
41
|
+
const binding = bindings.find(b => b.tool === context.toolName);
|
|
42
|
+
if (!binding) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const renderer = renderers[binding.renderer];
|
|
46
|
+
if (!renderer) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
return renderer(context, binding);
|
|
50
|
+
};
|
|
51
|
+
}, [bindings, renderers]);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Derives the CSS class a spec renderer loads for its binding.
|
|
55
|
+
*
|
|
56
|
+
* @param binding - The frontend render binding from the spec.
|
|
57
|
+
* @returns A stable CSS class name based on the renderer id.
|
|
58
|
+
*/
|
|
59
|
+
export function specRendererClassName(binding) {
|
|
60
|
+
return `dla-agui-render-${binding.renderer}`;
|
|
61
|
+
}
|
package/lib/examples/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export { default as AgentspecsExample } from './AgentspecsExample';
|
|
2
|
-
export { default as
|
|
2
|
+
export { default as A2UiComponentsGalleryExample } from './A2UiComponentsGalleryExample';
|
|
3
3
|
export { default as A2UiContactCardExample } from './A2UiContactCardExample';
|
|
4
4
|
export { default as A2UiRestaurantExample } from './A2UiRestaurantExample';
|
|
5
|
+
export { default as A2UiAgentExample } from './A2UiAgentExample';
|
|
5
6
|
export { default as A2UiViewerExample } from './A2UiViewerExample';
|
|
6
7
|
export { default as AgUiAgenticExample } from './AgUiAgenticExample';
|
|
7
8
|
export { default as AgUiBackendToolRenderingExample } from './AgUiBackendToolRenderingExample';
|
|
@@ -21,6 +22,7 @@ export { default as AgentEvalsExample } from './AgentEvalsExample';
|
|
|
21
22
|
export { default as AgentGuardrailsExample } from './AgentGuardrailsExample';
|
|
22
23
|
export { default as AgentHooksExample } from './AgentHooksExample';
|
|
23
24
|
export { default as AgentInferenceProviderExample } from './AgentInferenceProviderExample';
|
|
25
|
+
export { default as AgentLoopExample } from './AgentLoopExample';
|
|
24
26
|
export { default as AgentToolApprovalsExample } from './AgentToolApprovalsExample';
|
|
25
27
|
export { default as AgentMemoryExample } from './AgentMemoryExample';
|
|
26
28
|
export { default as AgentOtelExample } from './AgentOtelExample';
|