@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
|
@@ -17,9 +17,11 @@ import { create } from 'zustand';
|
|
|
17
17
|
import { persist, createJSONStorage } from 'zustand/middleware';
|
|
18
18
|
import { useCoreStore, useDatalayer } from '@datalayer/core';
|
|
19
19
|
import { useIAMStore } from '@datalayer/core/lib/state';
|
|
20
|
+
import { runtimesStore } from '../state';
|
|
20
21
|
import { agentRuntimeStore, useAgentRuntimeStore, useAgentRuntimeConnection, useAgentRuntimeStatus, useAgentRuntimeError, useAgentRuntimeIsLaunching, } from '../stores/agentRuntimeStore';
|
|
21
22
|
import { parseAgentStreamMessage, } from '../types/stream';
|
|
22
23
|
import { DEFAULT_AGENT_CONFIG } from '../types/config';
|
|
24
|
+
import { disposeSandboxServiceManagers } from '../services/sandboxServiceManagers';
|
|
23
25
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
24
26
|
// Constants
|
|
25
27
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -46,6 +48,60 @@ export const agentQueryKeys = {
|
|
|
46
48
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
47
49
|
// Helpers
|
|
48
50
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
51
|
+
/**
|
|
52
|
+
* Session tombstones for runtime pods deleted from this client.
|
|
53
|
+
*
|
|
54
|
+
* After a DELETE succeeds, the control plane can keep returning the pod
|
|
55
|
+
* (status \"running\") for a few seconds. Without a tombstone, the immediate
|
|
56
|
+
* list refetch re-adds the dead pod to the query cache (and re-seeds the
|
|
57
|
+
* per-pod detail cache), so consumers rebuild Jupyter `ServiceManager`s
|
|
58
|
+
* against the dead ingress — producing endless CORS `/api/kernels` errors.
|
|
59
|
+
*
|
|
60
|
+
* Entries expire after a TTL so a pod that legitimately reappears later
|
|
61
|
+
* (e.g. resumed from a checkpoint under the same pod name) is not hidden
|
|
62
|
+
* forever; resume/create mutations also clear the tombstone eagerly.
|
|
63
|
+
*/
|
|
64
|
+
const DELETED_POD_TOMBSTONE_TTL_MS = 5 * 60 * 1000;
|
|
65
|
+
const deletedRuntimePodTombstones = new Map();
|
|
66
|
+
/** Mark a runtime pod as deleted by this client (tombstone). */
|
|
67
|
+
export function markRuntimePodDeleted(podName) {
|
|
68
|
+
const normalized = String(podName || '').trim();
|
|
69
|
+
if (normalized) {
|
|
70
|
+
deletedRuntimePodTombstones.set(normalized, Date.now());
|
|
71
|
+
// Centralized teardown: dispose every ServiceManager any surface opened
|
|
72
|
+
// against this pod's sandbox so their kernelspecs/sessions/users pollers
|
|
73
|
+
// stop immediately instead of waiting for query-cache propagation.
|
|
74
|
+
disposeSandboxServiceManagers(normalized);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/** Clear a deleted-pod tombstone (pod legitimately exists again). */
|
|
78
|
+
export function clearRuntimePodDeleted(podName) {
|
|
79
|
+
deletedRuntimePodTombstones.delete(String(podName || '').trim());
|
|
80
|
+
}
|
|
81
|
+
/** Statuses that imply a live pod the client would connect to. */
|
|
82
|
+
const LIVE_RUNTIME_STATUSES = new Set([
|
|
83
|
+
'running',
|
|
84
|
+
'resumed',
|
|
85
|
+
'starting',
|
|
86
|
+
'resuming',
|
|
87
|
+
]);
|
|
88
|
+
/**
|
|
89
|
+
* True when a runtime record is a stale control-plane echo of a pod this
|
|
90
|
+
* client already deleted: tombstoned, within TTL, and claiming a live status.
|
|
91
|
+
* Checkpoint-synthesised `paused` records pass through (no live pod to poll).
|
|
92
|
+
*/
|
|
93
|
+
function isStaleDeletedRuntime(runtime) {
|
|
94
|
+
const podName = String(runtime?.pod_name || '').trim();
|
|
95
|
+
const deletedAt = deletedRuntimePodTombstones.get(podName);
|
|
96
|
+
if (deletedAt === undefined) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
if (Date.now() - deletedAt > DELETED_POD_TOMBSTONE_TTL_MS) {
|
|
100
|
+
deletedRuntimePodTombstones.delete(podName);
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
return LIVE_RUNTIME_STATUSES.has(runtime.status);
|
|
104
|
+
}
|
|
49
105
|
const RUNTIME_STATUS_MAP = {
|
|
50
106
|
resume: 'resumed',
|
|
51
107
|
resumed: 'resumed',
|
|
@@ -148,11 +204,11 @@ export function useAgentRuntimes(options = {}) {
|
|
|
148
204
|
import.meta.env.VITE_BASE_URL ||
|
|
149
205
|
'http://localhost:8765');
|
|
150
206
|
}
|
|
151
|
-
return (configuration?.
|
|
207
|
+
return (configuration?.runtimesUrl ||
|
|
152
208
|
import.meta.env.VITE_DATALAYER_AGENT_RUNTIMES_URL ||
|
|
153
209
|
'https://r1.datalayer.run');
|
|
154
210
|
}, [
|
|
155
|
-
configuration?.
|
|
211
|
+
configuration?.runtimesUrl,
|
|
156
212
|
runtimeCreationBaseUrl,
|
|
157
213
|
runtimeCreationTarget,
|
|
158
214
|
]);
|
|
@@ -162,12 +218,12 @@ export function useAgentRuntimes(options = {}) {
|
|
|
162
218
|
const { iamStore, coreStore } = await import('@datalayer/core/lib/state');
|
|
163
219
|
const token = iamStore.getState().token || '';
|
|
164
220
|
const config = coreStore.getState().configuration;
|
|
165
|
-
const
|
|
166
|
-
const
|
|
167
|
-
return { token,
|
|
221
|
+
const datalayerUrl = config?.aiAgentsUrl || '';
|
|
222
|
+
const runtimesUrl = resolvedRuntimeCreationBaseUrl;
|
|
223
|
+
return { token, datalayerUrl, runtimesUrl };
|
|
168
224
|
}
|
|
169
225
|
catch {
|
|
170
|
-
return { token: '',
|
|
226
|
+
return { token: '', datalayerUrl: '', runtimesUrl: '' };
|
|
171
227
|
}
|
|
172
228
|
}, [resolvedRuntimeCreationBaseUrl]);
|
|
173
229
|
// ─── Launch Runtime ─────────────────────────────────────────────────
|
|
@@ -188,13 +244,13 @@ export function useAgentRuntimes(options = {}) {
|
|
|
188
244
|
const conn = await storeLaunchAgent(runtimeOptions
|
|
189
245
|
? {
|
|
190
246
|
...runtimeOptions,
|
|
191
|
-
|
|
247
|
+
runtimesUrl: resolvedRuntimeCreationBaseUrl,
|
|
192
248
|
}
|
|
193
249
|
: {
|
|
194
250
|
environmentName: 'ai-agents-env',
|
|
195
251
|
creditsLimit: 10,
|
|
196
252
|
givenName: safeName,
|
|
197
|
-
|
|
253
|
+
runtimesUrl: resolvedRuntimeCreationBaseUrl,
|
|
198
254
|
});
|
|
199
255
|
setLifecycleStatus('ready');
|
|
200
256
|
return conn;
|
|
@@ -212,7 +268,7 @@ export function useAgentRuntimes(options = {}) {
|
|
|
212
268
|
}
|
|
213
269
|
return storeLaunchAgent({
|
|
214
270
|
...runtimeOptions,
|
|
215
|
-
|
|
271
|
+
runtimesUrl: resolvedRuntimeCreationBaseUrl,
|
|
216
272
|
});
|
|
217
273
|
}
|
|
218
274
|
}, [
|
|
@@ -271,6 +327,29 @@ export function useAgentRuntimes(options = {}) {
|
|
|
271
327
|
setIsCreating(false);
|
|
272
328
|
}
|
|
273
329
|
}, [agentSpecId, agentConfig, agentSpec, hasSpec, runtime, storeCreateAgent]);
|
|
330
|
+
// ─── Teardown ───────────────────────────────────────────────────────
|
|
331
|
+
const teardown = useCallback(async () => {
|
|
332
|
+
const agentId = runtime?.agentId;
|
|
333
|
+
const agentBaseUrl = runtime?.agentBaseUrl;
|
|
334
|
+
if (agentId && agentBaseUrl) {
|
|
335
|
+
try {
|
|
336
|
+
const { token } = await getAuthHeaders();
|
|
337
|
+
await fetch(`${agentBaseUrl}/api/v1/agents/${encodeURIComponent(agentId)}`, {
|
|
338
|
+
method: 'DELETE',
|
|
339
|
+
headers: token ? { Authorization: `Bearer ${token}` } : {},
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
// Best-effort teardown: ignore network / 404 errors.
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
// Reset in-process runtime state so a fresh agent can be launched.
|
|
347
|
+
hasCreatedAgentRef.current = false;
|
|
348
|
+
hasAutoStarted.current = false;
|
|
349
|
+
setLifecycleStatus('idle');
|
|
350
|
+
setLifecycleError(null);
|
|
351
|
+
agentRuntimeStore.getState().reset();
|
|
352
|
+
}, [runtime?.agentId, runtime?.agentBaseUrl, getAuthHeaders]);
|
|
274
353
|
// ─── Auto-create agent when runtime is ready (connect mode) ───────
|
|
275
354
|
useEffect(() => {
|
|
276
355
|
if (!hasSpec &&
|
|
@@ -324,12 +403,12 @@ export function useAgentRuntimes(options = {}) {
|
|
|
324
403
|
let cancelled = false;
|
|
325
404
|
const bootstrap = async () => {
|
|
326
405
|
try {
|
|
327
|
-
const { token,
|
|
406
|
+
const { token, runtimesUrl } = await getAuthHeaders();
|
|
328
407
|
if (!token) {
|
|
329
408
|
return;
|
|
330
409
|
}
|
|
331
|
-
const { listRuntimes } = await import('
|
|
332
|
-
const runtimesResponse = await listRuntimes(token,
|
|
410
|
+
const { listRuntimes } = await import('../api/runtimes/runtimes');
|
|
411
|
+
const runtimesResponse = await listRuntimes(token, runtimesUrl);
|
|
333
412
|
const runtimes = runtimesResponse.runtimes || [];
|
|
334
413
|
const aiAgentRuntimes = runtimes.filter(rt => {
|
|
335
414
|
if (rt.environment_name !== 'ai-agents-env') {
|
|
@@ -338,9 +417,9 @@ export function useAgentRuntimes(options = {}) {
|
|
|
338
417
|
if (!agentSpecId) {
|
|
339
418
|
return true;
|
|
340
419
|
}
|
|
341
|
-
const
|
|
420
|
+
const runtimeAgentspecId = rt
|
|
342
421
|
.agent_spec_id;
|
|
343
|
-
return
|
|
422
|
+
return runtimeAgentspecId === agentSpecId;
|
|
344
423
|
});
|
|
345
424
|
const latestRuntime = aiAgentRuntimes.slice().sort((a, b) => {
|
|
346
425
|
const aTs = Number(a.started_at || 0);
|
|
@@ -441,6 +520,7 @@ export function useAgentRuntimes(options = {}) {
|
|
|
441
520
|
endpoint,
|
|
442
521
|
serviceManager,
|
|
443
522
|
createAgent,
|
|
523
|
+
teardown,
|
|
444
524
|
isCreating,
|
|
445
525
|
// Status
|
|
446
526
|
isReady,
|
|
@@ -487,13 +567,16 @@ export function useAgentRuntimesQuery(scope, queryOptions) {
|
|
|
487
567
|
}
|
|
488
568
|
const query = params.toString();
|
|
489
569
|
const resp = await requestDatalayer({
|
|
490
|
-
url: `${configuration.
|
|
570
|
+
url: `${configuration.runtimesUrl}/api/runtimes/v1/runtimes${query ? `?${query}` : ''}`,
|
|
491
571
|
method: 'GET',
|
|
492
572
|
});
|
|
493
573
|
if (resp.success && resp.runtimes) {
|
|
494
574
|
const agentRuntimes = resp.runtimes
|
|
495
575
|
.filter(rt => rt.environment_name === 'ai-agents-env')
|
|
496
|
-
.map(toAgentRuntimeData)
|
|
576
|
+
.map(toAgentRuntimeData)
|
|
577
|
+
// Drop stale echoes of pods deleted from this client so consumers
|
|
578
|
+
// never reconnect a ServiceManager to a dead ingress (CORS spam).
|
|
579
|
+
.filter(runtime => !isStaleDeletedRuntime(runtime));
|
|
497
580
|
agentRuntimes.forEach((runtime) => {
|
|
498
581
|
queryClient.setQueryData(agentQueryKeys.agentRuntimes.detail(runtime.pod_name), runtime);
|
|
499
582
|
});
|
|
@@ -518,11 +601,17 @@ export function useAgentRuntimeByPodName(podName) {
|
|
|
518
601
|
queryKey: agentQueryKeys.agentRuntimes.detail(podName ?? ''),
|
|
519
602
|
queryFn: async () => {
|
|
520
603
|
const resp = await requestDatalayer({
|
|
521
|
-
url: `${configuration.
|
|
604
|
+
url: `${configuration.runtimesUrl}/api/runtimes/v1/runtimes/${podName}`,
|
|
522
605
|
method: 'GET',
|
|
523
606
|
});
|
|
524
607
|
if (resp.runtime) {
|
|
525
|
-
|
|
608
|
+
const runtime = toAgentRuntimeData(resp.runtime);
|
|
609
|
+
if (isStaleDeletedRuntime(runtime)) {
|
|
610
|
+
// Stale echo of a pod deleted from this client — surface as an
|
|
611
|
+
// error so the poll stops and consumers tear the connection down.
|
|
612
|
+
throw new Error('Agent runtime deleted');
|
|
613
|
+
}
|
|
614
|
+
return runtime;
|
|
526
615
|
}
|
|
527
616
|
throw new Error('Failed to fetch agent runtime');
|
|
528
617
|
},
|
|
@@ -551,7 +640,7 @@ export function useCreateAgentRuntime() {
|
|
|
551
640
|
? [String(data.volumeUid).trim()]
|
|
552
641
|
: [];
|
|
553
642
|
return requestDatalayer({
|
|
554
|
-
url: `${configuration.
|
|
643
|
+
url: `${configuration.runtimesUrl}/api/runtimes/v1/runtimes`,
|
|
555
644
|
method: 'POST',
|
|
556
645
|
body: {
|
|
557
646
|
environment_name: data.environmentName || 'ai-agents-env',
|
|
@@ -563,11 +652,11 @@ export function useCreateAgentRuntime() {
|
|
|
563
652
|
agent_spec_id: data.agentSpecId || undefined,
|
|
564
653
|
agent_spec: data.agentSpec || undefined,
|
|
565
654
|
user_account_handle: data.userAccountHandle || undefined,
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
655
|
+
billing_entity_uid: data.billingEntityUid || undefined,
|
|
656
|
+
billing_entity_type: data.billingEntityType || undefined,
|
|
657
|
+
billing_entity_handle: data.billingEntityHandle || undefined,
|
|
658
|
+
billing_source_organization_uid: data.billingSourceOrganizationUid || undefined,
|
|
659
|
+
billing_source_organization_handle: data.billingSourceOrganizationHandle || undefined,
|
|
571
660
|
mount_home_folder: data.mountHomeFolder ?? false,
|
|
572
661
|
volume_uids: normalizedVolumeUids.length > 0 ? normalizedVolumeUids : undefined,
|
|
573
662
|
volume_uid: normalizedVolumeUids[0] || data.volumeUid || undefined,
|
|
@@ -577,6 +666,8 @@ export function useCreateAgentRuntime() {
|
|
|
577
666
|
onSuccess: resp => {
|
|
578
667
|
if (resp.success && resp.runtime) {
|
|
579
668
|
const mapped = toAgentRuntimeData(resp.runtime);
|
|
669
|
+
// A fresh runtime legitimately exists — drop any stale tombstone.
|
|
670
|
+
clearRuntimePodDeleted(mapped.pod_name);
|
|
580
671
|
queryClient.setQueryData(agentQueryKeys.agentRuntimes.detail(mapped.pod_name), mapped);
|
|
581
672
|
queryClient.invalidateQueries({
|
|
582
673
|
queryKey: agentQueryKeys.agentRuntimes.all(),
|
|
@@ -592,14 +683,70 @@ export function useDeleteAgentRuntime() {
|
|
|
592
683
|
const { configuration } = useCoreStore();
|
|
593
684
|
const { requestDatalayer } = useDatalayer({ notifyOnError: false });
|
|
594
685
|
const queryClient = useQueryClient();
|
|
686
|
+
const getErrorStatus = (error) => {
|
|
687
|
+
if (!error || typeof error !== 'object') {
|
|
688
|
+
return undefined;
|
|
689
|
+
}
|
|
690
|
+
const response = error.response;
|
|
691
|
+
return typeof response?.status === 'number' ? response.status : undefined;
|
|
692
|
+
};
|
|
693
|
+
const getErrorText = (error) => {
|
|
694
|
+
if (!error || typeof error !== 'object') {
|
|
695
|
+
return '';
|
|
696
|
+
}
|
|
697
|
+
const responseData = error.response?.data;
|
|
698
|
+
return String(responseData?.detail ||
|
|
699
|
+
responseData?.message ||
|
|
700
|
+
error.message ||
|
|
701
|
+
'').toLowerCase();
|
|
702
|
+
};
|
|
595
703
|
return useMutation({
|
|
596
704
|
mutationFn: async (podName) => {
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
705
|
+
try {
|
|
706
|
+
return await requestDatalayer({
|
|
707
|
+
url: `${configuration.runtimesUrl}/api/runtimes/v1/runtimes/${podName}`,
|
|
708
|
+
method: 'DELETE',
|
|
709
|
+
});
|
|
710
|
+
}
|
|
711
|
+
catch (error) {
|
|
712
|
+
const status = getErrorStatus(error);
|
|
713
|
+
const message = getErrorText(error);
|
|
714
|
+
const maybeAlreadyDeleted = status === 404 ||
|
|
715
|
+
message.includes('no reservation') ||
|
|
716
|
+
message.includes('unknown reservation') ||
|
|
717
|
+
message.includes('not found');
|
|
718
|
+
if (!maybeAlreadyDeleted) {
|
|
719
|
+
throw error;
|
|
720
|
+
}
|
|
721
|
+
// The backend can return an IAM reservation error even after the pod
|
|
722
|
+
// has already been deleted successfully. Confirm state by checking if
|
|
723
|
+
// the runtime detail endpoint still exists.
|
|
724
|
+
try {
|
|
725
|
+
await requestDatalayer({
|
|
726
|
+
url: `${configuration.runtimesUrl}/api/runtimes/v1/runtimes/${podName}`,
|
|
727
|
+
method: 'GET',
|
|
728
|
+
});
|
|
729
|
+
// Runtime still exists: propagate original DELETE failure.
|
|
730
|
+
throw error;
|
|
731
|
+
}
|
|
732
|
+
catch (checkError) {
|
|
733
|
+
const checkStatus = getErrorStatus(checkError);
|
|
734
|
+
if (checkStatus === 404) {
|
|
735
|
+
return { success: true, recovered: true };
|
|
736
|
+
}
|
|
737
|
+
throw error;
|
|
738
|
+
}
|
|
739
|
+
}
|
|
601
740
|
},
|
|
602
741
|
onSuccess: (_data, podName) => {
|
|
742
|
+
// Tombstone the pod so refetches that still echo it from the control
|
|
743
|
+
// plane (deletion lag) do not re-add it to the caches below.
|
|
744
|
+
markRuntimePodDeleted(podName);
|
|
745
|
+
// Prune the pod from the runtimes store immediately so the remote service
|
|
746
|
+
// managers dispose right away and stop polling the now-dead pod ingress
|
|
747
|
+
// (otherwise `/api/kernels` requests keep firing until the next
|
|
748
|
+
// `refreshRuntimePods()` poll tick, producing CORS errors).
|
|
749
|
+
runtimesStore.getState().removeRuntimePod(podName);
|
|
603
750
|
queryClient.setQueriesData({ queryKey: agentQueryKeys.agentRuntimes.lists() }, (current) => {
|
|
604
751
|
if (!Array.isArray(current)) {
|
|
605
752
|
return current;
|
|
@@ -707,6 +854,16 @@ export function useAgentsRuntimes(scope, queryOptions) {
|
|
|
707
854
|
const createRuntimeMutation = useCreateAgentRuntime();
|
|
708
855
|
const deleteRuntimeMutation = useDeleteAgentRuntime();
|
|
709
856
|
const refreshRuntimes = useRefreshAgentRuntimes();
|
|
857
|
+
const terminateRuntimeByPod = useCallback(async (podName, options) => {
|
|
858
|
+
const normalizedPodName = String(podName || '').trim();
|
|
859
|
+
if (!normalizedPodName) {
|
|
860
|
+
return;
|
|
861
|
+
}
|
|
862
|
+
if (options?.beforeTerminate) {
|
|
863
|
+
await options.beforeTerminate();
|
|
864
|
+
}
|
|
865
|
+
return deleteRuntimeMutation.mutateAsync(normalizedPodName);
|
|
866
|
+
}, [deleteRuntimeMutation]);
|
|
710
867
|
return useMemo(() => ({
|
|
711
868
|
runtimes: runtimesQuery.data ?? EMPTY_RUNTIMES,
|
|
712
869
|
isRuntimesLoading: runtimesQuery.isLoading,
|
|
@@ -714,7 +871,8 @@ export function useAgentsRuntimes(scope, queryOptions) {
|
|
|
714
871
|
runtimesError: runtimesQuery.error,
|
|
715
872
|
refetchRuntimes: () => runtimesQuery.refetch(),
|
|
716
873
|
refreshRuntimes,
|
|
717
|
-
|
|
874
|
+
terminateRuntimeByPod,
|
|
875
|
+
deleteRuntimeByPod: async (podName) => terminateRuntimeByPod(podName),
|
|
718
876
|
createRuntime: async (data) => createRuntimeMutation.mutateAsync(data),
|
|
719
877
|
}), [
|
|
720
878
|
runtimesQuery.data,
|
|
@@ -723,6 +881,7 @@ export function useAgentsRuntimes(scope, queryOptions) {
|
|
|
723
881
|
runtimesQuery.error,
|
|
724
882
|
runtimesQuery.refetch,
|
|
725
883
|
refreshRuntimes,
|
|
884
|
+
terminateRuntimeByPod,
|
|
726
885
|
createRuntimeMutation,
|
|
727
886
|
deleteRuntimeMutation,
|
|
728
887
|
]);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import type { AgentRuntimeData,
|
|
1
|
+
import type { AgentRuntimeData, Agentspec } from '../types';
|
|
2
2
|
/**
|
|
3
3
|
* Centralised Zustand store for agents.
|
|
4
4
|
*
|
|
5
5
|
* Two collections are maintained:
|
|
6
6
|
*
|
|
7
|
-
* 1. **
|
|
7
|
+
* 1. **agentspecs** – the static catalogue of available agent blueprints
|
|
8
8
|
* (from `@datalayer/agent-runtimes/lib/specs`).
|
|
9
9
|
* Populated once at import time; call `refreshSpecs()` to re-read.
|
|
10
10
|
*
|
|
@@ -14,7 +14,7 @@ import type { AgentRuntimeData, AgentSpec } from '../types';
|
|
|
14
14
|
*/
|
|
15
15
|
export type AgentCatalogStoreState = {
|
|
16
16
|
/** Static catalogue of agent blueprints. */
|
|
17
|
-
|
|
17
|
+
agentspecs: Agentspec[];
|
|
18
18
|
/** Live agent runtimes (running / starting). */
|
|
19
19
|
runningAgents: AgentRuntimeData[];
|
|
20
20
|
/** Re-read agent specs from the config. */
|
|
@@ -10,18 +10,18 @@
|
|
|
10
10
|
* @module hooks/useAgentsCatalog
|
|
11
11
|
*/
|
|
12
12
|
import { create } from 'zustand';
|
|
13
|
-
import {
|
|
13
|
+
import { listAgentspecs } from '../specs';
|
|
14
14
|
export const useAgentCatalogStore = create()(set => ({
|
|
15
|
-
|
|
15
|
+
agentspecs: listAgentspecs(),
|
|
16
16
|
runningAgents: [],
|
|
17
|
-
refreshSpecs: () => set({
|
|
17
|
+
refreshSpecs: () => set({ agentspecs: listAgentspecs() }),
|
|
18
18
|
setRunningAgents: agents => set(state => ({
|
|
19
19
|
runningAgents: agents.map(agent => {
|
|
20
20
|
if (agent.agentSpec)
|
|
21
21
|
return agent;
|
|
22
22
|
if (!agent.agent_spec_id)
|
|
23
23
|
return agent;
|
|
24
|
-
const spec = state.
|
|
24
|
+
const spec = state.agentspecs.find(s => s.id === agent.agent_spec_id);
|
|
25
25
|
return spec ? { ...agent, agentSpec: spec } : agent;
|
|
26
26
|
}),
|
|
27
27
|
})),
|
|
@@ -23,7 +23,7 @@ export const useAgentsService = (baseUrlOverride = 'api/ai-agents/v1') => {
|
|
|
23
23
|
const { requestDatalayer } = useDatalayer({ notifyOnError: false });
|
|
24
24
|
const createAgent = (documentId, documentType, ingress, token, kernelId, { signal, baseUrl = baseUrlOverride } = {}) => {
|
|
25
25
|
return requestDatalayer({
|
|
26
|
-
url: URLExt.join(configuration.
|
|
26
|
+
url: URLExt.join(configuration.aiAgentsUrl, baseUrl, 'agents'),
|
|
27
27
|
method: 'POST',
|
|
28
28
|
body: {
|
|
29
29
|
document_id: documentId,
|
|
@@ -39,28 +39,28 @@ export const useAgentsService = (baseUrlOverride = 'api/ai-agents/v1') => {
|
|
|
39
39
|
};
|
|
40
40
|
const getAgents = ({ signal, baseUrl = baseUrlOverride, } = {}) => {
|
|
41
41
|
return requestDatalayer({
|
|
42
|
-
url: URLExt.join(configuration.
|
|
42
|
+
url: URLExt.join(configuration.aiAgentsUrl, baseUrl, 'agents'),
|
|
43
43
|
method: 'GET',
|
|
44
44
|
signal,
|
|
45
45
|
});
|
|
46
46
|
};
|
|
47
47
|
const deleteAgent = (documentId, { signal, baseUrl = baseUrlOverride } = {}) => {
|
|
48
48
|
return requestDatalayer({
|
|
49
|
-
url: URLExt.join(configuration.
|
|
49
|
+
url: URLExt.join(configuration.aiAgentsUrl, baseUrl, 'agents', documentId),
|
|
50
50
|
method: 'DELETE',
|
|
51
51
|
signal,
|
|
52
52
|
});
|
|
53
53
|
};
|
|
54
54
|
const getAgent = (documentId, { signal, baseUrl = baseUrlOverride } = {}) => {
|
|
55
55
|
return requestDatalayer({
|
|
56
|
-
url: URLExt.join(configuration.
|
|
56
|
+
url: URLExt.join(configuration.aiAgentsUrl, baseUrl, 'agents', documentId),
|
|
57
57
|
method: 'GET',
|
|
58
58
|
signal,
|
|
59
59
|
});
|
|
60
60
|
};
|
|
61
61
|
const patchAgent = (documentId, ingress, token, kernelId, { signal, baseUrl = baseUrlOverride } = {}) => {
|
|
62
62
|
return requestDatalayer({
|
|
63
|
-
url: URLExt.join(configuration.
|
|
63
|
+
url: URLExt.join(configuration.aiAgentsUrl, baseUrl, 'agents', documentId),
|
|
64
64
|
method: 'PATCH',
|
|
65
65
|
body: {
|
|
66
66
|
runtime: ingress && token && kernelId
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
import { useState } from 'react';
|
|
6
|
+
import { useCellStore } from '../state/substates';
|
|
7
|
+
import { takeHTMLNodeScreencapture } from '@datalayer/core/lib/utils/Screencapture';
|
|
8
|
+
const useCellOutputshot = () => {
|
|
9
|
+
const [outputshot, setOutputshot] = useState('');
|
|
10
|
+
const [error, setError] = useState();
|
|
11
|
+
const { update } = useCellStore();
|
|
12
|
+
const takeOutputshot = (node) => {
|
|
13
|
+
takeHTMLNodeScreencapture(node)
|
|
14
|
+
.then(outputshotData => {
|
|
15
|
+
setOutputshot(outputshotData);
|
|
16
|
+
update({
|
|
17
|
+
outputshotData,
|
|
18
|
+
});
|
|
19
|
+
return outputshotData;
|
|
20
|
+
})
|
|
21
|
+
.catch(reason => setError(reason));
|
|
22
|
+
};
|
|
23
|
+
return [outputshot, takeOutputshot, { error }];
|
|
24
|
+
};
|
|
25
|
+
export default useCellOutputshot;
|
|
@@ -48,7 +48,7 @@ export type TerminateAgentParams = {
|
|
|
48
48
|
* Calls ``GET /api/runtimes/v1/runtime-checkpoints`` and returns
|
|
49
49
|
* the list of checkpoint records in visible states.
|
|
50
50
|
*/
|
|
51
|
-
export declare function useCheckpointsQuery(): import("@tanstack/react-query").UseQueryResult<CheckpointData[]
|
|
51
|
+
export declare function useCheckpointsQuery(): import("@tanstack/react-query").UseQueryResult<NoInfer<CheckpointData[]>, Error>;
|
|
52
52
|
/**
|
|
53
53
|
* Hook to refresh the checkpoints list.
|
|
54
54
|
*/
|
|
@@ -73,14 +73,14 @@ export declare function useResumePausedAgentRuntime(): import("@tanstack/react-q
|
|
|
73
73
|
* until the checkpoint reaches ``paused`` or ``failed``.
|
|
74
74
|
* On success, both runtimes and checkpoints queries are invalidated.
|
|
75
75
|
*/
|
|
76
|
-
export declare function usePauseAgent(): import("@tanstack/react-query").UseMutationResult<import("
|
|
76
|
+
export declare function usePauseAgent(): import("@tanstack/react-query").UseMutationResult<import("../api/runtimes/runtimes").PauseResumeResponse, Error, PauseAgentParams, unknown>;
|
|
77
77
|
/**
|
|
78
78
|
* Hook to resume a paused agent runtime from a checkpoint.
|
|
79
79
|
*
|
|
80
80
|
* Calls ``POST .../resume`` then invalidates both runtimes and
|
|
81
81
|
* checkpoints queries so the UI reflects the new state.
|
|
82
82
|
*/
|
|
83
|
-
export declare function useResumeAgent(): import("@tanstack/react-query").UseMutationResult<import("
|
|
83
|
+
export declare function useResumeAgent(): import("@tanstack/react-query").UseMutationResult<import("../api/runtimes/runtimes").PauseResumeResponse, Error, ResumeAgentParams, unknown>;
|
|
84
84
|
/**
|
|
85
85
|
* Hook to create a named checkpoint (pause → wait → stay paused).
|
|
86
86
|
*
|
|
@@ -88,7 +88,7 @@ export declare function useResumeAgent(): import("@tanstack/react-query").UseMut
|
|
|
88
88
|
* this hook creates a named checkpoint record for later restore.
|
|
89
89
|
*/
|
|
90
90
|
export declare function useCheckpointAgent(): import("@tanstack/react-query").UseMutationResult<{
|
|
91
|
-
checkpoint: import("
|
|
91
|
+
checkpoint: import("../api/runtimes/checkpoints").RuntimeCheckpointData;
|
|
92
92
|
success: boolean;
|
|
93
93
|
message: string;
|
|
94
94
|
checkpoint_id: string | null;
|
|
@@ -163,12 +163,12 @@ export declare function useAgentLifecycle(options: AgentLifecycleOptions): Agent
|
|
|
163
163
|
* for pause, resume, and checkpoint lifecycle.
|
|
164
164
|
*/
|
|
165
165
|
export declare function useCheckpoints(): {
|
|
166
|
-
checkpointsQuery: import("@tanstack/react-query").UseQueryResult<CheckpointData[]
|
|
166
|
+
checkpointsQuery: import("@tanstack/react-query").UseQueryResult<NoInfer<CheckpointData[]>, Error>;
|
|
167
167
|
refresh: () => void;
|
|
168
|
-
pauseAgent: import("@tanstack/react-query").UseMutationResult<import("
|
|
169
|
-
resumeAgent: import("@tanstack/react-query").UseMutationResult<import("
|
|
168
|
+
pauseAgent: import("@tanstack/react-query").UseMutationResult<import("../api/runtimes/runtimes").PauseResumeResponse, Error, PauseAgentParams, unknown>;
|
|
169
|
+
resumeAgent: import("@tanstack/react-query").UseMutationResult<import("../api/runtimes/runtimes").PauseResumeResponse, Error, ResumeAgentParams, unknown>;
|
|
170
170
|
checkpointAgent: import("@tanstack/react-query").UseMutationResult<{
|
|
171
|
-
checkpoint: import("
|
|
171
|
+
checkpoint: import("../api/runtimes/checkpoints").RuntimeCheckpointData;
|
|
172
172
|
success: boolean;
|
|
173
173
|
message: string;
|
|
174
174
|
checkpoint_id: string | null;
|