@datalayer/agent-runtimes 1.0.28 → 1.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/AgentDocument.js +5 -22
- package/lib/AgentNode.d.ts +1 -1
- package/lib/AgentNode.js +193 -23
- package/lib/AgentNotebook.js +1 -1
- package/lib/App.d.ts +1 -1
- package/lib/AppExamples2.d.ts +1 -1
- package/lib/agent-node/AgentNodeGallery.d.ts +14 -1
- package/lib/agent-node/AgentNodeGallery.js +19 -15
- package/lib/agent-node/themeStore.js +7 -6
- package/lib/agents/AgentDetails.d.ts +8 -2
- package/lib/agents/AgentDetails.js +41 -11
- package/lib/agents/AgentRuntimeChat.d.ts +3 -3
- package/lib/agents/AgentRuntimeChat.js +15 -15
- package/lib/api/agents.d.ts +10 -10
- package/lib/api/agents.js +15 -15
- package/lib/api/checkpoints.d.ts +40 -0
- package/lib/api/checkpoints.js +75 -0
- package/lib/api/index.d.ts +1 -0
- package/lib/api/index.js +18 -5
- package/lib/api/notifications.d.ts +21 -6
- package/lib/api/notifications.js +32 -14
- package/lib/api/runtimes/environments.d.ts +385 -4
- package/lib/api/runtimes/environments.js +610 -9
- package/lib/api/runtimes/runtimes.d.ts +19 -19
- package/lib/api/runtimes/runtimes.js +47 -46
- package/lib/api/spacer/notebooks.js +1 -1
- package/lib/chat/Chat.d.ts +16 -4
- package/lib/chat/Chat.js +18 -5
- package/lib/chat/ChatFloating.d.ts +13 -2
- package/lib/chat/ChatFloating.js +192 -117
- package/lib/chat/ChatInline.d.ts +15 -0
- package/lib/chat/ChatInline.js +0 -18
- package/lib/chat/ChatPopupStandalone.d.ts +1 -1
- package/lib/chat/ChatSidebar.d.ts +14 -2
- package/lib/chat/ChatSidebar.js +1 -1
- package/lib/chat/ChatStandalone.d.ts +1 -1
- package/lib/chat/EphemeralSurfaceControl.d.ts +30 -0
- package/lib/chat/EphemeralSurfaceControl.js +55 -0
- package/lib/chat/base/ChatAvailability.d.ts +34 -0
- package/lib/chat/base/ChatAvailability.js +18 -0
- package/lib/chat/base/ChatBase.d.ts +2 -1
- package/lib/chat/base/ChatBase.js +657 -28
- package/lib/chat/display/EmptyState.d.ts +15 -1
- package/lib/chat/display/EmptyState.js +78 -12
- package/lib/chat/display/FloatingBrandButton.d.ts +1 -1
- package/lib/chat/display/PoweredByTag.d.ts +1 -1
- package/lib/chat/display/groupSuggestions.d.ts +21 -0
- package/lib/chat/display/groupSuggestions.js +18 -0
- package/lib/chat/document/EphemeralDocument.d.ts +70 -6
- package/lib/chat/document/EphemeralDocument.js +154 -52
- package/lib/chat/header/ChatHeader.d.ts +1 -1
- package/lib/chat/header/ChatHeaderBase.d.ts +10 -1
- package/lib/chat/header/ChatHeaderBase.js +67 -96
- package/lib/chat/index.d.ts +4 -1
- package/lib/chat/index.js +8 -1
- package/lib/chat/indicators/McpStatusIndicator.d.ts +1 -1
- package/lib/chat/indicators/SandboxStatusIndicator.d.ts +1 -1
- package/lib/chat/indicators/SandboxStatusIndicator.js +1 -1
- package/lib/chat/indicators/SkillsStatusIndicator.d.ts +1 -1
- package/lib/chat/messages/ChatMessageList.d.ts +22 -1
- package/lib/chat/messages/ChatMessageList.js +370 -166
- package/lib/chat/messages/ChatMessages.d.ts +1 -1
- package/lib/chat/messages/NotebookToolSurfaces.d.ts +68 -0
- package/lib/chat/messages/NotebookToolSurfaces.js +302 -0
- package/lib/chat/messages/TurnFooter.d.ts +42 -0
- package/lib/chat/messages/TurnFooter.js +75 -0
- package/lib/chat/messages/assistantMarkdown.d.ts +22 -0
- package/lib/chat/messages/assistantMarkdown.js +56 -0
- package/lib/chat/notebook/EphemeralNotebook.d.ts +67 -6
- package/lib/chat/notebook/EphemeralNotebook.js +194 -61
- package/lib/chat/parts/DynamicToolPart.d.ts +1 -1
- package/lib/chat/parts/MessagePart.d.ts +1 -1
- package/lib/chat/parts/ReasoningPart.d.ts +8 -1
- package/lib/chat/parts/TextPart.d.ts +1 -1
- package/lib/chat/parts/ToolPart.d.ts +8 -1
- package/lib/chat/prompt/FloatingCard.d.ts +26 -0
- package/lib/chat/prompt/FloatingCard.js +80 -0
- package/lib/chat/prompt/InputPrompt.d.ts +206 -53
- package/lib/chat/prompt/InputPrompt.js +161 -80
- package/lib/chat/prompt/InputPromptBase.d.ts +112 -0
- package/lib/chat/prompt/InputPromptBase.js +225 -0
- package/lib/chat/prompt/InputPromptLexical.d.ts +18 -1
- package/lib/chat/prompt/InputPromptLexical.js +227 -30
- package/lib/chat/prompt/InputPromptText.d.ts +10 -2
- package/lib/chat/prompt/InputPromptText.js +35 -3
- package/lib/chat/prompt/footer/BelowPromptFooter.d.ts +25 -0
- package/lib/chat/prompt/footer/BelowPromptFooter.js +12 -0
- package/lib/chat/prompt/footer/InPromptFooter.d.ts +35 -0
- package/lib/chat/prompt/footer/InPromptFooter.js +16 -0
- package/lib/chat/prompt/footer/index.d.ts +7 -0
- package/lib/chat/prompt/footer/index.js +11 -0
- package/lib/chat/prompt/header/BelowPromptHeader.d.ts +23 -0
- package/lib/chat/prompt/header/BelowPromptHeader.js +12 -0
- package/lib/chat/prompt/header/InPromptHeader.d.ts +31 -0
- package/lib/chat/prompt/header/InPromptHeader.js +14 -0
- package/lib/chat/prompt/header/index.d.ts +7 -0
- package/lib/chat/prompt/header/index.js +11 -0
- package/lib/chat/prompt/index.d.ts +8 -4
- package/lib/chat/prompt/index.js +15 -3
- package/lib/chat/prompt/menus/AgentsMenu.d.ts +14 -0
- package/lib/chat/prompt/menus/AgentsMenu.js +42 -0
- package/lib/chat/prompt/menus/InlineAgentsMenu.d.ts +22 -0
- package/lib/chat/prompt/menus/InlineAgentsMenu.js +24 -0
- package/lib/chat/prompt/menus/ModelSelector.d.ts +7 -0
- package/lib/chat/prompt/menus/ModelSelector.js +27 -0
- package/lib/chat/prompt/menus/SkillsMenu.d.ts +10 -0
- package/lib/chat/prompt/menus/SkillsMenu.js +75 -0
- package/lib/chat/prompt/menus/SuggestionsMenu.d.ts +13 -0
- package/lib/chat/prompt/menus/SuggestionsMenu.js +31 -0
- package/lib/chat/prompt/menus/ToolsMenu.d.ts +13 -0
- package/lib/chat/prompt/menus/ToolsMenu.js +103 -0
- package/lib/chat/prompt/menus/index.d.ts +15 -0
- package/lib/chat/prompt/menus/index.js +19 -0
- package/lib/chat/prompt/plugins/AgentMentionPlugin.d.ts +54 -0
- package/lib/chat/prompt/plugins/AgentMentionPlugin.js +370 -0
- package/lib/chat/prompt/plugins/CommandPlugin.d.ts +52 -0
- package/lib/chat/prompt/plugins/CommandPlugin.js +359 -0
- package/lib/chat/prompt/plugins/MentionChip.d.ts +15 -0
- package/lib/chat/prompt/plugins/MentionChip.js +24 -0
- package/lib/chat/prompt/plugins/MentionNode.d.ts +66 -0
- package/lib/chat/prompt/plugins/MentionNode.js +77 -0
- package/lib/chat/prompt/promptHistory.d.ts +52 -0
- package/lib/chat/prompt/promptHistory.js +123 -0
- package/lib/chat/prompt/stack.d.ts +81 -0
- package/lib/chat/prompt/stack.js +41 -0
- package/lib/chat/prompt/useTypingPlaceholder.d.ts +52 -0
- package/lib/chat/prompt/useTypingPlaceholder.js +180 -0
- package/lib/chat/tools/A2AAgentDialog.d.ts +60 -0
- package/lib/chat/tools/A2AAgentDialog.js +265 -0
- package/lib/chat/tools/ToolApprovalBanner.d.ts +1 -1
- package/lib/chat/tools/ToolApprovalDialog.d.ts +1 -1
- package/lib/chat/tools/ToolCallDisplay.d.ts +8 -1
- package/lib/chat/tools/index.d.ts +1 -0
- package/lib/chat/tools/index.js +1 -0
- package/lib/chat/usage/ContextPie.d.ts +17 -0
- package/lib/chat/usage/{TokenUsageBar.js → ContextPie.js} +20 -14
- package/lib/chat/useViewportDrag.d.ts +11 -0
- package/lib/chat/useViewportDrag.js +61 -0
- package/lib/chat/viewModes.d.ts +51 -0
- package/lib/chat/viewModes.js +57 -0
- package/lib/client/AgentRuntimesClient.d.ts +10 -9
- package/lib/client/AgentRuntimesClient.js +1 -1
- package/lib/client/AgentRuntimesClientContext.d.ts +1 -0
- package/lib/client/AgentsMixin.d.ts +12 -12
- package/lib/client/AgentsMixin.js +31 -31
- package/lib/client/IAgentRuntimesClient.d.ts +10 -10
- package/lib/client/SdkAgentRuntimesClient.d.ts +10 -10
- package/lib/client/SdkAgentRuntimesClient.js +10 -10
- package/lib/client/mixins/RuntimesMixin.d.ts +37 -10
- package/lib/client/mixins/RuntimesMixin.js +54 -21
- package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +1 -1
- package/lib/components/agents/AgentSummary.d.ts +13 -0
- package/lib/components/agents/AgentSummary.js +21 -4
- package/lib/components/cards/NotificationEventCard.d.ts +1 -1
- package/lib/components/cards/OutputCard.d.ts +1 -1
- package/lib/components/cards/ToolApprovalCard.d.ts +2 -2
- package/lib/components/cards/ToolApprovalCard.js +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariables.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariables.js +0 -4
- package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.js +0 -4
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.d.ts +76 -0
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +81 -0
- package/lib/components/code-sandboxes/CodeSandboxLauncher.d.ts +12 -0
- package/lib/components/code-sandboxes/CodeSandboxLauncher.js +132 -25
- package/lib/components/code-sandboxes/CodeSandboxNames.js +75 -29
- package/lib/components/code-sandboxes/CodeSandboxPicker.d.ts +14 -1
- package/lib/components/code-sandboxes/CodeSandboxPicker.js +226 -45
- package/lib/components/code-sandboxes/CodeSandboxPickerCell.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxPickerCell.js +0 -4
- package/lib/components/code-sandboxes/CodeSandboxReservationControl.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxReservationControl.js +5 -7
- package/lib/components/code-sandboxes/CodeSandboxTransfer.d.ts +5 -0
- package/lib/components/code-sandboxes/CodeSandboxUtils.d.ts +16 -1
- package/lib/components/code-sandboxes/CodeSandboxUtils.js +69 -12
- package/lib/components/code-sandboxes/NewCodeSandboxControls.d.ts +21 -15
- package/lib/components/code-sandboxes/NewCodeSandboxControls.js +28 -51
- package/lib/components/code-sandboxes/codeSandboxAllowance.d.ts +33 -0
- package/lib/components/code-sandboxes/codeSandboxAllowance.js +37 -0
- package/lib/components/code-sandboxes/codeSandboxEnvironments.d.ts +86 -0
- package/lib/components/code-sandboxes/codeSandboxEnvironments.js +147 -0
- package/lib/components/code-sandboxes/codeSandboxProviders.d.ts +29 -0
- package/lib/components/code-sandboxes/codeSandboxProviders.js +90 -0
- package/lib/components/code-sandboxes/index.d.ts +3 -0
- package/lib/components/code-sandboxes/index.js +3 -0
- package/lib/components/context/SpaceSelect.d.ts +1 -1
- package/lib/components/flashes/FlashDisclaimer.d.ts +1 -1
- package/lib/components/icons/ArtifactIcon.d.ts +1 -0
- package/lib/components/nbgrader/NbGradesDetails.d.ts +1 -1
- package/lib/components/progress/CreditsIndicator.d.ts +1 -0
- package/lib/components/progress/CreditsIndicator.js +0 -4
- package/lib/components/scheduler/ScheduleMenu.d.ts +1 -1
- package/lib/components/snapshots/SandboxSnapshotMenu.d.ts +3 -2
- package/lib/components/snapshots/SandboxSnapshotMenu.js +11 -15
- package/lib/components/snippets/SnippetDialog.d.ts +1 -0
- package/lib/components/snippets/SnippetDialog.js +0 -4
- package/lib/components/specs/SpecPayloadPreview.d.ts +34 -0
- package/lib/components/specs/SpecPayloadPreview.js +102 -0
- package/lib/components/tokens/SpaceVariantToken.d.ts +1 -1
- package/lib/context/ContextDistribution.d.ts +1 -1
- package/lib/context/ContextInspector.d.ts +2 -1
- package/lib/context/ContextPanel.d.ts +1 -1
- package/lib/context/ContextUsage.d.ts +1 -1
- package/lib/context/CostTracker.d.ts +1 -1
- package/lib/context/CostUsageChart.d.ts +1 -1
- package/lib/context/CostUsageChart.js +4 -4
- package/lib/context/MessageHistory.d.ts +3 -2
- package/lib/context/TokenUsageChart.d.ts +1 -1
- package/lib/context/TokenUsageChart.js +4 -4
- package/lib/examples/A2UiAgentExample.js +15 -6
- package/lib/examples/A2UiComponentsGalleryExample.d.ts +10 -0
- package/lib/examples/A2UiComponentsGalleryExample.js +24 -855
- package/lib/examples/A2UiContactCardExample.d.ts +10 -0
- package/lib/examples/A2UiContactCardExample.js +23 -170
- package/lib/examples/A2UiJupyterOutputExample.d.ts +3 -0
- package/lib/examples/A2UiJupyterOutputExample.js +792 -0
- package/lib/examples/A2UiRestaurantExample.d.ts +10 -0
- package/lib/examples/A2UiRestaurantExample.js +24 -179
- package/lib/examples/A2UiViewerExample.d.ts +10 -0
- package/lib/examples/A2UiViewerExample.js +24 -378
- package/lib/examples/AgUiAgenticExample.js +2 -4
- package/lib/examples/AgUiBackendToolRenderingExample.js +3 -5
- package/lib/examples/AgUiHaikuGenUiExample.js +2 -4
- package/lib/examples/AgUiHumanInTheLoopExample.js +2 -4
- package/lib/examples/AgUiSharedStateExample.js +2 -4
- package/lib/examples/AgUiToolsBasedGenUiExample.js +2 -4
- package/lib/examples/AgentA2AExample.d.ts +17 -0
- package/lib/examples/AgentA2AExample.js +56 -0
- package/lib/examples/AgentCheckpointsExample.d.ts +9 -10
- package/lib/examples/AgentCheckpointsExample.js +72 -54
- package/lib/examples/AgentCodeSandboxExample.d.ts +7 -7
- package/lib/examples/AgentCodeSandboxExample.js +93 -303
- package/lib/examples/AgentCodeSandboxesExample.d.ts +10 -0
- package/lib/examples/AgentCodeSandboxesExample.js +56 -162
- package/lib/examples/AgentCodemodeExample.d.ts +7 -2
- package/lib/examples/AgentCodemodeExample.js +60 -125
- package/lib/examples/AgentCompactionExample.js +19 -135
- package/lib/examples/AgentEvalsExample.js +34 -66
- package/lib/examples/AgentGuardrailsExample.js +64 -112
- package/lib/examples/AgentHooksExample.d.ts +11 -0
- package/lib/examples/AgentHooksExample.js +30 -67
- package/lib/examples/AgentInferenceProviderExample.js +8 -32
- package/lib/examples/AgentLoopExample.d.ts +4 -2
- package/lib/examples/AgentLoopExample.js +45 -93
- package/lib/examples/AgentMCPExample.js +30 -79
- package/lib/examples/AgentMemoryExample.js +21 -64
- package/lib/examples/AgentMonitoringExample.js +33 -94
- package/lib/examples/AgentNotificationsExample.js +56 -95
- package/lib/examples/AgentOtelExample.js +35 -88
- package/lib/examples/AgentOutputsExample.d.ts +2 -1
- package/lib/examples/AgentOutputsExample.js +16 -137
- package/lib/examples/AgentParametersExample.js +7 -17
- package/lib/examples/AgentSkillsExample.js +40 -154
- package/lib/examples/AgentSubagentsExample.d.ts +7 -6
- package/lib/examples/AgentSubagentsExample.js +80 -191
- package/lib/examples/AgentToolApprovalsExample.js +35 -91
- package/lib/examples/AgentTriggersExample.js +43 -59
- package/lib/examples/AgentspecsExample.js +7 -7
- package/lib/examples/CellExample.d.ts +1 -1
- package/lib/examples/ChatExample.d.ts +12 -5
- package/lib/examples/ChatExample.js +38 -13
- package/lib/examples/CopilotKitLexicalExample.d.ts +1 -0
- package/lib/examples/CopilotKitLexicalExample.js +4 -41
- package/lib/examples/CopilotKitNotebookExample.d.ts +10 -0
- package/lib/examples/CopilotKitNotebookExample.js +2 -14
- package/lib/examples/DecksAgent.d.ts +21 -0
- package/lib/examples/DecksAgent.js +23 -0
- package/lib/examples/DocumentPageAgent.d.ts +19 -0
- package/lib/examples/DocumentPageAgent.js +15 -0
- package/lib/examples/Lexical2Example.d.ts +2 -2
- package/lib/examples/Lexical2Example.js +17 -38
- package/lib/examples/LexicalAgentExample.d.ts +2 -1
- package/lib/examples/LexicalAgentExample.js +29 -102
- package/lib/examples/LexicalAgentSidebarExample.d.ts +16 -5
- package/lib/examples/LexicalAgentSidebarExample.js +99 -131
- package/lib/examples/LoopShellExample.d.ts +38 -0
- package/lib/examples/LoopShellExample.js +68 -0
- package/lib/examples/LoopWorkspaceEmbed.d.ts +50 -0
- package/lib/examples/LoopWorkspaceEmbed.js +73 -0
- package/lib/examples/LoopWorkspaceExample.d.ts +150 -0
- package/lib/examples/LoopWorkspaceExample.js +151 -0
- package/lib/examples/NotebookAgentExample.d.ts +13 -0
- package/lib/examples/NotebookAgentExample.js +36 -86
- package/lib/examples/NotebookAgentSidebarExample.d.ts +10 -4
- package/lib/examples/NotebookAgentSidebarExample.js +39 -83
- package/lib/examples/NotebookCollaborationExample.d.ts +1 -1
- package/lib/examples/NotebookCollaborationExample.js +108 -20
- package/lib/examples/NotebookExample.d.ts +1 -1
- package/lib/examples/NotebookExample.js +20 -10
- package/lib/examples/NotebookPageAgent.d.ts +23 -0
- package/lib/examples/NotebookPageAgent.js +17 -0
- package/lib/examples/components/ExampleWrapper.d.ts +5 -0
- package/lib/examples/components/ExampleWrapper.js +36 -28
- package/lib/examples/components/LexicalEditor.d.ts +1 -1
- package/lib/examples/components/LexicalEditor.js +4 -24
- package/lib/examples/components/haiku/HaikuDisplay.d.ts +1 -1
- package/lib/examples/components/haiku/InlineHaikuCard.d.ts +1 -1
- package/lib/examples/components/weather/InlineWeatherCard.d.ts +1 -1
- package/lib/examples/example-selector.js +26 -6
- package/lib/examples/hooks/useCreateAgentOnce.d.ts +41 -0
- package/lib/examples/hooks/useCreateAgentOnce.js +51 -0
- package/lib/examples/hooks/useExampleAgentProtocol.d.ts +35 -0
- package/lib/examples/hooks/useExampleAgentProtocol.js +63 -0
- package/lib/examples/hooks/useExampleAgentRuntime.d.ts +16 -16
- package/lib/examples/hooks/useExampleAgentRuntime.js +26 -25
- package/lib/examples/hooks/useExampleAgentRuntimes.js +45 -61
- package/lib/examples/hooks/useExampleJupyterAgent.d.ts +91 -0
- package/lib/examples/hooks/useExampleJupyterAgent.js +151 -0
- package/lib/examples/index.d.ts +4 -0
- package/lib/examples/index.js +6 -0
- package/lib/examples/lexical/editorConfig.d.ts +2 -75
- package/lib/examples/lexical/editorConfig.js +26 -48
- package/lib/examples/lexical/lexical-theme.css +65 -47
- package/lib/examples/main.js +450 -322
- package/lib/examples/scenes/A2UiComponentsGalleryScene.d.ts +3 -0
- package/lib/examples/scenes/A2UiComponentsGalleryScene.js +872 -0
- package/lib/examples/scenes/A2UiContactCardScene.d.ts +3 -0
- package/lib/examples/scenes/A2UiContactCardScene.js +188 -0
- package/lib/examples/scenes/A2UiRestaurantScene.d.ts +3 -0
- package/lib/examples/scenes/A2UiRestaurantScene.js +196 -0
- package/lib/examples/scenes/A2UiViewerScene.d.ts +3 -0
- package/lib/examples/scenes/A2UiViewerScene.js +395 -0
- package/lib/examples/utils/agentSummaryStore.d.ts +7 -1
- package/lib/examples/utils/agents/earthquake-detector.ipynb.json +1 -1
- package/lib/examples/utils/agents/earthquake-detector.lexical.json +1 -1
- package/lib/examples/utils/agents/sales-forecaster.ipynb.json +1 -1
- package/lib/examples/utils/agents/sales-forecaster.lexical.json +1 -1
- package/lib/examples/utils/agents/social-post-generator.ipynb.json +1 -1
- package/lib/examples/utils/agents/social-post-generator.lexical.json +1 -1
- package/lib/examples/utils/exampleSurfaces.d.ts +31 -0
- package/lib/examples/utils/exampleSurfaces.js +38 -0
- package/lib/examples/utils/jupyterSandboxUrl.d.ts +27 -0
- package/lib/examples/utils/jupyterSandboxUrl.js +55 -0
- package/lib/examples/utils/localUrl.d.ts +2 -0
- package/lib/examples/utils/localUrl.js +49 -0
- package/lib/examples/utils/notebookToolbarItems.d.ts +46 -0
- package/lib/examples/utils/notebookToolbarItems.js +129 -0
- package/lib/examples/utils/runtimeTargetStore.d.ts +40 -1
- package/lib/examples/utils/runtimeTargetStore.js +82 -1
- package/lib/examples/utils/themedProvider.d.ts +7 -0
- package/lib/examples/utils/themedProvider.js +57 -4
- package/lib/examples/utils/useExampleAgentRuntimesUrl.js +30 -5
- package/lib/examples/utils/waitForAgent.d.ts +23 -0
- package/lib/examples/utils/waitForAgent.js +24 -0
- package/lib/examples2/CellExample.d.ts +1 -1
- package/lib/examples2/DatalayerNotebookExample.d.ts +1 -1
- package/lib/examples2/NotebookExample.d.ts +1 -1
- package/lib/examples2/NotebookMutationsKernel.d.ts +1 -1
- package/lib/examples2/NotebookMutationsServiceManager.d.ts +1 -1
- package/lib/examples2/main.js +24 -4
- package/lib/extensions/A2UIExtension.d.ts +1 -1
- package/lib/hooks/index.d.ts +8 -5
- package/lib/hooks/index.js +20 -5
- package/lib/hooks/useAgentRuntimes.d.ts +49 -22
- package/lib/hooks/useAgentRuntimes.js +214 -90
- package/lib/hooks/useAgentsCatalog.js +32 -4
- package/lib/hooks/useBrowserAgent.d.ts +26 -0
- package/lib/hooks/useBrowserAgent.js +75 -0
- package/lib/hooks/useBrowserInference.d.ts +27 -0
- package/lib/hooks/useBrowserInference.js +67 -0
- package/lib/hooks/useCheckpoints.d.ts +8 -17
- package/lib/hooks/useCheckpoints.js +25 -59
- package/lib/hooks/useConfig.d.ts +1 -1
- package/lib/hooks/useConfig.js +5 -1
- package/lib/hooks/useContextSnapshot.d.ts +18 -7
- package/lib/hooks/useContextSnapshot.js +14 -10
- package/lib/hooks/useNotifications.d.ts +11 -11
- package/lib/hooks/useNotifications.js +1 -1
- package/lib/hooks/useProjects.d.ts +7 -19
- package/lib/hooks/useProjects.js +5 -5
- package/lib/hooks/useSkills.d.ts +0 -1
- package/lib/hooks/useSkills.js +6 -2
- package/lib/hooks/useToolApprovals.d.ts +8 -8
- package/lib/hooks/useToolApprovals.js +3 -3
- package/lib/identity/AgentIdentity.d.ts +9 -2
- package/lib/identity/index.d.ts +1 -1
- package/lib/identity/index.js +1 -1
- package/lib/identity/types.d.ts +1 -1
- package/lib/identity/types.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +4 -0
- package/lib/jupyter/index.d.ts +2 -1
- package/lib/jupyter/index.js +2 -1
- package/lib/jupyter/serverExecution.d.ts +78 -0
- package/lib/jupyter/serverExecution.js +258 -0
- package/lib/jupyter/useResumeServerExecutions.d.ts +11 -0
- package/lib/jupyter/useResumeServerExecutions.js +64 -0
- package/lib/lexical/ChatInlinePlugin.d.ts +33 -0
- package/lib/lexical/ChatInlinePlugin.js +0 -36
- package/lib/loop/core/focusRequests.d.ts +10 -0
- package/lib/loop/core/focusRequests.js +46 -0
- package/lib/loop/core/index.d.ts +894 -0
- package/lib/loop/core/index.js +264 -0
- package/lib/loop/core/promptStore.d.ts +44 -0
- package/lib/loop/core/promptStore.js +63 -0
- package/lib/loop/core/surfaceRequests.d.ts +33 -0
- package/lib/loop/core/surfaceRequests.js +29 -0
- package/lib/loop/core/toolbar.d.ts +28 -0
- package/lib/loop/core/toolbar.js +59 -0
- package/lib/loop/embed/LoopEmbed.d.ts +57 -0
- package/lib/loop/embed/LoopEmbed.js +118 -0
- package/lib/loop/extensions.d.ts +10 -0
- package/lib/loop/extensions.js +49 -0
- package/lib/loop/index.d.ts +68 -0
- package/lib/loop/index.js +87 -0
- package/lib/loop/plugins/a2a-sidebar/A2ASidebar.d.ts +48 -0
- package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +190 -0
- package/lib/loop/plugins/a2a-sidebar/index.d.ts +5 -0
- package/lib/loop/plugins/a2a-sidebar/index.js +39 -0
- package/lib/loop/plugins/a2ui/A2uiView.d.ts +12 -0
- package/lib/loop/plugins/a2ui/A2uiView.js +97 -0
- package/lib/loop/plugins/a2ui/index.d.ts +3 -0
- package/lib/loop/plugins/a2ui/index.js +50 -0
- package/lib/loop/plugins/a2ui-scene/index.d.ts +36 -0
- package/lib/loop/plugins/a2ui-scene/index.js +28 -0
- package/lib/loop/plugins/agent-a2a/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2a/index.js +26 -0
- package/lib/loop/plugins/agent-a2ui/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2ui/index.js +42 -0
- package/lib/loop/plugins/agent-a2ui-jupyter-output/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2ui-jupyter-output/index.js +53 -0
- package/lib/loop/plugins/agent-capacity/index.d.ts +39 -0
- package/lib/loop/plugins/agent-capacity/index.js +52 -0
- package/lib/loop/plugins/agent-checkpoints/index.d.ts +3 -0
- package/lib/loop/plugins/agent-checkpoints/index.js +26 -0
- package/lib/loop/plugins/agent-code-sandbox/index.d.ts +3 -0
- package/lib/loop/plugins/agent-code-sandbox/index.js +24 -0
- package/lib/loop/plugins/agent-code-sandboxes/index.d.ts +13 -0
- package/lib/loop/plugins/agent-code-sandboxes/index.js +85 -0
- package/lib/loop/plugins/agent-codemode/index.d.ts +5 -0
- package/lib/loop/plugins/agent-codemode/index.js +41 -0
- package/lib/loop/plugins/agent-compaction/index.d.ts +10 -0
- package/lib/loop/plugins/agent-compaction/index.js +34 -0
- package/lib/loop/plugins/agent-evals/index.d.ts +3 -0
- package/lib/loop/plugins/agent-evals/index.js +25 -0
- package/lib/loop/plugins/agent-guardrails/index.d.ts +3 -0
- package/lib/loop/plugins/agent-guardrails/index.js +25 -0
- package/lib/loop/plugins/agent-hooks/index.d.ts +3 -0
- package/lib/loop/plugins/agent-hooks/index.js +28 -0
- package/lib/loop/plugins/agent-inference/index.d.ts +7 -0
- package/lib/loop/plugins/agent-inference/index.js +29 -0
- package/lib/loop/plugins/agent-mcp/index.d.ts +3 -0
- package/lib/loop/plugins/agent-mcp/index.js +25 -0
- package/lib/loop/plugins/agent-memory/index.d.ts +3 -0
- package/lib/loop/plugins/agent-memory/index.js +25 -0
- package/lib/loop/plugins/agent-monitoring/index.d.ts +3 -0
- package/lib/loop/plugins/agent-monitoring/index.js +25 -0
- package/lib/loop/plugins/agent-notifications/index.d.ts +3 -0
- package/lib/loop/plugins/agent-notifications/index.js +25 -0
- package/lib/loop/plugins/agent-otel/index.d.ts +3 -0
- package/lib/loop/plugins/agent-otel/index.js +25 -0
- package/lib/loop/plugins/agent-outputs/index.d.ts +3 -0
- package/lib/loop/plugins/agent-outputs/index.js +25 -0
- package/lib/loop/plugins/agent-parameters/index.d.ts +3 -0
- package/lib/loop/plugins/agent-parameters/index.js +25 -0
- package/lib/loop/plugins/agent-skills/index.d.ts +3 -0
- package/lib/loop/plugins/agent-skills/index.js +25 -0
- package/lib/loop/plugins/agent-subagents/index.d.ts +3 -0
- package/lib/loop/plugins/agent-subagents/index.js +25 -0
- package/lib/loop/plugins/agent-tool-approvals/index.d.ts +11 -0
- package/lib/loop/plugins/agent-tool-approvals/index.js +38 -0
- package/lib/loop/plugins/agent-triggers/index.d.ts +3 -0
- package/lib/loop/plugins/agent-triggers/index.js +26 -0
- package/lib/loop/plugins/agents/AgentSummaryPanel.d.ts +20 -0
- package/lib/loop/plugins/agents/AgentSummaryPanel.js +50 -0
- package/lib/loop/plugins/agents/AnonymousKeyBadge.d.ts +35 -0
- package/lib/loop/plugins/agents/AnonymousKeyBadge.js +53 -0
- package/lib/loop/plugins/agents/DatalayerAgentBridge.d.ts +24 -0
- package/lib/loop/plugins/agents/DatalayerAgentBridge.js +102 -0
- package/lib/loop/plugins/agents/DatalayerAgentMount.d.ts +18 -0
- package/lib/loop/plugins/agents/DatalayerAgentMount.js +12 -0
- package/lib/loop/plugins/agents/SandboxSelector.d.ts +18 -0
- package/lib/loop/plugins/agents/SandboxSelector.js +99 -0
- package/lib/loop/plugins/agents/SandboxStatusBridge.d.ts +19 -0
- package/lib/loop/plugins/agents/SandboxStatusBridge.js +23 -0
- package/lib/loop/plugins/agents/SandboxView.d.ts +11 -0
- package/lib/loop/plugins/agents/SandboxView.js +43 -0
- package/lib/loop/plugins/agents/TeamMemberPicker.d.ts +17 -0
- package/lib/loop/plugins/agents/TeamMemberPicker.js +60 -0
- package/lib/loop/plugins/agents/agentIcons.d.ts +23 -0
- package/lib/loop/plugins/agents/agentIcons.js +88 -0
- package/lib/loop/plugins/agents/browserService.d.ts +50 -0
- package/lib/loop/plugins/agents/browserService.js +233 -0
- package/lib/loop/plugins/agents/index.d.ts +13 -0
- package/lib/loop/plugins/agents/index.js +17 -0
- package/lib/loop/plugins/agents/plugin.d.ts +91 -0
- package/lib/loop/plugins/agents/plugin.js +201 -0
- package/lib/loop/plugins/agents/service.d.ts +99 -0
- package/lib/loop/plugins/agents/service.js +167 -0
- package/lib/loop/plugins/agents/specSubagents.d.ts +18 -0
- package/lib/loop/plugins/agents/specSubagents.js +33 -0
- package/lib/loop/plugins/agents/switchable.d.ts +107 -0
- package/lib/loop/plugins/agents/switchable.js +405 -0
- package/lib/loop/plugins/agents/team.d.ts +87 -0
- package/lib/loop/plugins/agents/team.js +143 -0
- package/lib/loop/plugins/agents/useSandboxService.d.ts +11 -0
- package/lib/loop/plugins/agents/useSandboxService.js +36 -0
- package/lib/loop/plugins/agents/useTeamSelection.d.ts +10 -0
- package/lib/loop/plugins/agents/useTeamSelection.js +27 -0
- package/lib/loop/plugins/agentspecs/AgentspecPicker.d.ts +15 -0
- package/lib/loop/plugins/agentspecs/AgentspecPicker.js +90 -0
- package/lib/loop/plugins/agentspecs/index.d.ts +6 -0
- package/lib/loop/plugins/agentspecs/index.js +63 -0
- package/lib/loop/plugins/chat/ChatView.d.ts +20 -0
- package/lib/loop/plugins/chat/ChatView.js +1670 -0
- package/lib/loop/plugins/chat/chatViewTools.d.ts +41 -0
- package/lib/loop/plugins/chat/chatViewTools.js +92 -0
- package/lib/loop/plugins/chat/index.d.ts +111 -0
- package/lib/loop/plugins/chat/index.js +143 -0
- package/lib/loop/plugins/chat/turnState.d.ts +41 -0
- package/lib/loop/plugins/chat/turnState.js +90 -0
- package/lib/loop/plugins/chat-extras/index.d.ts +14 -0
- package/lib/loop/plugins/chat-extras/index.js +51 -0
- package/lib/loop/plugins/chat-header/HeaderView.d.ts +13 -0
- package/lib/loop/plugins/chat-header/HeaderView.js +6 -0
- package/lib/loop/plugins/chat-header/index.d.ts +3 -0
- package/lib/loop/plugins/chat-header/index.js +21 -0
- package/lib/loop/plugins/chat-view/index.d.ts +10 -0
- package/lib/loop/plugins/chat-view/index.js +29 -0
- package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +27 -0
- package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +174 -0
- package/lib/loop/plugins/checkpoints-sidebar/index.d.ts +5 -0
- package/lib/loop/plugins/checkpoints-sidebar/index.js +39 -0
- package/lib/loop/plugins/commands/index.d.ts +20 -0
- package/lib/loop/plugins/commands/index.js +148 -0
- package/lib/loop/plugins/decks/DeckSurface.d.ts +10 -0
- package/lib/loop/plugins/decks/DeckSurface.js +6 -0
- package/lib/loop/plugins/decks/DecksMenu.d.ts +11 -0
- package/lib/loop/plugins/decks/DecksMenu.js +42 -0
- package/lib/loop/plugins/decks/index.d.ts +19 -0
- package/lib/loop/plugins/decks/index.js +133 -0
- package/lib/loop/plugins/decks/surface.d.ts +7 -0
- package/lib/loop/plugins/decks/surface.js +11 -0
- package/lib/loop/plugins/document/DocumentView.d.ts +12 -0
- package/lib/loop/plugins/document/DocumentView.js +68 -0
- package/lib/loop/plugins/document/index.d.ts +3 -0
- package/lib/loop/plugins/document/index.js +86 -0
- package/lib/loop/plugins/document/openingDocument.d.ts +28 -0
- package/lib/loop/plugins/document/openingDocument.js +122 -0
- package/lib/loop/plugins/document-toolbar/SandboxStatusItem.d.ts +16 -0
- package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +31 -0
- package/lib/loop/plugins/document-toolbar/index.d.ts +4 -0
- package/lib/loop/plugins/document-toolbar/index.js +35 -0
- package/lib/loop/plugins/document-toolbar/names.d.ts +6 -0
- package/lib/loop/plugins/document-toolbar/names.js +10 -0
- package/lib/loop/plugins/document-toolbar/plugin.d.ts +2 -0
- package/lib/loop/plugins/document-toolbar/plugin.js +38 -0
- package/lib/loop/plugins/document-view/index.d.ts +10 -0
- package/lib/loop/plugins/document-view/index.js +28 -0
- package/lib/loop/plugins/graph/GraphToggle.d.ts +17 -0
- package/lib/loop/plugins/graph/GraphToggle.js +22 -0
- package/lib/loop/plugins/graph/GraphView.d.ts +16 -0
- package/lib/loop/plugins/graph/GraphView.js +6 -0
- package/lib/loop/plugins/graph/index.d.ts +5 -0
- package/lib/loop/plugins/graph/index.js +80 -0
- package/lib/loop/plugins/graph/viewType.d.ts +10 -0
- package/lib/loop/plugins/graph/viewType.js +14 -0
- package/lib/loop/plugins/input-prompt/ComposerView.d.ts +15 -0
- package/lib/loop/plugins/input-prompt/ComposerView.js +25 -0
- package/lib/loop/plugins/input-prompt/index.d.ts +25 -0
- package/lib/loop/plugins/input-prompt/index.js +26 -0
- package/lib/loop/plugins/models/index.d.ts +3 -0
- package/lib/loop/plugins/models/index.js +49 -0
- package/lib/loop/plugins/notebook/NotebookView.d.ts +9 -0
- package/lib/loop/plugins/notebook/NotebookView.js +189 -0
- package/lib/loop/plugins/notebook/index.d.ts +3 -0
- package/lib/loop/plugins/notebook/index.js +91 -0
- package/lib/loop/plugins/notebook/openingNotebook.d.ts +72 -0
- package/lib/loop/plugins/notebook/openingNotebook.js +90 -0
- package/lib/loop/plugins/notebook-toolbar/index.d.ts +4 -0
- package/lib/loop/plugins/notebook-toolbar/index.js +45 -0
- package/lib/loop/plugins/notebook-toolbar/items.d.ts +10 -0
- package/lib/loop/plugins/notebook-toolbar/items.js +45 -0
- package/lib/loop/plugins/notebook-toolbar/names.d.ts +9 -0
- package/lib/loop/plugins/notebook-toolbar/names.js +13 -0
- package/lib/loop/plugins/notebook-toolbar/plugin.d.ts +2 -0
- package/lib/loop/plugins/notebook-toolbar/plugin.js +24 -0
- package/lib/loop/plugins/notebook-view/index.d.ts +10 -0
- package/lib/loop/plugins/notebook-view/index.js +30 -0
- package/lib/loop/plugins/page-layout/TurnPanel.d.ts +25 -0
- package/lib/loop/plugins/page-layout/TurnPanel.js +126 -0
- package/lib/loop/plugins/page-layout/index.d.ts +35 -0
- package/lib/loop/plugins/page-layout/index.js +80 -0
- package/lib/loop/plugins/plugins-panel/index.d.ts +14 -0
- package/lib/loop/plugins/plugins-panel/index.js +74 -0
- package/lib/loop/plugins/prompt/NewChatAction.d.ts +19 -0
- package/lib/loop/plugins/prompt/NewChatAction.js +10 -0
- package/lib/loop/plugins/prompt/index.d.ts +11 -0
- package/lib/loop/plugins/prompt/index.js +73 -0
- package/lib/loop/plugins/shell/editorChoice.d.ts +31 -0
- package/lib/loop/plugins/shell/editorChoice.js +58 -0
- package/lib/loop/plugins/shell/index.d.ts +47 -0
- package/lib/loop/plugins/shell/index.js +142 -0
- package/lib/loop/plugins/shell/useEditorPreviews.d.ts +32 -0
- package/lib/loop/plugins/shell/useEditorPreviews.js +217 -0
- package/lib/loop/plugins/subagent-activity/SubagentPulse.d.ts +16 -0
- package/lib/loop/plugins/subagent-activity/SubagentPulse.js +45 -0
- package/lib/loop/plugins/subagent-activity/index.d.ts +12 -0
- package/lib/loop/plugins/subagent-activity/index.js +42 -0
- package/lib/loop/plugins/view-switch/index.d.ts +46 -0
- package/lib/loop/plugins/view-switch/index.js +68 -0
- package/lib/loop/plugins/window-frame/WindowFrame.d.ts +48 -0
- package/lib/loop/plugins/window-frame/WindowFrame.js +63 -0
- package/lib/loop/plugins/window-frame/index.d.ts +6 -0
- package/lib/loop/plugins/window-frame/index.js +79 -0
- package/lib/loop/plugins/window-frame/slots.d.ts +26 -0
- package/lib/loop/plugins/window-frame/slots.js +30 -0
- package/lib/loop/presets.d.ts +167 -0
- package/lib/loop/presets.js +139 -0
- package/lib/loop/shell/LoopWorkspace.d.ts +109 -0
- package/lib/loop/shell/LoopWorkspace.js +231 -0
- package/lib/loop/shell/PluginToggles.d.ts +21 -0
- package/lib/loop/shell/PluginToggles.js +41 -0
- package/lib/loop/shell/ViewSwitcher.d.ts +24 -0
- package/lib/loop/shell/ViewSwitcher.js +43 -0
- package/lib/loop/shell/WorkspaceFullScreenAction.d.ts +25 -0
- package/lib/loop/shell/WorkspaceFullScreenAction.js +24 -0
- package/lib/loop/shell/index.d.ts +10 -0
- package/lib/loop/shell/index.js +14 -0
- package/lib/loop/shell/useWorkspaceFullScreen.d.ts +93 -0
- package/lib/loop/shell/useWorkspaceFullScreen.js +167 -0
- package/lib/loop-example-main.d.ts +1 -0
- package/lib/loop-example-main.js +42 -0
- package/lib/loop-main.d.ts +1 -0
- package/lib/loop-main.js +138 -0
- package/lib/mcp/McpServerManager.d.ts +1 -1
- package/lib/models/CodeSandboxSnapshotDTO.d.ts +1 -1
- package/lib/models/CodeSandboxVariant.d.ts +53 -0
- package/lib/models/CodeSandboxVariant.js +77 -0
- package/lib/models/Content.d.ts +26 -0
- package/lib/models/Environment.d.ts +561 -5
- package/lib/models/Environment.js +12 -1
- package/lib/models/EnvironmentDTO.d.ts +24 -6
- package/lib/models/EnvironmentDTO.js +13 -2
- package/lib/models/Exercise.d.ts +0 -2
- package/lib/models/Library.d.ts +0 -2
- package/lib/models/Notebook.d.ts +0 -2
- package/lib/models/ProjectDTO.d.ts +2 -2
- package/lib/models/ProjectDTO.js +4 -4
- package/lib/models/Runtime.d.ts +11 -11
- package/lib/models/RuntimeDTO.d.ts +16 -7
- package/lib/models/RuntimeDTO.js +9 -9
- package/lib/models/Space.d.ts +10 -0
- package/lib/models/Space.js +1 -1
- package/lib/models/SpaceDTO.d.ts +1 -1
- package/lib/models/SpaceItem.d.ts +1 -2
- package/lib/models/environments.generated.d.ts +113 -0
- package/lib/models/environments.generated.js +13 -0
- package/lib/models/index.d.ts +1 -1
- package/lib/models/index.js +1 -1
- package/lib/protocols/A2AAdapter.d.ts +39 -6
- package/lib/protocols/A2AAdapter.js +180 -11
- package/lib/protocols/ACPAdapter.js +40 -37
- package/lib/protocols/AGUIAdapter.d.ts +14 -0
- package/lib/protocols/AGUIAdapter.js +34 -9
- package/lib/protocols/BrowserAgentAdapter.d.ts +117 -0
- package/lib/protocols/BrowserAgentAdapter.js +310 -0
- package/lib/protocols/VercelAIAdapter.d.ts +10 -0
- package/lib/protocols/VercelAIAdapter.js +27 -7
- package/lib/protocols/index.d.ts +1 -0
- package/lib/protocols/index.js +1 -0
- package/lib/runtimes/actions.d.ts +3 -3
- package/lib/runtimes/actions.js +41 -16
- package/lib/runtimes/apis.d.ts +13 -4
- package/lib/runtimes/browser/agent.d.ts +54 -0
- package/lib/runtimes/browser/agent.js +63 -0
- package/lib/runtimes/browser/anonymousToken.d.ts +121 -0
- package/lib/runtimes/browser/anonymousToken.js +300 -0
- package/lib/runtimes/browser/frontendTools.d.ts +61 -0
- package/lib/runtimes/browser/frontendTools.js +152 -0
- package/lib/runtimes/browser/index.d.ts +11 -0
- package/lib/runtimes/browser/index.js +20 -0
- package/lib/runtimes/browser/model.d.ts +52 -0
- package/lib/runtimes/browser/model.js +110 -0
- package/lib/runtimes/browser/protocol.d.ts +54 -0
- package/lib/runtimes/browser/protocol.js +35 -0
- package/lib/runtimes/browser/subagents.d.ts +131 -0
- package/lib/runtimes/browser/subagents.js +241 -0
- package/lib/runtimes/index.d.ts +3 -0
- package/lib/runtimes/index.js +3 -0
- package/lib/runtimes/lifecycle.d.ts +76 -0
- package/lib/runtimes/lifecycle.js +99 -0
- package/lib/runtimes/variants.d.ts +172 -0
- package/lib/runtimes/variants.js +187 -0
- package/lib/services/reconnectToRuntime.d.ts +2 -2
- package/lib/services/reconnectToRuntime.js +3 -3
- package/lib/services/sandboxServiceManagers.d.ts +2 -2
- package/lib/services/sandboxServiceManagers.js +11 -11
- package/lib/specs/agents/agents.d.ts +128 -112
- package/lib/specs/agents/agents.js +8024 -5052
- package/lib/specs/envvars.d.ts +1 -1
- package/lib/specs/envvars.js +3 -3
- package/lib/specs/evals.js +9 -0
- package/lib/specs/frontendTools.d.ts +3 -0
- package/lib/specs/frontendTools.js +46 -3
- package/lib/specs/mcpServers.d.ts +1 -0
- package/lib/specs/mcpServers.js +27 -4
- package/lib/specs/models.d.ts +18 -0
- package/lib/specs/models.js +154 -0
- package/lib/specs/outputs.d.ts +2 -0
- package/lib/specs/outputs.js +22 -0
- package/lib/specs/personas.js +1 -1
- package/lib/specs/teams/teams.d.ts +2 -0
- package/lib/specs/teams/teams.js +628 -111
- package/lib/state/index.d.ts +1 -1
- package/lib/state/index.js +1 -1
- package/lib/state/substates/RuntimesState.d.ts +5 -5
- package/lib/state/substates/RuntimesState.js +17 -14
- package/lib/state/substates/index.d.ts +1 -1
- package/lib/state/substates/index.js +1 -1
- package/lib/stores/agentRuntimeStore.d.ts +43 -1
- package/lib/stores/agentRuntimeStore.js +100 -11
- package/lib/stores/index.d.ts +1 -1
- package/lib/stores/index.js +1 -1
- package/lib/stories/Button.d.ts +1 -1
- package/lib/stories/Button.stories.d.ts +1 -1
- package/lib/stories/Header.d.ts +1 -1
- package/lib/stories/Header.stories.d.ts +1 -1
- package/lib/test-setup.js +66 -0
- package/lib/tools/adapters/agent-runtimes/lexicalHooks.d.ts +15 -0
- package/lib/tools/adapters/agent-runtimes/lexicalHooks.js +43 -2
- package/lib/tools/adapters/agent-runtimes/notebookHooks.d.ts +9 -0
- package/lib/tools/adapters/agent-runtimes/notebookHooks.js +12 -0
- package/lib/tools/adapters/commands/frontendCommandTools.d.ts +11 -0
- package/lib/tools/adapters/commands/frontendCommandTools.js +60 -0
- package/lib/tools/adapters/commands/index.d.ts +1 -0
- package/lib/{models/Dataset.js → tools/adapters/commands/index.js} +1 -1
- package/lib/tools/adapters/copilotkit/lexicalHooks.js +7 -3
- package/lib/tools/index.d.ts +1 -0
- package/lib/tools/index.js +1 -0
- package/lib/types/a2a.d.ts +15 -1
- package/lib/types/agents-lifecycle.d.ts +11 -6
- package/lib/types/agents.d.ts +31 -6
- package/lib/types/agentspecs.d.ts +120 -4
- package/lib/types/chat.d.ts +251 -3
- package/lib/types/checkpoints.d.ts +20 -0
- package/lib/types/config.d.ts +13 -1
- package/lib/types/connection.d.ts +1 -1
- package/lib/types/evals.d.ts +2 -0
- package/lib/types/messages.d.ts +60 -0
- package/lib/types/models.d.ts +26 -0
- package/lib/types/notifications.d.ts +15 -6
- package/lib/types/protocol.d.ts +7 -2
- package/lib/types/stream.d.ts +48 -3
- package/lib/types/stream.js +5 -0
- package/lib/types/teams.d.ts +102 -4
- package/lib/types/tool-approvals.d.ts +1 -1
- package/lib/types/tools.d.ts +8 -2
- package/lib/utils/utils.js +7 -1
- package/package.json +376 -361
- package/scripts/codegen/__pycache__/compose.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
- package/scripts/codegen/compose.py +208 -0
- package/scripts/codegen/generate_agents.py +202 -31
- package/scripts/codegen/generate_evals.py +2 -0
- package/scripts/codegen/generate_frontend_tools.py +35 -6
- package/scripts/codegen/generate_models.py +40 -15
- package/scripts/codegen/generate_sandbox_agents.py +76 -62
- package/scripts/codegen/generate_teams.py +178 -4
- package/scripts/codegen/generate_tools.py +6 -4
- package/scripts/gen_workers.py +279 -111
- package/scripts/generate-environments-types.py +404 -0
- package/lib/chat/prompt/InputFooter.d.ts +0 -58
- package/lib/chat/prompt/InputFooter.js +0 -194
- package/lib/chat/prompt/InputPromptFooter.d.ts +0 -27
- package/lib/chat/prompt/InputPromptFooter.js +0 -15
- package/lib/chat/prompt/InputPromptHeader.d.ts +0 -15
- package/lib/chat/prompt/InputPromptHeader.js +0 -15
- package/lib/chat/usage/TokenUsageBar.d.ts +0 -8
- package/lib/hooks/useRuntimes.d.ts +0 -5
- package/lib/hooks/useRuntimes.js +0 -34
- package/lib/jupyter/kernelsHandler.d.ts +0 -8
- package/lib/jupyter/kernelsHandler.js +0 -39
- package/lib/models/Dataset.d.ts +0 -16
- package/lib/utils/Cells.d.ts +0 -2
- package/lib/utils/Cells.js +0 -28
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* `@datalayer/loop-plugin-chat-view` — the bare conversation, one click away.
|
|
7
|
+
*
|
|
8
|
+
* The footer icon that clears the editor column: the view the selector used
|
|
9
|
+
* to call "None", renamed to what it actually is. Requires the input-prompt
|
|
10
|
+
* plugin, whose footer the icon sits in.
|
|
11
|
+
*
|
|
12
|
+
* @module loop/plugins/chat-view
|
|
13
|
+
*/
|
|
14
|
+
import { CommentDiscussionIcon } from '@primer/octicons-react';
|
|
15
|
+
import { NONE_EDITOR } from '../shell/editorChoice';
|
|
16
|
+
import { defineViewPlugin } from '../view-switch';
|
|
17
|
+
export const CHAT_VIEW_PLUGIN_NAME = '@datalayer/loop-plugin-chat-view';
|
|
18
|
+
export const ChatViewPlugin = defineViewPlugin({
|
|
19
|
+
key: 'chat',
|
|
20
|
+
viewId: NONE_EDITOR,
|
|
21
|
+
displayName: 'Chat view',
|
|
22
|
+
description: 'The conversation on its own, from the composer footer.',
|
|
23
|
+
icon: CommentDiscussionIcon,
|
|
24
|
+
tooltip: 'Show the chat',
|
|
25
|
+
octicon: 'comment-discussion',
|
|
26
|
+
emoji: '\u{1F4AC}',
|
|
27
|
+
order: 10,
|
|
28
|
+
});
|
|
29
|
+
export default ChatViewPlugin;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The conversation checkpoints of the workspace's agent.
|
|
3
|
+
*
|
|
4
|
+
* Reads them from the server the workspace is backed by, again after every
|
|
5
|
+
* snapshot the agent pushes (so a turn's auto-checkpoint shows as the turn
|
|
6
|
+
* ends), and offers the three things a person does with them: save one now,
|
|
7
|
+
* rewind to one, drop one. A rewind asks the chat to reload its transcript
|
|
8
|
+
* once the server's fresh snapshot has arrived, so what is on screen is what
|
|
9
|
+
* the agent now remembers.
|
|
10
|
+
*
|
|
11
|
+
* @module loop/plugins/checkpoints-sidebar/CheckpointsSidebar
|
|
12
|
+
*/
|
|
13
|
+
import React from 'react';
|
|
14
|
+
import type { LoopWorkspaceContext } from '../../core';
|
|
15
|
+
/** "2 min ago" for a checkpoint's time, or the time itself when older. */
|
|
16
|
+
export declare function ago(iso: string, now?: number): string;
|
|
17
|
+
/**
|
|
18
|
+
* Wait for the store's full context to change — the server's next snapshot —
|
|
19
|
+
* then resolve; resolve anyway after `timeoutMs`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function afterNextSnapshot(timeoutMs?: number): Promise<void>;
|
|
22
|
+
export interface CheckpointsSidebarProps {
|
|
23
|
+
/** Forwarded by the shell: where the agent runs and which one it is. */
|
|
24
|
+
workspace?: LoopWorkspaceContext;
|
|
25
|
+
}
|
|
26
|
+
export declare function CheckpointsSidebar({ workspace, }: CheckpointsSidebarProps): React.ReactElement;
|
|
27
|
+
export default CheckpointsSidebar;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* The conversation checkpoints of the workspace's agent.
|
|
8
|
+
*
|
|
9
|
+
* Reads them from the server the workspace is backed by, again after every
|
|
10
|
+
* snapshot the agent pushes (so a turn's auto-checkpoint shows as the turn
|
|
11
|
+
* ends), and offers the three things a person does with them: save one now,
|
|
12
|
+
* rewind to one, drop one. A rewind asks the chat to reload its transcript
|
|
13
|
+
* once the server's fresh snapshot has arrived, so what is on screen is what
|
|
14
|
+
* the agent now remembers.
|
|
15
|
+
*
|
|
16
|
+
* @module loop/plugins/checkpoints-sidebar/CheckpointsSidebar
|
|
17
|
+
*/
|
|
18
|
+
import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
|
|
19
|
+
import { Button, Heading, IconButton, Label, Text, TextInput, Timeline, } from '@primer/react';
|
|
20
|
+
import { BookmarkIcon, HistoryIcon, SyncIcon, TrashIcon, VersionsIcon, } from '@primer/octicons-react';
|
|
21
|
+
import { Box } from '@datalayer/primer-addons';
|
|
22
|
+
import { deleteConversationCheckpoint, isAutoCheckpoint, listConversationCheckpoints, rewindConversation, saveConversationCheckpoint, } from '../../../api/checkpoints';
|
|
23
|
+
import { agentRuntimeStore, useAgentRuntimeStore, } from '../../../stores/agentRuntimeStore';
|
|
24
|
+
/** How long to wait for the server's snapshot after a rewind before reloading anyway. */
|
|
25
|
+
const SNAPSHOT_WAIT_MS = 3000;
|
|
26
|
+
const FREQUENCY_LABEL = {
|
|
27
|
+
every_turn: 'after every turn',
|
|
28
|
+
every_tool: 'before every tool call',
|
|
29
|
+
manual_only: 'only on request',
|
|
30
|
+
};
|
|
31
|
+
/** "2 min ago" for a checkpoint's time, or the time itself when older. */
|
|
32
|
+
export function ago(iso, now = Date.now()) {
|
|
33
|
+
const then = new Date(iso).getTime();
|
|
34
|
+
if (Number.isNaN(then))
|
|
35
|
+
return '';
|
|
36
|
+
const seconds = Math.max(0, Math.round((now - then) / 1000));
|
|
37
|
+
if (seconds < 45)
|
|
38
|
+
return 'just now';
|
|
39
|
+
const minutes = Math.round(seconds / 60);
|
|
40
|
+
if (minutes < 60)
|
|
41
|
+
return `${minutes} min ago`;
|
|
42
|
+
const hours = Math.round(minutes / 60);
|
|
43
|
+
if (hours < 24)
|
|
44
|
+
return `${hours} h ago`;
|
|
45
|
+
return new Date(then).toLocaleString();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Wait for the store's full context to change — the server's next snapshot —
|
|
49
|
+
* then resolve; resolve anyway after `timeoutMs`.
|
|
50
|
+
*/
|
|
51
|
+
export function afterNextSnapshot(timeoutMs = SNAPSHOT_WAIT_MS) {
|
|
52
|
+
return new Promise(resolve => {
|
|
53
|
+
const before = agentRuntimeStore.getState().fullContext;
|
|
54
|
+
let done = false;
|
|
55
|
+
const finish = () => {
|
|
56
|
+
if (done)
|
|
57
|
+
return;
|
|
58
|
+
done = true;
|
|
59
|
+
unsubscribe();
|
|
60
|
+
window.clearTimeout(timer);
|
|
61
|
+
resolve();
|
|
62
|
+
};
|
|
63
|
+
const unsubscribe = agentRuntimeStore.subscribe(state => state.fullContext, next => {
|
|
64
|
+
if (next !== before)
|
|
65
|
+
finish();
|
|
66
|
+
});
|
|
67
|
+
const timer = window.setTimeout(finish, timeoutMs);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function SectionHeading({ children }) {
|
|
71
|
+
return (_jsx(Heading, { as: "h4", sx: { fontSize: 1, mb: 2 }, children: children }));
|
|
72
|
+
}
|
|
73
|
+
export function CheckpointsSidebar({ workspace, }) {
|
|
74
|
+
const serverUrl = workspace?.serverUrl ?? '';
|
|
75
|
+
const agentId = workspace?.agentId ?? '';
|
|
76
|
+
const [state, setState] = useState(null);
|
|
77
|
+
const [error, setError] = useState(null);
|
|
78
|
+
const [busy, setBusy] = useState(null);
|
|
79
|
+
const [label, setLabel] = useState('');
|
|
80
|
+
const [now, setNow] = useState(() => Date.now());
|
|
81
|
+
// A new snapshot means a turn ended (or a rewind landed): read the list again.
|
|
82
|
+
const fullContext = useAgentRuntimeStore(s => s.fullContext);
|
|
83
|
+
const alive = useRef(true);
|
|
84
|
+
const reload = useCallback(async () => {
|
|
85
|
+
if (!serverUrl || !agentId)
|
|
86
|
+
return;
|
|
87
|
+
try {
|
|
88
|
+
const next = await listConversationCheckpoints(serverUrl, agentId);
|
|
89
|
+
if (!alive.current)
|
|
90
|
+
return;
|
|
91
|
+
setState(next);
|
|
92
|
+
setError(null);
|
|
93
|
+
setNow(Date.now());
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
if (!alive.current)
|
|
97
|
+
return;
|
|
98
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
99
|
+
}
|
|
100
|
+
}, [serverUrl, agentId]);
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
alive.current = true;
|
|
103
|
+
return () => {
|
|
104
|
+
alive.current = false;
|
|
105
|
+
};
|
|
106
|
+
}, []);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
void reload();
|
|
109
|
+
}, [reload, fullContext]);
|
|
110
|
+
// The "ago" labels move on their own.
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
const timer = window.setInterval(() => setNow(Date.now()), 30000);
|
|
113
|
+
return () => window.clearInterval(timer);
|
|
114
|
+
}, []);
|
|
115
|
+
const act = useCallback(async (key, work) => {
|
|
116
|
+
setBusy(key);
|
|
117
|
+
setError(null);
|
|
118
|
+
try {
|
|
119
|
+
await work();
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (alive.current) {
|
|
123
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
if (alive.current)
|
|
128
|
+
setBusy(null);
|
|
129
|
+
}
|
|
130
|
+
await reload();
|
|
131
|
+
}, [reload]);
|
|
132
|
+
const save = useCallback(() => {
|
|
133
|
+
const trimmed = label.trim();
|
|
134
|
+
if (!trimmed)
|
|
135
|
+
return;
|
|
136
|
+
void act('save', async () => {
|
|
137
|
+
await saveConversationCheckpoint(serverUrl, agentId, trimmed);
|
|
138
|
+
if (alive.current)
|
|
139
|
+
setLabel('');
|
|
140
|
+
});
|
|
141
|
+
}, [act, agentId, label, serverUrl]);
|
|
142
|
+
const rewind = useCallback((checkpoint) => act(`rewind:${checkpoint.id}`, async () => {
|
|
143
|
+
const settled = afterNextSnapshot();
|
|
144
|
+
await rewindConversation(serverUrl, agentId, checkpoint.id);
|
|
145
|
+
// The server pushes the rewound snapshot; ask for one too in case the
|
|
146
|
+
// push raced us, then have the chat load the transcript it now has.
|
|
147
|
+
agentRuntimeStore.getState().requestRefresh(agentId);
|
|
148
|
+
await settled;
|
|
149
|
+
agentRuntimeStore.getState().requestHistoryReload();
|
|
150
|
+
}), [act, agentId, serverUrl]);
|
|
151
|
+
const remove = useCallback((checkpoint) => act(`delete:${checkpoint.id}`, () => deleteConversationCheckpoint(serverUrl, agentId, checkpoint.id)), [act, agentId, serverUrl]);
|
|
152
|
+
const checkpoints = useMemo(() => state?.checkpoints ?? [], [state]);
|
|
153
|
+
const enabled = state?.enabled ?? false;
|
|
154
|
+
return (_jsxs(Box, { "data-checkpoints-sidebar": agentId || undefined, "data-checkpoints-count": checkpoints.length, sx: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(VersionsIcon, { size: 16 }), _jsx(Heading, { as: "h3", sx: { fontSize: 2, m: 0, flex: 1 }, children: "Checkpoints" }), _jsx(Label, { variant: "accent", children: checkpoints.length }), _jsx(IconButton, { icon: SyncIcon, size: "small", variant: "invisible", "aria-label": "Refresh checkpoints", onClick: () => void reload() })] }), _jsxs(Box, { children: [_jsx(SectionHeading, { children: "How they are taken" }), state === null ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: error ? `Could not read them: ${error}` : 'Reading…' })) : !enabled ? (_jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', m: 0 }, children: "This agent's spec asks for no conversation checkpoints." })) : (_jsxs(Box, { sx: {
|
|
155
|
+
display: 'grid',
|
|
156
|
+
gridTemplateColumns: 'max-content 1fr',
|
|
157
|
+
columnGap: 3,
|
|
158
|
+
rowGap: 1,
|
|
159
|
+
fontSize: 0,
|
|
160
|
+
}, children: [_jsx(Text, { sx: { color: 'fg.muted' }, children: "Snapshot" }), _jsx(Text, { children: FREQUENCY_LABEL[state.frequency ?? ''] ?? state.frequency }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Kept" }), _jsxs(Text, { children: ["the last ", state.maxCheckpoints ?? '—', ",", ' ', state.store ?? 'in_memory'] }), _jsx(Text, { sx: { color: 'fg.muted' }, children: "Turn" }), _jsx(Text, { "data-checkpoints-turn": state.turn, children: state.turn })] }))] }), enabled ? (_jsxs(Box, { children: [_jsx(SectionHeading, { children: "Save one now" }), _jsxs(Box, { sx: { display: 'flex', gap: 2 }, children: [_jsx(TextInput, { size: "small", sx: { flex: 1 }, placeholder: "Label, e.g. before-refactor", value: label, "aria-label": "Checkpoint label", onChange: event => setLabel(event.target.value), onKeyDown: event => {
|
|
161
|
+
if (event.key === 'Enter')
|
|
162
|
+
save();
|
|
163
|
+
} }), _jsx(Button, { size: "small", leadingVisual: BookmarkIcon, disabled: !label.trim() || busy !== null, onClick: save, "data-checkpoints-save": true, children: "Save" })] }), _jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mt: 1, mb: 0 }, children: "The conversation as the last turn left it." })] })) : null, error && state !== null ? (_jsx(Text, { sx: { fontSize: 0, color: 'danger.fg' }, "data-checkpoints-error": true, children: error })) : null, _jsxs(Box, { children: [_jsx(SectionHeading, { children: "Checkpoints" }), checkpoints.length === 0 ? (_jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', m: 0 }, children: enabled ? 'None yet — one is taken as each turn ends.' : 'None.' })) : (_jsx(Timeline, { children: checkpoints.map(checkpoint => {
|
|
164
|
+
const auto = isAutoCheckpoint(checkpoint);
|
|
165
|
+
const rewinding = busy === `rewind:${checkpoint.id}`;
|
|
166
|
+
return (_jsxs(Timeline.Item, { "data-checkpoint": checkpoint.id, "data-checkpoint-label": checkpoint.label, "data-checkpoint-auto": auto ? 'true' : 'false', children: [_jsx(Timeline.Badge, { children: auto ? _jsx(HistoryIcon, {}) : _jsx(BookmarkIcon, {}) }), _jsxs(Timeline.Body, { children: [_jsxs(Box, { sx: {
|
|
167
|
+
display: 'flex',
|
|
168
|
+
alignItems: 'center',
|
|
169
|
+
gap: 2,
|
|
170
|
+
flexWrap: 'wrap',
|
|
171
|
+
}, children: [_jsx(Text, { sx: { fontWeight: 'bold', fontSize: 1 }, children: checkpoint.label }), _jsx(Label, { size: "small", variant: auto ? 'secondary' : 'accent', children: auto ? 'auto' : 'saved' })] }), _jsxs(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mt: 0, mb: 1 }, children: ["turn ", checkpoint.turn, " \u00B7 ", checkpoint.messageCount, " message", checkpoint.messageCount === 1 ? '' : 's', " \u00B7", ' ', ago(checkpoint.createdAt, now)] }), _jsxs(Box, { sx: { display: 'flex', gap: 2, alignItems: 'center' }, children: [_jsx(Button, { size: "small", leadingVisual: HistoryIcon, disabled: busy !== null, onClick: () => void rewind(checkpoint), "data-checkpoints-rewind": checkpoint.id, children: rewinding ? 'Rewinding…' : 'Rewind' }), _jsx(IconButton, { icon: TrashIcon, size: "small", variant: "invisible", "aria-label": `Delete checkpoint ${checkpoint.label}`, disabled: busy !== null, onClick: () => void remove(checkpoint) })] })] })] }, checkpoint.id));
|
|
172
|
+
}) }))] })] }));
|
|
173
|
+
}
|
|
174
|
+
export default CheckpointsSidebar;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ReactorReactOutput } from '@datalayer/reactor/react';
|
|
2
|
+
export declare const CHECKPOINTS_SIDEBAR_PLUGIN_NAME = "@datalayer/loop-plugin-checkpoints-sidebar";
|
|
3
|
+
export declare const CheckpointsSidebarPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, ReactorReactOutput>;
|
|
4
|
+
export { CheckpointsSidebar } from './CheckpointsSidebar';
|
|
5
|
+
export default CheckpointsSidebarPlugin;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* `@datalayer/loop-plugin-checkpoints-sidebar` — the agent's conversation
|
|
8
|
+
* checkpoints, at the side of the workspace.
|
|
9
|
+
*
|
|
10
|
+
* The agent snapshots its conversation as it runs; this lists the snapshots
|
|
11
|
+
* with how they were taken, lets a person save one between turns, rewind
|
|
12
|
+
* the conversation to one — the chat reloads its transcript — and drop one.
|
|
13
|
+
*
|
|
14
|
+
* @module loop/plugins/checkpoints-sidebar
|
|
15
|
+
*/
|
|
16
|
+
import { definePlugin } from '@datalayer/reactor';
|
|
17
|
+
import { LoopSlots } from '../../core';
|
|
18
|
+
import { CheckpointsSidebar } from './CheckpointsSidebar';
|
|
19
|
+
export const CHECKPOINTS_SIDEBAR_PLUGIN_NAME = '@datalayer/loop-plugin-checkpoints-sidebar';
|
|
20
|
+
export const CheckpointsSidebarPlugin = definePlugin({
|
|
21
|
+
name: CHECKPOINTS_SIDEBAR_PLUGIN_NAME,
|
|
22
|
+
displayName: 'Checkpoints sidebar',
|
|
23
|
+
description: 'The conversation checkpoints, and the way back to any of them.',
|
|
24
|
+
octicon: 'versions',
|
|
25
|
+
emoji: '\u{1F4BE}',
|
|
26
|
+
build: () => ({
|
|
27
|
+
components: [
|
|
28
|
+
{
|
|
29
|
+
id: 'checkpoints-sidebar',
|
|
30
|
+
slot: LoopSlots.sidebar,
|
|
31
|
+
// Part of the work, so above the plugins panel (900).
|
|
32
|
+
order: 100,
|
|
33
|
+
Component: ({ workspace }) => (_jsx(CheckpointsSidebar, { workspace: workspace })),
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
}),
|
|
37
|
+
});
|
|
38
|
+
export { CheckpointsSidebar } from './CheckpointsSidebar';
|
|
39
|
+
export default CheckpointsSidebarPlugin;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Contribution } from '@datalayer/reactor';
|
|
2
|
+
import type { ReactorReactOutput } from '@datalayer/reactor/react';
|
|
3
|
+
import { type CommandContribution, type LoopWorkspaceContext } from '../../core';
|
|
4
|
+
export declare const COMMANDS_PLUGIN_NAME = "@datalayer/loop-plugin-commands";
|
|
5
|
+
export type LoopCommandBridgeProps = {
|
|
6
|
+
/** Handed by the slot; the commands run against it. */
|
|
7
|
+
workspace?: LoopWorkspaceContext;
|
|
8
|
+
/** Registers the current set, and returns what undoes it. */
|
|
9
|
+
sync: (commands: Contribution<CommandContribution>[], workspace: LoopWorkspaceContext | undefined) => void;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Renders nothing; keeps the registry in step with the contributions.
|
|
13
|
+
*
|
|
14
|
+
* A component rather than a one-off registration in `register`, because
|
|
15
|
+
* contributions arrive as plugins activate — a plugin switched on from the
|
|
16
|
+
* sidebar has to show up in the palette without a reload.
|
|
17
|
+
*/
|
|
18
|
+
export declare function LoopCommandBridge({ workspace, sync, }: LoopCommandBridgeProps): null;
|
|
19
|
+
export declare const LoopCommandsPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, ReactorReactOutput>;
|
|
20
|
+
export default LoopCommandsPlugin;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* `@datalayer/loop-plugin-commands` — the workspace's commands, in the palette.
|
|
8
|
+
*
|
|
9
|
+
* A thin adapter over the reusable `@datalayer/reactor-commands`: that plugin
|
|
10
|
+
* draws a Ctrl-K palette over the reactor's command registry and knows nothing
|
|
11
|
+
* about a workspace, and this one puts the workspace's commands into that
|
|
12
|
+
* registry. Keeping them apart is what lets the palette stay generic — it is
|
|
13
|
+
* the same palette in a music store and in an agent workspace.
|
|
14
|
+
*
|
|
15
|
+
* Every command a plugin already contributes to {@link LoopCommand} appears,
|
|
16
|
+
* rather than each plugin declaring its actions twice. A slash command and a
|
|
17
|
+
* palette entry are the same intent reached two ways, and a plugin that wrote
|
|
18
|
+
* them separately would eventually have them disagree — a `/models` that shows
|
|
19
|
+
* something the palette's *Show the models* does not.
|
|
20
|
+
*
|
|
21
|
+
* What it cannot do from a plugin phase is know which workspace is on screen,
|
|
22
|
+
* because that is built during render. So the registration is driven by a
|
|
23
|
+
* component: it reads the contributions and the workspace it was handed, and
|
|
24
|
+
* re-registers when either changes.
|
|
25
|
+
*
|
|
26
|
+
* @module loop/plugins/commands
|
|
27
|
+
*/
|
|
28
|
+
import { useEffect } from 'react';
|
|
29
|
+
import { definePlugin } from '@datalayer/reactor';
|
|
30
|
+
import { useContributions } from '@datalayer/reactor/react';
|
|
31
|
+
import { CommandsPlugin } from '@datalayer/reactor-commands';
|
|
32
|
+
import { ThemePlugin } from '@datalayer/primer-addons/lib/reactor';
|
|
33
|
+
import { LoopCommand, LoopSlots, } from '../../core';
|
|
34
|
+
export const COMMANDS_PLUGIN_NAME = '@datalayer/loop-plugin-commands';
|
|
35
|
+
/** How a slash command's group becomes a palette category. */
|
|
36
|
+
const DEFAULT_CATEGORY = 'Workspace';
|
|
37
|
+
/**
|
|
38
|
+
* Emoji per group, so the palette has something to show for commands that
|
|
39
|
+
* predate it. A slash command never needed one — `/help` prints text — and
|
|
40
|
+
* backfilling a field onto every contribution to satisfy a surface added
|
|
41
|
+
* later is how a shared type acquires a column that means "for the palette".
|
|
42
|
+
*/
|
|
43
|
+
const GROUP_EMOJI = {
|
|
44
|
+
Agents: '\u{1F916}',
|
|
45
|
+
Open: '\u{1F4C2}',
|
|
46
|
+
Session: '\u{1F9ED}',
|
|
47
|
+
Workspace: '\u{1FA9F}',
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Renders nothing; keeps the registry in step with the contributions.
|
|
51
|
+
*
|
|
52
|
+
* A component rather than a one-off registration in `register`, because
|
|
53
|
+
* contributions arrive as plugins activate — a plugin switched on from the
|
|
54
|
+
* sidebar has to show up in the palette without a reload.
|
|
55
|
+
*/
|
|
56
|
+
export function LoopCommandBridge({ workspace, sync, }) {
|
|
57
|
+
const commands = useContributions(LoopCommand);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
sync(commands, workspace);
|
|
60
|
+
}, [commands, workspace, sync]);
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
export const LoopCommandsPlugin = definePlugin({
|
|
64
|
+
name: COMMANDS_PLUGIN_NAME,
|
|
65
|
+
displayName: 'Command palette',
|
|
66
|
+
description: 'Puts the workspace commands in a Ctrl-K palette, beside every plugin that registers one.',
|
|
67
|
+
octicon: 'command-palette',
|
|
68
|
+
emoji: '\u{2318}',
|
|
69
|
+
// The generic palette is pulled in rather than assumed: mounting this one is
|
|
70
|
+
// enough, whether or not the host remembered the other. The theme plugin
|
|
71
|
+
// rides along for the same reason: it is what creates the themed portal
|
|
72
|
+
// root the palette renders into — and keeps its color mode following the
|
|
73
|
+
// application, which the old inline `setupPrimerPortals()` call never did.
|
|
74
|
+
dependencies: [CommandsPlugin, ThemePlugin],
|
|
75
|
+
build: ctx => {
|
|
76
|
+
/** What each contribution's registration undoes, by command name. */
|
|
77
|
+
const registered = new Map();
|
|
78
|
+
/*
|
|
79
|
+
* What was registered last time, so an unchanged set is left alone.
|
|
80
|
+
*
|
|
81
|
+
* Registering and disposing both move the reactor's revision, and the
|
|
82
|
+
* revision is what `useContributions` re-reads on — so a sync that always
|
|
83
|
+
* re-registers wakes the component that called it, which syncs again, for
|
|
84
|
+
* ever. React reports it as "Maximum update depth exceeded", several frames
|
|
85
|
+
* away from the cause.
|
|
86
|
+
*/
|
|
87
|
+
let signature = '';
|
|
88
|
+
let lastWorkspace;
|
|
89
|
+
const sync = (commands, workspace) => {
|
|
90
|
+
const next = workspace
|
|
91
|
+
? commands.map(entry => `${entry.plugin}:${entry.value.name}`).join('|')
|
|
92
|
+
: '';
|
|
93
|
+
if (next === signature && workspace === lastWorkspace) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
signature = next;
|
|
97
|
+
lastWorkspace = workspace;
|
|
98
|
+
// Re-registered wholesale rather than diffed: the palette has to invoke
|
|
99
|
+
// against the *current* workspace, so a command registered against a
|
|
100
|
+
// previous one is wrong even when its contribution has not changed.
|
|
101
|
+
for (const dispose of registered.values()) {
|
|
102
|
+
dispose();
|
|
103
|
+
}
|
|
104
|
+
registered.clear();
|
|
105
|
+
if (!workspace) {
|
|
106
|
+
// Nothing to run against. Registering commands that would throw the
|
|
107
|
+
// moment they are chosen is worse than an empty palette.
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
for (const entry of commands) {
|
|
111
|
+
const command = entry.value;
|
|
112
|
+
const group = command.group ?? DEFAULT_CATEGORY;
|
|
113
|
+
registered.set(command.name, ctx.registerCommand({
|
|
114
|
+
// Namespaced, because a palette is shared with every other plugin
|
|
115
|
+
// and `chat` is not a name anyone else has to avoid.
|
|
116
|
+
id: `loop.${command.name}`,
|
|
117
|
+
name: command.description,
|
|
118
|
+
// The slash form is what a person may already know it by, so it is
|
|
119
|
+
// worth showing beside the description rather than instead of it.
|
|
120
|
+
description: `/${command.name}`,
|
|
121
|
+
emoji: GROUP_EMOJI[group] ?? '\u{1F4A0}',
|
|
122
|
+
category: group,
|
|
123
|
+
// Carried through rather than invented here: a shortcut belongs to
|
|
124
|
+
// the plugin that knows what the command does.
|
|
125
|
+
keybinding: command.keybinding,
|
|
126
|
+
// Slash commands take their arguments as text after the name; the
|
|
127
|
+
// palette has no argument to give, so they run with none. A command
|
|
128
|
+
// that needs one says so when it runs.
|
|
129
|
+
execute: async () => {
|
|
130
|
+
await command.run({ workspace, argv: '' });
|
|
131
|
+
},
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
return {
|
|
136
|
+
components: [
|
|
137
|
+
{
|
|
138
|
+
id: 'loop-command-bridge',
|
|
139
|
+
// Rendered where the workspace already passes itself down, and
|
|
140
|
+
// invisible: the palette is the surface, this only feeds it.
|
|
141
|
+
slot: LoopSlots.status,
|
|
142
|
+
Component: ({ workspace }) => (_jsx(LoopCommandBridge, { workspace: workspace, sync: sync })),
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
};
|
|
146
|
+
},
|
|
147
|
+
});
|
|
148
|
+
export default LoopCommandsPlugin;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The deck beside the chat: the decks plugin's own view, in the editor column.
|
|
3
|
+
*
|
|
4
|
+
* It shows whichever deck the store says is open — the agent's `decks_open`,
|
|
5
|
+
* a click in the sidebar list, the composer menu — and an invitation to make
|
|
6
|
+
* one when none is.
|
|
7
|
+
*/
|
|
8
|
+
import type { JSX } from 'react';
|
|
9
|
+
import type { ChatSurfaceProps } from '../../core';
|
|
10
|
+
export default function DeckSurface(_: ChatSurfaceProps): JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box } from '@primer/react';
|
|
3
|
+
import { DecksView } from '@datalayer/decks/plugin';
|
|
4
|
+
export default function DeckSurface(_) {
|
|
5
|
+
return (_jsx(Box, { sx: { height: '100%', minHeight: 0, overflow: 'auto' }, children: _jsx(DecksView, {}) }));
|
|
6
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The decks menu in the composer's action row.
|
|
3
|
+
*
|
|
4
|
+
* One icon beside the prompt: the decks the catalog knows, to open one, and
|
|
5
|
+
* the plugin's commands — the same ones the palette lists and the agent
|
|
6
|
+
* calls — with their keystrokes. Read from the reactor rather than written
|
|
7
|
+
* out here, so a command the plugin adds is in the menu without this file
|
|
8
|
+
* changing.
|
|
9
|
+
*/
|
|
10
|
+
import type { JSX } from 'react';
|
|
11
|
+
export default function DecksMenu(): JSX.Element | null;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ActionList, ActionMenu, IconButton } from '@primer/react';
|
|
3
|
+
// A stack of slides — not the project icon, which the Deck view button
|
|
4
|
+
// beside this menu already wears.
|
|
5
|
+
import { StackIcon } from '@primer/octicons-react';
|
|
6
|
+
import { useReactorPlatform } from '@datalayer/reactor/react';
|
|
7
|
+
import { deckId } from '@datalayer/decks';
|
|
8
|
+
import { openDeck, useDeckEntries, useDecksState, } from '@datalayer/decks/plugin';
|
|
9
|
+
import { chooseEditor } from '../shell/editorChoice';
|
|
10
|
+
import { DECK_SURFACE_ID } from './surface';
|
|
11
|
+
/** Commands that take an argument; a menu row cannot supply one. */
|
|
12
|
+
const NEEDS_ARGUMENT = new Set(['decks.open', 'decks.goToSlide']);
|
|
13
|
+
export default function DecksMenu() {
|
|
14
|
+
const reactor = useReactorPlatform();
|
|
15
|
+
const decks = useDeckEntries();
|
|
16
|
+
const { selected } = useDecksState();
|
|
17
|
+
const commands = reactor
|
|
18
|
+
.listCommands()
|
|
19
|
+
.filter(command => command.category === 'Decks' && !NEEDS_ARGUMENT.has(command.id));
|
|
20
|
+
if (commands.length === 0 && decks.length === 0) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const show = () => {
|
|
24
|
+
if (!chooseEditor(DECK_SURFACE_ID)) {
|
|
25
|
+
console.warn('[loop] No chat is on screen to show the deck beside.');
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return (_jsxs(ActionMenu, { children: [_jsx(ActionMenu.Anchor, { children: _jsx(IconButton, { icon: StackIcon, "aria-label": "Decks", size: "small", variant: "invisible" }) }), _jsx(ActionMenu.Overlay, { width: "medium", children: _jsxs(ActionList, { children: [decks.length > 0 ? (_jsxs(ActionList.Group, { children: [_jsx(ActionList.GroupHeading, { children: "Open a deck" }), decks.map(entry => {
|
|
29
|
+
const id = deckId(entry);
|
|
30
|
+
return (_jsxs(ActionList.Item, { selected: id === selected, onSelect: () => {
|
|
31
|
+
openDeck(id);
|
|
32
|
+
show();
|
|
33
|
+
}, children: [entry.spec.deck.title, _jsxs(ActionList.Description, { variant: "block", children: [id, " \u00B7 ", entry.spec.slides.length, " slides"] })] }, id));
|
|
34
|
+
})] })) : null, decks.length > 0 && commands.length > 0 ? (_jsx(ActionList.Divider, {})) : null, commands.length > 0 ? (_jsxs(ActionList.Group, { children: [_jsx(ActionList.GroupHeading, { children: "Commands" }), commands.map(command => (_jsxs(ActionList.Item, { onSelect: () => {
|
|
35
|
+
void reactor.executeCommand(command.id).then(() => {
|
|
36
|
+
// A command that changes what is on the deck wants the
|
|
37
|
+
// deck on screen; the list command shows the empty
|
|
38
|
+
// state there too, beside the sidebar's list.
|
|
39
|
+
show();
|
|
40
|
+
});
|
|
41
|
+
}, children: [command.name, command.description ? (_jsx(ActionList.Description, { variant: "block", children: command.description })) : null, command.keybinding ? (_jsx(ActionList.TrailingVisual, { children: command.keybinding })) : null] }, command.id)))] })) : null] }) })] }));
|
|
42
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ReactorReactOutput } from '@datalayer/reactor/react';
|
|
2
|
+
export { DECK_SURFACE_ID } from './surface';
|
|
3
|
+
export declare const DECKS_PLUGIN_NAME = "@datalayer/loop-plugin-decks";
|
|
4
|
+
/**
|
|
5
|
+
* A slot nobody renders: the decks plugin's main view is shown through the
|
|
6
|
+
* Deck surface instead, so the plugin's own `slot` output must land nowhere.
|
|
7
|
+
*/
|
|
8
|
+
export declare const DECKS_UNUSED_SLOT = "loop.decks.unused";
|
|
9
|
+
export declare const LoopDecksPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, ReactorReactOutput>;
|
|
10
|
+
/** The footer icon that shows the deck, beside the notebook's and the document's. */
|
|
11
|
+
export declare const DeckViewPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, {
|
|
12
|
+
components: {
|
|
13
|
+
id: string;
|
|
14
|
+
slot: "loop.promptAction";
|
|
15
|
+
order: number;
|
|
16
|
+
Component: () => import("react").JSX.Element | null;
|
|
17
|
+
}[];
|
|
18
|
+
}>;
|
|
19
|
+
export default LoopDecksPlugin;
|