@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,50 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useSignalValue } from '@datalayer/reactor/react';
|
|
3
|
+
import { AgentSummary } from '../../../components/agents/AgentSummary';
|
|
4
|
+
import { AGENTSPECS } from '../../../specs/agents/agents';
|
|
5
|
+
import { TARGET_SPECS } from './switchable';
|
|
6
|
+
import { useSandboxService } from './useSandboxService';
|
|
7
|
+
import { useOptionalTeamSelection } from './useTeamSelection';
|
|
8
|
+
/* Stand-ins for a workspace with no sandbox plugin or no team. `peek` as well
|
|
9
|
+
as `value`: `useSignalValue` subscribes, and a bare object is not a signal. */
|
|
10
|
+
const NO_TARGET = {
|
|
11
|
+
value: undefined,
|
|
12
|
+
peek: () => undefined,
|
|
13
|
+
};
|
|
14
|
+
const NO_MEMBER = {
|
|
15
|
+
value: undefined,
|
|
16
|
+
peek: () => undefined,
|
|
17
|
+
};
|
|
18
|
+
export function AgentSummaryPanel({ workspace, }) {
|
|
19
|
+
const service = useSandboxService();
|
|
20
|
+
const target = useSignalValue(service?.target ?? NO_TARGET);
|
|
21
|
+
const team = useOptionalTeamSelection();
|
|
22
|
+
const active = useSignalValue(team?.active ?? NO_MEMBER);
|
|
23
|
+
if (!service) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const snapshot = workspace.sandbox;
|
|
27
|
+
/*
|
|
28
|
+
* The member being addressed, when there is a team; the workspace's agent
|
|
29
|
+
* otherwise. The two differ precisely when a team is in play, and the one a
|
|
30
|
+
* prompt reaches is the one worth naming.
|
|
31
|
+
*/
|
|
32
|
+
const specId = active?.specId || workspace.agentId;
|
|
33
|
+
const spec = AGENTSPECS[specId];
|
|
34
|
+
const summary = {
|
|
35
|
+
agentName: active?.name || spec?.name || workspace.agentId,
|
|
36
|
+
location: target ? TARGET_SPECS[target].label : '—',
|
|
37
|
+
specId,
|
|
38
|
+
harness: spec?.harness,
|
|
39
|
+
// Where it runs and what turns its loop, as the workspace has it. The
|
|
40
|
+
// sandbox reports the second half; `variant` is the pair.
|
|
41
|
+
variant: snapshot.variant,
|
|
42
|
+
status: snapshot.state,
|
|
43
|
+
baseUrl: snapshot.agentBaseUrl || workspace.serverUrl,
|
|
44
|
+
sandboxBaseUrl: snapshot.jupyterUrl,
|
|
45
|
+
agentId: workspace.agentId,
|
|
46
|
+
isReady: snapshot.state === 'running',
|
|
47
|
+
};
|
|
48
|
+
return _jsx(AgentSummary, { summary: summary });
|
|
49
|
+
}
|
|
50
|
+
export default AgentSummaryPanel;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The trial clock, in the chat's own header.
|
|
3
|
+
*
|
|
4
|
+
* Contributed by this plugin rather than drawn by the chat, for the same
|
|
5
|
+
* reason the sandbox selector is: only the plugin that owns where the agent
|
|
6
|
+
* runs can say whether the visitor's key is being spent at all. On a
|
|
7
|
+
* server-backed agent it is not — that runtime holds credentials of its own
|
|
8
|
+
* and never saw the key — so a countdown there would be a clock on nothing.
|
|
9
|
+
*
|
|
10
|
+
* It reads the shared session and never starts one. The chat is what mints the
|
|
11
|
+
* key, because the chat is what sends it; a header badge that could mint one
|
|
12
|
+
* would start the visitor's minute the moment the workspace painted, whether
|
|
13
|
+
* or not they ever asked the agent anything.
|
|
14
|
+
*
|
|
15
|
+
* @module loop/plugins/agents/AnonymousKeyBadge
|
|
16
|
+
*/
|
|
17
|
+
import type { JSX } from 'react';
|
|
18
|
+
import type { LoopWorkspaceContext } from '../../core';
|
|
19
|
+
/**
|
|
20
|
+
* The same badge, dressed for the workspace header's trailing cluster.
|
|
21
|
+
*
|
|
22
|
+
* Flex `order` rather than registration order: the agents plugin registers
|
|
23
|
+
* before the editor selector, so in document order the badge sat on the
|
|
24
|
+
* *leading* side of the selector's `marginLeft: 'auto'`. `1` puts it past
|
|
25
|
+
* that margin, right beside the full-screen icon (which says `2`) — the
|
|
26
|
+
* clock reads as chrome about the session, and the trailing corner is where
|
|
27
|
+
* that lives.
|
|
28
|
+
*/
|
|
29
|
+
export declare function AnonymousKeyHeaderBadge({ workspace, }: {
|
|
30
|
+
workspace: LoopWorkspaceContext;
|
|
31
|
+
}): JSX.Element;
|
|
32
|
+
export declare function AnonymousKeyBadge({ workspace, }: {
|
|
33
|
+
workspace: LoopWorkspaceContext;
|
|
34
|
+
}): JSX.Element | null;
|
|
35
|
+
export default AnonymousKeyBadge;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from '@primer/react';
|
|
3
|
+
/* Both by file rather than through their barrels. The barrels reach the
|
|
4
|
+
sign-in form and the whole in-page harness, and a plugin that only draws a
|
|
5
|
+
countdown should not put either in the graph of every host that mounts
|
|
6
|
+
it. */
|
|
7
|
+
import { AnonymousKeyTimer } from '@datalayer/core/lib/components/anonymous/AnonymousKeyTimer';
|
|
8
|
+
import { useAnonymousSession, useAnonymousSessionStore, } from '../../../runtimes/browser/anonymousToken';
|
|
9
|
+
import { targetRunsAgentInPage } from './switchable';
|
|
10
|
+
/**
|
|
11
|
+
* The same badge, dressed for the workspace header's trailing cluster.
|
|
12
|
+
*
|
|
13
|
+
* Flex `order` rather than registration order: the agents plugin registers
|
|
14
|
+
* before the editor selector, so in document order the badge sat on the
|
|
15
|
+
* *leading* side of the selector's `marginLeft: 'auto'`. `1` puts it past
|
|
16
|
+
* that margin, right beside the full-screen icon (which says `2`) — the
|
|
17
|
+
* clock reads as chrome about the session, and the trailing corner is where
|
|
18
|
+
* that lives.
|
|
19
|
+
*/
|
|
20
|
+
export function AnonymousKeyHeaderBadge({ workspace, }) {
|
|
21
|
+
return (_jsx(Box, { sx: { order: 1, display: 'inline-flex', alignItems: 'center' }, children: _jsx(AnonymousKeyBadge, { workspace: workspace }) }));
|
|
22
|
+
}
|
|
23
|
+
export function AnonymousKeyBadge({ workspace, }) {
|
|
24
|
+
const session = useAnonymousSession();
|
|
25
|
+
const target = workspace.sandbox.target ?? 'local';
|
|
26
|
+
// Not this agent's business. A runtime authenticates itself, and whether
|
|
27
|
+
// some other part of the page holds a trial key is not something this
|
|
28
|
+
// conversation should be reporting.
|
|
29
|
+
if (!targetRunsAgentInPage(target)) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
/*
|
|
33
|
+
* Nothing to show at either end.
|
|
34
|
+
*
|
|
35
|
+
* `idle` is a signed-in member, who is on no clock at all; `expired` is
|
|
36
|
+
* covered by the panel that takes over the conversation, which says
|
|
37
|
+
* considerably more than a spent ring would.
|
|
38
|
+
*/
|
|
39
|
+
if (session.status === 'idle' || session.status === 'expired') {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
// Before a key lands there is no clock to draw yet — only which way it went.
|
|
43
|
+
if (!session.expiresAt) {
|
|
44
|
+
return (_jsx(Text, { sx: { fontSize: 0, color: session.error ? 'danger.fg' : 'fg.muted' }, title: session.error, children: session.error ? 'No trial key' : 'Getting a trial key…' }));
|
|
45
|
+
}
|
|
46
|
+
return (_jsx(AnonymousKeyTimer, { expiresAt: session.expiresAt, grantedMs: session.grantedMs,
|
|
47
|
+
// The countdown recomputes from the wall clock, so it notices the moment
|
|
48
|
+
// has passed even where the store's own timer was throttled — a
|
|
49
|
+
// backgrounded tab, a laptop that slept. Whichever gets there first
|
|
50
|
+
// wins; the second call is a no-op.
|
|
51
|
+
onExpire: () => useAnonymousSessionStore.getState().expire() }));
|
|
52
|
+
}
|
|
53
|
+
export default AnonymousKeyBadge;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Datalayer target: a real agent, launched from a spec.
|
|
3
|
+
*
|
|
4
|
+
* It used to be a *sandbox* setting. Choosing Datalayer told the host's own
|
|
5
|
+
* agent-runtimes server to run its sandbox on a Datalayer runtime, which gave
|
|
6
|
+
* a Jupyter server in the cloud and an agent still running locally. That is a
|
|
7
|
+
* different thing from what the target says it is, and it showed: a person
|
|
8
|
+
* picked Datalayer and stayed on whatever agent the host had.
|
|
9
|
+
*
|
|
10
|
+
* So this target goes through the agent hook instead — the same one every
|
|
11
|
+
* example uses — and asks for an agentspec by name. The platform allocates a
|
|
12
|
+
* runtime, creates the agent on it from the spec, and hands back both halves:
|
|
13
|
+
* the Jupyter ingress the notebook binds to, and the agent-runtimes base URL
|
|
14
|
+
* the chat talks to. Both are reported into the sandbox service, because that
|
|
15
|
+
* is where every surface already reads from.
|
|
16
|
+
*
|
|
17
|
+
* A component rather than part of the switchable service, because launching is
|
|
18
|
+
* a hook and a service is not a React thing. It renders nothing.
|
|
19
|
+
*
|
|
20
|
+
* @module loop/plugins/agents/DatalayerAgentBridge
|
|
21
|
+
*/
|
|
22
|
+
import type { JSX } from 'react';
|
|
23
|
+
export declare function DatalayerAgentBridge(): JSX.Element | null;
|
|
24
|
+
export default DatalayerAgentBridge;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
import { useEffect, useMemo } from 'react';
|
|
6
|
+
import { useReactorPlatform, useSignalValue } from '@datalayer/reactor/react';
|
|
7
|
+
import { useAgentRuntimes } from '../../../hooks/useAgentRuntimes';
|
|
8
|
+
import { AGENTSPECS } from '../../../specs/agents/agents';
|
|
9
|
+
import { IDLE_SANDBOX_TARGET_SIGNAL } from '../../core';
|
|
10
|
+
import { AGENTS_PLUGIN_NAME } from './plugin';
|
|
11
|
+
import { useOptionalSandboxService } from './useSandboxService';
|
|
12
|
+
/**
|
|
13
|
+
* The tutor.
|
|
14
|
+
*
|
|
15
|
+
* The front door of the notebook team, and the agent a person landing on a
|
|
16
|
+
* Datalayer runtime should meet first. A host that wants another names it in
|
|
17
|
+
* this plugin's config.
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_DATALAYER_AGENTSPEC = 'jupyter-tutor';
|
|
20
|
+
export function DatalayerAgentBridge() {
|
|
21
|
+
const reactor = useReactorPlatform();
|
|
22
|
+
const agentSpecId = reactor.getConfig(AGENTS_PLUGIN_NAME)?.datalayerAgentSpecId ??
|
|
23
|
+
DEFAULT_DATALAYER_AGENTSPEC;
|
|
24
|
+
const service = useOptionalSandboxService();
|
|
25
|
+
const target = useSignalValue(service?.target ?? IDLE_SANDBOX_TARGET_SIGNAL);
|
|
26
|
+
const onDatalayer = target === 'datalayer';
|
|
27
|
+
/*
|
|
28
|
+
* The agent hook, asked for a spec.
|
|
29
|
+
*
|
|
30
|
+
* `autoStart` only while Datalayer is the target: mounting this bridge must
|
|
31
|
+
* not allocate a cloud runtime for somebody working in their browser, and a
|
|
32
|
+
* runtime allocated by accident is one somebody pays for.
|
|
33
|
+
*/
|
|
34
|
+
/*
|
|
35
|
+
* The spec, restated as the config the agent is created from.
|
|
36
|
+
*
|
|
37
|
+
* `agentSpecId` as a hook option says which runtime to allocate. Creating
|
|
38
|
+
* the agent on it reads `agentConfig`, and that is a different object —
|
|
39
|
+
* which this passed nothing for, so the create refused with "Agent model is
|
|
40
|
+
* required. Provide config.model from the selected spec/config." The
|
|
41
|
+
* failure surfaced as `connected-dead` because nothing else about it
|
|
42
|
+
* reached the page.
|
|
43
|
+
*
|
|
44
|
+
* The Notebook Agent example does not hit this: it builds a config with the
|
|
45
|
+
* spec id in it and hands that over. Same thing, said in the place the
|
|
46
|
+
* creation actually looks.
|
|
47
|
+
*/
|
|
48
|
+
const agentConfig = useMemo(() => ({
|
|
49
|
+
name: agentSpecId,
|
|
50
|
+
agentSpecId,
|
|
51
|
+
model: AGENTSPECS[agentSpecId]?.model,
|
|
52
|
+
description: AGENTSPECS[agentSpecId]?.description,
|
|
53
|
+
}), [agentSpecId]);
|
|
54
|
+
const { runtime, status, error } = useAgentRuntimes({
|
|
55
|
+
agentSpecId,
|
|
56
|
+
agentConfig,
|
|
57
|
+
variant: 'cloud-pydanticai',
|
|
58
|
+
autoStart: onDatalayer,
|
|
59
|
+
autoCreateAgent: onDatalayer,
|
|
60
|
+
});
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
if (!service || !onDatalayer) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
if (error) {
|
|
66
|
+
// The reason travels with the state. "connected-dead" and a column of
|
|
67
|
+
// "unknown" is what a reader saw before, which names the symptom and
|
|
68
|
+
// hides the cause.
|
|
69
|
+
// `error` is already a message from the hook; `String()` on it would
|
|
70
|
+
// only matter if it were not, and would print `[object Object]` if so.
|
|
71
|
+
service.setState('error', error);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (!runtime?.jupyterBaseUrl) {
|
|
75
|
+
// Still allocating. Said as a lifecycle state rather than a status, so
|
|
76
|
+
// the surfaces show "starting" instead of claiming there is nothing.
|
|
77
|
+
service.setState(status === 'error' ? 'error' : 'starting');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
service.report({
|
|
81
|
+
variant: 'datalayer',
|
|
82
|
+
// The *sandbox*, not the agent. `runtime.isReady` answers "is the agent
|
|
83
|
+
// registered and reachable", which is a separate and later event than
|
|
84
|
+
// "does this runtime serve kernels". Gating the sandbox on it left the
|
|
85
|
+
// workspace showing a live r1 server URL with no notebook and no chat
|
|
86
|
+
// behind it, and a kernel indicator reporting `connected-dead` for a
|
|
87
|
+
// pod that was up: the ingress was usable the whole time, nothing had
|
|
88
|
+
// been told it was.
|
|
89
|
+
sandbox_running: Boolean(runtime.serviceManager),
|
|
90
|
+
jupyter_url: runtime.jupyterBaseUrl,
|
|
91
|
+
// The ingress token travels with the manager the platform built, not
|
|
92
|
+
// on the connection itself.
|
|
93
|
+
jupyter_token: runtime.serviceManager?.serverSettings?.token,
|
|
94
|
+
kernel_id: runtime.kernelId,
|
|
95
|
+
// Where the agent actually is. Without this the chat would address the
|
|
96
|
+
// host's server for an agent that is not on it.
|
|
97
|
+
agent_base_url: runtime.agentBaseUrl,
|
|
98
|
+
});
|
|
99
|
+
}, [service, onDatalayer, runtime, status, error]);
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
export default DatalayerAgentBridge;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Datalayer agent bridge, loaded only when something renders it.
|
|
3
|
+
*
|
|
4
|
+
* The bridge itself uses the agent hook, and that hook reaches the whole
|
|
5
|
+
* runtime stack — JupyterLab services, Lumino, the web components. Imported
|
|
6
|
+
* statically by the plugin, all of it lands in the module graph of every host
|
|
7
|
+
* that merely *mounts* the plugin, which is a large bill for a target most
|
|
8
|
+
* workspaces never pick, and enough to break anything loading the plugin
|
|
9
|
+
* outside a browser.
|
|
10
|
+
*
|
|
11
|
+
* So the plugin refers to this, and this defers the rest. It renders nothing
|
|
12
|
+
* either way.
|
|
13
|
+
*
|
|
14
|
+
* @module loop/plugins/agents/DatalayerAgentMount
|
|
15
|
+
*/
|
|
16
|
+
import type { JSX } from 'react';
|
|
17
|
+
export declare function DatalayerAgentMount(): JSX.Element;
|
|
18
|
+
export default DatalayerAgentMount;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense, lazy } from 'react';
|
|
3
|
+
const DatalayerAgentBridge = lazy(async () => {
|
|
4
|
+
const module = await import('./DatalayerAgentBridge');
|
|
5
|
+
return { default: module.DatalayerAgentBridge };
|
|
6
|
+
});
|
|
7
|
+
export function DatalayerAgentMount() {
|
|
8
|
+
// No fallback: there is nothing to show while it loads, because there is
|
|
9
|
+
// nothing to show afterwards either.
|
|
10
|
+
return (_jsx(Suspense, { fallback: null, children: _jsx(DatalayerAgentBridge, {}) }));
|
|
11
|
+
}
|
|
12
|
+
export default DatalayerAgentMount;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the code runs: browser, local, or cloud.
|
|
3
|
+
*
|
|
4
|
+
* Three positions rather than a settings page, in the header rather than a
|
|
5
|
+
* menu, because "where is my code running?" is a question a person asks while
|
|
6
|
+
* they are working — and the honest answer changes what they can do.
|
|
7
|
+
*
|
|
8
|
+
* Contributed by the sandbox plugin, so every workspace that mounts it gets the
|
|
9
|
+
* control: the examples, the standalone page, and the Datalayer app.
|
|
10
|
+
*
|
|
11
|
+
* @module loop/plugins/agents/SandboxSelector
|
|
12
|
+
*/
|
|
13
|
+
import type { JSX } from 'react';
|
|
14
|
+
import type { LoopWorkspaceContext } from '../../core';
|
|
15
|
+
export declare function SandboxSelector(_props: {
|
|
16
|
+
workspace: LoopWorkspaceContext;
|
|
17
|
+
}): JSX.Element | null;
|
|
18
|
+
export default SandboxSelector;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
|
+
import { Box, SegmentedControl, Spinner, Text } from '@primer/react';
|
|
4
|
+
import { KernelIndicator } from '@datalayer/jupyter-react/kernel-indicator';
|
|
5
|
+
import { useSignalValue } from '@datalayer/reactor/react';
|
|
6
|
+
import { IDLE_SANDBOX_SNAPSHOT_SIGNAL, sandboxIndicatorState, } from '../../core';
|
|
7
|
+
import { useOptionalSandboxService } from './useSandboxService';
|
|
8
|
+
import { SANDBOX_TARGETS, TARGET_SPECS, } from './switchable';
|
|
9
|
+
export function SandboxSelector(_props) {
|
|
10
|
+
const service = useOptionalSandboxService();
|
|
11
|
+
const [moving, setMoving] = useState(false);
|
|
12
|
+
const [failure, setFailure] = useState(null);
|
|
13
|
+
// Hooks run before the early return, so a workspace without the sandbox
|
|
14
|
+
// plugin does not change hook order on the next render.
|
|
15
|
+
const snapshot = useSignalValue(service?.snapshot ?? IDLE_SANDBOX_SNAPSHOT_SIGNAL);
|
|
16
|
+
const status = useSignalValue(service?.status ?? EMPTY_STATUS);
|
|
17
|
+
const target = useSignalValue(service?.target ?? DEFAULT_TARGET);
|
|
18
|
+
const choose = useCallback(async (next) => {
|
|
19
|
+
if (!service || next === target) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
setMoving(true);
|
|
23
|
+
setFailure(null);
|
|
24
|
+
try {
|
|
25
|
+
await service.setTarget(next);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
// Said where the person clicked. A switch that fails silently leaves
|
|
29
|
+
// them looking at a control that did nothing and no reason why.
|
|
30
|
+
setFailure(error instanceof Error ? error.message : String(error));
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
setMoving(false);
|
|
34
|
+
}
|
|
35
|
+
}, [service, target]);
|
|
36
|
+
if (!service) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const index = Math.max(0, SANDBOX_TARGETS.indexOf(target));
|
|
40
|
+
return (_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2, minWidth: 0 }, children: [_jsx(Box, { sx: {
|
|
41
|
+
width: 16,
|
|
42
|
+
flexShrink: 0,
|
|
43
|
+
display: 'flex',
|
|
44
|
+
justifyContent: 'center',
|
|
45
|
+
}, children: moving ? _jsx(Spinner, { size: "small" }) : null }), _jsx(KernelIndicator, { state: sandboxIndicatorState(snapshot.state, status?.execution_state, status?.is_executing), kernelId: snapshot.kernelId ?? status?.kernel_id, kernelName: status?.kernel_name, serverUrl: snapshot.jupyterUrl ?? status?.jupyter_url, websocketUrl: toWebsocketUrl(snapshot.jupyterUrl ?? status?.jupyter_url),
|
|
46
|
+
/*
|
|
47
|
+
The target that was chosen, not the variant last reported.
|
|
48
|
+
|
|
49
|
+
`snapshot.variant` is whatever the sandbox most recently said it
|
|
50
|
+
was, and it lags a switch — so the indicator sat next to a segmented
|
|
51
|
+
control reading "Datalayer" and named a Jupyter server, which is two
|
|
52
|
+
answers to one question. The chosen target is the one the reader
|
|
53
|
+
just gave; the variant is a detail, and it is in the overlay.
|
|
54
|
+
*/
|
|
55
|
+
environmentName: TARGET_SPECS[target].label, overlayTitle: `${TARGET_SPECS[target].label} Kernel`, position: "se", bordered: false }), _jsx(SegmentedControl, { "aria-label": "Where code runs", size: "small", ...{ style: { listStyle: 'none', margin: 0, padding: 0 } }, sx: {
|
|
56
|
+
// SegmentedControl is a list. Some example-page typography styles
|
|
57
|
+
// restore list markers globally, so reset both the list and its
|
|
58
|
+
// direct items here instead of leaking a page-specific CSS fix into
|
|
59
|
+
// the plugin.
|
|
60
|
+
listStyle: 'none',
|
|
61
|
+
m: 0,
|
|
62
|
+
p: 0,
|
|
63
|
+
'& > li': { listStyle: 'none' },
|
|
64
|
+
'& > li::marker': { content: 'none' },
|
|
65
|
+
}, children: SANDBOX_TARGETS.map((entry, position) => (_jsx(SegmentedControl.Button, { selected: position === index, sx: { listStyle: 'none' }, title: TARGET_SPECS[entry].hint, onClick: () => void choose(entry), children: TARGET_SPECS[entry].label }, entry))) }), failure || snapshot.errorReason ? (
|
|
66
|
+
// The reason, in the header, in full. It used to read "switch failed"
|
|
67
|
+
// with the cause hidden in a `title` — which is why a switch that
|
|
68
|
+
// could not reach the server looked like a click that did nothing.
|
|
69
|
+
// A failure the person has to hover to read is a failure they will
|
|
70
|
+
// not read.
|
|
71
|
+
_jsx(Text, { sx: {
|
|
72
|
+
fontSize: 0,
|
|
73
|
+
color: 'danger.fg',
|
|
74
|
+
lineHeight: 1.3,
|
|
75
|
+
/*
|
|
76
|
+
Bounded, and allowed to shrink.
|
|
77
|
+
|
|
78
|
+
At 460px with nothing to stop it growing, a failure message was
|
|
79
|
+
wider than everything else in the header put together — so the
|
|
80
|
+
row it shares compressed to fit it, and the segmented control
|
|
81
|
+
the reader had just clicked shifted out from under the pointer.
|
|
82
|
+
Two lines here cost nothing; a reflowed header costs the click.
|
|
83
|
+
*/
|
|
84
|
+
maxWidth: 280,
|
|
85
|
+
minWidth: 0,
|
|
86
|
+
}, title: failure ?? snapshot.errorReason, children: failure ?? snapshot.errorReason })) : (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, title: TARGET_SPECS[SANDBOX_TARGETS[index]].hint, children: snapshot.state }))] }));
|
|
87
|
+
}
|
|
88
|
+
function toWebsocketUrl(url) {
|
|
89
|
+
return url?.replace(/^http/, 'ws');
|
|
90
|
+
}
|
|
91
|
+
const EMPTY_STATUS = {
|
|
92
|
+
value: null,
|
|
93
|
+
peek: () => null,
|
|
94
|
+
};
|
|
95
|
+
const DEFAULT_TARGET = {
|
|
96
|
+
value: 'local',
|
|
97
|
+
peek: () => 'local',
|
|
98
|
+
};
|
|
99
|
+
export default SandboxSelector;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeping the workspace told about the sandbox.
|
|
3
|
+
*
|
|
4
|
+
* The service owns the connection; this only carries what it learns into the
|
|
5
|
+
* workspace context, where the `canOpen` gates can see it. It lives in a slot
|
|
6
|
+
* rather than inside a view, because the sandbox does not stop existing when
|
|
7
|
+
* someone switches to the chat tab.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately imports nothing heavier than the reactor's React bridge: this
|
|
10
|
+
* module is reached from the plugin's entry point, so anything it pulls in
|
|
11
|
+
* lands in the shell's bundle.
|
|
12
|
+
*
|
|
13
|
+
* @module loop/plugins/agents/SandboxStatusBridge
|
|
14
|
+
*/
|
|
15
|
+
import type { JSX } from 'react';
|
|
16
|
+
import type { LoopWorkspaceContext } from '../../core';
|
|
17
|
+
export declare function SandboxStatusBridge({ workspace, }: {
|
|
18
|
+
workspace: LoopWorkspaceContext;
|
|
19
|
+
}): JSX.Element | null;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
import { useEffect } from 'react';
|
|
6
|
+
import { useSignalValue } from '@datalayer/reactor/react';
|
|
7
|
+
import { IDLE_SANDBOX_SNAPSHOT_SIGNAL, IDLE_SANDBOX_TARGET_SIGNAL, } from '../../core';
|
|
8
|
+
import { useOptionalSandboxService } from './useSandboxService';
|
|
9
|
+
export function SandboxStatusBridge({ workspace, }) {
|
|
10
|
+
const service = useOptionalSandboxService();
|
|
11
|
+
const snapshot = useSignalValue(service?.snapshot ?? IDLE_SANDBOX_SNAPSHOT_SIGNAL);
|
|
12
|
+
// Watched as a signal so a switch re-renders this bridge, and carried into
|
|
13
|
+
// the snapshot so it re-renders everyone reading the workspace.
|
|
14
|
+
const target = useSignalValue(service?.target ?? IDLE_SANDBOX_TARGET_SIGNAL);
|
|
15
|
+
const { setSandbox, agentId } = workspace;
|
|
16
|
+
useEffect(() => service?.connect(agentId), [service, agentId]);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (service) {
|
|
19
|
+
setSandbox({ ...snapshot, target });
|
|
20
|
+
}
|
|
21
|
+
}, [service, snapshot, target, setSandbox]);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sandbox view: what is running, and how to reach it.
|
|
3
|
+
*
|
|
4
|
+
* The browser twin of `/code-sandbox` in the terminal — the same facts, drawn
|
|
5
|
+
* rather than printed.
|
|
6
|
+
*
|
|
7
|
+
* @module loop/plugins/agents/SandboxView
|
|
8
|
+
*/
|
|
9
|
+
import type { JSX } from 'react';
|
|
10
|
+
import type { LoopViewProps } from '../../core';
|
|
11
|
+
export default function SandboxView(_props: LoopViewProps): JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Label, Text } from '@primer/react';
|
|
3
|
+
import { useSignalValue } from '@datalayer/reactor/react';
|
|
4
|
+
import { useSandboxService } from './useSandboxService';
|
|
5
|
+
function Row({ label, value }) {
|
|
6
|
+
return (_jsxs(Box, { sx: { display: 'flex', gap: 3, py: 1, fontSize: 1 }, children: [_jsx(Text, { sx: { color: 'fg.muted', minWidth: '140px' }, children: label }), _jsx(Text, { sx: { fontFamily: 'mono', wordBreak: 'break-all' }, children: value || _jsx(Text, { sx: { color: 'fg.subtle' }, children: "\u2014" }) })] }));
|
|
7
|
+
}
|
|
8
|
+
export default function SandboxView(_props) {
|
|
9
|
+
const service = useSandboxService();
|
|
10
|
+
const snapshot = useSignalValue(service.snapshot);
|
|
11
|
+
const status = useSignalValue(service.status);
|
|
12
|
+
const lastExecution = useSignalValue(service.lastExecution);
|
|
13
|
+
const tone = snapshot.state === 'running'
|
|
14
|
+
? 'success'
|
|
15
|
+
: snapshot.state === 'error'
|
|
16
|
+
? 'danger'
|
|
17
|
+
: 'attention';
|
|
18
|
+
return (_jsxs(Box, { sx: { height: '100%', overflowY: 'auto', px: 4, py: 3 }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2, mb: 3 }, children: [_jsx(Text, { sx: { fontSize: 3, fontWeight: 'bold' }, children: "Code Sandbox" }), _jsx(Label, { variant: tone, children: snapshot.state })] }), _jsx(Row, { label: "Variant", value: snapshot.variant }), _jsx(Row, { label: "Kernel", value: status?.kernel_name ?? snapshot.kernelId }), _jsx(Row, { label: "Kernel id", value: snapshot.kernelId }), _jsx(Row, { label: "Jupyter server", value: snapshot.jupyterUrl }), _jsx(Row, { label: "Execution state", value: status?.execution_state }), snapshot.state !== 'running' ? (_jsx(Box, { sx: {
|
|
19
|
+
mt: 3,
|
|
20
|
+
p: 3,
|
|
21
|
+
bg: 'attention.subtle',
|
|
22
|
+
borderRadius: 2,
|
|
23
|
+
fontSize: 1,
|
|
24
|
+
}, children: "No sandbox is attached. Views that need one \u2014 the notebook, the document \u2014 stay unavailable until there is a kernel to bind to." })) : null, lastExecution ? (_jsxs(Box, { sx: { mt: 4 }, children: [_jsx(Text, { sx: { fontSize: 2, fontWeight: 'bold' }, children: "Last execution" }), _jsx(Box, { sx: {
|
|
25
|
+
mt: 2,
|
|
26
|
+
p: 2,
|
|
27
|
+
bg: 'canvas.subtle',
|
|
28
|
+
borderRadius: 2,
|
|
29
|
+
fontFamily: 'mono',
|
|
30
|
+
fontSize: 0,
|
|
31
|
+
whiteSpace: 'pre-wrap',
|
|
32
|
+
}, children: lastExecution.code }), lastExecution.stdout ? (_jsx(Box, { sx: {
|
|
33
|
+
mt: 1,
|
|
34
|
+
fontFamily: 'mono',
|
|
35
|
+
fontSize: 0,
|
|
36
|
+
whiteSpace: 'pre-wrap',
|
|
37
|
+
}, children: lastExecution.stdout })) : null, lastExecution.error ? (_jsx(Box, { sx: {
|
|
38
|
+
mt: 1,
|
|
39
|
+
color: 'danger.fg',
|
|
40
|
+
fontFamily: 'mono',
|
|
41
|
+
fontSize: 0,
|
|
42
|
+
}, children: lastExecution.error })) : null] })) : null] }));
|
|
43
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who the next prompt goes to.
|
|
3
|
+
*
|
|
4
|
+
* An icon rather than a labelled control, because a team of two does not earn
|
|
5
|
+
* a segmented control in a header that already carries the sandbox, the model
|
|
6
|
+
* and the status. The overlay is where the names live, and a check says which
|
|
7
|
+
* one is listening.
|
|
8
|
+
*
|
|
9
|
+
* The supervisor is marked rather than hidden. It is the team's front door and
|
|
10
|
+
* the default, and a person who picks somebody else should be able to see what
|
|
11
|
+
* they moved away from.
|
|
12
|
+
*
|
|
13
|
+
* @module loop/plugins/agents/TeamMemberPicker
|
|
14
|
+
*/
|
|
15
|
+
import type { JSX } from 'react';
|
|
16
|
+
export declare function TeamMemberPicker(): JSX.Element | null;
|
|
17
|
+
export default TeamMemberPicker;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { ActionList, AnchoredOverlay, IconButton, Text } from '@primer/react';
|
|
4
|
+
import { Box } from '@datalayer/primer-addons';
|
|
5
|
+
import { AiAgentIcon } from '@datalayer/icons-react';
|
|
6
|
+
import { useSignalValue } from '@datalayer/reactor/react';
|
|
7
|
+
import { agentIcon } from './agentIcons';
|
|
8
|
+
import { useOptionalTeamSelection } from './useTeamSelection';
|
|
9
|
+
/** One member's mark, as its spec names it. */
|
|
10
|
+
function MemberIcon({ icon }) {
|
|
11
|
+
const Icon = agentIcon(icon);
|
|
12
|
+
return _jsx(Icon, {});
|
|
13
|
+
}
|
|
14
|
+
export function TeamMemberPicker() {
|
|
15
|
+
const selection = useOptionalTeamSelection();
|
|
16
|
+
// No team, or a team of one: there is nothing to choose between, and a
|
|
17
|
+
// control that opens onto a single option is furniture. Returning before the
|
|
18
|
+
// inner component means its hooks are never called conditionally.
|
|
19
|
+
if (!selection || selection.members.length < 2) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return _jsx(TeamMemberMenu, { selection: selection });
|
|
23
|
+
}
|
|
24
|
+
function TeamMemberMenu({ selection, }) {
|
|
25
|
+
const [open, setOpen] = useState(false);
|
|
26
|
+
const selectedId = useSignalValue(selection.selected);
|
|
27
|
+
const active = selection.members.find(member => member.id === selectedId);
|
|
28
|
+
return (_jsx(AnchoredOverlay
|
|
29
|
+
// 480px. `AnchoredOverlay` sizes through Primer's `Overlay`, which reads
|
|
30
|
+
// a named width off `data-width-*` — so an `sx` width on the child is
|
|
31
|
+
// not enough on its own, and the box below states the same number from
|
|
32
|
+
// the inside for the case where it loses.
|
|
33
|
+
, {
|
|
34
|
+
// 480px. `AnchoredOverlay` sizes through Primer's `Overlay`, which reads
|
|
35
|
+
// a named width off `data-width-*` — so an `sx` width on the child is
|
|
36
|
+
// not enough on its own, and the box below states the same number from
|
|
37
|
+
// the inside for the case where it loses.
|
|
38
|
+
width: "large", open: open, onOpen: () => setOpen(true), onClose: () => setOpen(false), renderAnchor: anchorProps => (_jsx(IconButton
|
|
39
|
+
// Primer types the anchor's `aria-labelledby` and `IconButton`'s
|
|
40
|
+
// `aria-label` as mutually exclusive, and the overlay supplies the
|
|
41
|
+
// former. Dropped rather than fought: the label below says more
|
|
42
|
+
// than an id pointing at an icon would.
|
|
43
|
+
, { ...anchorProps, "aria-labelledby": undefined, icon: AiAgentIcon, "aria-label": active
|
|
44
|
+
? `Talking to ${active.name}. Choose another agent.`
|
|
45
|
+
: 'Choose an agent', variant: "invisible", size: "small" })), children: _jsx(Box, { sx: { width: 440, maxWidth: 'calc(100vw - 16px)' }, children: _jsxs(ActionList, { selectionVariant: "single", role: "listbox", "aria-label": `Agents in ${selection.team.name}`, children: [_jsx(ActionList.GroupHeading, { children: selection.team.name }), selection.members.map(member => (_jsxs(ActionList.Item, { selected: member.id === selectedId, onSelect: () => {
|
|
46
|
+
selection.select(member.id);
|
|
47
|
+
setOpen(false);
|
|
48
|
+
}, children: [_jsx(ActionList.LeadingVisual, { children: _jsx(MemberIcon, { icon: member.icon }) }), _jsxs(Box, { as: "span", sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [member.name, member.isSupervisor ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "supervisor" })) : null] }), member.description ? (_jsx(ActionList.Description, { variant: "block",
|
|
49
|
+
/* Wrapped and breakable. `minWidth: 0` is the load-bearing
|
|
50
|
+
one: a grid item defaults to `min-content`, so without it
|
|
51
|
+
the description refuses to be narrower than its longest
|
|
52
|
+
unbroken run and pushes the row wide. */
|
|
53
|
+
sx: {
|
|
54
|
+
display: 'block',
|
|
55
|
+
whiteSpace: 'normal',
|
|
56
|
+
overflowWrap: 'anywhere',
|
|
57
|
+
minWidth: 0,
|
|
58
|
+
}, children: member.description })) : null] }, member.id)))] }) }) }));
|
|
59
|
+
}
|
|
60
|
+
export default TeamMemberPicker;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The octicon an agentspec asked for.
|
|
3
|
+
*
|
|
4
|
+
* Every spec names one — `mortar-board` for the tutor, `fold` for the
|
|
5
|
+
* compactor — and until something resolves it, every agent in a menu is drawn
|
|
6
|
+
* with the same fallback and the names do all the work.
|
|
7
|
+
*
|
|
8
|
+
* An explicit map rather than `import * as octicons`. The namespace import
|
|
9
|
+
* resolves any name in one line and pulls the whole icon set into the bundle
|
|
10
|
+
* with it, which a landing page that lazy-loads this workspace pays for on
|
|
11
|
+
* every visit. These are the names the catalogue actually uses.
|
|
12
|
+
*
|
|
13
|
+
* @module loop/plugins/agents/agentIcons
|
|
14
|
+
*/
|
|
15
|
+
import { type Icon } from '@primer/octicons-react';
|
|
16
|
+
/**
|
|
17
|
+
* The icon for a spec's `icon` value, or the generic agent one.
|
|
18
|
+
*
|
|
19
|
+
* Never undefined: a menu row with a gap where its neighbours have icons reads
|
|
20
|
+
* as a rendering fault, and "some agent" is a true thing to draw.
|
|
21
|
+
*/
|
|
22
|
+
export declare function agentIcon(name?: string): Icon;
|
|
23
|
+
export default agentIcon;
|