@datalayer/agent-runtimes 1.0.29 → 1.3.11
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 +2 -1
- package/lib/api/notifications.d.ts +21 -6
- package/lib/api/notifications.js +32 -14
- package/lib/api/runtimes/environments.d.ts +406 -4
- package/lib/api/runtimes/environments.js +641 -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 +20 -2
- package/lib/chat/ChatFloating.js +196 -118
- 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/ButtonGlow.d.ts +9 -0
- package/lib/chat/display/ButtonGlow.js +60 -0
- package/lib/chat/display/EmptyState.d.ts +15 -1
- package/lib/chat/display/EmptyState.js +81 -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 +21 -102
- package/lib/chat/header/ChatViewModeToggle.d.ts +29 -0
- package/lib/chat/header/ChatViewModeToggle.js +55 -0
- package/lib/chat/index.d.ts +5 -1
- package/lib/chat/index.js +9 -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 +35 -0
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +27 -29
- package/lib/components/code-sandboxes/CodeSandboxLauncher.d.ts +9 -0
- package/lib/components/code-sandboxes/CodeSandboxLauncher.js +95 -23
- package/lib/components/code-sandboxes/CodeSandboxNames.js +7 -6
- package/lib/components/code-sandboxes/CodeSandboxPicker.js +89 -42
- 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 +13 -1
- package/lib/components/code-sandboxes/CodeSandboxUtils.js +10 -4
- 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 +97 -0
- package/lib/components/code-sandboxes/codeSandboxEnvironments.js +184 -0
- package/lib/components/code-sandboxes/codeSandboxProviders.js +14 -5
- package/lib/components/code-sandboxes/index.d.ts +1 -0
- package/lib/components/code-sandboxes/index.js +1 -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/icons/ArtifactIcon.js +2 -1
- 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 +4 -4
- 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/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 +903 -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 +124 -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 +1679 -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 +71 -0
- package/lib/loop/plugins/page-layout/index.js +160 -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 +181 -0
- package/lib/loop/presets.js +141 -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 +13 -5
- package/lib/models/CodeSandboxVariant.js +17 -5
- package/lib/models/Content.d.ts +26 -0
- package/lib/models/Deck.d.ts +14 -0
- package/lib/models/Environment.d.ts +678 -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/ItemType.d.ts +1 -1
- 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 +17 -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 +2 -2
- package/lib/models/environments.generated.d.ts +141 -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 +125 -0
- package/lib/protocols/BrowserAgentAdapter.js +317 -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 +8 -3
- package/lib/runtimes/actions.js +46 -14
- 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 +129 -112
- package/lib/specs/agents/agents.js +8200 -5044
- package/lib/specs/evals.js +9 -0
- package/lib/specs/frontendTools.d.ts +4 -0
- package/lib/specs/frontendTools.js +77 -3
- package/lib/specs/mcpServers.d.ts +1 -0
- package/lib/specs/mcpServers.js +38 -15
- 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 +31 -0
- package/lib/specs/personas.js +1 -1
- package/lib/specs/skills.js +7 -7
- 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 +14 -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/tools/adapters/commands/index.js +5 -0
- 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/outputs.d.ts +2 -0
- 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/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_mcp_servers.py +2 -2
- package/scripts/codegen/generate_models.py +40 -15
- package/scripts/codegen/generate_outputs.py +2 -0
- package/scripts/codegen/generate_sandbox_agents.py +76 -62
- package/scripts/codegen/generate_skills.py +2 -2
- package/scripts/codegen/generate_teams.py +178 -4
- package/scripts/codegen/generate_tools.py +6 -4
- package/scripts/gen_workers.py +278 -110
- 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
- /package/lib/models/{Dataset.js → Deck.js} +0 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* One sandbox, four places it can run.
|
|
7
|
+
*
|
|
8
|
+
* `browser` is Pyodide in the page. The other three are server-backed and
|
|
9
|
+
* differ in what the server is asked to run: a Jupyter server beside you, an
|
|
10
|
+
* anonymous one anybody can reach, or a Datalayer runtime. A workspace should
|
|
11
|
+
* not care which; the notebook binds to whatever kernel is there, and the
|
|
12
|
+
* switch is one control.
|
|
13
|
+
*
|
|
14
|
+
* Local and `datalayer` bring an agent with them. Browser and anonymous
|
|
15
|
+
* Jupyter are sandbox-only, which is why `hasAgent` is part of the target's
|
|
16
|
+
* description rather than something each caller works out.
|
|
17
|
+
*
|
|
18
|
+
* The composite owns both implementations and delegates to the active one, so
|
|
19
|
+
* switching is a real swap rather than a flag: the old backing is disconnected
|
|
20
|
+
* before the new one starts, and every signal a view reads follows across.
|
|
21
|
+
*
|
|
22
|
+
* @module loop/plugins/agents/switchable
|
|
23
|
+
*/
|
|
24
|
+
import { computed, signal, } from '@datalayer/reactor';
|
|
25
|
+
import { browserSource, createBrowserSandboxService, } from './browserService';
|
|
26
|
+
import { createServerSandboxService, } from './service';
|
|
27
|
+
/**
|
|
28
|
+
* The anonymous Jupyter server the `jupyter` target uses.
|
|
29
|
+
*
|
|
30
|
+
* The same one the jupyter-react examples point at: a real server, reachable
|
|
31
|
+
* without an account, so a workspace can execute code with nothing installed
|
|
32
|
+
* and nobody signed in.
|
|
33
|
+
*/
|
|
34
|
+
export const ANONYMOUS_JUPYTER_URL = 'https://prod1.datalayer.run/api/jupyter-server';
|
|
35
|
+
export const ANONYMOUS_JUPYTER_TOKEN = '60c1661cc408f978c309d04157af55c9588ff9557c9380e4fb50785750703da6';
|
|
36
|
+
/** The four, in the order the control shows them: nearest first. */
|
|
37
|
+
export const SANDBOX_TARGETS = [
|
|
38
|
+
'browser',
|
|
39
|
+
'local',
|
|
40
|
+
'jupyter',
|
|
41
|
+
'datalayer',
|
|
42
|
+
];
|
|
43
|
+
export const TARGET_SPECS = {
|
|
44
|
+
browser: {
|
|
45
|
+
label: 'Browser',
|
|
46
|
+
hint: 'Python in this page (Pyodide), with the agent loop running here too. Only the model is asked over the network.',
|
|
47
|
+
// The agent runs here now, with the Vercel AI SDK. "No server" stopped
|
|
48
|
+
// meaning "no agent" when the loop learned to turn in the page — and the
|
|
49
|
+
// location decides the harness, whatever a spec's own `harness` asks for,
|
|
50
|
+
// because a page cannot turn a pydantic-ai loop at all.
|
|
51
|
+
hasAgent: true,
|
|
52
|
+
noAgentReason: '',
|
|
53
|
+
},
|
|
54
|
+
local: {
|
|
55
|
+
label: 'Local',
|
|
56
|
+
hint: 'A local agent, with the Jupyter server it starts beside itself.',
|
|
57
|
+
hasAgent: true,
|
|
58
|
+
noAgentReason: '',
|
|
59
|
+
/*
|
|
60
|
+
* `jupyter-server` with the URL explicitly cleared.
|
|
61
|
+
*
|
|
62
|
+
* The variant names *where the sandbox is relative to the agent*, not
|
|
63
|
+
* which server it is: colocated, so the agent starts one and the UI drives
|
|
64
|
+
* that. Sending no URL is not the same as sending an empty one — the
|
|
65
|
+
* server reads a missing URL as "keep what you have", so coming here from
|
|
66
|
+
* the Jupyter target left the local agent driving the anonymous server on
|
|
67
|
+
* prod1, which is the opposite of what this target means.
|
|
68
|
+
*/
|
|
69
|
+
configure: {
|
|
70
|
+
variant: 'jupyter-server',
|
|
71
|
+
jupyter_url: '',
|
|
72
|
+
jupyter_token: '',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
jupyter: {
|
|
76
|
+
label: 'Jupyter',
|
|
77
|
+
// Named, unlike Local and Datalayer, whose servers belong to their agent.
|
|
78
|
+
hint: 'A named Jupyter server: the anonymous one on prod1.datalayer.run.',
|
|
79
|
+
hasAgent: false,
|
|
80
|
+
noAgentReason: 'No agent on an anonymous Jupyter server',
|
|
81
|
+
configure: {
|
|
82
|
+
variant: 'jupyter-server',
|
|
83
|
+
jupyter_url: ANONYMOUS_JUPYTER_URL,
|
|
84
|
+
jupyter_token: ANONYMOUS_JUPYTER_TOKEN,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
datalayer: {
|
|
88
|
+
label: 'Datalayer',
|
|
89
|
+
hint: 'A Datalayer runtime running the agent this workspace asks for.',
|
|
90
|
+
hasAgent: true,
|
|
91
|
+
noAgentReason: '',
|
|
92
|
+
/*
|
|
93
|
+
* No `configure`, and that is the change.
|
|
94
|
+
*
|
|
95
|
+
* It used to tell the *host's* agent-runtimes server to put its sandbox on
|
|
96
|
+
* a Datalayer runtime — a Jupyter server in the cloud with the agent still
|
|
97
|
+
* running locally, which is not what the target says it is. A person
|
|
98
|
+
* picked Datalayer and stayed on whatever agent the host had.
|
|
99
|
+
*
|
|
100
|
+
* The agent is launched from an agentspec instead, by
|
|
101
|
+
* `DatalayerAgentBridge`, which reports the runtime it gets back.
|
|
102
|
+
*/
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
/** Whether an agent runs on this target — the question the chat asks. */
|
|
106
|
+
export function targetHasAgent(target) {
|
|
107
|
+
return TARGET_SPECS[target]?.hasAgent ?? false;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Whether that agent's loop turns in this page rather than on a server.
|
|
111
|
+
*
|
|
112
|
+
* The other half of {@link targetHasAgent}, and the one that decides which
|
|
113
|
+
* protocol a chat speaks: an in-page agent is reached by calling it, not by
|
|
114
|
+
* addressing it.
|
|
115
|
+
*/
|
|
116
|
+
export function targetRunsAgentInPage(target) {
|
|
117
|
+
return target === 'browser';
|
|
118
|
+
}
|
|
119
|
+
export function createSwitchableSandboxService({ serverUrl, initialTarget = 'local', kernelSource, localAgent, blueprint, }) {
|
|
120
|
+
const target = signal(initialTarget);
|
|
121
|
+
// Both implementations exist from the start, but neither connects until it is
|
|
122
|
+
// the active one — a Pyodide kernel that nobody asked for is megabytes of
|
|
123
|
+
// download, and a WebSocket to a server nobody chose is noise in the logs.
|
|
124
|
+
const server = createServerSandboxService(serverUrl);
|
|
125
|
+
const browser = createBrowserSandboxService(kernelSource ?? browserSource());
|
|
126
|
+
const active = computed(() => target.value === 'browser' ? browser : server);
|
|
127
|
+
let disconnect = null;
|
|
128
|
+
let agentId;
|
|
129
|
+
const snapshot = computed(() => active.value.snapshot.value);
|
|
130
|
+
const status = computed(() => active.value.status.value);
|
|
131
|
+
const ready = computed(() => active.value.ready.value);
|
|
132
|
+
const lastExecution = computed(() => active.value.lastExecution.value);
|
|
133
|
+
/**
|
|
134
|
+
* Ask the server to run what this target means, and wait for it to say yes.
|
|
135
|
+
*
|
|
136
|
+
* Awaited and checked rather than fired and forgotten: a switch that quietly
|
|
137
|
+
* failed left the control showing the new target while the old sandbox kept
|
|
138
|
+
* running, which is the worst of both — the header lies and nothing moved.
|
|
139
|
+
* The error travels back to the caller so the control can stay where it was.
|
|
140
|
+
*/
|
|
141
|
+
async function applyVariant(next) {
|
|
142
|
+
/*
|
|
143
|
+
* Local needs both: an agent, and a sandbox told where to be.
|
|
144
|
+
*
|
|
145
|
+
* It used to return here, having started the agent — and never sent the
|
|
146
|
+
* `configure` below. The sandbox therefore kept whatever it was last set
|
|
147
|
+
* to, so arriving from the Jupyter target left the local agent executing
|
|
148
|
+
* on the anonymous server at prod1: `!hostname` in a cell answered with
|
|
149
|
+
* a pod name from the cloud.
|
|
150
|
+
*
|
|
151
|
+
* Starting the agent is a precondition for the switch, not the whole of
|
|
152
|
+
* it. The configure that follows is what makes the sandbox colocated.
|
|
153
|
+
*/
|
|
154
|
+
if (next === 'local') {
|
|
155
|
+
// The blueprint — a capacity plugin's contribution — wins over the
|
|
156
|
+
// host's own `localAgent`: mounting the capacity is the more specific
|
|
157
|
+
// statement about what this workspace runs.
|
|
158
|
+
const createPayload = blueprint?.() ?? localAgent?.createPayload;
|
|
159
|
+
if (createPayload) {
|
|
160
|
+
await ensureLocalAgent(createPayload);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const configure = TARGET_SPECS[next]?.configure;
|
|
164
|
+
if (!configure) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const label = TARGET_SPECS[next].label;
|
|
168
|
+
let response;
|
|
169
|
+
try {
|
|
170
|
+
response = await fetch(`${serverUrl}/api/v1/agents/sandbox/configure`, {
|
|
171
|
+
method: 'POST',
|
|
172
|
+
headers: { 'content-type': 'application/json' },
|
|
173
|
+
body: JSON.stringify(configure),
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
catch (reason) {
|
|
177
|
+
// `fetch` rejects rather than answering when nothing is listening, and
|
|
178
|
+
// the browser's message for that is "Failed to fetch" — which names
|
|
179
|
+
// neither the address nor the thing that should be at it. Every target
|
|
180
|
+
// but Browser needs an agent-runtimes server, and the commonest reason
|
|
181
|
+
// a switch does nothing is that nobody started one.
|
|
182
|
+
throw new Error(`${label} needs an agent-runtimes server at ${serverUrl}, and nothing answered there. ` +
|
|
183
|
+
`Start one and try again. (${reason instanceof Error ? reason.message : String(reason)})`, { cause: reason });
|
|
184
|
+
}
|
|
185
|
+
if (!response.ok) {
|
|
186
|
+
throw new Error(`The server could not switch to ${label} (${response.status} ${response.statusText}). ` +
|
|
187
|
+
(await detail(response)));
|
|
188
|
+
}
|
|
189
|
+
// Configure only changes what will be created on the next use. Starting it
|
|
190
|
+
// here makes the segmented control an operation rather than a preference:
|
|
191
|
+
// when the promise resolves, the selected sandbox has actually launched.
|
|
192
|
+
const restart = await fetch(`${serverUrl}/api/v1/agents/sandbox/restart`, {
|
|
193
|
+
method: 'POST',
|
|
194
|
+
});
|
|
195
|
+
if (!restart.ok) {
|
|
196
|
+
throw new Error(`The server could not start ${label} (${restart.status} ${restart.statusText}). ` +
|
|
197
|
+
(await detail(restart)));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Create the agent whose per-agent Jupyter sandbox backs Local.
|
|
202
|
+
*
|
|
203
|
+
* The payload is passed rather than read from the closure: the caller has
|
|
204
|
+
* already established that it exists, and TypeScript cannot carry that
|
|
205
|
+
* narrowing across a function boundary.
|
|
206
|
+
*/
|
|
207
|
+
async function ensureLocalAgent(createPayload) {
|
|
208
|
+
const id = agentId?.trim();
|
|
209
|
+
if (!id) {
|
|
210
|
+
throw new Error('Local needs an agent id before its runtime can start.');
|
|
211
|
+
}
|
|
212
|
+
let existing;
|
|
213
|
+
try {
|
|
214
|
+
existing = await fetch(`${serverUrl}/api/v1/agents/${encodeURIComponent(id)}`);
|
|
215
|
+
}
|
|
216
|
+
catch (reason) {
|
|
217
|
+
throw new Error(`Local needs an agent-runtimes server at ${serverUrl}, and nothing answered there. ` +
|
|
218
|
+
`Start one and try again. (${reason instanceof Error ? reason.message : String(reason)})`, { cause: reason });
|
|
219
|
+
}
|
|
220
|
+
if (existing.ok) {
|
|
221
|
+
// The agent is there, which does not mean its sandbox is. Reconfiguring
|
|
222
|
+
// or restarting the manager stops the per-agent sandboxes, because they
|
|
223
|
+
// were built under the previous settings — so coming back to Local after
|
|
224
|
+
// a spell on Jupyter finds the agent alive and nothing behind it. Asking
|
|
225
|
+
// for the sandbox is idempotent, so it costs a round trip and nothing
|
|
226
|
+
// else when one is already running.
|
|
227
|
+
await ensureLocalSandbox(id);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (existing.status !== 404) {
|
|
231
|
+
throw new Error(`The server could not inspect local agent ${id} (${existing.status} ${existing.statusText}). ` +
|
|
232
|
+
(await detail(existing)));
|
|
233
|
+
}
|
|
234
|
+
const created = await fetch(`${serverUrl}/api/v1/agents`, {
|
|
235
|
+
method: 'POST',
|
|
236
|
+
headers: { 'content-type': 'application/json' },
|
|
237
|
+
body: JSON.stringify({
|
|
238
|
+
// Defaults first, so a blueprint that names its own transport or
|
|
239
|
+
// sandbox variant — the sandbox capacity plugins do — wins over
|
|
240
|
+
// them; the name last, because Local's agent id is not negotiable.
|
|
241
|
+
transport: 'ag-ui',
|
|
242
|
+
sandbox_variant: 'jupyter-server',
|
|
243
|
+
...createPayload,
|
|
244
|
+
name: id,
|
|
245
|
+
}),
|
|
246
|
+
});
|
|
247
|
+
if (!created.ok && created.status !== 409) {
|
|
248
|
+
throw new Error(`The server could not launch local agent ${id} (${created.status} ${created.statusText}). ` +
|
|
249
|
+
(await detail(created)));
|
|
250
|
+
}
|
|
251
|
+
// A 409 means somebody else created it between the two calls above, and
|
|
252
|
+
// that agent is as unlikely to have a sandbox as one found by the GET.
|
|
253
|
+
if (created.status === 409) {
|
|
254
|
+
await ensureLocalSandbox(id);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Make sure the agent has somewhere to run.
|
|
259
|
+
*
|
|
260
|
+
* Creating an agent starts its sandbox, so this is only ever needed for one
|
|
261
|
+
* that already existed. Selecting a target is an operation, not a
|
|
262
|
+
* preference: when the promise resolves the sandbox is meant to be up, and
|
|
263
|
+
* without this the kernel indicator sits empty and the notebook binds to
|
|
264
|
+
* nothing.
|
|
265
|
+
*/
|
|
266
|
+
async function ensureLocalSandbox(id) {
|
|
267
|
+
const response = await fetch(`${serverUrl}/api/v1/agents/${encodeURIComponent(id)}/sandbox/ensure`, { method: 'POST' });
|
|
268
|
+
if (!response.ok) {
|
|
269
|
+
throw new Error(`The server could not start a sandbox for local agent ${id} ` +
|
|
270
|
+
`(${response.status} ${response.statusText}). ` +
|
|
271
|
+
(await detail(response)));
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* What the server said went wrong, when it said anything.
|
|
276
|
+
*
|
|
277
|
+
* FastAPI puts the reason in `detail`, and a status code on its own sends a
|
|
278
|
+
* reader to the network tab for something the response already contained.
|
|
279
|
+
*/
|
|
280
|
+
async function detail(response) {
|
|
281
|
+
try {
|
|
282
|
+
const body = (await response.json());
|
|
283
|
+
return typeof body.detail === 'string' ? body.detail : '';
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
return '';
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function connectActive() {
|
|
290
|
+
disconnect?.();
|
|
291
|
+
/*
|
|
292
|
+
* Datalayer connects nothing here, and that is the whole of the fix.
|
|
293
|
+
*
|
|
294
|
+
* Every other server target is the host's own sandbox, and `connect`
|
|
295
|
+
* subscribes to that server's status stream. Datalayer is not: the agent
|
|
296
|
+
* runs on a runtime allocated from an agentspec, and `DatalayerAgentBridge`
|
|
297
|
+
* reports it through `report()`.
|
|
298
|
+
*
|
|
299
|
+
* Subscribing anyway meant the host's stream kept answering — with the
|
|
300
|
+
* variant it was last configured for, which is `jupyter-server` — and
|
|
301
|
+
* overwrote the bridge's report on its next poll. Picking Datalayer moved
|
|
302
|
+
* the target and left the workspace describing a Jupyter server, which is
|
|
303
|
+
* exactly what it looked like: a switch that did not take.
|
|
304
|
+
*/
|
|
305
|
+
if (target.peek() === 'datalayer') {
|
|
306
|
+
disconnect = null;
|
|
307
|
+
// Said out loud, so the surfaces show "starting" rather than claiming
|
|
308
|
+
// there is nothing here while the runtime is allocated.
|
|
309
|
+
server.setState('starting');
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
disconnect = active.peek().connect(agentId);
|
|
313
|
+
}
|
|
314
|
+
return {
|
|
315
|
+
get kind() {
|
|
316
|
+
return target.peek() === 'browser'
|
|
317
|
+
? 'browser'
|
|
318
|
+
: 'server';
|
|
319
|
+
},
|
|
320
|
+
target,
|
|
321
|
+
snapshot,
|
|
322
|
+
status,
|
|
323
|
+
ready,
|
|
324
|
+
lastExecution,
|
|
325
|
+
serverUrl,
|
|
326
|
+
getServiceManager: () => target.peek() === 'browser' ? browser.getServiceManager() : null,
|
|
327
|
+
report(next) {
|
|
328
|
+
active.peek().report(next);
|
|
329
|
+
},
|
|
330
|
+
setState(state) {
|
|
331
|
+
active.peek().setState(state);
|
|
332
|
+
},
|
|
333
|
+
execute(code) {
|
|
334
|
+
return active.peek().execute(code);
|
|
335
|
+
},
|
|
336
|
+
connect(id) {
|
|
337
|
+
agentId = id;
|
|
338
|
+
/*
|
|
339
|
+
* Starting on Local is a switch nobody made, and the agent still has to
|
|
340
|
+
* exist. A workspace that opens there with something to create it from
|
|
341
|
+
* — a capacity plugin's blueprint, or the host's own payload — used to
|
|
342
|
+
* connect straight to an agent nobody had created: the header said
|
|
343
|
+
* "running", and the first message came back 404. So the agent is
|
|
344
|
+
* ensured first, the way a switch to Local ensures it, and connected
|
|
345
|
+
* once it is there. Only the agent, not the sandbox reconfiguration a
|
|
346
|
+
* switch also does: at start there is no previous target to move away
|
|
347
|
+
* from, and restarting an existing agent's sandbox on every open would
|
|
348
|
+
* cost a reader the kernel they had.
|
|
349
|
+
*/
|
|
350
|
+
const createPayload = target.peek() === 'local' && id
|
|
351
|
+
? (blueprint?.() ?? localAgent?.createPayload)
|
|
352
|
+
: undefined;
|
|
353
|
+
if (!createPayload) {
|
|
354
|
+
connectActive();
|
|
355
|
+
return () => {
|
|
356
|
+
disconnect?.();
|
|
357
|
+
disconnect = null;
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
let cancelled = false;
|
|
361
|
+
server.setState('starting');
|
|
362
|
+
void ensureLocalAgent(createPayload).then(() => {
|
|
363
|
+
if (!cancelled) {
|
|
364
|
+
connectActive();
|
|
365
|
+
}
|
|
366
|
+
}, (error) => {
|
|
367
|
+
// No control to hand this back to at start: the sandbox says so
|
|
368
|
+
// instead, and the console has the reason.
|
|
369
|
+
if (!cancelled) {
|
|
370
|
+
server.setState('error');
|
|
371
|
+
console.error('[loop] Local agent could not be started:', error);
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
return () => {
|
|
375
|
+
cancelled = true;
|
|
376
|
+
disconnect?.();
|
|
377
|
+
disconnect = null;
|
|
378
|
+
};
|
|
379
|
+
},
|
|
380
|
+
async setTarget(next) {
|
|
381
|
+
const previous = target.peek();
|
|
382
|
+
if (next === previous) {
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
// Disconnect first: two live sandboxes would race to report status, and
|
|
386
|
+
// the reader would watch the header flicker between them.
|
|
387
|
+
disconnect?.();
|
|
388
|
+
disconnect = null;
|
|
389
|
+
try {
|
|
390
|
+
await applyVariant(next);
|
|
391
|
+
}
|
|
392
|
+
catch (error) {
|
|
393
|
+
// Put the old one back rather than leaving the workspace with nothing:
|
|
394
|
+
// a failed switch should cost the person the switch, not the sandbox
|
|
395
|
+
// they already had.
|
|
396
|
+
connectActive();
|
|
397
|
+
throw error;
|
|
398
|
+
}
|
|
399
|
+
target.value = next;
|
|
400
|
+
// Connect the new backing, so choosing a target *starts* it rather than
|
|
401
|
+
// arming it for whenever something happens to ask.
|
|
402
|
+
connectActive();
|
|
403
|
+
},
|
|
404
|
+
};
|
|
405
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which member of a team the person is talking to.
|
|
3
|
+
*
|
|
4
|
+
* A team is a group of agents with one front door. The teamspec says who that
|
|
5
|
+
* is — its `supervisor` — and lists the members it routes between, so the
|
|
6
|
+
* selection starts there and moves when a person picks somebody else.
|
|
7
|
+
*
|
|
8
|
+
* The selection is a signal rather than React state because two things read
|
|
9
|
+
* it: the header control that changes it, and the chat that has to send the
|
|
10
|
+
* next prompt to whoever is chosen. Those live in different plugins and must
|
|
11
|
+
* not own copies that can disagree.
|
|
12
|
+
*
|
|
13
|
+
* What switching member does to the conversation is not decided here. It comes
|
|
14
|
+
* from the teamspec's `context.sharing`, because it follows from what the team
|
|
15
|
+
* is: a supervisor team routing between a tutor and a compactor needs one
|
|
16
|
+
* thread both can read, and a delegation team needs the opposite.
|
|
17
|
+
*
|
|
18
|
+
* @module loop/plugins/agents/team
|
|
19
|
+
*/
|
|
20
|
+
import { type ReadonlySignal } from '@datalayer/reactor';
|
|
21
|
+
import type { TeamContextSharing, TeamSpec } from '../../../types/teams';
|
|
22
|
+
import type { BrowserSubagent } from '../../../runtimes/browser';
|
|
23
|
+
/** One agent a person can address, as the picker shows it. */
|
|
24
|
+
export type TeamMember = {
|
|
25
|
+
/** The member's id within the team. */
|
|
26
|
+
id: string;
|
|
27
|
+
/** What the picker calls it. */
|
|
28
|
+
name: string;
|
|
29
|
+
/** The agentspec it runs, without the version. */
|
|
30
|
+
specId: string;
|
|
31
|
+
/** One line about what it is for. */
|
|
32
|
+
description?: string;
|
|
33
|
+
emoji?: string;
|
|
34
|
+
/** The octicon name its agentspec asked for. */
|
|
35
|
+
icon?: string;
|
|
36
|
+
/** Whether this is the team's front door. */
|
|
37
|
+
isSupervisor: boolean;
|
|
38
|
+
};
|
|
39
|
+
export type TeamSelection = {
|
|
40
|
+
/** The team being worked with. */
|
|
41
|
+
team: TeamSpec;
|
|
42
|
+
/** Everyone a person may address, supervisor first. */
|
|
43
|
+
members: TeamMember[];
|
|
44
|
+
/** Who is being addressed now. */
|
|
45
|
+
selected: ReadonlySignal<string>;
|
|
46
|
+
/** Address somebody else. */
|
|
47
|
+
select: (memberId: string) => void;
|
|
48
|
+
/** What each member is told about the conversation so far. */
|
|
49
|
+
sharing: TeamContextSharing;
|
|
50
|
+
/** The member currently addressed, resolved. */
|
|
51
|
+
active: ReadonlySignal<TeamMember | undefined>;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* The members of a team, supervisor first.
|
|
55
|
+
*
|
|
56
|
+
* The supervisor is listed among them rather than above them: in this team it
|
|
57
|
+
* is the tutor, which does work as well as routing, and a front door that
|
|
58
|
+
* cannot be addressed directly would be a strange front door. It is marked
|
|
59
|
+
* so the picker can say which it is.
|
|
60
|
+
*/
|
|
61
|
+
export declare function teamMembers(team: TeamSpec): TeamMember[];
|
|
62
|
+
/**
|
|
63
|
+
* Track which member is being addressed.
|
|
64
|
+
*
|
|
65
|
+
* Starts on the supervisor, which is the team's own answer to "who reads this
|
|
66
|
+
* first". Falls back to the first member for a team with no supervisor ref.
|
|
67
|
+
*/
|
|
68
|
+
export declare function createTeamSelection(teamId: string): TeamSelection | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* The agents a given member may hand work to.
|
|
71
|
+
*
|
|
72
|
+
* Read from the teamspec rather than assumed, because a team says two separate
|
|
73
|
+
* things about delegation and they mean different things:
|
|
74
|
+
*
|
|
75
|
+
* - `delegation.allowPeerDelegation` — whether a member may reach *another
|
|
76
|
+
* member*. The jupyter team says no: the Tutor handing work to the
|
|
77
|
+
* Compactor would edit a notebook the learner is working in, which is the one
|
|
78
|
+
* thing the Tutor exists not to do. Routing between them is the supervisor's
|
|
79
|
+
* job, where a person can see it happen.
|
|
80
|
+
* - a member's own `subagents` — specialists that belong to it alone. The
|
|
81
|
+
* Compactor has a CellFixer and a NotebookReproducer, and neither is a member
|
|
82
|
+
* of the team.
|
|
83
|
+
*
|
|
84
|
+
* So the supervisor gets the other members, everyone gets their own subagents,
|
|
85
|
+
* and a peer only appears where the team allows it.
|
|
86
|
+
*/
|
|
87
|
+
export declare function subagentsFor(team: TeamSpec, memberId: string): BrowserSubagent[];
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Which member of a team the person is talking to.
|
|
7
|
+
*
|
|
8
|
+
* A team is a group of agents with one front door. The teamspec says who that
|
|
9
|
+
* is — its `supervisor` — and lists the members it routes between, so the
|
|
10
|
+
* selection starts there and moves when a person picks somebody else.
|
|
11
|
+
*
|
|
12
|
+
* The selection is a signal rather than React state because two things read
|
|
13
|
+
* it: the header control that changes it, and the chat that has to send the
|
|
14
|
+
* next prompt to whoever is chosen. Those live in different plugins and must
|
|
15
|
+
* not own copies that can disagree.
|
|
16
|
+
*
|
|
17
|
+
* What switching member does to the conversation is not decided here. It comes
|
|
18
|
+
* from the teamspec's `context.sharing`, because it follows from what the team
|
|
19
|
+
* is: a supervisor team routing between a tutor and a compactor needs one
|
|
20
|
+
* thread both can read, and a delegation team needs the opposite.
|
|
21
|
+
*
|
|
22
|
+
* @module loop/plugins/agents/team
|
|
23
|
+
*/
|
|
24
|
+
import { computed, signal, } from '@datalayer/reactor';
|
|
25
|
+
import { TEAM_SPECS } from '../../../specs/teams/teams';
|
|
26
|
+
import { AGENTSPECS } from '../../../specs/agents/agents';
|
|
27
|
+
/** A `ref` such as `jupyter-tutor:0.0.1`, without its version. */
|
|
28
|
+
function specIdOf(ref) {
|
|
29
|
+
return (ref ?? '').split(':')[0] ?? '';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The members of a team, supervisor first.
|
|
33
|
+
*
|
|
34
|
+
* The supervisor is listed among them rather than above them: in this team it
|
|
35
|
+
* is the tutor, which does work as well as routing, and a front door that
|
|
36
|
+
* cannot be addressed directly would be a strange front door. It is marked
|
|
37
|
+
* so the picker can say which it is.
|
|
38
|
+
*/
|
|
39
|
+
export function teamMembers(team) {
|
|
40
|
+
const supervisorSpecId = specIdOf(team.supervisor?.ref);
|
|
41
|
+
const describe = (specId) => {
|
|
42
|
+
const spec = AGENTSPECS[specId];
|
|
43
|
+
return {
|
|
44
|
+
description: spec?.description,
|
|
45
|
+
emoji: spec?.emoji,
|
|
46
|
+
icon: spec?.icon,
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
const members = (team.agents ?? []).map(agent => {
|
|
50
|
+
const specId = specIdOf(agent.ref);
|
|
51
|
+
return {
|
|
52
|
+
id: agent.id,
|
|
53
|
+
name: agent.name || specId || agent.id,
|
|
54
|
+
specId,
|
|
55
|
+
isSupervisor: specId !== '' && specId === supervisorSpecId,
|
|
56
|
+
...describe(specId),
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
// The supervisor answers first because it is what a prompt reaches by
|
|
60
|
+
// default; a list that buried it would make the default look arbitrary.
|
|
61
|
+
return [
|
|
62
|
+
...members.filter(member => member.isSupervisor),
|
|
63
|
+
...members.filter(member => !member.isSupervisor),
|
|
64
|
+
];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Track which member is being addressed.
|
|
68
|
+
*
|
|
69
|
+
* Starts on the supervisor, which is the team's own answer to "who reads this
|
|
70
|
+
* first". Falls back to the first member for a team with no supervisor ref.
|
|
71
|
+
*/
|
|
72
|
+
export function createTeamSelection(teamId) {
|
|
73
|
+
const team = TEAM_SPECS[teamId];
|
|
74
|
+
if (!team) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
const members = teamMembers(team);
|
|
78
|
+
if (members.length === 0) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const selected = signal(members[0].id);
|
|
82
|
+
return {
|
|
83
|
+
team,
|
|
84
|
+
members,
|
|
85
|
+
selected,
|
|
86
|
+
select: (memberId) => {
|
|
87
|
+
if (members.some(member => member.id === memberId)) {
|
|
88
|
+
selected.value = memberId;
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
sharing: team.context?.sharing ?? 'shared',
|
|
92
|
+
active: computed(() => members.find(member => member.id === selected.value)),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The agents a given member may hand work to.
|
|
97
|
+
*
|
|
98
|
+
* Read from the teamspec rather than assumed, because a team says two separate
|
|
99
|
+
* things about delegation and they mean different things:
|
|
100
|
+
*
|
|
101
|
+
* - `delegation.allowPeerDelegation` — whether a member may reach *another
|
|
102
|
+
* member*. The jupyter team says no: the Tutor handing work to the
|
|
103
|
+
* Compactor would edit a notebook the learner is working in, which is the one
|
|
104
|
+
* thing the Tutor exists not to do. Routing between them is the supervisor's
|
|
105
|
+
* job, where a person can see it happen.
|
|
106
|
+
* - a member's own `subagents` — specialists that belong to it alone. The
|
|
107
|
+
* Compactor has a CellFixer and a NotebookReproducer, and neither is a member
|
|
108
|
+
* of the team.
|
|
109
|
+
*
|
|
110
|
+
* So the supervisor gets the other members, everyone gets their own subagents,
|
|
111
|
+
* and a peer only appears where the team allows it.
|
|
112
|
+
*/
|
|
113
|
+
export function subagentsFor(team, memberId) {
|
|
114
|
+
const members = teamMembers(team);
|
|
115
|
+
const member = members.find(entry => entry.id === memberId);
|
|
116
|
+
if (!member) {
|
|
117
|
+
return [];
|
|
118
|
+
}
|
|
119
|
+
const asSubagent = (name, specId, description) => {
|
|
120
|
+
const spec = AGENTSPECS[specId];
|
|
121
|
+
if (!spec) {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
name,
|
|
126
|
+
// The description is what the parent's model chooses on, so a team's own
|
|
127
|
+
// wording wins over the spec's: it says when to reach for this one *in
|
|
128
|
+
// this team*, which is the question being asked.
|
|
129
|
+
description: description || spec.description || name,
|
|
130
|
+
instructions: spec.systemPrompt,
|
|
131
|
+
model: spec.model,
|
|
132
|
+
icon: spec.icon,
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
const peers = member.isSupervisor || team.delegation?.allowPeerDelegation
|
|
136
|
+
? members
|
|
137
|
+
.filter(entry => entry.id !== memberId)
|
|
138
|
+
.map(entry => asSubagent(entry.name, entry.specId, entry.description))
|
|
139
|
+
: [];
|
|
140
|
+
const declared = (team.agents ?? []).find((entry) => entry.id === memberId);
|
|
141
|
+
const own = (declared?.subagents ?? []).map(subagent => asSubagent(subagent.name, (subagent.ref ?? '').split(':')[0] ?? '', subagent.description));
|
|
142
|
+
return [...peers, ...own].filter(Boolean);
|
|
143
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SwitchableSandboxService } from './switchable';
|
|
2
|
+
/** The sandbox service, or `undefined` when the plugin is not mounted. */
|
|
3
|
+
export declare function useOptionalSandboxService(): SwitchableSandboxService | undefined;
|
|
4
|
+
/**
|
|
5
|
+
* The sandbox service, insisting it is there.
|
|
6
|
+
*
|
|
7
|
+
* A view that declares the sandbox plugin as a dependency has it by
|
|
8
|
+
* construction; if it does not, the reactor graph is wrong and saying so
|
|
9
|
+
* plainly beats rendering something half-alive.
|
|
10
|
+
*/
|
|
11
|
+
export declare function useSandboxService(): SwitchableSandboxService;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Reaching the sandbox service from a component.
|
|
7
|
+
*
|
|
8
|
+
* A plugin that depends on the sandbox asks the reactor for it by name, rather
|
|
9
|
+
* than importing a singleton: that is what makes the dependency visible in the
|
|
10
|
+
* extension graph and what lets a host swap the implementation — a JupyterLab
|
|
11
|
+
* front-end backed by the running server instead of a cloud runtime.
|
|
12
|
+
*
|
|
13
|
+
* @module loop/plugins/agents/useSandboxService
|
|
14
|
+
*/
|
|
15
|
+
import { useReactorPlatform } from '@datalayer/reactor/react';
|
|
16
|
+
import { AGENTS_PLUGIN_NAME } from './plugin';
|
|
17
|
+
/** The sandbox service, or `undefined` when the plugin is not mounted. */
|
|
18
|
+
export function useOptionalSandboxService() {
|
|
19
|
+
const reactor = useReactorPlatform();
|
|
20
|
+
return reactor.getOutput(AGENTS_PLUGIN_NAME)?.sandbox;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The sandbox service, insisting it is there.
|
|
24
|
+
*
|
|
25
|
+
* A view that declares the sandbox plugin as a dependency has it by
|
|
26
|
+
* construction; if it does not, the reactor graph is wrong and saying so
|
|
27
|
+
* plainly beats rendering something half-alive.
|
|
28
|
+
*/
|
|
29
|
+
export function useSandboxService() {
|
|
30
|
+
const service = useOptionalSandboxService();
|
|
31
|
+
if (!service) {
|
|
32
|
+
throw new Error(`The code sandbox plugin (${AGENTS_PLUGIN_NAME}) is not mounted. ` +
|
|
33
|
+
'A view that needs a sandbox must declare it as a dependency.');
|
|
34
|
+
}
|
|
35
|
+
return service;
|
|
36
|
+
}
|