@datalayer/agent-runtimes 1.0.9 → 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 +468 -40
- 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.d.ts +4 -4
- package/lib/client/AgentsMixin.js +35 -35
- 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/ToolApprovalCard.js +13 -3
- 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/config/AgentConfiguration.d.ts +2 -2
- package/lib/config/index.d.ts +1 -1
- 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 +21 -22
- package/lib/examples/AgentCodemodeExample.js +3 -3
- package/lib/examples/AgentEvalsExample.js +8 -8
- package/lib/examples/AgentGuardrailsExample.js +22 -17
- package/lib/examples/AgentHooksExample.js +16 -57
- package/lib/examples/AgentInferenceProviderExample.js +8 -8
- package/lib/examples/AgentLoopExample.d.ts +10 -0
- package/lib/examples/AgentLoopExample.js +304 -0
- package/lib/examples/AgentMCPExample.js +9 -9
- package/lib/examples/AgentMemoryExample.js +6 -6
- package/lib/examples/AgentMonitoringExample.js +116 -46
- package/lib/examples/AgentNotificationsExample.js +6 -6
- package/lib/examples/AgentOtelExample.d.ts +3 -3
- package/lib/examples/AgentOtelExample.js +20 -15
- package/lib/examples/AgentOutputsExample.js +8 -8
- package/lib/examples/AgentParametersExample.js +24 -36
- package/lib/examples/AgentSandboxExample.js +7 -7
- package/lib/examples/AgentSkillsExample.js +9 -9
- package/lib/examples/AgentSubagentsExample.js +6 -6
- package/lib/examples/AgentToolApprovalsExample.js +37 -11
- package/lib/examples/AgentTriggersExample.js +12 -12
- package/lib/examples/AgentspecsExample.js +63 -41
- package/lib/examples/ChatCustomExample.js +23 -77
- package/lib/examples/ChatExample.js +15 -46
- 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 +188 -29
- package/lib/hooks/useAgentsCatalog.d.ts +3 -3
- package/lib/hooks/useAgentsCatalog.js +4 -4
- 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 +38 -28
- 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 +14 -6
- package/lib/hooks/useToolApprovals.js +20 -1
- package/lib/index.d.ts +2 -1
- 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 +95 -50
- package/lib/specs/agents/agents.js +4037 -1669
- package/lib/specs/agents/index.d.ts +5 -5
- package/lib/specs/agents/index.js +9 -9
- 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 +6 -6
- package/lib/types/agentspecs.d.ts +8 -4
- 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/teams.d.ts +2 -2
- 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/generate_agents.py +96 -61
- package/scripts/codegen/generate_loops.py +443 -0
- package/scripts/codegen/generate_teams.py +4 -4
- package/lib/examples/A2UiComponentGalleryExample.d.ts +0 -3
- package/lib/examples/A2UiComponentGalleryExample.js +0 -361
- package/scripts/codegen/__pycache__/generate_agents.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/generate_benchmarks.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/generate_evals.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/generate_events.cpython-313.pyc +0 -0
- /package/lib/{agent-lexical-main.d.ts → agent-document-main.d.ts} +0 -0
|
@@ -42,15 +42,15 @@ import { ChatInlinePlugin } from '../lexical/ChatInlinePlugin';
|
|
|
42
42
|
import { useChatInlineToolbarItems } from '../lexical/useChatInlineToolbarItems';
|
|
43
43
|
import { useLexicalTools } from '../tools/adapters/agent-runtimes/lexicalHooks';
|
|
44
44
|
import { editorConfig } from './lexical/editorConfig';
|
|
45
|
+
import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
|
|
46
|
+
import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
|
|
45
47
|
import { DEFAULT_MODEL } from '../specs';
|
|
46
48
|
import '@datalayer/jupyter-lexical/style/index.css';
|
|
47
49
|
import './lexical/lexical-theme.css';
|
|
48
50
|
// Fixed lexical document ID
|
|
49
51
|
const LEXICAL_ID = 'chat-lexical-example';
|
|
50
52
|
// Default configuration
|
|
51
|
-
const DEFAULT_BASE_URL = import.meta.env.VITE_BASE_URL || 'http://localhost:8765';
|
|
52
53
|
const DEFAULT_AGENT_ID = import.meta.env.VITE_AGENT_ID || 'lexical-sidebar-agent-runtime-example';
|
|
53
|
-
const VERCEL_AI_ENDPOINT = `${DEFAULT_BASE_URL}/api/v1/vercel-ai/${DEFAULT_AGENT_ID}`;
|
|
54
54
|
function getJupyterSandboxUrl(serviceManager) {
|
|
55
55
|
const envUrl = import.meta.env.VITE_JUPYTER_SANDBOX_URL;
|
|
56
56
|
if (envUrl) {
|
|
@@ -70,70 +70,6 @@ function getJupyterSandboxUrl(serviceManager) {
|
|
|
70
70
|
const separator = baseUrl.includes('?') ? '&' : '?';
|
|
71
71
|
return `${baseUrl}${separator}token=${encodeURIComponent(token)}`;
|
|
72
72
|
}
|
|
73
|
-
function useEnsureAgent(agentId, baseUrl, jupyterSandboxUrl) {
|
|
74
|
-
const [isReady, setIsReady] = useState(false);
|
|
75
|
-
const [error, setError] = useState(null);
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
let mounted = true;
|
|
78
|
-
async function ensureAgent() {
|
|
79
|
-
try {
|
|
80
|
-
if (!jupyterSandboxUrl) {
|
|
81
|
-
if (mounted) {
|
|
82
|
-
setError('Could not detect Jupyter server URL from Lexical service manager.');
|
|
83
|
-
setIsReady(false);
|
|
84
|
-
}
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
const response = await fetch(`${baseUrl}/api/v1/agents`, {
|
|
88
|
-
method: 'POST',
|
|
89
|
-
headers: {
|
|
90
|
-
'Content-Type': 'application/json',
|
|
91
|
-
},
|
|
92
|
-
body: JSON.stringify({
|
|
93
|
-
name: agentId,
|
|
94
|
-
description: 'Demo agent for lexical sidebar example',
|
|
95
|
-
agent_library: 'pydantic-ai',
|
|
96
|
-
transport: 'vercel-ai',
|
|
97
|
-
model: DEFAULT_MODEL,
|
|
98
|
-
system_prompt: 'You are a helpful AI assistant that helps users work with lexical documents. For document operations, always use the lexical frontend tools so actions happen in the live document UI. Use executeCode only for temporary inspection code that should not modify persisted document content.',
|
|
99
|
-
enable_codemode: false,
|
|
100
|
-
sandbox_variant: 'jupyter',
|
|
101
|
-
jupyter_sandbox: jupyterSandboxUrl,
|
|
102
|
-
}),
|
|
103
|
-
});
|
|
104
|
-
if (mounted) {
|
|
105
|
-
if (response.ok) {
|
|
106
|
-
console.warn(`[LexicalAgentSidebarExample] Created agent: ${agentId}`);
|
|
107
|
-
setError(null);
|
|
108
|
-
setIsReady(true);
|
|
109
|
-
}
|
|
110
|
-
else if (response.status === 409 || response.status === 400) {
|
|
111
|
-
console.warn(`[LexicalAgentSidebarExample] Reusing existing agent: ${agentId}`);
|
|
112
|
-
setError(null);
|
|
113
|
-
setIsReady(true);
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
const errorData = await response.json().catch(() => ({}));
|
|
117
|
-
setError(errorData.detail || `Failed to create agent: ${response.status}`);
|
|
118
|
-
setIsReady(false);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
catch (err) {
|
|
123
|
-
if (mounted) {
|
|
124
|
-
console.error('[LexicalAgentSidebarExample] Error creating agent:', err);
|
|
125
|
-
setError(err instanceof Error ? err.message : 'Failed to connect to server');
|
|
126
|
-
setIsReady(false);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
void ensureAgent();
|
|
131
|
-
return () => {
|
|
132
|
-
mounted = false;
|
|
133
|
-
};
|
|
134
|
-
}, [agentId, baseUrl, jupyterSandboxUrl]);
|
|
135
|
-
return { isReady, error };
|
|
136
|
-
}
|
|
137
73
|
/**
|
|
138
74
|
* Lexical plugin for code highlighting
|
|
139
75
|
*/
|
|
@@ -144,7 +80,7 @@ function CodeHighlightingPlugin() {
|
|
|
144
80
|
}, [editor]);
|
|
145
81
|
return null;
|
|
146
82
|
}
|
|
147
|
-
function LexicalEditor({ serviceManager }) {
|
|
83
|
+
function LexicalEditor({ serviceManager, endpoint }) {
|
|
148
84
|
const [floatingAnchorElem, setFloatingAnchorElem] = useState(null);
|
|
149
85
|
const [_isLinkEditMode, setIsLinkEditMode] = useState(false);
|
|
150
86
|
// AI actions registered as toolbar items
|
|
@@ -177,24 +113,60 @@ function LexicalEditor({ serviceManager }) {
|
|
|
177
113
|
pointerEvents: 'none',
|
|
178
114
|
}, children: "Start typing or use the chat to create content..." }), ErrorBoundary: LexicalErrorBoundary }), _jsx(HistoryPlugin, {}), _jsx(AutoFocusPlugin, {}), _jsx(OnChangePlugin, { onChange: onChange }), _jsx(MarkdownShortcutPlugin, { transformers: TRANSFORMERS }), _jsx(CodeHighlightingPlugin, {}), _jsx(ListPlugin, {}), _jsx(CheckListPlugin, {}), _jsx(LinkPlugin, {}), _jsx(TablePlugin, {}), _jsx(TableCellResizerPlugin, {}), _jsx(JupyterCellPlugin, {}), _jsx(JupyterInputOutputPlugin, {}), _jsx(ImagesPlugin, {}), _jsx(HorizontalRulePlugin, {}), _jsx(EquationsPlugin, {}), _jsx(YouTubePlugin, {}), _jsx(ExcalidrawPlugin, {}), _jsx(CollapsiblePlugin, {}), _jsx(AutoLinkPlugin, {}), _jsx(AutoEmbedPlugin, {}), _jsx(ListMaxIndentLevelPlugin, { maxDepth: 7 }), floatingAnchorElem && (_jsxs(_Fragment, { children: [_jsx(ComponentPickerMenuPlugin, {}), _jsx(DraggableBlockPlugin, { anchorElem: floatingAnchorElem }), _jsx(FloatingTextFormatToolbarPlugin, { anchorElem: floatingAnchorElem, setIsLinkEditMode: setIsLinkEditMode, extraItems: toolbarItems }), _jsx(CodeActionMenuPlugin, { anchorElem: floatingAnchorElem })] })), _jsx(ChatInlinePlugin, { protocol: {
|
|
179
115
|
type: 'vercel-ai',
|
|
180
|
-
endpoint
|
|
116
|
+
endpoint,
|
|
181
117
|
}, isOpen: isAiOpen, onClose: closeAi, pendingPrompt: pendingPrompt, onPendingPromptConsumed: clearPendingPrompt })] })] }) }));
|
|
182
118
|
}
|
|
183
119
|
export function ChatLexicalAgentExampleInner({ serviceManager, }) {
|
|
120
|
+
const baseUrl = useExampleAgentRuntimesUrl();
|
|
121
|
+
const vercelAiEndpoint = `${baseUrl}/api/v1/vercel-ai/${DEFAULT_AGENT_ID}`;
|
|
122
|
+
const [createRequested, setCreateRequested] = useState(false);
|
|
184
123
|
const jupyterSandboxUrl = useMemo(() => getJupyterSandboxUrl(serviceManager), [serviceManager]);
|
|
185
|
-
const { isReady, error } =
|
|
124
|
+
const { agentId, isReady, status, error, createAgent } = useExampleAgentRuntime({
|
|
125
|
+
exampleId: 'LexicalAgentSidebarExample',
|
|
126
|
+
agentName: DEFAULT_AGENT_ID,
|
|
127
|
+
autoCreateAgent: false,
|
|
128
|
+
agentConfig: {
|
|
129
|
+
name: DEFAULT_AGENT_ID,
|
|
130
|
+
description: 'Demo agent for lexical sidebar example',
|
|
131
|
+
protocol: 'vercel-ai',
|
|
132
|
+
model: DEFAULT_MODEL,
|
|
133
|
+
systemPrompt: 'You are a helpful AI assistant that helps users work with lexical documents. For document operations, always use the lexical frontend tools so actions happen in the live document UI. Use executeCode only for temporary inspection code that should not modify persisted document content.',
|
|
134
|
+
enableCodemode: false,
|
|
135
|
+
sandboxVariant: 'jupyter',
|
|
136
|
+
jupyterSandbox: jupyterSandboxUrl,
|
|
137
|
+
},
|
|
138
|
+
});
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
if (!jupyterSandboxUrl || createRequested || agentId) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
setCreateRequested(true);
|
|
144
|
+
void createAgent({
|
|
145
|
+
name: DEFAULT_AGENT_ID,
|
|
146
|
+
description: 'Demo agent for lexical sidebar example',
|
|
147
|
+
protocol: 'vercel-ai',
|
|
148
|
+
model: DEFAULT_MODEL,
|
|
149
|
+
systemPrompt: 'You are a helpful AI assistant that helps users work with lexical documents. For document operations, always use the lexical frontend tools so actions happen in the live document UI. Use executeCode only for temporary inspection code that should not modify persisted document content.',
|
|
150
|
+
enableCodemode: false,
|
|
151
|
+
sandboxVariant: 'jupyter',
|
|
152
|
+
jupyterSandbox: jupyterSandboxUrl,
|
|
153
|
+
}).catch(() => {
|
|
154
|
+
setCreateRequested(false);
|
|
155
|
+
});
|
|
156
|
+
}, [jupyterSandboxUrl, createRequested, agentId, createAgent]);
|
|
157
|
+
const effectiveReady = isReady || status === 'ready';
|
|
186
158
|
// Get lexical tools for ChatSidebar
|
|
187
159
|
const tools = useLexicalTools(LEXICAL_ID);
|
|
188
160
|
// Build Vercel AI protocol config
|
|
189
161
|
const protocolConfig = useMemo(() => {
|
|
190
162
|
return {
|
|
191
163
|
type: 'vercel-ai',
|
|
192
|
-
endpoint:
|
|
164
|
+
endpoint: vercelAiEndpoint,
|
|
193
165
|
agentId: DEFAULT_AGENT_ID,
|
|
194
166
|
enableConfigQuery: true,
|
|
195
|
-
configEndpoint: `${
|
|
167
|
+
configEndpoint: `${baseUrl}/api/v1/configure`,
|
|
196
168
|
};
|
|
197
|
-
}, []);
|
|
169
|
+
}, [baseUrl, vercelAiEndpoint]);
|
|
198
170
|
return (_jsxs(_Fragment, { children: [_jsxs(Box, { sx: {
|
|
199
171
|
height: 'calc(100vh - 70px)',
|
|
200
172
|
width: '100vw',
|
|
@@ -215,7 +187,7 @@ export function ChatLexicalAgentExampleInner({ serviceManager, }) {
|
|
|
215
187
|
display: 'flex',
|
|
216
188
|
overflow: 'hidden',
|
|
217
189
|
bg: 'canvas.default',
|
|
218
|
-
}, children: _jsx(LexicalEditor, { serviceManager: serviceManager }) })] }),
|
|
190
|
+
}, children: _jsx(LexicalEditor, { serviceManager: serviceManager, endpoint: vercelAiEndpoint }) })] }), effectiveReady && (_jsx(ChatSidebar, { title: "AI Assistant", protocol: protocolConfig, position: "right", width: 400, showNewChatButton: true, showClearButton: true, showSettingsButton: true, defaultOpen: true, panelProps: {
|
|
219
191
|
protocol: protocolConfig,
|
|
220
192
|
frontendTools: tools,
|
|
221
193
|
useStore: true,
|
|
@@ -15,13 +15,15 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
15
15
|
*
|
|
16
16
|
* @module examples/NotebookAgentExample
|
|
17
17
|
*/
|
|
18
|
-
import React, { useEffect, useMemo, useState } from 'react';
|
|
18
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
19
19
|
import { Box } from '@datalayer/primer-addons';
|
|
20
20
|
import { Notebook } from '@datalayer/jupyter-react';
|
|
21
21
|
import { ThemedJupyterProvider } from './utils/themedProvider';
|
|
22
22
|
// Agent-runtimes imports
|
|
23
23
|
import { ChatFloating } from '../chat';
|
|
24
24
|
import { useNotebookTools } from '../tools/adapters/agent-runtimes/notebookHooks';
|
|
25
|
+
import { useExampleAgentRuntimesUrl } from './utils/useExampleAgentRuntimesUrl';
|
|
26
|
+
import { useExampleAgentRuntime } from './hooks/useExampleAgentRuntime';
|
|
25
27
|
// Import Matplotlib notebook
|
|
26
28
|
import MatplotlibNotebook from './utils/notebooks/Matplotlib.ipynb.json';
|
|
27
29
|
import { DEFAULT_MODEL } from '../specs';
|
|
@@ -29,11 +31,7 @@ import { DEFAULT_MODEL } from '../specs';
|
|
|
29
31
|
const NOTEBOOK_ID = 'agui-notebook-example';
|
|
30
32
|
// Use the imported Matplotlib notebook
|
|
31
33
|
const NOTEBOOK_CONTENT = MatplotlibNotebook;
|
|
32
|
-
// Base URL for agent-runtimes server
|
|
33
|
-
const BASE_URL = 'http://localhost:8765';
|
|
34
34
|
const AGENT_ID = 'notebook-agent-runtime-example';
|
|
35
|
-
// Vercel AI endpoint
|
|
36
|
-
const VERCEL_AI_ENDPOINT = `${BASE_URL}/api/v1/vercel-ai/${AGENT_ID}`;
|
|
37
35
|
function getJupyterSandboxUrl(serviceManager) {
|
|
38
36
|
const envUrl = import.meta.env.VITE_JUPYTER_SANDBOX_URL;
|
|
39
37
|
if (envUrl) {
|
|
@@ -53,74 +51,7 @@ function getJupyterSandboxUrl(serviceManager) {
|
|
|
53
51
|
const separator = baseUrl.includes('?') ? '&' : '?';
|
|
54
52
|
return `${baseUrl}${separator}token=${encodeURIComponent(token)}`;
|
|
55
53
|
}
|
|
56
|
-
|
|
57
|
-
* Hook to ensure the example-agent is aligned with the active notebook runtime.
|
|
58
|
-
* Recreates the agent with jupyter sandbox settings from the Notebook UI.
|
|
59
|
-
*/
|
|
60
|
-
function useEnsureAgent(agentId, baseUrl, jupyterSandboxUrl) {
|
|
61
|
-
const [isReady, setIsReady] = useState(false);
|
|
62
|
-
const [error, setError] = useState(null);
|
|
63
|
-
useEffect(() => {
|
|
64
|
-
let mounted = true;
|
|
65
|
-
async function ensureAgent() {
|
|
66
|
-
try {
|
|
67
|
-
if (!jupyterSandboxUrl) {
|
|
68
|
-
if (mounted) {
|
|
69
|
-
setError('Could not detect Jupyter server URL from Notebook service manager.');
|
|
70
|
-
setIsReady(false);
|
|
71
|
-
}
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const response = await fetch(`${baseUrl}/api/v1/agents`, {
|
|
75
|
-
method: 'POST',
|
|
76
|
-
headers: {
|
|
77
|
-
'Content-Type': 'application/json',
|
|
78
|
-
},
|
|
79
|
-
body: JSON.stringify({
|
|
80
|
-
name: agentId,
|
|
81
|
-
description: 'Demo agent for notebook example',
|
|
82
|
-
agent_library: 'pydantic-ai',
|
|
83
|
-
transport: 'vercel-ai',
|
|
84
|
-
model: DEFAULT_MODEL,
|
|
85
|
-
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.',
|
|
86
|
-
enable_codemode: false,
|
|
87
|
-
sandbox_variant: 'jupyter',
|
|
88
|
-
jupyter_sandbox: jupyterSandboxUrl,
|
|
89
|
-
}),
|
|
90
|
-
});
|
|
91
|
-
if (mounted) {
|
|
92
|
-
if (response.ok) {
|
|
93
|
-
console.warn(`[AgentRuntimeExample] Created agent: ${agentId}`);
|
|
94
|
-
setError(null);
|
|
95
|
-
setIsReady(true);
|
|
96
|
-
}
|
|
97
|
-
else if (response.status === 409 || response.status === 400) {
|
|
98
|
-
// Agent already exists; reuse it and continue.
|
|
99
|
-
console.warn(`[AgentRuntimeExample] Reusing existing agent: ${agentId}`);
|
|
100
|
-
setError(null);
|
|
101
|
-
setIsReady(true);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
const errorData = await response.json().catch(() => ({}));
|
|
105
|
-
setError(errorData.detail || `Failed to create agent: ${response.status}`);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
catch (err) {
|
|
110
|
-
if (mounted) {
|
|
111
|
-
console.error('[AgentRuntimeExample] Error creating agent:', err);
|
|
112
|
-
setError(err instanceof Error ? err.message : 'Failed to connect to server');
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
ensureAgent();
|
|
117
|
-
return () => {
|
|
118
|
-
mounted = false;
|
|
119
|
-
};
|
|
120
|
-
}, [agentId, baseUrl, jupyterSandboxUrl]);
|
|
121
|
-
return { isReady, error };
|
|
122
|
-
}
|
|
123
|
-
const NotebookUI = React.memo(function NotebookUI({ serviceManager, }) {
|
|
54
|
+
const NotebookUI = React.memo(function NotebookUI({ serviceManager, onSessionConnection, }) {
|
|
124
55
|
return (_jsxs(Box, { sx: {
|
|
125
56
|
flex: 1,
|
|
126
57
|
display: 'flex',
|
|
@@ -138,19 +69,57 @@ const NotebookUI = React.memo(function NotebookUI({ serviceManager, }) {
|
|
|
138
69
|
borderRadius: 2,
|
|
139
70
|
padding: 3,
|
|
140
71
|
backgroundColor: 'canvas.default',
|
|
141
|
-
}, children: serviceManager ? (_jsx(ThemedJupyterProvider, { children: _jsx(Notebook, { nbformat: NOTEBOOK_CONTENT, id: NOTEBOOK_ID, serviceManager: serviceManager, height: "calc(100vh - 300px)", cellSidebarMargin: 120, startDefaultKernel: true }) })) : (_jsx(Box, { sx: { padding: 3 }, children: _jsx("p", { children: "Loading service manager..." }) })) })] }));
|
|
72
|
+
}, children: serviceManager ? (_jsx(ThemedJupyterProvider, { children: _jsx(Notebook, { nbformat: NOTEBOOK_CONTENT, id: NOTEBOOK_ID, serviceManager: serviceManager, onSessionConnection: onSessionConnection, height: "calc(100vh - 300px)", cellSidebarMargin: 120, startDefaultKernel: true }) })) : (_jsx(Box, { sx: { padding: 3 }, children: _jsx("p", { children: "Loading service manager..." }) })) })] }));
|
|
142
73
|
});
|
|
143
74
|
function NotebookWithChat({ serviceManager, }) {
|
|
75
|
+
const baseUrl = useExampleAgentRuntimesUrl();
|
|
144
76
|
const jupyterSandboxUrl = useMemo(() => getJupyterSandboxUrl(serviceManager), [serviceManager]);
|
|
145
|
-
|
|
146
|
-
const
|
|
77
|
+
const [createRequested, setCreateRequested] = useState(false);
|
|
78
|
+
const [notebookKernel, setNotebookKernel] = useState(null);
|
|
79
|
+
const { agentId, isReady, status, error, createAgent } = useExampleAgentRuntime({
|
|
80
|
+
exampleId: 'NotebookAgentExample',
|
|
81
|
+
agentName: AGENT_ID,
|
|
82
|
+
autoCreateAgent: false,
|
|
83
|
+
agentConfig: {
|
|
84
|
+
name: AGENT_ID,
|
|
85
|
+
description: 'Demo agent for notebook example',
|
|
86
|
+
protocol: 'vercel-ai',
|
|
87
|
+
model: DEFAULT_MODEL,
|
|
88
|
+
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.',
|
|
89
|
+
enableCodemode: false,
|
|
90
|
+
sandboxVariant: 'jupyter',
|
|
91
|
+
jupyterSandbox: jupyterSandboxUrl,
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!jupyterSandboxUrl || createRequested || agentId) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
setCreateRequested(true);
|
|
99
|
+
void createAgent({
|
|
100
|
+
name: AGENT_ID,
|
|
101
|
+
description: 'Demo agent for notebook example',
|
|
102
|
+
protocol: 'vercel-ai',
|
|
103
|
+
model: DEFAULT_MODEL,
|
|
104
|
+
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.',
|
|
105
|
+
enableCodemode: false,
|
|
106
|
+
sandboxVariant: 'jupyter',
|
|
107
|
+
jupyterSandbox: jupyterSandboxUrl,
|
|
108
|
+
}).catch(() => {
|
|
109
|
+
setCreateRequested(false);
|
|
110
|
+
});
|
|
111
|
+
}, [jupyterSandboxUrl, createRequested, agentId, createAgent]);
|
|
112
|
+
const effectiveReady = isReady || status === 'ready';
|
|
113
|
+
const handleSessionConnection = useCallback((session) => {
|
|
114
|
+
setNotebookKernel(session?.kernel ?? null);
|
|
115
|
+
}, []);
|
|
147
116
|
const protocolConfig = useMemo(() => ({
|
|
148
117
|
type: 'vercel-ai',
|
|
149
|
-
endpoint:
|
|
118
|
+
endpoint: `${baseUrl}/api/v1/vercel-ai/${AGENT_ID}`,
|
|
150
119
|
agentId: AGENT_ID,
|
|
151
120
|
enableConfigQuery: true,
|
|
152
|
-
configEndpoint: `${
|
|
153
|
-
}), []);
|
|
121
|
+
configEndpoint: `${baseUrl}/api/v1/configure`,
|
|
122
|
+
}), [baseUrl]);
|
|
154
123
|
// Get notebook tools for ChatFloating
|
|
155
124
|
const frontendTools = useNotebookTools(NOTEBOOK_ID);
|
|
156
125
|
return (_jsxs(Box, { sx: {
|
|
@@ -158,7 +127,7 @@ function NotebookWithChat({ serviceManager, }) {
|
|
|
158
127
|
width: '100%',
|
|
159
128
|
display: 'flex',
|
|
160
129
|
overflow: 'hidden',
|
|
161
|
-
}, children: [_jsx(NotebookUI, { serviceManager: serviceManager }), error && (_jsxs(Box, { sx: {
|
|
130
|
+
}, children: [_jsx(NotebookUI, { serviceManager: serviceManager, onSessionConnection: handleSessionConnection }), error && (_jsxs(Box, { sx: {
|
|
162
131
|
position: 'fixed',
|
|
163
132
|
bottom: 20,
|
|
164
133
|
right: 20,
|
|
@@ -167,7 +136,9 @@ function NotebookWithChat({ serviceManager, }) {
|
|
|
167
136
|
color: 'danger.fg',
|
|
168
137
|
borderRadius: 2,
|
|
169
138
|
maxWidth: 300,
|
|
170
|
-
}, children: [_jsx("strong", { children: "Error:" }), " ", error] })),
|
|
139
|
+
}, children: [_jsx("strong", { children: "Error:" }), " ", error] })), effectiveReady && (_jsx(ChatFloating, { protocol: protocolConfig, title: "Notebook AI Agent Runtime", description: "Hi! I can help you edit notebook cells. Try: 'Add a new code cell', 'Run cell 1', or 'Delete the last cell'", defaultOpen: true, defaultViewMode: "panel", position: "bottom-right", frontendTools: frontendTools, useStore: false, showModelSelector: true, showToolsMenu: true, showSkillsMenu: true, panelProps: {
|
|
140
|
+
kernel: notebookKernel,
|
|
141
|
+
}, suggestions: [
|
|
171
142
|
{
|
|
172
143
|
title: 'Add a cell',
|
|
173
144
|
message: 'Insert a random cell to the notebook',
|
|
@@ -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
|
}, []);
|