@datalayer/agent-runtimes 1.0.28 → 1.3.10
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/lib/AgentDocument.js +5 -22
- package/lib/AgentNode.d.ts +1 -1
- package/lib/AgentNode.js +193 -23
- package/lib/AgentNotebook.js +1 -1
- package/lib/App.d.ts +1 -1
- package/lib/AppExamples2.d.ts +1 -1
- package/lib/agent-node/AgentNodeGallery.d.ts +14 -1
- package/lib/agent-node/AgentNodeGallery.js +19 -15
- package/lib/agent-node/themeStore.js +7 -6
- package/lib/agents/AgentDetails.d.ts +8 -2
- package/lib/agents/AgentDetails.js +41 -11
- package/lib/agents/AgentRuntimeChat.d.ts +3 -3
- package/lib/agents/AgentRuntimeChat.js +15 -15
- package/lib/api/agents.d.ts +10 -10
- package/lib/api/agents.js +15 -15
- package/lib/api/checkpoints.d.ts +40 -0
- package/lib/api/checkpoints.js +75 -0
- package/lib/api/index.d.ts +1 -0
- package/lib/api/index.js +18 -5
- package/lib/api/notifications.d.ts +21 -6
- package/lib/api/notifications.js +32 -14
- package/lib/api/runtimes/environments.d.ts +385 -4
- package/lib/api/runtimes/environments.js +610 -9
- package/lib/api/runtimes/runtimes.d.ts +19 -19
- package/lib/api/runtimes/runtimes.js +47 -46
- package/lib/api/spacer/notebooks.js +1 -1
- package/lib/chat/Chat.d.ts +16 -4
- package/lib/chat/Chat.js +18 -5
- package/lib/chat/ChatFloating.d.ts +13 -2
- package/lib/chat/ChatFloating.js +192 -117
- package/lib/chat/ChatInline.d.ts +15 -0
- package/lib/chat/ChatInline.js +0 -18
- package/lib/chat/ChatPopupStandalone.d.ts +1 -1
- package/lib/chat/ChatSidebar.d.ts +14 -2
- package/lib/chat/ChatSidebar.js +1 -1
- package/lib/chat/ChatStandalone.d.ts +1 -1
- package/lib/chat/EphemeralSurfaceControl.d.ts +30 -0
- package/lib/chat/EphemeralSurfaceControl.js +55 -0
- package/lib/chat/base/ChatAvailability.d.ts +34 -0
- package/lib/chat/base/ChatAvailability.js +18 -0
- package/lib/chat/base/ChatBase.d.ts +2 -1
- package/lib/chat/base/ChatBase.js +657 -28
- package/lib/chat/display/EmptyState.d.ts +15 -1
- package/lib/chat/display/EmptyState.js +78 -12
- package/lib/chat/display/FloatingBrandButton.d.ts +1 -1
- package/lib/chat/display/PoweredByTag.d.ts +1 -1
- package/lib/chat/display/groupSuggestions.d.ts +21 -0
- package/lib/chat/display/groupSuggestions.js +18 -0
- package/lib/chat/document/EphemeralDocument.d.ts +70 -6
- package/lib/chat/document/EphemeralDocument.js +154 -52
- package/lib/chat/header/ChatHeader.d.ts +1 -1
- package/lib/chat/header/ChatHeaderBase.d.ts +10 -1
- package/lib/chat/header/ChatHeaderBase.js +67 -96
- package/lib/chat/index.d.ts +4 -1
- package/lib/chat/index.js +8 -1
- package/lib/chat/indicators/McpStatusIndicator.d.ts +1 -1
- package/lib/chat/indicators/SandboxStatusIndicator.d.ts +1 -1
- package/lib/chat/indicators/SandboxStatusIndicator.js +1 -1
- package/lib/chat/indicators/SkillsStatusIndicator.d.ts +1 -1
- package/lib/chat/messages/ChatMessageList.d.ts +22 -1
- package/lib/chat/messages/ChatMessageList.js +370 -166
- package/lib/chat/messages/ChatMessages.d.ts +1 -1
- package/lib/chat/messages/NotebookToolSurfaces.d.ts +68 -0
- package/lib/chat/messages/NotebookToolSurfaces.js +302 -0
- package/lib/chat/messages/TurnFooter.d.ts +42 -0
- package/lib/chat/messages/TurnFooter.js +75 -0
- package/lib/chat/messages/assistantMarkdown.d.ts +22 -0
- package/lib/chat/messages/assistantMarkdown.js +56 -0
- package/lib/chat/notebook/EphemeralNotebook.d.ts +67 -6
- package/lib/chat/notebook/EphemeralNotebook.js +194 -61
- package/lib/chat/parts/DynamicToolPart.d.ts +1 -1
- package/lib/chat/parts/MessagePart.d.ts +1 -1
- package/lib/chat/parts/ReasoningPart.d.ts +8 -1
- package/lib/chat/parts/TextPart.d.ts +1 -1
- package/lib/chat/parts/ToolPart.d.ts +8 -1
- package/lib/chat/prompt/FloatingCard.d.ts +26 -0
- package/lib/chat/prompt/FloatingCard.js +80 -0
- package/lib/chat/prompt/InputPrompt.d.ts +206 -53
- package/lib/chat/prompt/InputPrompt.js +161 -80
- package/lib/chat/prompt/InputPromptBase.d.ts +112 -0
- package/lib/chat/prompt/InputPromptBase.js +225 -0
- package/lib/chat/prompt/InputPromptLexical.d.ts +18 -1
- package/lib/chat/prompt/InputPromptLexical.js +227 -30
- package/lib/chat/prompt/InputPromptText.d.ts +10 -2
- package/lib/chat/prompt/InputPromptText.js +35 -3
- package/lib/chat/prompt/footer/BelowPromptFooter.d.ts +25 -0
- package/lib/chat/prompt/footer/BelowPromptFooter.js +12 -0
- package/lib/chat/prompt/footer/InPromptFooter.d.ts +35 -0
- package/lib/chat/prompt/footer/InPromptFooter.js +16 -0
- package/lib/chat/prompt/footer/index.d.ts +7 -0
- package/lib/chat/prompt/footer/index.js +11 -0
- package/lib/chat/prompt/header/BelowPromptHeader.d.ts +23 -0
- package/lib/chat/prompt/header/BelowPromptHeader.js +12 -0
- package/lib/chat/prompt/header/InPromptHeader.d.ts +31 -0
- package/lib/chat/prompt/header/InPromptHeader.js +14 -0
- package/lib/chat/prompt/header/index.d.ts +7 -0
- package/lib/chat/prompt/header/index.js +11 -0
- package/lib/chat/prompt/index.d.ts +8 -4
- package/lib/chat/prompt/index.js +15 -3
- package/lib/chat/prompt/menus/AgentsMenu.d.ts +14 -0
- package/lib/chat/prompt/menus/AgentsMenu.js +42 -0
- package/lib/chat/prompt/menus/InlineAgentsMenu.d.ts +22 -0
- package/lib/chat/prompt/menus/InlineAgentsMenu.js +24 -0
- package/lib/chat/prompt/menus/ModelSelector.d.ts +7 -0
- package/lib/chat/prompt/menus/ModelSelector.js +27 -0
- package/lib/chat/prompt/menus/SkillsMenu.d.ts +10 -0
- package/lib/chat/prompt/menus/SkillsMenu.js +75 -0
- package/lib/chat/prompt/menus/SuggestionsMenu.d.ts +13 -0
- package/lib/chat/prompt/menus/SuggestionsMenu.js +31 -0
- package/lib/chat/prompt/menus/ToolsMenu.d.ts +13 -0
- package/lib/chat/prompt/menus/ToolsMenu.js +103 -0
- package/lib/chat/prompt/menus/index.d.ts +15 -0
- package/lib/chat/prompt/menus/index.js +19 -0
- package/lib/chat/prompt/plugins/AgentMentionPlugin.d.ts +54 -0
- package/lib/chat/prompt/plugins/AgentMentionPlugin.js +370 -0
- package/lib/chat/prompt/plugins/CommandPlugin.d.ts +52 -0
- package/lib/chat/prompt/plugins/CommandPlugin.js +359 -0
- package/lib/chat/prompt/plugins/MentionChip.d.ts +15 -0
- package/lib/chat/prompt/plugins/MentionChip.js +24 -0
- package/lib/chat/prompt/plugins/MentionNode.d.ts +66 -0
- package/lib/chat/prompt/plugins/MentionNode.js +77 -0
- package/lib/chat/prompt/promptHistory.d.ts +52 -0
- package/lib/chat/prompt/promptHistory.js +123 -0
- package/lib/chat/prompt/stack.d.ts +81 -0
- package/lib/chat/prompt/stack.js +41 -0
- package/lib/chat/prompt/useTypingPlaceholder.d.ts +52 -0
- package/lib/chat/prompt/useTypingPlaceholder.js +180 -0
- package/lib/chat/tools/A2AAgentDialog.d.ts +60 -0
- package/lib/chat/tools/A2AAgentDialog.js +265 -0
- package/lib/chat/tools/ToolApprovalBanner.d.ts +1 -1
- package/lib/chat/tools/ToolApprovalDialog.d.ts +1 -1
- package/lib/chat/tools/ToolCallDisplay.d.ts +8 -1
- package/lib/chat/tools/index.d.ts +1 -0
- package/lib/chat/tools/index.js +1 -0
- package/lib/chat/usage/ContextPie.d.ts +17 -0
- package/lib/chat/usage/{TokenUsageBar.js → ContextPie.js} +20 -14
- package/lib/chat/useViewportDrag.d.ts +11 -0
- package/lib/chat/useViewportDrag.js +61 -0
- package/lib/chat/viewModes.d.ts +51 -0
- package/lib/chat/viewModes.js +57 -0
- package/lib/client/AgentRuntimesClient.d.ts +10 -9
- package/lib/client/AgentRuntimesClient.js +1 -1
- package/lib/client/AgentRuntimesClientContext.d.ts +1 -0
- package/lib/client/AgentsMixin.d.ts +12 -12
- package/lib/client/AgentsMixin.js +31 -31
- package/lib/client/IAgentRuntimesClient.d.ts +10 -10
- package/lib/client/SdkAgentRuntimesClient.d.ts +10 -10
- package/lib/client/SdkAgentRuntimesClient.js +10 -10
- package/lib/client/mixins/RuntimesMixin.d.ts +37 -10
- package/lib/client/mixins/RuntimesMixin.js +54 -21
- package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +1 -1
- package/lib/components/agents/AgentSummary.d.ts +13 -0
- package/lib/components/agents/AgentSummary.js +21 -4
- package/lib/components/cards/NotificationEventCard.d.ts +1 -1
- package/lib/components/cards/OutputCard.d.ts +1 -1
- package/lib/components/cards/ToolApprovalCard.d.ts +2 -2
- package/lib/components/cards/ToolApprovalCard.js +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariables.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariables.js +0 -4
- package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.js +0 -4
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.d.ts +76 -0
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +81 -0
- package/lib/components/code-sandboxes/CodeSandboxLauncher.d.ts +12 -0
- package/lib/components/code-sandboxes/CodeSandboxLauncher.js +132 -25
- package/lib/components/code-sandboxes/CodeSandboxNames.js +75 -29
- package/lib/components/code-sandboxes/CodeSandboxPicker.d.ts +14 -1
- package/lib/components/code-sandboxes/CodeSandboxPicker.js +226 -45
- package/lib/components/code-sandboxes/CodeSandboxPickerCell.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxPickerCell.js +0 -4
- package/lib/components/code-sandboxes/CodeSandboxReservationControl.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxReservationControl.js +5 -7
- package/lib/components/code-sandboxes/CodeSandboxTransfer.d.ts +5 -0
- package/lib/components/code-sandboxes/CodeSandboxUtils.d.ts +16 -1
- package/lib/components/code-sandboxes/CodeSandboxUtils.js +69 -12
- package/lib/components/code-sandboxes/NewCodeSandboxControls.d.ts +21 -15
- package/lib/components/code-sandboxes/NewCodeSandboxControls.js +28 -51
- package/lib/components/code-sandboxes/codeSandboxAllowance.d.ts +33 -0
- package/lib/components/code-sandboxes/codeSandboxAllowance.js +37 -0
- package/lib/components/code-sandboxes/codeSandboxEnvironments.d.ts +86 -0
- package/lib/components/code-sandboxes/codeSandboxEnvironments.js +147 -0
- package/lib/components/code-sandboxes/codeSandboxProviders.d.ts +29 -0
- package/lib/components/code-sandboxes/codeSandboxProviders.js +90 -0
- package/lib/components/code-sandboxes/index.d.ts +3 -0
- package/lib/components/code-sandboxes/index.js +3 -0
- package/lib/components/context/SpaceSelect.d.ts +1 -1
- package/lib/components/flashes/FlashDisclaimer.d.ts +1 -1
- package/lib/components/icons/ArtifactIcon.d.ts +1 -0
- package/lib/components/nbgrader/NbGradesDetails.d.ts +1 -1
- package/lib/components/progress/CreditsIndicator.d.ts +1 -0
- package/lib/components/progress/CreditsIndicator.js +0 -4
- package/lib/components/scheduler/ScheduleMenu.d.ts +1 -1
- package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +3 -2
- package/lib/components/snapshots/SandboxSnapshotMenu.js +11 -15
- package/lib/components/snippets/SnippetDialog.d.ts +1 -0
- package/lib/components/snippets/SnippetDialog.js +0 -4
- package/lib/components/specs/SpecPayloadPreview.d.ts +34 -0
- package/lib/components/specs/SpecPayloadPreview.js +102 -0
- package/lib/components/tokens/SpaceVariantToken.d.ts +1 -1
- package/lib/context/ContextDistribution.d.ts +1 -1
- package/lib/context/ContextInspector.d.ts +2 -1
- package/lib/context/ContextPanel.d.ts +1 -1
- package/lib/context/ContextUsage.d.ts +1 -1
- package/lib/context/CostTracker.d.ts +1 -1
- package/lib/context/CostUsageChart.d.ts +1 -1
- package/lib/context/CostUsageChart.js +4 -4
- package/lib/context/MessageHistory.d.ts +3 -2
- package/lib/context/TokenUsageChart.d.ts +1 -1
- package/lib/context/TokenUsageChart.js +4 -4
- package/lib/examples/A2UiAgentExample.js +15 -6
- package/lib/examples/A2UiComponentsGalleryExample.d.ts +10 -0
- package/lib/examples/A2UiComponentsGalleryExample.js +24 -855
- package/lib/examples/A2UiContactCardExample.d.ts +10 -0
- package/lib/examples/A2UiContactCardExample.js +23 -170
- package/lib/examples/A2UiJupyterOutputExample.d.ts +3 -0
- package/lib/examples/A2UiJupyterOutputExample.js +792 -0
- package/lib/examples/A2UiRestaurantExample.d.ts +10 -0
- package/lib/examples/A2UiRestaurantExample.js +24 -179
- package/lib/examples/A2UiViewerExample.d.ts +10 -0
- package/lib/examples/A2UiViewerExample.js +24 -378
- package/lib/examples/AgUiAgenticExample.js +2 -4
- package/lib/examples/AgUiBackendToolRenderingExample.js +3 -5
- package/lib/examples/AgUiHaikuGenUiExample.js +2 -4
- package/lib/examples/AgUiHumanInTheLoopExample.js +2 -4
- package/lib/examples/AgUiSharedStateExample.js +2 -4
- package/lib/examples/AgUiToolsBasedGenUiExample.js +2 -4
- package/lib/examples/AgentA2AExample.d.ts +17 -0
- package/lib/examples/AgentA2AExample.js +56 -0
- package/lib/examples/AgentCheckpointsExample.d.ts +9 -10
- package/lib/examples/AgentCheckpointsExample.js +72 -54
- package/lib/examples/AgentCodeSandboxExample.d.ts +7 -7
- package/lib/examples/AgentCodeSandboxExample.js +93 -303
- package/lib/examples/AgentCodeSandboxesExample.d.ts +10 -0
- package/lib/examples/AgentCodeSandboxesExample.js +56 -162
- package/lib/examples/AgentCodemodeExample.d.ts +7 -2
- package/lib/examples/AgentCodemodeExample.js +60 -125
- package/lib/examples/AgentCompactionExample.js +19 -135
- package/lib/examples/AgentEvalsExample.js +34 -66
- package/lib/examples/AgentGuardrailsExample.js +64 -112
- package/lib/examples/AgentHooksExample.d.ts +11 -0
- package/lib/examples/AgentHooksExample.js +30 -67
- package/lib/examples/AgentInferenceProviderExample.js +8 -32
- package/lib/examples/AgentLoopExample.d.ts +4 -2
- package/lib/examples/AgentLoopExample.js +45 -93
- package/lib/examples/AgentMCPExample.js +30 -79
- package/lib/examples/AgentMemoryExample.js +21 -64
- package/lib/examples/AgentMonitoringExample.js +33 -94
- package/lib/examples/AgentNotificationsExample.js +56 -95
- package/lib/examples/AgentOtelExample.js +35 -88
- package/lib/examples/AgentOutputsExample.d.ts +2 -1
- package/lib/examples/AgentOutputsExample.js +16 -137
- package/lib/examples/AgentParametersExample.js +7 -17
- package/lib/examples/AgentSkillsExample.js +40 -154
- package/lib/examples/AgentSubagentsExample.d.ts +7 -6
- package/lib/examples/AgentSubagentsExample.js +80 -191
- package/lib/examples/AgentToolApprovalsExample.js +35 -91
- package/lib/examples/AgentTriggersExample.js +43 -59
- package/lib/examples/AgentspecsExample.js +7 -7
- package/lib/examples/CellExample.d.ts +1 -1
- package/lib/examples/ChatExample.d.ts +12 -5
- package/lib/examples/ChatExample.js +38 -13
- package/lib/examples/CopilotKitLexicalExample.d.ts +1 -0
- package/lib/examples/CopilotKitLexicalExample.js +4 -41
- package/lib/examples/CopilotKitNotebookExample.d.ts +10 -0
- package/lib/examples/CopilotKitNotebookExample.js +2 -14
- package/lib/examples/DecksAgent.d.ts +21 -0
- package/lib/examples/DecksAgent.js +23 -0
- package/lib/examples/DocumentPageAgent.d.ts +19 -0
- package/lib/examples/DocumentPageAgent.js +15 -0
- package/lib/examples/Lexical2Example.d.ts +2 -2
- package/lib/examples/Lexical2Example.js +17 -38
- package/lib/examples/LexicalAgentExample.d.ts +2 -1
- package/lib/examples/LexicalAgentExample.js +29 -102
- package/lib/examples/LexicalAgentSidebarExample.d.ts +16 -5
- package/lib/examples/LexicalAgentSidebarExample.js +99 -131
- package/lib/examples/LoopShellExample.d.ts +38 -0
- package/lib/examples/LoopShellExample.js +68 -0
- package/lib/examples/LoopWorkspaceEmbed.d.ts +50 -0
- package/lib/examples/LoopWorkspaceEmbed.js +73 -0
- package/lib/examples/LoopWorkspaceExample.d.ts +150 -0
- package/lib/examples/LoopWorkspaceExample.js +151 -0
- package/lib/examples/NotebookAgentExample.d.ts +13 -0
- package/lib/examples/NotebookAgentExample.js +36 -86
- package/lib/examples/NotebookAgentSidebarExample.d.ts +10 -4
- package/lib/examples/NotebookAgentSidebarExample.js +39 -83
- package/lib/examples/NotebookCollaborationExample.d.ts +1 -1
- package/lib/examples/NotebookCollaborationExample.js +108 -20
- package/lib/examples/NotebookExample.d.ts +1 -1
- package/lib/examples/NotebookExample.js +20 -10
- package/lib/examples/NotebookPageAgent.d.ts +23 -0
- package/lib/examples/NotebookPageAgent.js +17 -0
- package/lib/examples/components/ExampleWrapper.d.ts +5 -0
- package/lib/examples/components/ExampleWrapper.js +36 -28
- package/lib/examples/components/LexicalEditor.d.ts +1 -1
- package/lib/examples/components/LexicalEditor.js +4 -24
- package/lib/examples/components/haiku/HaikuDisplay.d.ts +1 -1
- package/lib/examples/components/haiku/InlineHaikuCard.d.ts +1 -1
- package/lib/examples/components/weather/InlineWeatherCard.d.ts +1 -1
- package/lib/examples/example-selector.js +26 -6
- package/lib/examples/hooks/useCreateAgentOnce.d.ts +41 -0
- package/lib/examples/hooks/useCreateAgentOnce.js +51 -0
- package/lib/examples/hooks/useExampleAgentProtocol.d.ts +35 -0
- package/lib/examples/hooks/useExampleAgentProtocol.js +63 -0
- package/lib/examples/hooks/useExampleAgentRuntime.d.ts +16 -16
- package/lib/examples/hooks/useExampleAgentRuntime.js +26 -25
- package/lib/examples/hooks/useExampleAgentRuntimes.js +45 -61
- package/lib/examples/hooks/useExampleJupyterAgent.d.ts +91 -0
- package/lib/examples/hooks/useExampleJupyterAgent.js +151 -0
- package/lib/examples/index.d.ts +4 -0
- package/lib/examples/index.js +6 -0
- package/lib/examples/lexical/editorConfig.d.ts +2 -75
- package/lib/examples/lexical/editorConfig.js +26 -48
- package/lib/examples/lexical/lexical-theme.css +65 -47
- package/lib/examples/main.js +450 -322
- package/lib/examples/scenes/A2UiComponentsGalleryScene.d.ts +3 -0
- package/lib/examples/scenes/A2UiComponentsGalleryScene.js +872 -0
- package/lib/examples/scenes/A2UiContactCardScene.d.ts +3 -0
- package/lib/examples/scenes/A2UiContactCardScene.js +188 -0
- package/lib/examples/scenes/A2UiRestaurantScene.d.ts +3 -0
- package/lib/examples/scenes/A2UiRestaurantScene.js +196 -0
- package/lib/examples/scenes/A2UiViewerScene.d.ts +3 -0
- package/lib/examples/scenes/A2UiViewerScene.js +395 -0
- package/lib/examples/utils/agentSummaryStore.d.ts +7 -1
- package/lib/examples/utils/agents/earthquake-detector.ipynb.json +1 -1
- package/lib/examples/utils/agents/earthquake-detector.lexical.json +1 -1
- package/lib/examples/utils/agents/sales-forecaster.ipynb.json +1 -1
- package/lib/examples/utils/agents/sales-forecaster.lexical.json +1 -1
- package/lib/examples/utils/agents/social-post-generator.ipynb.json +1 -1
- package/lib/examples/utils/agents/social-post-generator.lexical.json +1 -1
- package/lib/examples/utils/exampleSurfaces.d.ts +31 -0
- package/lib/examples/utils/exampleSurfaces.js +38 -0
- package/lib/examples/utils/jupyterSandboxUrl.d.ts +27 -0
- package/lib/examples/utils/jupyterSandboxUrl.js +55 -0
- package/lib/examples/utils/localUrl.d.ts +2 -0
- package/lib/examples/utils/localUrl.js +49 -0
- package/lib/examples/utils/notebookToolbarItems.d.ts +46 -0
- package/lib/examples/utils/notebookToolbarItems.js +129 -0
- package/lib/examples/utils/runtimeTargetStore.d.ts +40 -1
- package/lib/examples/utils/runtimeTargetStore.js +82 -1
- package/lib/examples/utils/themedProvider.d.ts +7 -0
- package/lib/examples/utils/themedProvider.js +57 -4
- package/lib/examples/utils/useExampleAgentRuntimesUrl.js +30 -5
- package/lib/examples/utils/waitForAgent.d.ts +23 -0
- package/lib/examples/utils/waitForAgent.js +24 -0
- package/lib/examples2/CellExample.d.ts +1 -1
- package/lib/examples2/DatalayerNotebookExample.d.ts +1 -1
- package/lib/examples2/NotebookExample.d.ts +1 -1
- package/lib/examples2/NotebookMutationsKernel.d.ts +1 -1
- package/lib/examples2/NotebookMutationsServiceManager.d.ts +1 -1
- package/lib/examples2/main.js +24 -4
- package/lib/extensions/A2UIExtension.d.ts +1 -1
- package/lib/hooks/index.d.ts +8 -5
- package/lib/hooks/index.js +20 -5
- package/lib/hooks/useAgentRuntimes.d.ts +49 -22
- package/lib/hooks/useAgentRuntimes.js +214 -90
- package/lib/hooks/useAgentsCatalog.js +32 -4
- package/lib/hooks/useBrowserAgent.d.ts +26 -0
- package/lib/hooks/useBrowserAgent.js +75 -0
- package/lib/hooks/useBrowserInference.d.ts +27 -0
- package/lib/hooks/useBrowserInference.js +67 -0
- package/lib/hooks/useCheckpoints.d.ts +8 -17
- package/lib/hooks/useCheckpoints.js +25 -59
- package/lib/hooks/useConfig.d.ts +1 -1
- package/lib/hooks/useConfig.js +5 -1
- package/lib/hooks/useContextSnapshot.d.ts +18 -7
- package/lib/hooks/useContextSnapshot.js +14 -10
- package/lib/hooks/useNotifications.d.ts +11 -11
- package/lib/hooks/useNotifications.js +1 -1
- package/lib/hooks/useProjects.d.ts +7 -19
- package/lib/hooks/useProjects.js +5 -5
- package/lib/hooks/useSkills.d.ts +0 -1
- package/lib/hooks/useSkills.js +6 -2
- package/lib/hooks/useToolApprovals.d.ts +8 -8
- package/lib/hooks/useToolApprovals.js +3 -3
- package/lib/identity/AgentIdentity.d.ts +9 -2
- package/lib/identity/index.d.ts +1 -1
- package/lib/identity/index.js +1 -1
- package/lib/identity/types.d.ts +1 -1
- package/lib/identity/types.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -0
- package/lib/jupyter/index.d.ts +2 -1
- package/lib/jupyter/index.js +2 -1
- package/lib/jupyter/serverExecution.d.ts +78 -0
- package/lib/jupyter/serverExecution.js +258 -0
- package/lib/jupyter/useResumeServerExecutions.d.ts +11 -0
- package/lib/jupyter/useResumeServerExecutions.js +64 -0
- package/lib/lexical/ChatInlinePlugin.d.ts +33 -0
- package/lib/lexical/ChatInlinePlugin.js +0 -36
- package/lib/loop/core/focusRequests.d.ts +10 -0
- package/lib/loop/core/focusRequests.js +46 -0
- package/lib/loop/core/index.d.ts +894 -0
- package/lib/loop/core/index.js +264 -0
- package/lib/loop/core/promptStore.d.ts +44 -0
- package/lib/loop/core/promptStore.js +63 -0
- package/lib/loop/core/surfaceRequests.d.ts +33 -0
- package/lib/loop/core/surfaceRequests.js +29 -0
- package/lib/loop/core/toolbar.d.ts +28 -0
- package/lib/loop/core/toolbar.js +59 -0
- package/lib/loop/embed/LoopEmbed.d.ts +57 -0
- package/lib/loop/embed/LoopEmbed.js +118 -0
- package/lib/loop/extensions.d.ts +10 -0
- package/lib/loop/extensions.js +49 -0
- package/lib/loop/index.d.ts +68 -0
- package/lib/loop/index.js +87 -0
- package/lib/loop/plugins/a2a-sidebar/A2ASidebar.d.ts +48 -0
- package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +190 -0
- package/lib/loop/plugins/a2a-sidebar/index.d.ts +5 -0
- package/lib/loop/plugins/a2a-sidebar/index.js +39 -0
- package/lib/loop/plugins/a2ui/A2uiView.d.ts +12 -0
- package/lib/loop/plugins/a2ui/A2uiView.js +97 -0
- package/lib/loop/plugins/a2ui/index.d.ts +3 -0
- package/lib/loop/plugins/a2ui/index.js +50 -0
- package/lib/loop/plugins/a2ui-scene/index.d.ts +36 -0
- package/lib/loop/plugins/a2ui-scene/index.js +28 -0
- package/lib/loop/plugins/agent-a2a/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2a/index.js +26 -0
- package/lib/loop/plugins/agent-a2ui/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2ui/index.js +42 -0
- package/lib/loop/plugins/agent-a2ui-jupyter-output/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2ui-jupyter-output/index.js +53 -0
- package/lib/loop/plugins/agent-capacity/index.d.ts +39 -0
- package/lib/loop/plugins/agent-capacity/index.js +52 -0
- package/lib/loop/plugins/agent-checkpoints/index.d.ts +3 -0
- package/lib/loop/plugins/agent-checkpoints/index.js +26 -0
- package/lib/loop/plugins/agent-code-sandbox/index.d.ts +3 -0
- package/lib/loop/plugins/agent-code-sandbox/index.js +24 -0
- package/lib/loop/plugins/agent-code-sandboxes/index.d.ts +13 -0
- package/lib/loop/plugins/agent-code-sandboxes/index.js +85 -0
- package/lib/loop/plugins/agent-codemode/index.d.ts +5 -0
- package/lib/loop/plugins/agent-codemode/index.js +41 -0
- package/lib/loop/plugins/agent-compaction/index.d.ts +10 -0
- package/lib/loop/plugins/agent-compaction/index.js +34 -0
- package/lib/loop/plugins/agent-evals/index.d.ts +3 -0
- package/lib/loop/plugins/agent-evals/index.js +25 -0
- package/lib/loop/plugins/agent-guardrails/index.d.ts +3 -0
- package/lib/loop/plugins/agent-guardrails/index.js +25 -0
- package/lib/loop/plugins/agent-hooks/index.d.ts +3 -0
- package/lib/loop/plugins/agent-hooks/index.js +28 -0
- package/lib/loop/plugins/agent-inference/index.d.ts +7 -0
- package/lib/loop/plugins/agent-inference/index.js +29 -0
- package/lib/loop/plugins/agent-mcp/index.d.ts +3 -0
- package/lib/loop/plugins/agent-mcp/index.js +25 -0
- package/lib/loop/plugins/agent-memory/index.d.ts +3 -0
- package/lib/loop/plugins/agent-memory/index.js +25 -0
- package/lib/loop/plugins/agent-monitoring/index.d.ts +3 -0
- package/lib/loop/plugins/agent-monitoring/index.js +25 -0
- package/lib/loop/plugins/agent-notifications/index.d.ts +3 -0
- package/lib/loop/plugins/agent-notifications/index.js +25 -0
- package/lib/loop/plugins/agent-otel/index.d.ts +3 -0
- package/lib/loop/plugins/agent-otel/index.js +25 -0
- package/lib/loop/plugins/agent-outputs/index.d.ts +3 -0
- package/lib/loop/plugins/agent-outputs/index.js +25 -0
- package/lib/loop/plugins/agent-parameters/index.d.ts +3 -0
- package/lib/loop/plugins/agent-parameters/index.js +25 -0
- package/lib/loop/plugins/agent-skills/index.d.ts +3 -0
- package/lib/loop/plugins/agent-skills/index.js +25 -0
- package/lib/loop/plugins/agent-subagents/index.d.ts +3 -0
- package/lib/loop/plugins/agent-subagents/index.js +25 -0
- package/lib/loop/plugins/agent-tool-approvals/index.d.ts +11 -0
- package/lib/loop/plugins/agent-tool-approvals/index.js +38 -0
- package/lib/loop/plugins/agent-triggers/index.d.ts +3 -0
- package/lib/loop/plugins/agent-triggers/index.js +26 -0
- package/lib/loop/plugins/agents/AgentSummaryPanel.d.ts +20 -0
- package/lib/loop/plugins/agents/AgentSummaryPanel.js +50 -0
- package/lib/loop/plugins/agents/AnonymousKeyBadge.d.ts +35 -0
- package/lib/loop/plugins/agents/AnonymousKeyBadge.js +53 -0
- package/lib/loop/plugins/agents/DatalayerAgentBridge.d.ts +24 -0
- package/lib/loop/plugins/agents/DatalayerAgentBridge.js +102 -0
- package/lib/loop/plugins/agents/DatalayerAgentMount.d.ts +18 -0
- package/lib/loop/plugins/agents/DatalayerAgentMount.js +12 -0
- package/lib/loop/plugins/agents/SandboxSelector.d.ts +18 -0
- package/lib/loop/plugins/agents/SandboxSelector.js +99 -0
- package/lib/loop/plugins/agents/SandboxStatusBridge.d.ts +19 -0
- package/lib/loop/plugins/agents/SandboxStatusBridge.js +23 -0
- package/lib/loop/plugins/agents/SandboxView.d.ts +11 -0
- package/lib/loop/plugins/agents/SandboxView.js +43 -0
- package/lib/loop/plugins/agents/TeamMemberPicker.d.ts +17 -0
- package/lib/loop/plugins/agents/TeamMemberPicker.js +60 -0
- package/lib/loop/plugins/agents/agentIcons.d.ts +23 -0
- package/lib/loop/plugins/agents/agentIcons.js +88 -0
- package/lib/loop/plugins/agents/browserService.d.ts +50 -0
- package/lib/loop/plugins/agents/browserService.js +233 -0
- package/lib/loop/plugins/agents/index.d.ts +13 -0
- package/lib/loop/plugins/agents/index.js +17 -0
- package/lib/loop/plugins/agents/plugin.d.ts +91 -0
- package/lib/loop/plugins/agents/plugin.js +201 -0
- package/lib/loop/plugins/agents/service.d.ts +99 -0
- package/lib/loop/plugins/agents/service.js +167 -0
- package/lib/loop/plugins/agents/specSubagents.d.ts +18 -0
- package/lib/loop/plugins/agents/specSubagents.js +33 -0
- package/lib/loop/plugins/agents/switchable.d.ts +107 -0
- package/lib/loop/plugins/agents/switchable.js +405 -0
- package/lib/loop/plugins/agents/team.d.ts +87 -0
- package/lib/loop/plugins/agents/team.js +143 -0
- package/lib/loop/plugins/agents/useSandboxService.d.ts +11 -0
- package/lib/loop/plugins/agents/useSandboxService.js +36 -0
- package/lib/loop/plugins/agents/useTeamSelection.d.ts +10 -0
- package/lib/loop/plugins/agents/useTeamSelection.js +27 -0
- package/lib/loop/plugins/agentspecs/AgentspecPicker.d.ts +15 -0
- package/lib/loop/plugins/agentspecs/AgentspecPicker.js +90 -0
- package/lib/loop/plugins/agentspecs/index.d.ts +6 -0
- package/lib/loop/plugins/agentspecs/index.js +63 -0
- package/lib/loop/plugins/chat/ChatView.d.ts +20 -0
- package/lib/loop/plugins/chat/ChatView.js +1670 -0
- package/lib/loop/plugins/chat/chatViewTools.d.ts +41 -0
- package/lib/loop/plugins/chat/chatViewTools.js +92 -0
- package/lib/loop/plugins/chat/index.d.ts +111 -0
- package/lib/loop/plugins/chat/index.js +143 -0
- package/lib/loop/plugins/chat/turnState.d.ts +41 -0
- package/lib/loop/plugins/chat/turnState.js +90 -0
- package/lib/loop/plugins/chat-extras/index.d.ts +14 -0
- package/lib/loop/plugins/chat-extras/index.js +51 -0
- package/lib/loop/plugins/chat-header/HeaderView.d.ts +13 -0
- package/lib/loop/plugins/chat-header/HeaderView.js +6 -0
- package/lib/loop/plugins/chat-header/index.d.ts +3 -0
- package/lib/loop/plugins/chat-header/index.js +21 -0
- package/lib/loop/plugins/chat-view/index.d.ts +10 -0
- package/lib/loop/plugins/chat-view/index.js +29 -0
- package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +27 -0
- package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +174 -0
- package/lib/loop/plugins/checkpoints-sidebar/index.d.ts +5 -0
- package/lib/loop/plugins/checkpoints-sidebar/index.js +39 -0
- package/lib/loop/plugins/commands/index.d.ts +20 -0
- package/lib/loop/plugins/commands/index.js +148 -0
- package/lib/loop/plugins/decks/DeckSurface.d.ts +10 -0
- package/lib/loop/plugins/decks/DeckSurface.js +6 -0
- package/lib/loop/plugins/decks/DecksMenu.d.ts +11 -0
- package/lib/loop/plugins/decks/DecksMenu.js +42 -0
- package/lib/loop/plugins/decks/index.d.ts +19 -0
- package/lib/loop/plugins/decks/index.js +133 -0
- package/lib/loop/plugins/decks/surface.d.ts +7 -0
- package/lib/loop/plugins/decks/surface.js +11 -0
- package/lib/loop/plugins/document/DocumentView.d.ts +12 -0
- package/lib/loop/plugins/document/DocumentView.js +68 -0
- package/lib/loop/plugins/document/index.d.ts +3 -0
- package/lib/loop/plugins/document/index.js +86 -0
- package/lib/loop/plugins/document/openingDocument.d.ts +28 -0
- package/lib/loop/plugins/document/openingDocument.js +122 -0
- package/lib/loop/plugins/document-toolbar/SandboxStatusItem.d.ts +16 -0
- package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +31 -0
- package/lib/loop/plugins/document-toolbar/index.d.ts +4 -0
- package/lib/loop/plugins/document-toolbar/index.js +35 -0
- package/lib/loop/plugins/document-toolbar/names.d.ts +6 -0
- package/lib/loop/plugins/document-toolbar/names.js +10 -0
- package/lib/loop/plugins/document-toolbar/plugin.d.ts +2 -0
- package/lib/loop/plugins/document-toolbar/plugin.js +38 -0
- package/lib/loop/plugins/document-view/index.d.ts +10 -0
- package/lib/loop/plugins/document-view/index.js +28 -0
- package/lib/loop/plugins/graph/GraphToggle.d.ts +17 -0
- package/lib/loop/plugins/graph/GraphToggle.js +22 -0
- package/lib/loop/plugins/graph/GraphView.d.ts +16 -0
- package/lib/loop/plugins/graph/GraphView.js +6 -0
- package/lib/loop/plugins/graph/index.d.ts +5 -0
- package/lib/loop/plugins/graph/index.js +80 -0
- package/lib/loop/plugins/graph/viewType.d.ts +10 -0
- package/lib/loop/plugins/graph/viewType.js +14 -0
- package/lib/loop/plugins/input-prompt/ComposerView.d.ts +15 -0
- package/lib/loop/plugins/input-prompt/ComposerView.js +25 -0
- package/lib/loop/plugins/input-prompt/index.d.ts +25 -0
- package/lib/loop/plugins/input-prompt/index.js +26 -0
- package/lib/loop/plugins/models/index.d.ts +3 -0
- package/lib/loop/plugins/models/index.js +49 -0
- package/lib/loop/plugins/notebook/NotebookView.d.ts +9 -0
- package/lib/loop/plugins/notebook/NotebookView.js +189 -0
- package/lib/loop/plugins/notebook/index.d.ts +3 -0
- package/lib/loop/plugins/notebook/index.js +91 -0
- package/lib/loop/plugins/notebook/openingNotebook.d.ts +72 -0
- package/lib/loop/plugins/notebook/openingNotebook.js +90 -0
- package/lib/loop/plugins/notebook-toolbar/index.d.ts +4 -0
- package/lib/loop/plugins/notebook-toolbar/index.js +45 -0
- package/lib/loop/plugins/notebook-toolbar/items.d.ts +10 -0
- package/lib/loop/plugins/notebook-toolbar/items.js +45 -0
- package/lib/loop/plugins/notebook-toolbar/names.d.ts +9 -0
- package/lib/loop/plugins/notebook-toolbar/names.js +13 -0
- package/lib/loop/plugins/notebook-toolbar/plugin.d.ts +2 -0
- package/lib/loop/plugins/notebook-toolbar/plugin.js +24 -0
- package/lib/loop/plugins/notebook-view/index.d.ts +10 -0
- package/lib/loop/plugins/notebook-view/index.js +30 -0
- package/lib/loop/plugins/page-layout/TurnPanel.d.ts +25 -0
- package/lib/loop/plugins/page-layout/TurnPanel.js +126 -0
- package/lib/loop/plugins/page-layout/index.d.ts +35 -0
- package/lib/loop/plugins/page-layout/index.js +80 -0
- package/lib/loop/plugins/plugins-panel/index.d.ts +14 -0
- package/lib/loop/plugins/plugins-panel/index.js +74 -0
- package/lib/loop/plugins/prompt/NewChatAction.d.ts +19 -0
- package/lib/loop/plugins/prompt/NewChatAction.js +10 -0
- package/lib/loop/plugins/prompt/index.d.ts +11 -0
- package/lib/loop/plugins/prompt/index.js +73 -0
- package/lib/loop/plugins/shell/editorChoice.d.ts +31 -0
- package/lib/loop/plugins/shell/editorChoice.js +58 -0
- package/lib/loop/plugins/shell/index.d.ts +47 -0
- package/lib/loop/plugins/shell/index.js +142 -0
- package/lib/loop/plugins/shell/useEditorPreviews.d.ts +32 -0
- package/lib/loop/plugins/shell/useEditorPreviews.js +217 -0
- package/lib/loop/plugins/subagent-activity/SubagentPulse.d.ts +16 -0
- package/lib/loop/plugins/subagent-activity/SubagentPulse.js +45 -0
- package/lib/loop/plugins/subagent-activity/index.d.ts +12 -0
- package/lib/loop/plugins/subagent-activity/index.js +42 -0
- package/lib/loop/plugins/view-switch/index.d.ts +46 -0
- package/lib/loop/plugins/view-switch/index.js +68 -0
- package/lib/loop/plugins/window-frame/WindowFrame.d.ts +48 -0
- package/lib/loop/plugins/window-frame/WindowFrame.js +63 -0
- package/lib/loop/plugins/window-frame/index.d.ts +6 -0
- package/lib/loop/plugins/window-frame/index.js +79 -0
- package/lib/loop/plugins/window-frame/slots.d.ts +26 -0
- package/lib/loop/plugins/window-frame/slots.js +30 -0
- package/lib/loop/presets.d.ts +167 -0
- package/lib/loop/presets.js +139 -0
- package/lib/loop/shell/LoopWorkspace.d.ts +109 -0
- package/lib/loop/shell/LoopWorkspace.js +231 -0
- package/lib/loop/shell/PluginToggles.d.ts +21 -0
- package/lib/loop/shell/PluginToggles.js +41 -0
- package/lib/loop/shell/ViewSwitcher.d.ts +24 -0
- package/lib/loop/shell/ViewSwitcher.js +43 -0
- package/lib/loop/shell/WorkspaceFullScreenAction.d.ts +25 -0
- package/lib/loop/shell/WorkspaceFullScreenAction.js +24 -0
- package/lib/loop/shell/index.d.ts +10 -0
- package/lib/loop/shell/index.js +14 -0
- package/lib/loop/shell/useWorkspaceFullScreen.d.ts +93 -0
- package/lib/loop/shell/useWorkspaceFullScreen.js +167 -0
- package/lib/loop-example-main.d.ts +1 -0
- package/lib/loop-example-main.js +42 -0
- package/lib/loop-main.d.ts +1 -0
- package/lib/loop-main.js +138 -0
- package/lib/mcp/McpServerManager.d.ts +1 -1
- package/lib/models/CodeSandboxSnapshotDTO.d.ts +1 -1
- package/lib/models/CodeSandboxVariant.d.ts +53 -0
- package/lib/models/CodeSandboxVariant.js +77 -0
- package/lib/models/Content.d.ts +26 -0
- package/lib/models/Environment.d.ts +561 -5
- package/lib/models/Environment.js +12 -1
- package/lib/models/EnvironmentDTO.d.ts +24 -6
- package/lib/models/EnvironmentDTO.js +13 -2
- package/lib/models/Exercise.d.ts +0 -2
- package/lib/models/Library.d.ts +0 -2
- package/lib/models/Notebook.d.ts +0 -2
- package/lib/models/ProjectDTO.d.ts +2 -2
- package/lib/models/ProjectDTO.js +4 -4
- package/lib/models/Runtime.d.ts +11 -11
- package/lib/models/RuntimeDTO.d.ts +16 -7
- package/lib/models/RuntimeDTO.js +9 -9
- package/lib/models/Space.d.ts +10 -0
- package/lib/models/Space.js +1 -1
- package/lib/models/SpaceDTO.d.ts +1 -1
- package/lib/models/SpaceItem.d.ts +1 -2
- package/lib/models/environments.generated.d.ts +113 -0
- package/lib/models/environments.generated.js +13 -0
- package/lib/models/index.d.ts +1 -1
- package/lib/models/index.js +1 -1
- package/lib/protocols/A2AAdapter.d.ts +39 -6
- package/lib/protocols/A2AAdapter.js +180 -11
- package/lib/protocols/ACPAdapter.js +40 -37
- package/lib/protocols/AGUIAdapter.d.ts +14 -0
- package/lib/protocols/AGUIAdapter.js +34 -9
- package/lib/protocols/BrowserAgentAdapter.d.ts +117 -0
- package/lib/protocols/BrowserAgentAdapter.js +310 -0
- package/lib/protocols/VercelAIAdapter.d.ts +10 -0
- package/lib/protocols/VercelAIAdapter.js +27 -7
- package/lib/protocols/index.d.ts +1 -0
- package/lib/protocols/index.js +1 -0
- package/lib/runtimes/actions.d.ts +3 -3
- package/lib/runtimes/actions.js +41 -16
- package/lib/runtimes/apis.d.ts +13 -4
- package/lib/runtimes/browser/agent.d.ts +54 -0
- package/lib/runtimes/browser/agent.js +63 -0
- package/lib/runtimes/browser/anonymousToken.d.ts +121 -0
- package/lib/runtimes/browser/anonymousToken.js +300 -0
- package/lib/runtimes/browser/frontendTools.d.ts +61 -0
- package/lib/runtimes/browser/frontendTools.js +152 -0
- package/lib/runtimes/browser/index.d.ts +11 -0
- package/lib/runtimes/browser/index.js +20 -0
- package/lib/runtimes/browser/model.d.ts +52 -0
- package/lib/runtimes/browser/model.js +110 -0
- package/lib/runtimes/browser/protocol.d.ts +54 -0
- package/lib/runtimes/browser/protocol.js +35 -0
- package/lib/runtimes/browser/subagents.d.ts +131 -0
- package/lib/runtimes/browser/subagents.js +241 -0
- package/lib/runtimes/index.d.ts +3 -0
- package/lib/runtimes/index.js +3 -0
- package/lib/runtimes/lifecycle.d.ts +76 -0
- package/lib/runtimes/lifecycle.js +99 -0
- package/lib/runtimes/variants.d.ts +172 -0
- package/lib/runtimes/variants.js +187 -0
- package/lib/services/reconnectToRuntime.d.ts +2 -2
- package/lib/services/reconnectToRuntime.js +3 -3
- package/lib/services/sandboxServiceManagers.d.ts +2 -2
- package/lib/services/sandboxServiceManagers.js +11 -11
- package/lib/specs/agents/agents.d.ts +128 -112
- package/lib/specs/agents/agents.js +8024 -5052
- package/lib/specs/envvars.d.ts +1 -1
- package/lib/specs/envvars.js +3 -3
- package/lib/specs/evals.js +9 -0
- package/lib/specs/frontendTools.d.ts +3 -0
- package/lib/specs/frontendTools.js +46 -3
- package/lib/specs/mcpServers.d.ts +1 -0
- package/lib/specs/mcpServers.js +27 -4
- package/lib/specs/models.d.ts +18 -0
- package/lib/specs/models.js +154 -0
- package/lib/specs/outputs.d.ts +2 -0
- package/lib/specs/outputs.js +22 -0
- package/lib/specs/personas.js +1 -1
- package/lib/specs/teams/teams.d.ts +2 -0
- package/lib/specs/teams/teams.js +628 -111
- package/lib/state/index.d.ts +1 -1
- package/lib/state/index.js +1 -1
- package/lib/state/substates/RuntimesState.d.ts +5 -5
- package/lib/state/substates/RuntimesState.js +17 -14
- package/lib/state/substates/index.d.ts +1 -1
- package/lib/state/substates/index.js +1 -1
- package/lib/stores/agentRuntimeStore.d.ts +43 -1
- package/lib/stores/agentRuntimeStore.js +100 -11
- package/lib/stores/index.d.ts +1 -1
- package/lib/stores/index.js +1 -1
- package/lib/stories/Button.d.ts +1 -1
- package/lib/stories/Button.stories.d.ts +1 -1
- package/lib/stories/Header.d.ts +1 -1
- package/lib/stories/Header.stories.d.ts +1 -1
- package/lib/test-setup.js +66 -0
- package/lib/tools/adapters/agent-runtimes/lexicalHooks.d.ts +15 -0
- package/lib/tools/adapters/agent-runtimes/lexicalHooks.js +43 -2
- package/lib/tools/adapters/agent-runtimes/notebookHooks.d.ts +9 -0
- package/lib/tools/adapters/agent-runtimes/notebookHooks.js +12 -0
- package/lib/tools/adapters/commands/frontendCommandTools.d.ts +11 -0
- package/lib/tools/adapters/commands/frontendCommandTools.js +60 -0
- package/lib/tools/adapters/commands/index.d.ts +1 -0
- package/lib/{models/Dataset.js → tools/adapters/commands/index.js} +1 -1
- package/lib/tools/adapters/copilotkit/lexicalHooks.js +7 -3
- package/lib/tools/index.d.ts +1 -0
- package/lib/tools/index.js +1 -0
- package/lib/types/a2a.d.ts +15 -1
- package/lib/types/agents-lifecycle.d.ts +11 -6
- package/lib/types/agents.d.ts +31 -6
- package/lib/types/agentspecs.d.ts +120 -4
- package/lib/types/chat.d.ts +251 -3
- package/lib/types/checkpoints.d.ts +20 -0
- package/lib/types/config.d.ts +13 -1
- package/lib/types/connection.d.ts +1 -1
- package/lib/types/evals.d.ts +2 -0
- package/lib/types/messages.d.ts +60 -0
- package/lib/types/models.d.ts +26 -0
- package/lib/types/notifications.d.ts +15 -6
- package/lib/types/protocol.d.ts +7 -2
- package/lib/types/stream.d.ts +48 -3
- package/lib/types/stream.js +5 -0
- package/lib/types/teams.d.ts +102 -4
- package/lib/types/tool-approvals.d.ts +1 -1
- package/lib/types/tools.d.ts +8 -2
- package/lib/utils/utils.js +7 -1
- package/package.json +376 -361
- package/scripts/codegen/__pycache__/compose.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
- package/scripts/codegen/compose.py +208 -0
- package/scripts/codegen/generate_agents.py +202 -31
- package/scripts/codegen/generate_evals.py +2 -0
- package/scripts/codegen/generate_frontend_tools.py +35 -6
- package/scripts/codegen/generate_models.py +40 -15
- package/scripts/codegen/generate_sandbox_agents.py +76 -62
- package/scripts/codegen/generate_teams.py +178 -4
- package/scripts/codegen/generate_tools.py +6 -4
- package/scripts/gen_workers.py +279 -111
- package/scripts/generate-environments-types.py +404 -0
- package/lib/chat/prompt/InputFooter.d.ts +0 -58
- package/lib/chat/prompt/InputFooter.js +0 -194
- package/lib/chat/prompt/InputPromptFooter.d.ts +0 -27
- package/lib/chat/prompt/InputPromptFooter.js +0 -15
- package/lib/chat/prompt/InputPromptHeader.d.ts +0 -15
- package/lib/chat/prompt/InputPromptHeader.js +0 -15
- package/lib/chat/usage/TokenUsageBar.d.ts +0 -8
- package/lib/hooks/useRuntimes.d.ts +0 -5
- package/lib/hooks/useRuntimes.js +0 -34
- package/lib/jupyter/kernelsHandler.d.ts +0 -8
- package/lib/jupyter/kernelsHandler.js +0 -39
- package/lib/models/Dataset.d.ts +0 -16
- package/lib/utils/Cells.d.ts +0 -2
- package/lib/utils/Cells.js +0 -28
|
@@ -1,8 +1,4 @@
|
|
|
1
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
2
|
import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
|
|
7
3
|
import { nullTranslator } from '@jupyterlab/translation';
|
|
8
4
|
//import { kernelIcon } from '@jupyterlab/ui-components';
|
|
@@ -16,17 +12,54 @@ import { isRuntimeRemote, } from '../../runtimes';
|
|
|
16
12
|
import { useIAMStore } from '../../state/substates';
|
|
17
13
|
import { getGroupedCodeSandboxDescs, } from './CodeSandboxUtils';
|
|
18
14
|
import { listCodeSandboxGivenNames, nextCodeSandboxGivenName, } from './CodeSandboxNames';
|
|
15
|
+
import { codeSandboxVariantTitle } from '../../models/CodeSandboxVariant';
|
|
19
16
|
import { creditsLimitFor, NewCodeSandboxControls, useNewCodeSandboxAllowance, } from './NewCodeSandboxControls';
|
|
20
17
|
import { CodeSandboxVariables, useCodeSandboxVariablesTransfer, } from './CodeSandboxVariables';
|
|
18
|
+
import { CodeSandboxEnvironmentSelect, } from './CodeSandboxEnvironmentSelect';
|
|
21
19
|
/**
|
|
22
20
|
* Maximal runtime display name length after which it is trimmed.
|
|
23
21
|
*/
|
|
24
22
|
const RUNTIME_DISPLAY_NAME_MAX_LENGTH = 25;
|
|
23
|
+
/**
|
|
24
|
+
* Whether the choice is a sandbox that ALREADY RUNS.
|
|
25
|
+
*
|
|
26
|
+
* A running one is named by its kernel, or — where it runs at an external
|
|
27
|
+
* provider and has no kernel of this platform — by its pod. An environment
|
|
28
|
+
* to start a new one in has neither. Told apart by the kernel alone, every
|
|
29
|
+
* Kaggle and Modal sandbox read as an environment: they were offered under
|
|
30
|
+
* "Assign a new Code Sandbox" and never among the ones already running.
|
|
31
|
+
*/
|
|
32
|
+
function isRunningSandbox(desc) {
|
|
33
|
+
return !!desc.kernelId || !!desc.runtimeName;
|
|
34
|
+
}
|
|
35
|
+
/** How a sandbox is identified among the choices; see `dropdownDescs`. */
|
|
36
|
+
function codeSandboxDescKey(desc) {
|
|
37
|
+
// The runtime uid, then the pod, stands in for the kernel of a sandbox that
|
|
38
|
+
// does not have one yet. Without that identity all Daytona sandboxes of the
|
|
39
|
+
// same environment answer to one key.
|
|
40
|
+
return `${desc.location}:${desc.kernelId ?? desc.id ?? desc.runtimeName ?? desc.name}`;
|
|
41
|
+
}
|
|
42
|
+
/** The identifier shown beside a running sandbox. */
|
|
43
|
+
function codeSandboxDisplayId(desc) {
|
|
44
|
+
return desc.kernelId ?? desc.id ?? desc.runtimeName;
|
|
45
|
+
}
|
|
46
|
+
/** Whether two descriptions refer to the same choice. */
|
|
47
|
+
function isSameCodeSandbox(left, right) {
|
|
48
|
+
if (!right) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
if (left.runtimeName && right.runtimeName) {
|
|
52
|
+
return left.runtimeName === right.runtimeName;
|
|
53
|
+
}
|
|
54
|
+
const sameLocation = left.location === right.location ||
|
|
55
|
+
(isRuntimeRemote(left.location) && isRuntimeRemote(right.location));
|
|
56
|
+
return sameLocation && codeSandboxDescKey(left) === codeSandboxDescKey(right);
|
|
57
|
+
}
|
|
25
58
|
/**
|
|
26
59
|
* The picker of a code sandbox: what runs already, and what could run.
|
|
27
60
|
*/
|
|
28
61
|
export function CodeSandboxPicker(props) {
|
|
29
|
-
const { disabled, display, filterRuntime, multiServiceManager, onTransferChange, postActions, preActions, preference, sessionContext, translator, variant, withNewSandboxControls, withVariablesTransfer, } = props;
|
|
62
|
+
const { disabled, display, filterRuntime, multiServiceManager, onTransferChange, postActions, sandboxLayout = 'separated', preActions, preference, sessionContext, translator, variant, withNewSandboxControls, withVariablesTransfer, } = props;
|
|
30
63
|
/*
|
|
31
64
|
* The choice, held here when the host does not hold it.
|
|
32
65
|
*
|
|
@@ -43,6 +76,94 @@ export function CodeSandboxPicker(props) {
|
|
|
43
76
|
props.setRuntimeDesc?.(desc);
|
|
44
77
|
}, [isControlled, props.setRuntimeDesc]);
|
|
45
78
|
const [groupedRuntimeDescs, setGroupedRuntimeDescs] = useState(getGroupedCodeSandboxDescs(multiServiceManager, preference?.id, translator, filterRuntime, variant));
|
|
79
|
+
/*
|
|
80
|
+
* The same choices the radio column lists, as options of the dropdown.
|
|
81
|
+
*
|
|
82
|
+
* Keyed the way the radio column keys its rows — where the sandbox runs
|
|
83
|
+
* and which one it is — because a kernel already running and an
|
|
84
|
+
* environment to start one in are told apart by nothing else: two
|
|
85
|
+
* sandboxes of one environment share a name.
|
|
86
|
+
*/
|
|
87
|
+
const dropdownDescs = useMemo(() => {
|
|
88
|
+
const byKey = new Map();
|
|
89
|
+
Object.values(groupedRuntimeDescs ?? {}).forEach(descs => descs.forEach(desc => byKey.set(codeSandboxDescKey(desc), desc)));
|
|
90
|
+
return byKey;
|
|
91
|
+
}, [groupedRuntimeDescs]);
|
|
92
|
+
const dropdownOptions = useMemo(() => Object.entries(groupedRuntimeDescs ?? {}).flatMap(([group, descs]) => descs.map(desc => ({
|
|
93
|
+
key: codeSandboxDescKey(desc),
|
|
94
|
+
title: desc.displayName ?? desc.name,
|
|
95
|
+
name: desc.name,
|
|
96
|
+
providerTitle: desc.provider
|
|
97
|
+
? codeSandboxVariantTitle(desc.provider)
|
|
98
|
+
: undefined,
|
|
99
|
+
location: desc.location,
|
|
100
|
+
burningRate: desc.burningRate,
|
|
101
|
+
gpu: desc.gpu,
|
|
102
|
+
group,
|
|
103
|
+
}))), [groupedRuntimeDescs]);
|
|
104
|
+
/**
|
|
105
|
+
* The sandboxes as a column of radio buttons, group by group.
|
|
106
|
+
*
|
|
107
|
+
* Shared by the two layouts that show one: the whole list in the `radio`
|
|
108
|
+
* display, and the sandboxes that ALREADY RUN in the separated dropdown
|
|
109
|
+
* display, where the dropdown is left to the environments a new one is
|
|
110
|
+
* started in.
|
|
111
|
+
*/
|
|
112
|
+
/*
|
|
113
|
+
* A sandbox that already runs is told from an environment by its KERNEL:
|
|
114
|
+
* a running one has one, an environment to start one in has none. Read
|
|
115
|
+
* from the data rather than from the heading, which is translated.
|
|
116
|
+
*/
|
|
117
|
+
const runningEntries = useMemo(() => Object.entries(groupedRuntimeDescs ?? {})
|
|
118
|
+
.map(([group, descs]) => [
|
|
119
|
+
group,
|
|
120
|
+
descs.filter(isRunningSandbox),
|
|
121
|
+
])
|
|
122
|
+
.filter(([, descs]) => descs.length > 0), [groupedRuntimeDescs]);
|
|
123
|
+
const environmentOnlyOptions = useMemo(() => dropdownOptions
|
|
124
|
+
.filter(option => {
|
|
125
|
+
const desc = dropdownDescs.get(option.key);
|
|
126
|
+
return !desc || !isRunningSandbox(desc);
|
|
127
|
+
})
|
|
128
|
+
// The running sandboxes are the radio column beside this; the dropdown
|
|
129
|
+
// then lists only environments to start, so it needs no group heading
|
|
130
|
+
// of its own ("Assign a new Code Sandbox" already labels the control).
|
|
131
|
+
.map(option => ({ ...option, group: undefined })), [dropdownDescs, dropdownOptions]);
|
|
132
|
+
const radioSections = (entries) => (_jsx(RadioGroup, { name: "kernel-options", "aria-labelledby": "kernel-options", children: entries.map(([group, runtimeDescs]) => (_jsxs(Box, { children: [_jsx(Box, { as: "h4", sx: {
|
|
133
|
+
/*
|
|
134
|
+
* The type of a form label, not of a heading.
|
|
135
|
+
*
|
|
136
|
+
* "Assign an existing Code Sandbox" and "Assign a
|
|
137
|
+
* new Code Sandbox" name the two ways of answering
|
|
138
|
+
* one question, and the second is the label of the
|
|
139
|
+
* dropdown; set in the larger, heavier type of an
|
|
140
|
+
* `h4`, the first read as a section above it rather
|
|
141
|
+
* than as its pair. The values are the ones Primer
|
|
142
|
+
* gives `FormControl.Label` — taken as the variables
|
|
143
|
+
* it resolves rather than through the Primer scale,
|
|
144
|
+
* whose `semibold` the JupyterLab theme redefines.
|
|
145
|
+
*/
|
|
146
|
+
margin: 0,
|
|
147
|
+
marginBottom: 2,
|
|
148
|
+
color: 'fg.default',
|
|
149
|
+
fontSize: 'var(--text-body-size-medium, 0.875rem)',
|
|
150
|
+
fontWeight: 'var(--base-text-weight-semibold, 600)',
|
|
151
|
+
}, children: group }), runtimeDescs.map(k => {
|
|
152
|
+
const choiceKey = codeSandboxDescKey(k);
|
|
153
|
+
const displayId = codeSandboxDisplayId(k);
|
|
154
|
+
return (
|
|
155
|
+
// A kernel identifies a runtime that already runs; an
|
|
156
|
+
// environment to start one in has none, and is named
|
|
157
|
+
// by where it runs and what it runs.
|
|
158
|
+
_jsxs(Box, { title: k.name, children: [_jsxs(FormControl, { children: [_jsx(Radio, { value: choiceKey, onChange: () => {
|
|
159
|
+
setRuntimeDesc(k);
|
|
160
|
+
}, checked: isSameCodeSandbox(k, runtimeDesc) }), _jsx(FormControl.Label, { children: _jsxs(Box, { display: "flex", sx: { alignItems: 'baseline' }, children: [_jsx(Box, { children: k.displayName }), displayId && (_jsx(Text, { sx: {
|
|
161
|
+
ml: 2,
|
|
162
|
+
fontSize: 0,
|
|
163
|
+
color: 'fg.muted',
|
|
164
|
+
fontFamily: 'mono',
|
|
165
|
+
}, title: displayId, children: displayId.slice(0, 8) })), k.kernelId && k.location === 'remote' && (_jsx(Box, { ml: 3, mt: 1, children: _jsx(CreditsIndicator, { kernelId: k.kernelId, serviceManager: multiServiceManager.remote }, "credits-indicator") }))] }) }), _jsx(FormControl.Caption, { children: _jsxs(LabelGroup, { sx: { marginTop: 1 }, children: [_jsx(Label, { variant: "secondary", children: k.name }), k.provider && (_jsx(Label, { variant: "accent", sx: { marginLeft: 1 }, children: codeSandboxVariantTitle(k.provider) })), _jsx(Label, { variant: "secondary", sx: { marginLeft: 1 }, children: k.location }), k.burningRate && (_jsxs(Label, { variant: "sponsors", sx: { marginLeft: 1 }, children: [k.burningRate, " credits/second"] })), k.gpu && (_jsx(Label, { variant: "success", sx: { marginLeft: 1 }, children: "GPU" }))] }) })] }), _jsx(ActionList.Divider, {})] }, choiceKey));
|
|
166
|
+
})] }, group))) }));
|
|
46
167
|
const trans = useMemo(() => (translator ?? nullTranslator).load('jupyterlab'), [translator]);
|
|
47
168
|
const [defaultSet, setDefaultSet] = useState(false);
|
|
48
169
|
const [remoteModelsReady, setRemoteModelsReady] = useState(!multiServiceManager.remote);
|
|
@@ -114,17 +235,36 @@ export function CodeSandboxPicker(props) {
|
|
|
114
235
|
}
|
|
115
236
|
if (sessionContext && groupedRuntimeDescs) {
|
|
116
237
|
const kernelId = sessionContext.session?.kernel?.id;
|
|
117
|
-
|
|
238
|
+
/*
|
|
239
|
+
* An external sandbox is bound by its POD, not a kernel of this platform.
|
|
240
|
+
*
|
|
241
|
+
* Its descriptor carries the pod and — until a kernel of the platform is
|
|
242
|
+
* ever attached — an empty kernel id, and the session it binds stands on
|
|
243
|
+
* the pod as its `location`. Matching only on the kernel id therefore
|
|
244
|
+
* missed it: the picker fell back to the local kernel the notebook never
|
|
245
|
+
* ran on, opening on "Python 3" while the toolbar rightly showed the
|
|
246
|
+
* sandbox. So the current sandbox is matched on the pod as well, and the
|
|
247
|
+
* remote descriptors — which arrive late — are waited for before the
|
|
248
|
+
* choice is allowed to settle on anything else.
|
|
249
|
+
*/
|
|
250
|
+
const location = sessionContext.location;
|
|
251
|
+
const remoteBound = !!location && isRuntimeRemote(location);
|
|
252
|
+
const matchesCurrent = (desc) => (!!kernelId && desc.kernelId === kernelId) ||
|
|
253
|
+
(!!desc.runtimeName && !!location && desc.runtimeName === location);
|
|
254
|
+
if (kernelId || remoteBound) {
|
|
255
|
+
if (remoteBound && !remoteModelsReady) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
118
258
|
let matched = false;
|
|
119
|
-
Object.
|
|
259
|
+
Object.values(groupedRuntimeDescs).forEach(runtimeDescs => {
|
|
120
260
|
runtimeDescs.forEach(runtimeDesc => {
|
|
121
|
-
if (runtimeDesc
|
|
261
|
+
if (matchesCurrent(runtimeDesc)) {
|
|
122
262
|
matched = true;
|
|
123
263
|
setRuntimeDesc(runtimeDesc);
|
|
124
264
|
}
|
|
125
265
|
});
|
|
126
266
|
});
|
|
127
|
-
if (!matched) {
|
|
267
|
+
if (!matched && kernelId) {
|
|
128
268
|
if (!remoteModelsReady) {
|
|
129
269
|
return;
|
|
130
270
|
}
|
|
@@ -138,16 +278,36 @@ export function CodeSandboxPicker(props) {
|
|
|
138
278
|
kernelId,
|
|
139
279
|
language: spec.language,
|
|
140
280
|
displayName: sessionContext.kernelDisplayName,
|
|
141
|
-
location:
|
|
142
|
-
|
|
281
|
+
location: location ?? 'local',
|
|
282
|
+
runtimeName: remoteBound ? location : undefined,
|
|
143
283
|
});
|
|
144
284
|
}
|
|
145
285
|
}
|
|
146
286
|
}
|
|
287
|
+
else if (display === 'dropdown') {
|
|
288
|
+
/*
|
|
289
|
+
* Nothing assigned: the FIRST environment stands as the choice.
|
|
290
|
+
*
|
|
291
|
+
* A dropdown that opens on "Select an environment" reads as a
|
|
292
|
+
* question already answered — the control looks filled — and the
|
|
293
|
+
* dialog assigns nothing when it is accepted. A column of radio
|
|
294
|
+
* buttons shows its emptiness plainly and is left alone. The list
|
|
295
|
+
* must be settled first, or the choice would land on a local
|
|
296
|
+
* kernelspec and move when the remote environments arrive.
|
|
297
|
+
*/
|
|
298
|
+
if (!remoteModelsReady) {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
const first = Object.values(groupedRuntimeDescs).flat()[0];
|
|
302
|
+
if (first) {
|
|
303
|
+
setRuntimeDesc(first);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
147
306
|
}
|
|
148
307
|
setDefaultSet(true);
|
|
149
308
|
}, [
|
|
150
309
|
defaultSet,
|
|
310
|
+
display,
|
|
151
311
|
groupedRuntimeDescs,
|
|
152
312
|
remoteModelsReady,
|
|
153
313
|
sessionContext,
|
|
@@ -174,7 +334,7 @@ export function CodeSandboxPicker(props) {
|
|
|
174
334
|
*/
|
|
175
335
|
const [givenName, setGivenName] = useState('');
|
|
176
336
|
const givenNameFor = useRef(undefined);
|
|
177
|
-
const [
|
|
337
|
+
const [homeFolder, setHomeFolder] = useState(false);
|
|
178
338
|
const asksForNewSandbox = withNewSandboxControls || !!onTransferChange;
|
|
179
339
|
useEffect(() => {
|
|
180
340
|
if (asksForNewSandbox) {
|
|
@@ -186,7 +346,12 @@ export function CodeSandboxPicker(props) {
|
|
|
186
346
|
.get()
|
|
187
347
|
.find(env => env.name === runtimeDesc?.name)?.burning_rate;
|
|
188
348
|
const allowance = useNewCodeSandboxAllowance(resolvedBurningRate);
|
|
189
|
-
|
|
349
|
+
// New means an environment to start, not a sandbox already running. An
|
|
350
|
+
// external sandbox runs with a pod but no kernel of its own, so keying
|
|
351
|
+
// "new" on the kernel alone misread it as new — and a new remote sandbox
|
|
352
|
+
// the account cannot yet price is answered with nothing, which is why
|
|
353
|
+
// assigning an existing Daytona did nothing.
|
|
354
|
+
const isNewSandbox = !!runtimeDesc && !isRunningSandbox(runtimeDesc);
|
|
190
355
|
// Offer a name for what was just picked, and leave it alone afterwards: the
|
|
191
356
|
// key is the thing picked, so re-picking the same one keeps what was typed.
|
|
192
357
|
const pickedKey = isNewSandbox
|
|
@@ -249,28 +414,40 @@ export function CodeSandboxPicker(props) {
|
|
|
249
414
|
? `${runtimeDesc.location}-${runtimeDesc.name}`
|
|
250
415
|
: runtimeDesc.name,
|
|
251
416
|
id: runtimeDesc.kernelId,
|
|
417
|
+
// The pod names a sandbox that has no kernel of its own — an
|
|
418
|
+
// external one — so the session can bind it through the proxy.
|
|
419
|
+
runtime_name: runtimeDesc.runtimeName,
|
|
252
420
|
// The name the sandbox is given, carried with the choice.
|
|
253
421
|
//
|
|
254
422
|
// Everything else about the pick travelled in this object and the
|
|
255
423
|
// name did not, so whoever created the sandbox had nothing to name
|
|
256
424
|
// it with and fell back to the kernelspec: the launcher honoured
|
|
257
425
|
// what was typed, the picker silently dropped it.
|
|
426
|
+
//
|
|
427
|
+
// Two readers, two fields: a sandbox of a server is named from
|
|
428
|
+
// `displayName`, a runtime of the platform is started with
|
|
429
|
+
// `givenName`. A new remote sandbox — a Daytona among them — read
|
|
430
|
+
// the second, which nothing filled, and came up "Code Sandbox".
|
|
431
|
+
// Both carry the name now: what the user typed, or the title of the
|
|
432
|
+
// environment it runs.
|
|
258
433
|
displayName: runtimeDesc.displayName,
|
|
434
|
+
givenName: givenName || runtimeDesc.displayName,
|
|
259
435
|
creditsLimit,
|
|
260
|
-
capabilities:
|
|
436
|
+
capabilities: homeFolder ? ['home-folder'] : undefined,
|
|
261
437
|
}
|
|
262
438
|
: null,
|
|
263
439
|
selectedVariables,
|
|
264
440
|
});
|
|
265
441
|
}, [
|
|
266
442
|
allowance,
|
|
443
|
+
givenName,
|
|
267
444
|
isNewSandbox,
|
|
268
445
|
onTransferChange,
|
|
269
446
|
resolvedBurningRate,
|
|
270
447
|
runtimeDesc,
|
|
271
448
|
selectedVariables,
|
|
272
449
|
timeLimit,
|
|
273
|
-
|
|
450
|
+
homeFolder,
|
|
274
451
|
]);
|
|
275
452
|
// For cell using submenu instead of group would be nice unfortunately the feature
|
|
276
453
|
// is not yet implemented in the component there has been a not-great demo story.
|
|
@@ -284,8 +461,9 @@ export function CodeSandboxPicker(props) {
|
|
|
284
461
|
icon: () => (_jsx("span", { className: "dla-Cell-runtime-icon", children: _jsx(CpuIcon, {}) })), "aria-label": trans.__('Assign a Runtime to the Cell.'), title: trans.__('Assign a Runtime to the Cell.'), size: "small", variant: "invisible" }) })) : (_jsxs(ActionMenu.Button, { variant: "default", disabled: disabled || groupedRuntimeDescs === null, children: [_jsx(Text, { fontWeight: 'bold', children: trans.__('Runtime:') }), ' ' + (runtimeDesc?.displayName ?? trans.__('No Runtime'))] })), _jsx(ActionMenu.Overlay, { ...overlayProps, width: "medium", sx: { overflowY: 'auto' }, side: variant === 'cell' ? 'outside-left' : 'outside-right', children: _jsxs(ActionList, { selectionVariant: "single", children: [variant === 'cell' && (_jsxs(ActionList.Item, { selected: runtimeDesc === undefined, onSelect: () => {
|
|
285
462
|
setRuntimeDesc(undefined);
|
|
286
463
|
}, children: [preference?.location && (_jsx(ActionList.LeadingVisual, { children: preference.location === 'local' ? (_jsx(LaptopSimpleIcon, {})) : preference.location === 'browser' ? (_jsx(BrowserIcon, {})) : (_jsx(CloudUploadIcon, {})) })), trans.__('Assign the Notebook Runtime')] }, 'null')), !!preActions && preActions, Object.entries(groupedRuntimeDescs ?? {}).map(([group, runtimeDescs]) => (_jsxs(ActionList.Group, { children: [_jsx(ActionList.GroupHeading, { children: group }), runtimeDescs.map(candidateRuntimeDesc => {
|
|
287
|
-
const
|
|
288
|
-
|
|
464
|
+
const choiceKey = codeSandboxDescKey(candidateRuntimeDesc);
|
|
465
|
+
const annotation = candidateRuntimeDesc.runtimeName
|
|
466
|
+
? ` - ${candidateRuntimeDesc.runtimeName}`
|
|
289
467
|
: candidateRuntimeDesc.kernelId
|
|
290
468
|
? ` - ${candidateRuntimeDesc.kernelId}`
|
|
291
469
|
: '';
|
|
@@ -294,37 +472,40 @@ export function CodeSandboxPicker(props) {
|
|
|
294
472
|
RUNTIME_DISPLAY_NAME_MAX_LENGTH
|
|
295
473
|
? candidateRuntimeDesc.displayName.slice(0, RUNTIME_DISPLAY_NAME_MAX_LENGTH) + '…'
|
|
296
474
|
: (candidateRuntimeDesc.displayName ?? '');
|
|
297
|
-
return (_jsxs(ActionList.Item, { title: fullDisplayName, selected: (candidateRuntimeDesc
|
|
298
|
-
runtimeDesc?.location ||
|
|
299
|
-
(isRuntimeRemote(candidateRuntimeDesc.location) &&
|
|
300
|
-
isRuntimeRemote(runtimeDesc?.location ?? 'local'))) &&
|
|
301
|
-
(candidateRuntimeDesc.kernelId ??
|
|
302
|
-
candidateRuntimeDesc.name) ===
|
|
303
|
-
(runtimeDesc?.kernelId ?? runtimeDesc?.name), onSelect: () => {
|
|
475
|
+
return (_jsxs(ActionList.Item, { title: fullDisplayName, selected: isSameCodeSandbox(candidateRuntimeDesc, runtimeDesc), onSelect: () => {
|
|
304
476
|
setRuntimeDesc(candidateRuntimeDesc);
|
|
305
|
-
}, children: [_jsx(ActionList.LeadingVisual, { children: candidateRuntimeDesc.location === 'local' ? (_jsx(LaptopSimpleIcon, {})) : candidateRuntimeDesc.location === 'browser' ? (_jsx(BrowserIcon, {})) : (_jsx(CloudUploadIcon, {})) }), displayName + annotation.slice(0, 10)
|
|
306
|
-
|
|
477
|
+
}, children: [_jsx(ActionList.LeadingVisual, { children: candidateRuntimeDesc.location === 'local' ? (_jsx(LaptopSimpleIcon, {})) : candidateRuntimeDesc.location === 'browser' ? (_jsx(BrowserIcon, {})) : (_jsx(CloudUploadIcon, {})) }), displayName + annotation.slice(0, 10), _jsxs(ActionList.TrailingVisual, { children: [candidateRuntimeDesc.name && (_jsx(Label, { size: "small", variant: "secondary", children: candidateRuntimeDesc.name })), ' ', candidateRuntimeDesc
|
|
478
|
+
.provider && (_jsx(Label, { size: "small", variant: "accent", children: codeSandboxVariantTitle(candidateRuntimeDesc.provider) }))] })] }, choiceKey));
|
|
479
|
+
})] }, group))), !!postActions && (_jsxs(_Fragment, { children: [_jsx(ActionList.Divider, {}), postActions] }))] }) })] })) : display === 'dropdown' ? (
|
|
480
|
+
/*
|
|
481
|
+
* Section for the dropdown display.
|
|
482
|
+
*
|
|
483
|
+
* The same choices as the radio column, in the control the launcher
|
|
484
|
+
* uses — one question asked one way. A list of nine environments is
|
|
485
|
+
* nine rows of radio buttons before anything else on the dialog can
|
|
486
|
+
* be read; closed, it is one line.
|
|
487
|
+
*/
|
|
488
|
+
_jsxs(_Fragment, { children: [defaultSet &&
|
|
489
|
+
sandboxLayout === 'separated' &&
|
|
490
|
+
runningEntries.length > 0 &&
|
|
491
|
+
radioSections(runningEntries), defaultSet && (
|
|
492
|
+
// Room below: the controls of a new sandbox follow, and the
|
|
493
|
+
// toggle of the home folder sat against the dropdown.
|
|
494
|
+
_jsxs(FormControl, { sx: { marginBottom: 4 }, children: [_jsx(FormControl.Label, { children: sandboxLayout === 'separated'
|
|
495
|
+
? 'Assign a new Code Sandbox'
|
|
496
|
+
: 'Environment' }), _jsx(CodeSandboxEnvironmentSelect, { disabled: disabled, options: sandboxLayout === 'separated'
|
|
497
|
+
? environmentOnlyOptions
|
|
498
|
+
: dropdownOptions, selectedKey: runtimeDesc ? codeSandboxDescKey(runtimeDesc) : undefined, onSelect: key => {
|
|
499
|
+
const chosen = dropdownDescs.get(key);
|
|
500
|
+
if (chosen) {
|
|
501
|
+
setRuntimeDesc(chosen);
|
|
502
|
+
}
|
|
503
|
+
} })] })), !!postActions && _jsx(_Fragment, { children: postActions })] })) : (
|
|
307
504
|
/*
|
|
308
505
|
* Section for Radio display.
|
|
309
506
|
*/
|
|
310
|
-
_jsxs(_Fragment, { children: [defaultSet &&
|
|
311
|
-
|
|
312
|
-
// A kernel identifies a runtime that already runs; an
|
|
313
|
-
// environment to start one in has none, and is named
|
|
314
|
-
// by where it runs and what it runs.
|
|
315
|
-
_jsxs(Box, { title: k.name, children: [_jsxs(FormControl, { children: [_jsx(Radio, { value: k.kernelId, onChange: () => {
|
|
316
|
-
setRuntimeDesc(k);
|
|
317
|
-
}, checked: (k.location === runtimeDesc?.location ||
|
|
318
|
-
(isRuntimeRemote(k.location) &&
|
|
319
|
-
isRuntimeRemote(runtimeDesc?.location ?? 'local'))) &&
|
|
320
|
-
(k.kernelId ?? k.name) ===
|
|
321
|
-
(runtimeDesc?.kernelId ?? runtimeDesc?.name) }), _jsx(FormControl.Label, { children: _jsxs(Box, { display: "flex", sx: { alignItems: 'baseline' }, children: [_jsx(Box, { children: k.displayName }), k.kernelId && (_jsx(Text, { sx: {
|
|
322
|
-
ml: 2,
|
|
323
|
-
fontSize: 0,
|
|
324
|
-
color: 'fg.muted',
|
|
325
|
-
fontFamily: 'mono'
|
|
326
|
-
}, title: k.kernelId, children: k.kernelId.slice(0, 8) })), k.kernelId && k.location === 'remote' && (_jsx(Box, { ml: 3, mt: 1, children: _jsx(CreditsIndicator, { kernelId: k.kernelId, serviceManager: multiServiceManager.remote }, "credits-indicator") }))] }) }), _jsx(FormControl.Caption, { children: _jsxs(LabelGroup, { sx: { marginTop: 1 }, children: [_jsx(Label, { variant: "secondary", children: k.name }), _jsx(Label, { variant: "secondary", sx: { marginLeft: 1 }, children: k.location }), k.burningRate && (_jsxs(Label, { variant: "sponsors", sx: { marginLeft: 1 }, children: [k.burningRate, " credits/second"] })), k.gpu && (_jsx(Label, { variant: "success", sx: { marginLeft: 1 }, children: "GPU" }))] }) })] }), _jsx(ActionList.Divider, {})] }, `${k.location}:${k.kernelId ?? k.name}`));
|
|
327
|
-
})] }, group))) })), !!postActions && _jsx(_Fragment, { children: postActions })] })), withNewSandboxControls && isNewSandbox && (
|
|
507
|
+
_jsxs(_Fragment, { children: [defaultSet &&
|
|
508
|
+
radioSections(Object.entries(groupedRuntimeDescs ?? {})), !!postActions && _jsx(_Fragment, { children: postActions })] })), withNewSandboxControls && isNewSandbox && (
|
|
328
509
|
// The user asked for a NEW sandbox: the questions are the launcher's,
|
|
329
510
|
// asked through the launcher's own controls. A sandbox of this page
|
|
330
511
|
// or of this server reserves nothing, so only the time of a remote
|
|
@@ -342,6 +523,6 @@ export function CodeSandboxPicker(props) {
|
|
|
342
523
|
// the name travels with it, rather than beside it.
|
|
343
524
|
setRuntimeDesc({ ...runtimeDesc, displayName: value });
|
|
344
525
|
}
|
|
345
|
-
},
|
|
526
|
+
}, homeFolder: homeFolder, onHomeFolderToggle: () => setHomeFolder(current => !current) })), variables.available && (_jsx(CodeSandboxVariables, { selectedVariables: variables.selected, setSelectVariable: variables.setSelected, transferVariables: variables.transfer, setTransferVariable: variables.setTransfer, kernelVariables: variables.variables, translator: translator }))] }));
|
|
346
527
|
}
|
|
347
528
|
export default CodeSandboxPicker;
|
|
@@ -1,8 +1,4 @@
|
|
|
1
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
2
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
7
3
|
import { nullTranslator } from '@jupyterlab/translation';
|
|
8
4
|
import { ActionList } from '@primer/react';
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
-
* Distributed under the terms of the Modified BSD License.
|
|
5
|
-
*/
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
2
|
import { FormControl, IconButton, Text, TextInput } from '@primer/react';
|
|
7
3
|
import { Box } from '@datalayer/primer-addons';
|
|
8
|
-
import {
|
|
4
|
+
import { CreditCardIcon } from '@primer/octicons-react';
|
|
9
5
|
import { Slider } from '@datalayer/primer-addons';
|
|
10
6
|
/**
|
|
11
7
|
* Maximal time reservable for a runtime in minutes.
|
|
@@ -45,5 +41,7 @@ export function CodeSandboxReservationControl(props) {
|
|
|
45
41
|
gridTemplateColumns: 'max-content 1fr max-content max-content',
|
|
46
42
|
gridGap: 'var(--stack-gap-condensed)',
|
|
47
43
|
width: '100%',
|
|
48
|
-
}, children: [_jsx(Slider, { step: 1, min: 1, max: max, value: displayedTime, onChange: handleTimeChange, disabled: disabled, label: "", displayValue: false }), _jsx(TextInput, { type: "number", step: "1", min: "1", max: max, disabled: disabled, value: displayedTime.toFixed(2), onChange: handleTimeChange }), (max === 0 || max > Number.EPSILON) && (_jsxs(_Fragment, { children: [
|
|
44
|
+
}, children: [_jsx(Slider, { step: 1, min: 1, max: max, value: displayedTime, onChange: handleTimeChange, disabled: disabled, label: "", displayValue: false }), _jsx(TextInput, { type: "number", step: "1", min: "1", max: max, disabled: disabled, value: displayedTime.toFixed(2), onChange: handleTimeChange }), (max === 0 || max > Number.EPSILON) && (_jsxs(_Fragment, { children: [_jsx(Text, { children: max < requestedMax
|
|
45
|
+
? `out of ${max} minutes`
|
|
46
|
+
: `out of ${max} available minutes` }), addCredits && (_jsx(IconButton, { icon: CreditCardIcon, "aria-label": "Check your Plan", variant: "invisible", onClick: () => addCredits() }))] }))] }), _jsxs(FormControl.Caption, { children: ["Maximum execution time that can be consumed by the runtime. It must be less than", ' ', (MAXIMAL_CODE_SANDBOX_TIME_RESERVATION_MINUTES / 60).toFixed(0), " hours.", burningRate && (_jsxs(_Fragment, { children: [_jsx("br", {}), `With the current value, the runtime execution will consume at most ${(time * burningRate * 60).toFixed(2)} credits.`] }))] }), error && (_jsx(FormControl.Validation, { variant: "error", children: error }))] })) : (_jsx(_Fragment, {}));
|
|
49
47
|
}
|
|
@@ -11,6 +11,11 @@ export interface CodeSandboxTransfer {
|
|
|
11
11
|
runtime: Partial<Omit<IRuntimeOptions, 'kernelType'> & {
|
|
12
12
|
id: string;
|
|
13
13
|
displayName: string;
|
|
14
|
+
/**
|
|
15
|
+
* The pod of an external sandbox (Daytona, E2B), which has no kernel of
|
|
16
|
+
* its own — the session binds it through the runtimes proxy by this.
|
|
17
|
+
*/
|
|
18
|
+
runtime_name: string;
|
|
14
19
|
}> | null;
|
|
15
20
|
/**
|
|
16
21
|
* List of selected variables
|
|
@@ -1,9 +1,24 @@
|
|
|
1
1
|
import { SessionContext } from '@jupyterlab/apputils';
|
|
2
2
|
import { ITranslator } from '@jupyterlab/translation';
|
|
3
3
|
import { IMultiServiceManager } from '../../runtimes';
|
|
4
|
-
import { IRuntimeDesc } from '../../models';
|
|
4
|
+
import { IRuntimeDesc, type IDatalayerEnvironment } from '../../models';
|
|
5
|
+
import { CodeSandboxVariant } from '../../models/CodeSandboxVariant';
|
|
5
6
|
export type IDatalayerCodeSandboxDesc = IRuntimeDesc & {
|
|
6
7
|
gpu?: string;
|
|
8
|
+
/** The provider the environment belongs to — see `CodeSandboxVariant`. */
|
|
9
|
+
provider?: CodeSandboxVariant;
|
|
10
|
+
/**
|
|
11
|
+
* The listing entry a NEW sandbox would be started from, carried whole.
|
|
12
|
+
*
|
|
13
|
+
* What the picker has to say about an environment — whose it is, which
|
|
14
|
+
* version it launches, the class that prices it, whether anything was built
|
|
15
|
+
* for this variant — is decided by the rules in `codeSandboxEnvironments`,
|
|
16
|
+
* and they read the entry. Copying a field at a time here is how the
|
|
17
|
+
* launcher and the picker came to disagree about the same environment
|
|
18
|
+
* (PLAN_ENV.md, E1-19). Absent on a sandbox that already runs and on a
|
|
19
|
+
* kernelspec of a server or of the browser.
|
|
20
|
+
*/
|
|
21
|
+
environment?: IDatalayerEnvironment;
|
|
7
22
|
};
|
|
8
23
|
/**
|
|
9
24
|
* Create the grouped runtime descriptions.
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
import { nullTranslator } from '@jupyterlab/translation';
|
|
6
6
|
const ASSIGN_NEW_RUNTIME_LABEL = 'Assign a new Code Sandbox';
|
|
7
7
|
import { ensureCodeSandboxGivenName } from './CodeSandboxNames';
|
|
8
|
+
import { isCodeSandboxProviderAvailable } from './codeSandboxProviders';
|
|
9
|
+
import { CodeSandboxVariant, codeSandboxVariantOf, } from '../../models/CodeSandboxVariant';
|
|
8
10
|
const ASSIGN_EXISTING_REMOTE_RUNTIME_LABEL = 'Assign an existing Remote Code Sandbox';
|
|
9
11
|
const ASSIGN_EXISTING_RUNTIME_LABEL = 'Assign an existing Code Sandbox';
|
|
10
12
|
/**
|
|
@@ -18,12 +20,25 @@ export function getGroupedCodeSandboxDescs(multiServiceManager, kernelId, transl
|
|
|
18
20
|
// identifier, the specification only names it. Only the environments to
|
|
19
21
|
// start a new runtime in come from the specifications, and they wait.
|
|
20
22
|
const specs = multiServiceManager.local.kernelspecs.specs;
|
|
21
|
-
|
|
23
|
+
/*
|
|
24
|
+
* The kernels of a Jupyter Server belong to the page that talks to one —
|
|
25
|
+
* inside JupyterLab. The web application's "local" manager points at
|
|
26
|
+
* whatever server its configuration names, and offering those kernels
|
|
27
|
+
* there lists sandboxes the user never started and cannot reason about.
|
|
28
|
+
* One rule for the whole file: the provider registry answers it, for the
|
|
29
|
+
* existing sandboxes here exactly as for the new-sandbox group below.
|
|
30
|
+
*/
|
|
31
|
+
const jupyterProviderAvailable = isCodeSandboxProviderAvailable('local', multiServiceManager);
|
|
32
|
+
const sessions = jupyterProviderAvailable
|
|
33
|
+
? multiServiceManager.local.sessions.running()
|
|
34
|
+
: [];
|
|
22
35
|
const kernels = {};
|
|
23
36
|
// Add the sessions.
|
|
24
37
|
const runningSessions = Array.from(sessions)
|
|
25
38
|
.filter(session => session.kernel && session.kernel.id !== kernelId)
|
|
26
|
-
|
|
39
|
+
// Annotated for the same reason as the chain below: what is pushed into
|
|
40
|
+
// this list includes sandboxes that carry a pod rather than a kernel.
|
|
41
|
+
.map((session) => {
|
|
27
42
|
const spec = specs?.kernelspecs[session.kernel.name];
|
|
28
43
|
return {
|
|
29
44
|
kernelId: session.kernel.id,
|
|
@@ -50,9 +65,11 @@ export function getGroupedCodeSandboxDescs(multiServiceManager, kernelId, transl
|
|
|
50
65
|
.filter(filterKernels);
|
|
51
66
|
// Add the running runtimes.
|
|
52
67
|
const listedAsSession = runningSessions.map(s => s.kernelId);
|
|
53
|
-
const runningKernels = Array.from(multiServiceManager.local.kernels.running())
|
|
68
|
+
const runningKernels = Array.from(jupyterProviderAvailable ? multiServiceManager.local.kernels.running() : [])
|
|
54
69
|
.filter(k => !listedAsSession.includes(k.id))
|
|
55
|
-
|
|
70
|
+
// Annotated, because the element type of the chain below is taken from
|
|
71
|
+
// this first link: a sandbox with no kernel joins it further down.
|
|
72
|
+
.map((k) => {
|
|
56
73
|
const spec = specs?.kernelspecs[k.name];
|
|
57
74
|
return {
|
|
58
75
|
kernelId: k.id,
|
|
@@ -63,15 +80,33 @@ export function getGroupedCodeSandboxDescs(multiServiceManager, kernelId, transl
|
|
|
63
80
|
};
|
|
64
81
|
})
|
|
65
82
|
.concat((multiServiceManager.remote?.runtimesManager.get() ?? [])
|
|
66
|
-
|
|
83
|
+
/*
|
|
84
|
+
* A sandbox with no KERNEL is still a sandbox that runs.
|
|
85
|
+
*
|
|
86
|
+
* The ones of an external provider — Kaggle, Modal — run at their
|
|
87
|
+
* provider and carry no kernel of this platform, so their `id` is
|
|
88
|
+
* empty. Asking for a truthy one dropped every one of them: they
|
|
89
|
+
* appeared in the table of the Code Sandboxes and nowhere in the
|
|
90
|
+
* picker, which is the one place a notebook can be pointed at them.
|
|
91
|
+
* What they always have is the pod that stands for them.
|
|
92
|
+
*/
|
|
93
|
+
.filter(k => (k.id || k.runtime_name) && !listedAsSession.includes(k.id))
|
|
67
94
|
.map(runtime => {
|
|
68
95
|
const environment = multiServiceManager
|
|
69
96
|
.remote.environments.get()
|
|
70
97
|
.find(env => env.name === runtime.environment.name);
|
|
71
98
|
return {
|
|
72
|
-
|
|
99
|
+
// Keep the control-plane identity as well as the Jupyter kernel
|
|
100
|
+
// identity. External sandboxes may not have a kernel until they
|
|
101
|
+
// are attached, but their runtime uid is already unique.
|
|
102
|
+
id: runtime.uid,
|
|
103
|
+
// Empty for an external sandbox: it has none, and saying so is
|
|
104
|
+
// what keeps the picker from trying to connect to one.
|
|
105
|
+
kernelId: runtime.id || undefined,
|
|
73
106
|
name: environment.name,
|
|
74
107
|
language: environment.language,
|
|
108
|
+
provider: codeSandboxVariantOf(environment?.owner ??
|
|
109
|
+
runtime.environment?.owner),
|
|
75
110
|
displayName:
|
|
76
111
|
// The name it was GIVEN first: the title of the environment is
|
|
77
112
|
// what it runs, and every sandbox of that environment answers
|
|
@@ -79,7 +114,7 @@ export function getGroupedCodeSandboxDescs(multiServiceManager, kernelId, transl
|
|
|
79
114
|
// can be told apart here.
|
|
80
115
|
runtime.given_name || environment.title || environment.name,
|
|
81
116
|
location: 'remote',
|
|
82
|
-
|
|
117
|
+
runtimeName: runtime.runtime_name,
|
|
83
118
|
gpu: environment.resources?.['nvidia.com/gpu'],
|
|
84
119
|
};
|
|
85
120
|
}))
|
|
@@ -101,7 +136,9 @@ export function getGroupedCodeSandboxDescs(multiServiceManager, kernelId, transl
|
|
|
101
136
|
// another — and a runtime listed twice would be picked twice.
|
|
102
137
|
const seen = new Set();
|
|
103
138
|
const distinctRunning = runningSessions.filter(desc => {
|
|
104
|
-
|
|
139
|
+
// A kernel-less sandbox is named by its pod; without it every external
|
|
140
|
+
// sandbox of one environment collapsed into a single entry.
|
|
141
|
+
const key = `${desc.location}:${desc.kernelId ?? desc.runtimeName ?? desc.name}`;
|
|
105
142
|
if (seen.has(key)) {
|
|
106
143
|
return false;
|
|
107
144
|
}
|
|
@@ -117,7 +154,14 @@ export function getGroupedCodeSandboxDescs(multiServiceManager, kernelId, transl
|
|
|
117
154
|
kernels[key] = runningSessions;
|
|
118
155
|
}
|
|
119
156
|
// Environments.
|
|
120
|
-
|
|
157
|
+
/*
|
|
158
|
+
* The sandboxes of a Jupyter Server, which is a provider like the others.
|
|
159
|
+
*
|
|
160
|
+
* It is the one provider that only exists where the page is talking to such
|
|
161
|
+
* a server: inside JupyterLab. Elsewhere its kernels are somebody else's,
|
|
162
|
+
* and offering them promises what cannot be reached.
|
|
163
|
+
*/
|
|
164
|
+
const environments = Object.values(jupyterProviderAvailable ? (specs?.kernelspecs ?? {}) : {})
|
|
121
165
|
.filter(spec => !!spec)
|
|
122
166
|
.map(spec => ({
|
|
123
167
|
name: spec.name,
|
|
@@ -125,10 +169,21 @@ export function getGroupedCodeSandboxDescs(multiServiceManager, kernelId, transl
|
|
|
125
169
|
displayName: spec.display_name,
|
|
126
170
|
gpu: spec.resources?.['nvidia.com/gpu'],
|
|
127
171
|
location: 'local',
|
|
172
|
+
provider: CodeSandboxVariant.JupyterServer,
|
|
128
173
|
}))
|
|
129
174
|
.filter(filterKernels);
|
|
130
|
-
|
|
131
|
-
|
|
175
|
+
/*
|
|
176
|
+
* Every provider that can be used from here, and only those.
|
|
177
|
+
*
|
|
178
|
+
* A provider is a place a sandbox runs — the platform, this Jupyter Server,
|
|
179
|
+
* the browser — and each is offered when it is REACHABLE, not according to
|
|
180
|
+
* which application is asking. Withholding the platform inside JupyterLab
|
|
181
|
+
* took `ai-agents-env` off the list and left no way to launch a remote
|
|
182
|
+
* sandbox from there at all; the rule that was wanted is the other one, and
|
|
183
|
+
* it is stated where the Jupyter Server is read below.
|
|
184
|
+
*/
|
|
185
|
+
const remoteEnvironments = multiServiceManager.remote?.environments.get() ?? [];
|
|
186
|
+
environments.push(...remoteEnvironments
|
|
132
187
|
.map(spec => ({
|
|
133
188
|
name: spec.name,
|
|
134
189
|
language: spec.language,
|
|
@@ -136,8 +191,10 @@ export function getGroupedCodeSandboxDescs(multiServiceManager, kernelId, transl
|
|
|
136
191
|
location: 'remote',
|
|
137
192
|
gpu: spec.resources?.['nvidia.com/gpu'],
|
|
138
193
|
burningRate: spec.burning_rate,
|
|
194
|
+
provider: codeSandboxVariantOf(spec?.owner),
|
|
195
|
+
environment: spec,
|
|
139
196
|
}))
|
|
140
|
-
.filter(filterKernels)
|
|
197
|
+
.filter(filterKernels));
|
|
141
198
|
environments.push(...Object.values(multiServiceManager.browser?.kernelspecs.specs?.kernelspecs ?? {})
|
|
142
199
|
.filter(spec => !!spec)
|
|
143
200
|
.map(spec => ({
|