@datalayer/agent-runtimes 1.0.10 → 1.0.18
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/AgentCodeSandboxesExample.d.ts +3 -0
- package/lib/examples/AgentCodeSandboxesExample.js +192 -0
- 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 +4 -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 +4 -1
- package/lib/examples/index.js +4 -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 +78 -26
- package/lib/specs/agents/agents.js +4434 -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 +4 -2
- 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__/generate_sandbox_agents.cpython-313.pyc +0 -0
- 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/scripts/codegen/generate_sandbox_agents.py +145 -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
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type IRuntimeOptions } from '../../runtimes';
|
|
2
|
+
export interface RuntimeTransfer {
|
|
3
|
+
/**
|
|
4
|
+
* Selected Kernel.
|
|
5
|
+
*/
|
|
6
|
+
runtime: Partial<Omit<IRuntimeOptions, 'kernelType'> & {
|
|
7
|
+
id: string;
|
|
8
|
+
}> | null;
|
|
9
|
+
/**
|
|
10
|
+
* List of selected variables
|
|
11
|
+
*
|
|
12
|
+
* It may differ with the serialized variables if
|
|
13
|
+
* some serialization failed.
|
|
14
|
+
*/
|
|
15
|
+
selectedVariables: string[];
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SessionContext } from '@jupyterlab/apputils';
|
|
2
|
+
import { ITranslator } from '@jupyterlab/translation';
|
|
3
|
+
import { IMultiServiceManager } from '../../runtimes';
|
|
4
|
+
import { IRuntimeDesc } from '../../models';
|
|
5
|
+
export type IDatalayerRuntimeDesc = IRuntimeDesc & {
|
|
6
|
+
gpu?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Create the grouped runtime descriptions.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getGroupedRuntimeDescs(multiServiceManager: IMultiServiceManager, kernelId?: string, translator?: ITranslator, filterKernels?: (desc: IDatalayerRuntimeDesc) => boolean, variant?: 'document' | 'cell'): {
|
|
12
|
+
[g: string]: IDatalayerRuntimeDesc[];
|
|
13
|
+
} | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Get the default kernel name given a selector.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getDefaultKernelName(selector: SessionContext.IKernelSearch): string | null;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
import { PathExt } from '@jupyterlab/coreutils';
|
|
6
|
+
import { nullTranslator } from '@jupyterlab/translation';
|
|
7
|
+
const ASSIGN_NEW_RUNTIME_LABEL = 'Assign a new Runtime';
|
|
8
|
+
const ASSIGN_EXISTING_REMOTE_RUNTIME_LABEL = 'Assign an existing Remote Runtime';
|
|
9
|
+
const ASSIGN_EXISTING_RUNTIME_LABEL = 'Assign an existing Runtime';
|
|
10
|
+
/**
|
|
11
|
+
* Create the grouped runtime descriptions.
|
|
12
|
+
*/
|
|
13
|
+
export function getGroupedRuntimeDescs(multiServiceManager, kernelId, translator, filterKernels = () => true, variant) {
|
|
14
|
+
translator = translator ?? nullTranslator;
|
|
15
|
+
const trans = translator.load('jupyterlab');
|
|
16
|
+
const specs = multiServiceManager.local.kernelspecs.specs;
|
|
17
|
+
const sessions = multiServiceManager.local.sessions.running();
|
|
18
|
+
const kernels = {};
|
|
19
|
+
// Add the sessions.
|
|
20
|
+
const runningSessions = Array.from(sessions)
|
|
21
|
+
.filter(session => session.kernel &&
|
|
22
|
+
session.kernel.id !== kernelId &&
|
|
23
|
+
specs.kernelspecs[session.kernel.name])
|
|
24
|
+
.map(session => {
|
|
25
|
+
const spec = specs.kernelspecs[session.kernel.name];
|
|
26
|
+
return {
|
|
27
|
+
kernelId: session.kernel.id,
|
|
28
|
+
name: spec.name,
|
|
29
|
+
language: spec.language,
|
|
30
|
+
displayName: session.name || PathExt.basename(session.path),
|
|
31
|
+
location: 'local',
|
|
32
|
+
};
|
|
33
|
+
})
|
|
34
|
+
.concat(Array.from(multiServiceManager.browser?.sessions.running() ?? [])
|
|
35
|
+
.filter(session => session.kernel && session.kernel.id !== kernelId)
|
|
36
|
+
.map(session => {
|
|
37
|
+
const spec = multiServiceManager.browser.kernelspecs.specs.kernelspecs[session.kernel.name];
|
|
38
|
+
return {
|
|
39
|
+
id: '', // TODO Assign a proper ID.
|
|
40
|
+
kernelId: session.kernel.id,
|
|
41
|
+
name: spec.name,
|
|
42
|
+
language: spec.language,
|
|
43
|
+
displayName: session.name || PathExt.basename(session.path),
|
|
44
|
+
location: 'browser',
|
|
45
|
+
};
|
|
46
|
+
}))
|
|
47
|
+
.filter(filterKernels);
|
|
48
|
+
// Add the running runtimes.
|
|
49
|
+
const listedAsSession = runningSessions.map(s => s.kernelId);
|
|
50
|
+
const runningKernels = Array.from(multiServiceManager.local.kernels.running())
|
|
51
|
+
.filter(k => !listedAsSession.includes(k.id))
|
|
52
|
+
.map(k => {
|
|
53
|
+
const spec = specs.kernelspecs[k.name];
|
|
54
|
+
return {
|
|
55
|
+
kernelId: k.id,
|
|
56
|
+
name: spec.name,
|
|
57
|
+
language: spec.language,
|
|
58
|
+
displayName: spec.display_name,
|
|
59
|
+
location: 'local',
|
|
60
|
+
};
|
|
61
|
+
})
|
|
62
|
+
.concat((multiServiceManager.remote?.runtimesManager.get() ?? [])
|
|
63
|
+
.filter(k => k.id && !listedAsSession.includes(k.id))
|
|
64
|
+
.map(runtime => {
|
|
65
|
+
const environment = multiServiceManager
|
|
66
|
+
.remote.environments.get()
|
|
67
|
+
.find(env => env.name === runtime.environment_name);
|
|
68
|
+
return {
|
|
69
|
+
kernelId: runtime.id,
|
|
70
|
+
name: environment.name,
|
|
71
|
+
language: environment.language,
|
|
72
|
+
displayName: runtime.given_name ?? environment.title,
|
|
73
|
+
location: 'remote',
|
|
74
|
+
podName: runtime.pod_name,
|
|
75
|
+
gpu: environment.resources?.['nvidia.com/gpu'],
|
|
76
|
+
};
|
|
77
|
+
}))
|
|
78
|
+
.concat(Array.from(multiServiceManager.browser?.kernels.running() ?? [])
|
|
79
|
+
.filter(k => !listedAsSession.includes(k.id))
|
|
80
|
+
.map(k => {
|
|
81
|
+
const spec = multiServiceManager.browser.kernelspecs.specs.kernelspecs[k.name];
|
|
82
|
+
return {
|
|
83
|
+
kernelId: k.id,
|
|
84
|
+
name: spec.name,
|
|
85
|
+
language: spec.language,
|
|
86
|
+
displayName: spec.display_name,
|
|
87
|
+
location: 'browser',
|
|
88
|
+
};
|
|
89
|
+
}))
|
|
90
|
+
.filter(filterKernels);
|
|
91
|
+
runningSessions.push(...runningKernels);
|
|
92
|
+
if (runningSessions.length) {
|
|
93
|
+
const key = variant === 'cell'
|
|
94
|
+
? ASSIGN_EXISTING_REMOTE_RUNTIME_LABEL
|
|
95
|
+
: ASSIGN_EXISTING_RUNTIME_LABEL;
|
|
96
|
+
kernels[key] = runningSessions;
|
|
97
|
+
}
|
|
98
|
+
// Environments.
|
|
99
|
+
const environments = Object.values(specs.kernelspecs)
|
|
100
|
+
.filter(spec => !!spec)
|
|
101
|
+
.map(spec => ({
|
|
102
|
+
name: spec.name,
|
|
103
|
+
language: spec.language,
|
|
104
|
+
displayName: spec.display_name,
|
|
105
|
+
gpu: spec.resources?.['nvidia.com/gpu'],
|
|
106
|
+
location: 'local',
|
|
107
|
+
}))
|
|
108
|
+
.filter(filterKernels);
|
|
109
|
+
environments.push(...(multiServiceManager.remote?.environments
|
|
110
|
+
.get()
|
|
111
|
+
.map(spec => ({
|
|
112
|
+
name: spec.name,
|
|
113
|
+
language: spec.language,
|
|
114
|
+
displayName: spec.title,
|
|
115
|
+
location: 'remote',
|
|
116
|
+
gpu: spec.resources?.['nvidia.com/gpu'],
|
|
117
|
+
burningRate: spec.burning_rate,
|
|
118
|
+
}))
|
|
119
|
+
.filter(filterKernels) ?? []));
|
|
120
|
+
environments.push(...Object.values(multiServiceManager.browser?.kernelspecs.specs?.kernelspecs ?? {})
|
|
121
|
+
.filter(spec => !!spec)
|
|
122
|
+
.map(spec => ({
|
|
123
|
+
name: spec.name,
|
|
124
|
+
language: spec.language,
|
|
125
|
+
displayName: spec.display_name,
|
|
126
|
+
location: 'browser',
|
|
127
|
+
}))
|
|
128
|
+
.filter(filterKernels));
|
|
129
|
+
if (environments.length) {
|
|
130
|
+
kernels[trans.__(ASSIGN_NEW_RUNTIME_LABEL)] = environments;
|
|
131
|
+
}
|
|
132
|
+
return kernels;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get the default kernel name given a selector.
|
|
136
|
+
*/
|
|
137
|
+
export function getDefaultKernelName(selector) {
|
|
138
|
+
const { specs, preference } = selector;
|
|
139
|
+
const { name, language, canStart, autoStartDefault } = preference;
|
|
140
|
+
if (!specs || canStart === false) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const defaultName = autoStartDefault ? specs.default : null;
|
|
144
|
+
if (!name && !language) {
|
|
145
|
+
return defaultName;
|
|
146
|
+
}
|
|
147
|
+
// Look for an exact match of a spec name.
|
|
148
|
+
for (const specName in specs.kernelspecs) {
|
|
149
|
+
if (specName === name) {
|
|
150
|
+
return name;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Bail if there is no language.
|
|
154
|
+
if (!language) {
|
|
155
|
+
return defaultName;
|
|
156
|
+
}
|
|
157
|
+
// Check for a single kernel matching the language.
|
|
158
|
+
const matches = [];
|
|
159
|
+
for (const specName in specs.kernelspecs) {
|
|
160
|
+
const kernelLanguage = specs.kernelspecs[specName]?.language;
|
|
161
|
+
if (language === kernelLanguage) {
|
|
162
|
+
matches.push(specName);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (matches.length === 1) {
|
|
166
|
+
const specName = matches[0];
|
|
167
|
+
console.warn('No exact match found for ' +
|
|
168
|
+
specName +
|
|
169
|
+
', using runtime ' +
|
|
170
|
+
specName +
|
|
171
|
+
' that matches ' +
|
|
172
|
+
'language=' +
|
|
173
|
+
language);
|
|
174
|
+
return specName;
|
|
175
|
+
}
|
|
176
|
+
// No matches found.
|
|
177
|
+
return defaultName;
|
|
178
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { ITranslator } from '@jupyterlab/translation';
|
|
3
|
+
/**
|
|
4
|
+
* {@link RuntimeVariables} properties
|
|
5
|
+
*/
|
|
6
|
+
export interface IRuntimeVariablesProps {
|
|
7
|
+
/**
|
|
8
|
+
* Component class name
|
|
9
|
+
*/
|
|
10
|
+
className?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Available kernel variables
|
|
13
|
+
*
|
|
14
|
+
* Mapping (variable name, variable type)
|
|
15
|
+
*/
|
|
16
|
+
kernelVariables?: {
|
|
17
|
+
[name: string]: string;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Kernel variables to be transferred.
|
|
21
|
+
*/
|
|
22
|
+
selectedVariables: string[];
|
|
23
|
+
setSelectVariable: (l: string[]) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Whether to transfer the variable from the current
|
|
26
|
+
* to the selected kernel or not.
|
|
27
|
+
*/
|
|
28
|
+
transferVariables: boolean;
|
|
29
|
+
setTransferVariable: (v: boolean) => void;
|
|
30
|
+
/**
|
|
31
|
+
* Application translator
|
|
32
|
+
*/
|
|
33
|
+
translator?: ITranslator;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Runtime variables selector component.
|
|
37
|
+
*/
|
|
38
|
+
export declare function RuntimeVariables(props: IRuntimeVariablesProps): ReactElement;
|
|
@@ -0,0 +1,75 @@
|
|
|
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 { useMemo } from 'react';
|
|
7
|
+
import { IconButton, ToggleSwitch, FormControl } from '@primer/react';
|
|
8
|
+
import { Box } from '@datalayer/primer-addons';
|
|
9
|
+
import { Blankslate, DataTable, Table } from '@primer/react/experimental';
|
|
10
|
+
import { nullTranslator } from '@jupyterlab/translation';
|
|
11
|
+
import { checkIcon } from '@jupyterlab/ui-components';
|
|
12
|
+
/**
|
|
13
|
+
* Runtime variables selector component.
|
|
14
|
+
*/
|
|
15
|
+
export function RuntimeVariables(props) {
|
|
16
|
+
const { className, translator, selectedVariables, setSelectVariable, transferVariables, setTransferVariable, kernelVariables, } = props;
|
|
17
|
+
const trans = useMemo(() => (translator ?? nullTranslator).load('jupyterlab'), [translator]);
|
|
18
|
+
const nRows = Object.keys(kernelVariables ?? {}).length;
|
|
19
|
+
// Sorting and actions does not play nice together :'(
|
|
20
|
+
const columns = [
|
|
21
|
+
{
|
|
22
|
+
header: trans.__('Name'),
|
|
23
|
+
field: 'name',
|
|
24
|
+
rowHeader: true,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
header: trans.__('Type'),
|
|
28
|
+
field: 'type',
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
id: 'select',
|
|
32
|
+
maxWidth: '70px',
|
|
33
|
+
header: () => (_jsx(IconButton, { "aria-label": selectedVariables.length === nRows
|
|
34
|
+
? trans.__('Deselect all')
|
|
35
|
+
: trans.__('Select all'), title: selectedVariables.length === nRows
|
|
36
|
+
? trans.__('Deselect all')
|
|
37
|
+
: trans.__('Select all'), icon: selectedVariables.length === nRows
|
|
38
|
+
? checkIcon.react
|
|
39
|
+
: () => _jsx("span", {}), variant: "default", size: "small", onClick: e => {
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
if (selectedVariables.length === nRows) {
|
|
42
|
+
setSelectVariable([]);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
setSelectVariable(Object.keys(kernelVariables ?? {}));
|
|
46
|
+
}
|
|
47
|
+
} })),
|
|
48
|
+
renderCell: (row) => {
|
|
49
|
+
const isSelected = selectedVariables.includes(row.name);
|
|
50
|
+
return (_jsx(IconButton, { "aria-label": isSelected
|
|
51
|
+
? trans.__('Deselect: %1', row.name)
|
|
52
|
+
: trans.__('Select: %1', row.name), title: isSelected
|
|
53
|
+
? trans.__('Deselect: %1', row.name)
|
|
54
|
+
: trans.__('Select: %1', row.name), icon: isSelected ? checkIcon.react : () => _jsx("span", {}), variant: "default", size: "small", onClick: e => {
|
|
55
|
+
e.preventDefault();
|
|
56
|
+
const index = selectedVariables.findIndex(v => v === row.name);
|
|
57
|
+
if (index >= 0) {
|
|
58
|
+
const copy = [...selectedVariables];
|
|
59
|
+
copy.splice(index, 1);
|
|
60
|
+
setSelectVariable(copy);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
setSelectVariable([...selectedVariables, row.name]);
|
|
64
|
+
}
|
|
65
|
+
} }));
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
return (_jsxs(Box, { className: className, sx: { paddingTop: '10px' }, children: [_jsxs(FormControl, { layout: "horizontal", children: [_jsx(FormControl.Label, { children: trans.__('Transfer variables') }), _jsx(ToggleSwitch, { checked: transferVariables, size: "small", onClick: e => {
|
|
70
|
+
e.preventDefault();
|
|
71
|
+
setTransferVariable(!transferVariables);
|
|
72
|
+
}, "aria-labelledby": "kernel-toggle-variables" })] }), transferVariables && (_jsxs(Table.Container, { sx: { flex: '1 1 auto', marginTop: 3 }, children: [_jsx(Table.Subtitle, { as: "p", id: "dla-kernel-variables-subtitle", children: trans.__('The list of transferable runtime variables.') }), kernelVariables ? (Object.keys(kernelVariables ?? {}).length ? (_jsx(DataTable, { "aria-labelledby": "dla-kernel-variables", "aria-describedby": "dla-kernel-variables-subtitle", data: Object.entries(kernelVariables ?? {})
|
|
73
|
+
.map(([name, type], id) => ({ id, name, type }))
|
|
74
|
+
.sort((a, b) => (a.name > b.name ? 1 : -1)), columns: columns, cellPadding: "condensed" })) : (_jsx(Box, { sx: { gridArea: 'table' }, children: _jsx(Blankslate, { border: true, children: _jsx(Blankslate.Heading, { children: trans.__('No eligible variables.') }) }) }))) : (_jsx(Table.Skeleton, { "aria-labelledby": "dla-kernel-variables", "aria-describedby": "dla-kernel-variables-subtitle", columns: columns, rows: 5 }))] }))] }));
|
|
75
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from './RuntimeCellVariables';
|
|
2
|
+
export * from './RuntimeCellVariablesDialog';
|
|
3
|
+
export * from './RuntimeLauncherDialog';
|
|
4
|
+
export * from './RuntimePickerBase';
|
|
5
|
+
export * from './RuntimePickerCell';
|
|
6
|
+
export * from './RuntimePickerNotebook';
|
|
7
|
+
export * from './RuntimeReservationControl';
|
|
8
|
+
export * from './RuntimeSimplePicker';
|
|
9
|
+
export * from './RuntimeTransfer';
|
|
10
|
+
export * from './RuntimeUtils';
|
|
11
|
+
export * from './RuntimeVariables';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
export * from './RuntimeCellVariables';
|
|
6
|
+
export * from './RuntimeCellVariablesDialog';
|
|
7
|
+
export * from './RuntimeLauncherDialog';
|
|
8
|
+
export * from './RuntimePickerBase';
|
|
9
|
+
export * from './RuntimePickerCell';
|
|
10
|
+
export * from './RuntimePickerNotebook';
|
|
11
|
+
export * from './RuntimeReservationControl';
|
|
12
|
+
export * from './RuntimeSimplePicker';
|
|
13
|
+
export * from './RuntimeTransfer';
|
|
14
|
+
export * from './RuntimeUtils';
|
|
15
|
+
export * from './RuntimeVariables';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type Icon } from '@primer/octicons-react';
|
|
2
|
+
import { type ScheduleDoc } from '../../api/scheduler/schedules';
|
|
3
|
+
/**
|
|
4
|
+
* Supported schedule presets.
|
|
5
|
+
*/
|
|
6
|
+
export type SchedulePreset = 'every-minute' | 'hourly' | 'daily' | 'custom';
|
|
7
|
+
/**
|
|
8
|
+
* Props for the self-contained {@link ScheduleMenu} component.
|
|
9
|
+
*
|
|
10
|
+
* The component performs the scheduler service calls internally. Provide the
|
|
11
|
+
* `notebookUid`, an authentication `token`, and the scheduler service
|
|
12
|
+
* `baseUrl` (configurable via props) to enable scheduling.
|
|
13
|
+
*/
|
|
14
|
+
export type ScheduleMenuProps = {
|
|
15
|
+
/** Target notebook uid to schedule (used to create/update a schedule). */
|
|
16
|
+
notebookUid?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Existing schedule uid to update in place. When provided, changes are
|
|
19
|
+
* persisted with a PUT update instead of a notebook upsert.
|
|
20
|
+
*/
|
|
21
|
+
scheduleUid?: string;
|
|
22
|
+
/** Authentication token used for scheduler API calls. */
|
|
23
|
+
token?: string;
|
|
24
|
+
/** Base URL of the scheduler service. Defaults to the production service. */
|
|
25
|
+
baseUrl?: string;
|
|
26
|
+
/** Force-disable the menu. When omitted, the menu is enabled if a token and notebook uid are present. */
|
|
27
|
+
enabled?: boolean;
|
|
28
|
+
/** Icon shown on the anchor button (replaced by a spinner while saving). */
|
|
29
|
+
icon?: Icon;
|
|
30
|
+
/** Optional color for the anchor icon. */
|
|
31
|
+
iconColor?: string;
|
|
32
|
+
/** Accessible label for the anchor button. */
|
|
33
|
+
ariaLabel?: string;
|
|
34
|
+
/** Initial preset selection. */
|
|
35
|
+
initialPreset?: SchedulePreset;
|
|
36
|
+
/** Initial cron expression. */
|
|
37
|
+
initialCronExpression?: string;
|
|
38
|
+
/** Called after a schedule is successfully saved. */
|
|
39
|
+
onSaved?: (schedule: ScheduleDoc) => void;
|
|
40
|
+
/** Called after a schedule is successfully deleted/disabled. */
|
|
41
|
+
onDeleted?: (schedule: ScheduleDoc) => void;
|
|
42
|
+
/** Called when saving a schedule fails. */
|
|
43
|
+
onError?: (error: unknown) => void;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Self-contained schedule menu that lets a user pick a cron schedule for a
|
|
47
|
+
* notebook and persists it to the scheduler service.
|
|
48
|
+
*
|
|
49
|
+
* The component owns its loading state and renders a spinner in place of the
|
|
50
|
+
* anchor icon while a save request is in flight. The scheduler service URL is
|
|
51
|
+
* configurable through the `baseUrl` prop.
|
|
52
|
+
*/
|
|
53
|
+
export declare const ScheduleMenu: ({ notebookUid, scheduleUid, token, baseUrl, enabled, icon, iconColor, ariaLabel, initialPreset, initialCronExpression, onSaved, onDeleted, onError, }: ScheduleMenuProps) => import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
export default ScheduleMenu;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
7
|
+
import { ActionList, ActionMenu, Box, Button, Dialog, FormControl, IconButton, Spinner, Text, TextInput, } from '@primer/react';
|
|
8
|
+
import { ClockIcon, TrashIcon } from '@primer/octicons-react';
|
|
9
|
+
import { disableSchedule, updateSchedule, upsertSchedule, } from '../../api/scheduler/schedules';
|
|
10
|
+
import { DEFAULT_SERVICE_URLS } from '@datalayer/core/lib/api/constants';
|
|
11
|
+
const SCHEDULE_PRESETS = [
|
|
12
|
+
{ id: 'every-minute', label: 'Every minute', cron: '* * * * *' },
|
|
13
|
+
{ id: 'hourly', label: 'Every hour', cron: '0 * * * *' },
|
|
14
|
+
{ id: 'daily', label: 'Every day', cron: '0 0 * * *' },
|
|
15
|
+
];
|
|
16
|
+
const DEFAULT_CRON_EXPRESSION = '* * * * *';
|
|
17
|
+
const presetFromCron = (cronExpression) => {
|
|
18
|
+
const normalized = cronExpression.trim();
|
|
19
|
+
const preset = SCHEDULE_PRESETS.find(item => item.cron === normalized);
|
|
20
|
+
return preset ? preset.id : 'custom';
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Self-contained schedule menu that lets a user pick a cron schedule for a
|
|
24
|
+
* notebook and persists it to the scheduler service.
|
|
25
|
+
*
|
|
26
|
+
* The component owns its loading state and renders a spinner in place of the
|
|
27
|
+
* anchor icon while a save request is in flight. The scheduler service URL is
|
|
28
|
+
* configurable through the `baseUrl` prop.
|
|
29
|
+
*/
|
|
30
|
+
export const ScheduleMenu = ({ notebookUid, scheduleUid, token, baseUrl = DEFAULT_SERVICE_URLS.SCHEDULER, enabled, icon = ClockIcon, iconColor, ariaLabel = 'Schedule execution', initialPreset = 'every-minute', initialCronExpression, onSaved, onDeleted, onError, }) => {
|
|
31
|
+
const providedInitialCron = (initialCronExpression || '').trim();
|
|
32
|
+
const hasProvidedInitialCron = providedInitialCron.length > 0;
|
|
33
|
+
const initialCron = hasProvidedInitialCron
|
|
34
|
+
? providedInitialCron
|
|
35
|
+
: DEFAULT_CRON_EXPRESSION;
|
|
36
|
+
const [cronExpression, setCronExpression] = useState(initialCron);
|
|
37
|
+
const [hasExplicitCron, setHasExplicitCron] = useState(hasProvidedInitialCron);
|
|
38
|
+
const [isSaving, setIsSaving] = useState(false);
|
|
39
|
+
const [isDeleting, setIsDeleting] = useState(false);
|
|
40
|
+
const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false);
|
|
41
|
+
const [deleteConfirmUid, setDeleteConfirmUid] = useState('');
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
const nextProvidedCron = (initialCronExpression || '').trim();
|
|
44
|
+
const nextHasExplicitCron = nextProvidedCron.length > 0;
|
|
45
|
+
setHasExplicitCron(nextHasExplicitCron);
|
|
46
|
+
setCronExpression(nextHasExplicitCron ? nextProvidedCron : DEFAULT_CRON_EXPRESSION);
|
|
47
|
+
}, [initialCronExpression, scheduleUid, notebookUid]);
|
|
48
|
+
const preset = useMemo(() => (hasExplicitCron ? presetFromCron(cronExpression) : 'custom'), [cronExpression, hasExplicitCron]);
|
|
49
|
+
const isEnabled = (enabled ?? true) &&
|
|
50
|
+
Boolean(token) &&
|
|
51
|
+
Boolean(notebookUid || scheduleUid) &&
|
|
52
|
+
!isSaving &&
|
|
53
|
+
!isDeleting;
|
|
54
|
+
const selectedPresetDescription = useMemo(() => {
|
|
55
|
+
if (!hasExplicitCron) {
|
|
56
|
+
return 'Not scheduled';
|
|
57
|
+
}
|
|
58
|
+
const selected = SCHEDULE_PRESETS.find(item => item.cron === cronExpression.trim());
|
|
59
|
+
if (selected) {
|
|
60
|
+
return `${selected.label} (${selected.cron})`;
|
|
61
|
+
}
|
|
62
|
+
return `Custom (${cronExpression || 'Cron expression not set'})`;
|
|
63
|
+
}, [cronExpression, hasExplicitCron]);
|
|
64
|
+
const saveSchedule = async (nextPreset, nextCron) => {
|
|
65
|
+
const cron = nextCron.trim();
|
|
66
|
+
if (!token || (!notebookUid && !scheduleUid) || !cron) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
setIsSaving(true);
|
|
70
|
+
try {
|
|
71
|
+
let schedule;
|
|
72
|
+
if (scheduleUid) {
|
|
73
|
+
const response = await updateSchedule(token, scheduleUid, {
|
|
74
|
+
cronExpression: cron,
|
|
75
|
+
preset: nextPreset,
|
|
76
|
+
}, baseUrl);
|
|
77
|
+
schedule = response.schedule;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
const response = await upsertSchedule(token, {
|
|
81
|
+
notebookUid: notebookUid,
|
|
82
|
+
cronExpression: cron,
|
|
83
|
+
preset: nextPreset,
|
|
84
|
+
enabled: true,
|
|
85
|
+
}, baseUrl);
|
|
86
|
+
schedule = response.schedule;
|
|
87
|
+
}
|
|
88
|
+
onSaved?.(schedule);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
onError?.(error);
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
setIsSaving(false);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const selectPreset = (nextPreset) => {
|
|
98
|
+
const next = SCHEDULE_PRESETS.find(item => item.id === nextPreset);
|
|
99
|
+
if (!next) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
setHasExplicitCron(true);
|
|
103
|
+
setCronExpression(next.cron);
|
|
104
|
+
void saveSchedule(nextPreset, next.cron);
|
|
105
|
+
};
|
|
106
|
+
const applyCustomCron = () => {
|
|
107
|
+
const value = cronExpression.trim();
|
|
108
|
+
const inferredPreset = presetFromCron(value);
|
|
109
|
+
void saveSchedule(inferredPreset, value);
|
|
110
|
+
};
|
|
111
|
+
const performDeleteSchedule = async () => {
|
|
112
|
+
if (!token || !scheduleUid) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
setIsDeleting(true);
|
|
116
|
+
try {
|
|
117
|
+
const response = await disableSchedule(token, scheduleUid, baseUrl);
|
|
118
|
+
setIsDeleteDialogOpen(false);
|
|
119
|
+
setDeleteConfirmUid('');
|
|
120
|
+
onDeleted?.(response.schedule);
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
onError?.(error);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
setIsDeleting(false);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
return (_jsxs(_Fragment, { children: [_jsxs(ActionMenu, { children: [_jsx(ActionMenu.Anchor, { children: _jsx(IconButton, { icon: isSaving ? () => _jsx(Spinner, { size: "small" }) : icon, variant: "invisible", sx: iconColor ? { color: iconColor } : undefined, "aria-label": ariaLabel, title: isSaving
|
|
130
|
+
? `${ariaLabel} (saving…)`
|
|
131
|
+
: isEnabled
|
|
132
|
+
? ariaLabel
|
|
133
|
+
: `${ariaLabel} (disabled)` }) }), _jsxs(ActionMenu.Overlay, { width: "medium", sx: { minWidth: 300 }, children: [_jsx(Box, { sx: {
|
|
134
|
+
px: 3,
|
|
135
|
+
pt: 3,
|
|
136
|
+
pb: 2,
|
|
137
|
+
borderBottom: '1px solid',
|
|
138
|
+
borderColor: 'border.default',
|
|
139
|
+
}, children: _jsx(Text, { as: "p", sx: { fontWeight: 600 }, children: "Schedule" }) }), _jsx(ActionList, { selectionVariant: "single", showDividers: true, children: SCHEDULE_PRESETS.map(option => (_jsxs(ActionList.Item, { selected: preset === option.id, disabled: !isEnabled, onSelect: () => selectPreset(option.id), children: [option.label, _jsx(ActionList.Description, { variant: "block", children: option.cron })] }, option.id))) }), _jsxs(Box, { sx: { p: 3, borderTop: '1px solid', borderColor: 'border.default' }, children: [_jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mb: 2 }, children: "Cron Expression" }), _jsx(TextInput, { value: cronExpression, onChange: event => {
|
|
140
|
+
const value = event.currentTarget.value;
|
|
141
|
+
setHasExplicitCron(value.trim().length > 0);
|
|
142
|
+
setCronExpression(value);
|
|
143
|
+
}, placeholder: "* * * * *", "aria-label": "Cron expression", block: true, disabled: !isEnabled }), _jsxs(Box, { sx: { mt: 2, display: 'flex', gap: 2, flexWrap: 'wrap' }, children: [_jsx(Button, { size: "small", onClick: applyCustomCron, disabled: !isEnabled, children: "Apply Cron" }), scheduleUid ? (_jsx(Button, { size: "small", variant: "danger", leadingVisual: TrashIcon, onClick: () => setIsDeleteDialogOpen(true), disabled: !isEnabled, children: "Delete Schedule" })) : null] }), _jsxs(Text, { as: "p", sx: { mt: 2, fontSize: 0, color: 'fg.muted' }, children: ["Current: ", selectedPresetDescription] })] })] })] }), isDeleteDialogOpen && scheduleUid ? (_jsx(Dialog, { title: "Delete schedule", onClose: () => {
|
|
144
|
+
if (isDeleting) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
setIsDeleteDialogOpen(false);
|
|
148
|
+
setDeleteConfirmUid('');
|
|
149
|
+
}, width: "medium", children: _jsxs(Box, { sx: { display: 'grid', gap: 3 }, children: [_jsxs(Text, { children: ["This action will disable the schedule and remove planned runs. Type", ' ', _jsx(Text, { as: "span", sx: { fontWeight: 700 }, children: scheduleUid }), ' ', "to confirm."] }), _jsxs(FormControl, { children: [_jsx(FormControl.Label, { children: "Schedule UID" }), _jsx(TextInput, { value: deleteConfirmUid, onChange: event => setDeleteConfirmUid(event.currentTarget.value), placeholder: scheduleUid, autoFocus: true })] }), _jsxs(Box, { sx: { display: 'flex', justifyContent: 'flex-end', gap: 2 }, children: [_jsx(Button, { variant: "default", onClick: () => {
|
|
150
|
+
setIsDeleteDialogOpen(false);
|
|
151
|
+
setDeleteConfirmUid('');
|
|
152
|
+
}, disabled: isDeleting, children: "Cancel" }), _jsx(Button, { variant: "danger", onClick: () => void performDeleteSchedule(), disabled: isDeleting || deleteConfirmUid !== scheduleUid, children: "Delete schedule" })] })] }) })) : null] }));
|
|
153
|
+
};
|
|
154
|
+
export default ScheduleMenu;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ScheduleMenu';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type PropsWithChildren } from 'react';
|
|
2
|
+
import { Kernel } from '@jupyterlab/services';
|
|
3
|
+
import { IMultiServiceManager } from '../../runtimes';
|
|
4
|
+
/**
|
|
5
|
+
* Code Sandbox snapshot menu component properties
|
|
6
|
+
*/
|
|
7
|
+
type ICodeSandboxSnapshotMenu = {
|
|
8
|
+
/**
|
|
9
|
+
* Application multi service manager.
|
|
10
|
+
*/
|
|
11
|
+
multiServiceManager?: IMultiServiceManager;
|
|
12
|
+
/**
|
|
13
|
+
* Connection to the current kernel.
|
|
14
|
+
*
|
|
15
|
+
* It is needed only for browser kernels.
|
|
16
|
+
*/
|
|
17
|
+
connection?: Kernel.IKernelConnection;
|
|
18
|
+
/**
|
|
19
|
+
* Pod name
|
|
20
|
+
*
|
|
21
|
+
* It is needed for remote kernels.
|
|
22
|
+
*/
|
|
23
|
+
podName?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Whether the menu is disabled.
|
|
26
|
+
*/
|
|
27
|
+
disabled: boolean;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Code Sandbox Snapshot menu component.
|
|
31
|
+
*/
|
|
32
|
+
export declare function SandboxSnapshotMenu({ children, connection, podName, multiServiceManager, disabled, }: PropsWithChildren<ICodeSandboxSnapshotMenu>): JSX.Element;
|
|
33
|
+
export {};
|