@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,41 @@
|
|
|
1
|
+
/** Whether a tool changes nothing on an editor. */
|
|
2
|
+
export declare function isChatViewTool(name: string): boolean;
|
|
3
|
+
/** The subset of `tools` an agent is handed while no editor is on screen. */
|
|
4
|
+
export declare function toolsForChatView<T extends {
|
|
5
|
+
name: string;
|
|
6
|
+
}>(tools: T[],
|
|
7
|
+
/** Names a contribution vouched for (`chatView: true`), kept regardless. */
|
|
8
|
+
keep?: ReadonlySet<string>): T[];
|
|
9
|
+
/**
|
|
10
|
+
* The order tool contributions are merged in, by their contribution id.
|
|
11
|
+
*
|
|
12
|
+
* The notebook and the document used to ship an `executeCode` under one
|
|
13
|
+
* reference name, and which contribution arrived first decided which won —
|
|
14
|
+
* a race, and in the chat view the document's would answer "No active kernel
|
|
15
|
+
* session" to a request the notebook's could serve. The names are specific
|
|
16
|
+
* now (`executeCodeInNotebook`, `executeCodeInDocument`), so nothing is
|
|
17
|
+
* shadowed; the order is kept deterministic all the same, because "first
|
|
18
|
+
* wins" should never again depend on which lazy import landed first.
|
|
19
|
+
*
|
|
20
|
+
* The editor on screen goes first; with none on screen, the notebook does.
|
|
21
|
+
* Everything else keeps its relative order.
|
|
22
|
+
*/
|
|
23
|
+
export declare function orderToolContributions<T extends {
|
|
24
|
+
value: {
|
|
25
|
+
id: string;
|
|
26
|
+
};
|
|
27
|
+
}>(entries: readonly T[], activeSurfaceId: string | undefined): T[];
|
|
28
|
+
/**
|
|
29
|
+
* Whether a contribution's tools belong to a surface that is not the one on
|
|
30
|
+
* screen.
|
|
31
|
+
*
|
|
32
|
+
* A contribution named `${surfaceId}-tools`, by the notebook and document
|
|
33
|
+
* plugins' own convention, belongs to that one editor. With no editor active
|
|
34
|
+
* (`activeSurfaceId` undefined — the chat view), nothing is excluded here:
|
|
35
|
+
* every surface's tools are still candidates, narrowed instead by
|
|
36
|
+
* `toolsForChatView`. A contribution whose id doesn't follow the
|
|
37
|
+
* `-tools` convention, or whose surface isn't one of `surfaceIds` at all
|
|
38
|
+
* (a host's own tools, say), is never excluded — this only ever withholds
|
|
39
|
+
* another *editor's* tools, never a tool that was never tied to one.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isInactiveSurfaceContribution(id: string, surfaceIds: ReadonlySet<string>, activeSurfaceId: string | undefined): boolean;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The tools an agent keeps, depending on what is on screen.
|
|
7
|
+
*
|
|
8
|
+
* With an editor open, the agent has that editor's own tools — not every
|
|
9
|
+
* editor's: the notebook and the document plugins mount together whenever a
|
|
10
|
+
* workspace offers a choice of either (an `editorSelector`, or a fixed
|
|
11
|
+
* `defaultEditor` with the other still reachable), and their contributions
|
|
12
|
+
* used to reach the model together regardless of which one was actually on
|
|
13
|
+
* screen — asking about a failure while the document was open ran the
|
|
14
|
+
* notebook's cell tools instead of the document's block ones, because
|
|
15
|
+
* nothing excluded the surface that was not showing (see
|
|
16
|
+
* `isInactiveSurfaceContribution`).
|
|
17
|
+
*
|
|
18
|
+
* In the chat view — no editor on screen at all — the notebook and the
|
|
19
|
+
* document are still mounted, out of sight, so every tool would still
|
|
20
|
+
* *work*, but a cell inserted into a notebook nobody is looking at is a
|
|
21
|
+
* change the person did not see happen. So there the agent keeps only the
|
|
22
|
+
* ones that leave the editors as they are — `executeCodeInNotebook` and
|
|
23
|
+
* `executeCodeInDocument`, whose outputs stream onto the conversation, and
|
|
24
|
+
* the read and list tools, so it can still answer from what is there.
|
|
25
|
+
*
|
|
26
|
+
* Names are matched by their reference form and their raw `datalayer_` form
|
|
27
|
+
* alike, since the adapter registers whichever the definition carries.
|
|
28
|
+
*
|
|
29
|
+
* @module loop/plugins/chat/chatViewTools
|
|
30
|
+
*/
|
|
31
|
+
/** The reference name, with the adapter's prefix and the editor suffix off. */
|
|
32
|
+
function bareName(name) {
|
|
33
|
+
return name.replace(/^datalayer_/, '').replace(/_lexical$/, '');
|
|
34
|
+
}
|
|
35
|
+
/** Whether a tool changes nothing on an editor. */
|
|
36
|
+
export function isChatViewTool(name) {
|
|
37
|
+
const bare = bareName(name);
|
|
38
|
+
return (/^executeCodeIn(Notebook|Document)$/.test(bare) ||
|
|
39
|
+
/^(read|list)[A-Z]/.test(bare));
|
|
40
|
+
}
|
|
41
|
+
/** The subset of `tools` an agent is handed while no editor is on screen. */
|
|
42
|
+
export function toolsForChatView(tools,
|
|
43
|
+
/** Names a contribution vouched for (`chatView: true`), kept regardless. */
|
|
44
|
+
keep) {
|
|
45
|
+
return tools.filter(tool => keep?.has(tool.name) || isChatViewTool(tool.name));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The order tool contributions are merged in, by their contribution id.
|
|
49
|
+
*
|
|
50
|
+
* The notebook and the document used to ship an `executeCode` under one
|
|
51
|
+
* reference name, and which contribution arrived first decided which won —
|
|
52
|
+
* a race, and in the chat view the document's would answer "No active kernel
|
|
53
|
+
* session" to a request the notebook's could serve. The names are specific
|
|
54
|
+
* now (`executeCodeInNotebook`, `executeCodeInDocument`), so nothing is
|
|
55
|
+
* shadowed; the order is kept deterministic all the same, because "first
|
|
56
|
+
* wins" should never again depend on which lazy import landed first.
|
|
57
|
+
*
|
|
58
|
+
* The editor on screen goes first; with none on screen, the notebook does.
|
|
59
|
+
* Everything else keeps its relative order.
|
|
60
|
+
*/
|
|
61
|
+
export function orderToolContributions(entries, activeSurfaceId) {
|
|
62
|
+
const rank = (entry) => {
|
|
63
|
+
if (activeSurfaceId && entry.value.id === `${activeSurfaceId}-tools`) {
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
return entry.value.id === 'notebook-tools' ? 1 : 2;
|
|
67
|
+
};
|
|
68
|
+
return entries
|
|
69
|
+
.map((entry, index) => ({ entry, index, rank: rank(entry) }))
|
|
70
|
+
.sort((a, b) => a.rank - b.rank || a.index - b.index)
|
|
71
|
+
.map(item => item.entry);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Whether a contribution's tools belong to a surface that is not the one on
|
|
75
|
+
* screen.
|
|
76
|
+
*
|
|
77
|
+
* A contribution named `${surfaceId}-tools`, by the notebook and document
|
|
78
|
+
* plugins' own convention, belongs to that one editor. With no editor active
|
|
79
|
+
* (`activeSurfaceId` undefined — the chat view), nothing is excluded here:
|
|
80
|
+
* every surface's tools are still candidates, narrowed instead by
|
|
81
|
+
* `toolsForChatView`. A contribution whose id doesn't follow the
|
|
82
|
+
* `-tools` convention, or whose surface isn't one of `surfaceIds` at all
|
|
83
|
+
* (a host's own tools, say), is never excluded — this only ever withholds
|
|
84
|
+
* another *editor's* tools, never a tool that was never tied to one.
|
|
85
|
+
*/
|
|
86
|
+
export function isInactiveSurfaceContribution(id, surfaceIds, activeSurfaceId) {
|
|
87
|
+
if (!activeSurfaceId || !id.endsWith('-tools')) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const surfaceId = id.slice(0, -'-tools'.length);
|
|
91
|
+
return surfaceIds.has(surfaceId) && surfaceId !== activeSurfaceId;
|
|
92
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/** What a host may set on the chat. */
|
|
2
|
+
export type ChatPluginConfig = {
|
|
3
|
+
/**
|
|
4
|
+
* What the empty prompt says.
|
|
5
|
+
*
|
|
6
|
+
* Configured on the plugin rather than passed to the workspace: the prompt
|
|
7
|
+
* belongs to the chat, and a shell that has no chat plugin has no prompt to
|
|
8
|
+
* put a placeholder in. A host that wants different words says so where the
|
|
9
|
+
* words are.
|
|
10
|
+
*/
|
|
11
|
+
placeholder: string;
|
|
12
|
+
/**
|
|
13
|
+
* Which editor is open beside the chat when the workspace opens.
|
|
14
|
+
*
|
|
15
|
+
* `'none'` leaves the chat full width. Any other value is the `surfaceId` of
|
|
16
|
+
* a contributed chat surface — `'notebook'`, `'document'`, or one a plugin
|
|
17
|
+
* this host mounts brings of its own; the field is a plain string rather
|
|
18
|
+
* than a union so a new surface does not have to change this type to be
|
|
19
|
+
* choosable.
|
|
20
|
+
*
|
|
21
|
+
* A surface that is not contributed, or cannot open yet, is simply not
|
|
22
|
+
* opened: the default is a preference, not a demand, and a host that asks
|
|
23
|
+
* for the notebook in a workspace with no notebook plugin gets a working
|
|
24
|
+
* chat rather than an error.
|
|
25
|
+
*/
|
|
26
|
+
defaultSurface: string;
|
|
27
|
+
/**
|
|
28
|
+
* Whether a person may change which editor sits beside the chat.
|
|
29
|
+
*
|
|
30
|
+
* True by default. False leaves `defaultSurface` open and removes the
|
|
31
|
+
* control, for a host that has already decided what the workspace is for —
|
|
32
|
+
* an embed showing one notebook does not want a strip inviting the reader
|
|
33
|
+
* to swap it for a document or for nothing at all.
|
|
34
|
+
*/
|
|
35
|
+
showSurfaceSelector: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Whether the chat draws its own title bar.
|
|
38
|
+
*
|
|
39
|
+
* False by default — the header carries the agent's name and the reason a
|
|
40
|
+
* disabled chat is disabled, and both are worth having.
|
|
41
|
+
*
|
|
42
|
+
* True for a host that has already said what this is. On a landing page the
|
|
43
|
+
* workspace sits under a heading that names it, and a second title bar
|
|
44
|
+
* directly beneath repeats the point in a smaller font.
|
|
45
|
+
*/
|
|
46
|
+
hideHeader: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the chat renders a prompt at all.
|
|
49
|
+
*
|
|
50
|
+
* False by default: the prompt is most of what a chat is. True is for a
|
|
51
|
+
* workspace where something else owns the typing — the floating prompt
|
|
52
|
+
* plugin renders its own input and submits through the same
|
|
53
|
+
* `workspace.submit`, and a second box under the transcript would be two
|
|
54
|
+
* composers for one conversation.
|
|
55
|
+
*/
|
|
56
|
+
hidePrompt: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Where the prompt sits.
|
|
59
|
+
*
|
|
60
|
+
* `bottom` (the default) spans the workspace: the notebook and the
|
|
61
|
+
* conversation share one composer, which is right when what the agent is
|
|
62
|
+
* doing is the document beside it.
|
|
63
|
+
*
|
|
64
|
+
* `bottom-chat` keeps it inside the chat column, under the transcript, where
|
|
65
|
+
* every other example in this package puts it. The prompt then reads as part
|
|
66
|
+
* of the conversation rather than as a bar the whole page rests on — better
|
|
67
|
+
* for a host that embeds the workspace as a chat that happens to have a
|
|
68
|
+
* notebook attached.
|
|
69
|
+
*
|
|
70
|
+
* `floating` takes it out of the layout entirely: the same composer — the
|
|
71
|
+
* lexical editor, the tools/skills/model footer, all of it — in a draggable
|
|
72
|
+
* card over the workspace, bottom-centre until somebody moves it. For a
|
|
73
|
+
* shell that is mostly canvas. `loopPlugins({ floatingPrompt: true })` asks
|
|
74
|
+
* for it together with the `/prompt` command that focuses it.
|
|
75
|
+
*
|
|
76
|
+
* `top` puts it above everything — a horizontal bar across the workspace,
|
|
77
|
+
* with the openers as a row of chips directly under it. For a host whose
|
|
78
|
+
* editor is the point: the notebook takes the rest of the height, the
|
|
79
|
+
* prompt reads as its command line rather than as a chat's tail, and a
|
|
80
|
+
* reader who has never seen the product knows what to type first.
|
|
81
|
+
*/
|
|
82
|
+
promptPlacement: 'top' | 'bottom' | 'bottom-chat' | 'floating';
|
|
83
|
+
/**
|
|
84
|
+
* Whether the composer takes the caret when the workspace opens.
|
|
85
|
+
*
|
|
86
|
+
* True is right nearly everywhere: the workspace exists to be typed into,
|
|
87
|
+
* and a person who opened it should not have to click first. It is wrong
|
|
88
|
+
* where the loop is one section of a longer page — focusing an input on
|
|
89
|
+
* mount scrolls the browser to it, so a visitor who came for the top of the
|
|
90
|
+
* page is thrown into the middle of it, and a screen reader is moved with
|
|
91
|
+
* them. Such a host passes `false` and lets the reader arrive at the prompt.
|
|
92
|
+
*/
|
|
93
|
+
autoFocusPrompt: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Pixels to reserve at the top of the workspace when it goes full screen —
|
|
96
|
+
* room for a host's own fixed header, drawn outside the workspace
|
|
97
|
+
* entirely.
|
|
98
|
+
*
|
|
99
|
+
* Setting this also keeps full screen on the CSS-overlay door for good,
|
|
100
|
+
* never the browser's real Fullscreen API: the API promotes the workspace
|
|
101
|
+
* above *everything* on the page, that header included, and there is no
|
|
102
|
+
* partial form of it that leaves a sibling element on screen — see
|
|
103
|
+
* `useWorkspaceFullScreen`'s own `forceOverlay` for why. 0 (the default)
|
|
104
|
+
* leaves full screen trying the API first, the way most hosts want it, and
|
|
105
|
+
* filling the entire viewport when it falls back to the overlay.
|
|
106
|
+
*/
|
|
107
|
+
fullScreenTopOffset: number | string;
|
|
108
|
+
};
|
|
109
|
+
export declare const CHAT_PLUGIN_NAME = "@datalayer/loop-plugin-chat";
|
|
110
|
+
export declare const ChatPlugin: import("@datalayer/reactor").ReactorPlugin<ChatPluginConfig, unknown, unknown>;
|
|
111
|
+
export default ChatPlugin;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The chat plugin: the first view, and the proof that chat is not special.
|
|
7
|
+
*
|
|
8
|
+
* @module loop/plugins/chat
|
|
9
|
+
*/
|
|
10
|
+
import { CommentDiscussionIcon, FoldIcon, SparkleFillIcon, SyncIcon, } from '@primer/octicons-react';
|
|
11
|
+
import { contribution, definePlugin } from '@datalayer/reactor';
|
|
12
|
+
import { LoopAgentGate, LoopChatComposer, LoopChatExtras, LoopChatHeader, LoopChatSuggestion, LoopChatTurn, LoopCommand, LoopFrontendTool, LoopDocumentToolbarItem, LoopNotebookToolbarItem, LoopViewType, } from '../../core';
|
|
13
|
+
import { createTurnFeed, feedWriters } from './turnState';
|
|
14
|
+
/**
|
|
15
|
+
* An editor toolbar button that asks an agent to do something.
|
|
16
|
+
*
|
|
17
|
+
* These live here, on the chat, rather than on the editors — which is where
|
|
18
|
+
* they were. A button that submits a prompt only works because there is a
|
|
19
|
+
* conversation to submit it to, so the notebook was reaching into the chat to
|
|
20
|
+
* draw it. Contributing them from this side inverts that: the editors offer a
|
|
21
|
+
* toolbar and know nothing about agents, and switching the chat off takes its
|
|
22
|
+
* buttons off both toolbars with it.
|
|
23
|
+
*
|
|
24
|
+
* The specialists are reached the way a person would reach them — by asking.
|
|
25
|
+
* A button that called a private API would be a second way to invoke an agent,
|
|
26
|
+
* free to drift from the one people type.
|
|
27
|
+
*/
|
|
28
|
+
function agentAction(context, item) {
|
|
29
|
+
const { prompt, ...rest } = item;
|
|
30
|
+
return {
|
|
31
|
+
...rest,
|
|
32
|
+
type: 'button',
|
|
33
|
+
group: 'agent',
|
|
34
|
+
onClick: () => context.workspace.prompts.submit(prompt),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export const CHAT_PLUGIN_NAME = '@datalayer/loop-plugin-chat';
|
|
38
|
+
export const ChatPlugin = definePlugin({
|
|
39
|
+
name: CHAT_PLUGIN_NAME,
|
|
40
|
+
config: {
|
|
41
|
+
placeholder: 'Ask anything, type / for commands or @ for mention',
|
|
42
|
+
// The notebook: it is what most of these agents work on, and a workspace
|
|
43
|
+
// that opens on an empty chat hides the half of itself that does the work.
|
|
44
|
+
defaultSurface: 'notebook',
|
|
45
|
+
showSurfaceSelector: true,
|
|
46
|
+
hideHeader: false,
|
|
47
|
+
hidePrompt: false,
|
|
48
|
+
promptPlacement: 'bottom',
|
|
49
|
+
autoFocusPrompt: true,
|
|
50
|
+
fullScreenTopOffset: 0,
|
|
51
|
+
},
|
|
52
|
+
displayName: 'Chat',
|
|
53
|
+
description: 'The conversation, the prompt, and the point editors plug into.',
|
|
54
|
+
octicon: 'comment-discussion',
|
|
55
|
+
emoji: '\u{1F4AC}',
|
|
56
|
+
// Declared, not merely used: the registry knows who contributed to a point,
|
|
57
|
+
// it cannot know who opened it, and a point nobody has filled yet is exactly
|
|
58
|
+
// when knowing it exists is most useful. `LoopFrontendTool` is the chat's
|
|
59
|
+
// own opening: the tools its agent is handed, filled by the notebook, the
|
|
60
|
+
// document, and whoever else owns a capability. The composer and the title
|
|
61
|
+
// bar are openings too: the chat assembles their props, and the
|
|
62
|
+
// input-prompt and chat-header plugins render them.
|
|
63
|
+
contributionPoints: [
|
|
64
|
+
LoopAgentGate,
|
|
65
|
+
LoopFrontendTool,
|
|
66
|
+
LoopChatComposer,
|
|
67
|
+
LoopChatHeader,
|
|
68
|
+
LoopChatSuggestion,
|
|
69
|
+
LoopChatExtras,
|
|
70
|
+
LoopChatTurn,
|
|
71
|
+
],
|
|
72
|
+
/*
|
|
73
|
+
* The current turn, contributed at build so it is one per reactor.
|
|
74
|
+
*
|
|
75
|
+
* The chat both opens `LoopChatTurn` and fills it: the point is how anyone
|
|
76
|
+
* else reads the turn (the page layout's panel under the prompt), and the
|
|
77
|
+
* chat view is what keeps it current. The feed's writers travel with the
|
|
78
|
+
* contribution so the view can find its own reactor's feed without a
|
|
79
|
+
* module-level singleton two workspaces on one page would share.
|
|
80
|
+
*/
|
|
81
|
+
build: ctx => {
|
|
82
|
+
const feed = createTurnFeed();
|
|
83
|
+
ctx.contribute(LoopChatTurn, { id: 'chat-turn', turn: feed.turn, ...feedWriters(feed) }, { id: 'chat-turn' });
|
|
84
|
+
return {};
|
|
85
|
+
},
|
|
86
|
+
contributes: [
|
|
87
|
+
contribution(LoopViewType, {
|
|
88
|
+
viewType: 'chat',
|
|
89
|
+
title: 'Chat',
|
|
90
|
+
icon: CommentDiscussionIcon,
|
|
91
|
+
order: 0,
|
|
92
|
+
load: () => import('./ChatView'),
|
|
93
|
+
}, { id: 'chat', order: 0 }),
|
|
94
|
+
contribution(LoopCommand, {
|
|
95
|
+
name: 'chat',
|
|
96
|
+
description: 'Show the conversation',
|
|
97
|
+
group: 'Session',
|
|
98
|
+
keybinding: 'Mod+Alt+K',
|
|
99
|
+
run: async ({ workspace }) => {
|
|
100
|
+
workspace.setActiveViewType('chat');
|
|
101
|
+
},
|
|
102
|
+
}, { id: 'chat' }),
|
|
103
|
+
// What the chat puts on the notebook's toolbar. The bar belongs to the
|
|
104
|
+
// toolbar plugin, which opens this point; the notebook knows about neither.
|
|
105
|
+
// With the toolbar plugin switched off there is no bar, so these have
|
|
106
|
+
// nowhere to sit and are not drawn — which is the honest outcome.
|
|
107
|
+
contribution(LoopNotebookToolbarItem, {
|
|
108
|
+
items: (context) => [
|
|
109
|
+
agentAction(context, {
|
|
110
|
+
key: 'loop-compact',
|
|
111
|
+
ariaLabel: 'Compact this notebook',
|
|
112
|
+
title: 'Ask @NotebookCompactor to shorten it without changing results',
|
|
113
|
+
icon: FoldIcon,
|
|
114
|
+
order: 200,
|
|
115
|
+
prompt: '@NotebookCompactor compact this notebook without changing what it computes.',
|
|
116
|
+
}),
|
|
117
|
+
agentAction(context, {
|
|
118
|
+
key: 'loop-reproduce',
|
|
119
|
+
ariaLabel: 'Check reproducibility',
|
|
120
|
+
title: 'Ask @NotebookReproducer to run it on a fresh sandbox',
|
|
121
|
+
icon: SyncIcon,
|
|
122
|
+
order: 201,
|
|
123
|
+
prompt: '@NotebookReproducer run this notebook top to bottom on a fresh sandbox and report what does not reproduce.',
|
|
124
|
+
}),
|
|
125
|
+
],
|
|
126
|
+
}, { id: 'agent-actions', order: 200 }),
|
|
127
|
+
// And on the document's, which had no agent actions at all before there
|
|
128
|
+
// was a point to put them on.
|
|
129
|
+
contribution(LoopDocumentToolbarItem, {
|
|
130
|
+
items: (context) => [
|
|
131
|
+
agentAction(context, {
|
|
132
|
+
key: 'loop-summarise',
|
|
133
|
+
ariaLabel: 'Summarise this document',
|
|
134
|
+
title: 'Ask the agent for a summary of what this document says',
|
|
135
|
+
icon: SparkleFillIcon,
|
|
136
|
+
order: 200,
|
|
137
|
+
prompt: 'Summarise this document in a short paragraph.',
|
|
138
|
+
}),
|
|
139
|
+
],
|
|
140
|
+
}, { id: 'agent-actions', order: 200 }),
|
|
141
|
+
],
|
|
142
|
+
});
|
|
143
|
+
export default ChatPlugin;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The conversation's current turn, kept by the chat and read by anyone.
|
|
3
|
+
*
|
|
4
|
+
* One instance per reactor — created by the chat plugin when it builds and
|
|
5
|
+
* contributed to `LoopChatTurn` — so two workspaces on one page do not share
|
|
6
|
+
* a turn. The chat view drives it: `begin` on send (which is what clears the
|
|
7
|
+
* previous turn), `assistant` as the reply arrives, `end` when the agent
|
|
8
|
+
* stops. Readers hold the signal.
|
|
9
|
+
*
|
|
10
|
+
* @module loop/plugins/chat/turnState
|
|
11
|
+
*/
|
|
12
|
+
import { type ReadonlySignal } from '@datalayer/reactor';
|
|
13
|
+
import type { ContextSnapshotData } from '../../../types';
|
|
14
|
+
import type { ChatTurnSnapshot, ChatTurnStatus } from '../../core';
|
|
15
|
+
export type TurnFeed = {
|
|
16
|
+
/** The turn, for readers. */
|
|
17
|
+
turn: ReadonlySignal<ChatTurnSnapshot>;
|
|
18
|
+
/** A new turn: the previous one is gone, this one holds the message. */
|
|
19
|
+
begin: (user: string) => void;
|
|
20
|
+
/** The reply so far. Moves the turn to `streaming` on its first text. */
|
|
21
|
+
assistant: (text: string) => void;
|
|
22
|
+
/** The agent stopped, one way or another. */
|
|
23
|
+
end: (status?: Extract<ChatTurnStatus, 'done' | 'error'>) => void;
|
|
24
|
+
/** The context window, as the agent last reported it. */
|
|
25
|
+
usage: (snapshot: ContextSnapshotData | undefined) => void;
|
|
26
|
+
/** What the agent is doing now, or nothing. */
|
|
27
|
+
activity: (label: string | undefined) => void;
|
|
28
|
+
};
|
|
29
|
+
export declare function createTurnFeed(): TurnFeed;
|
|
30
|
+
/**
|
|
31
|
+
* The writers, as extra fields on the contribution.
|
|
32
|
+
*
|
|
33
|
+
* `ChatTurnContribution` is read-only by type — that is what readers get —
|
|
34
|
+
* but the chat view has to reach the same feed to drive it, and it finds it
|
|
35
|
+
* through the contribution like everyone else. So the writers ride along as
|
|
36
|
+
* fields the public type does not name; {@link turnWritersOf} is how the view
|
|
37
|
+
* gets them back.
|
|
38
|
+
*/
|
|
39
|
+
export declare const TURN_WRITERS: unique symbol;
|
|
40
|
+
export declare function feedWriters(feed: TurnFeed): Record<symbol, TurnFeed>;
|
|
41
|
+
export declare function turnWritersOf(value: unknown): TurnFeed | undefined;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The conversation's current turn, kept by the chat and read by anyone.
|
|
7
|
+
*
|
|
8
|
+
* One instance per reactor — created by the chat plugin when it builds and
|
|
9
|
+
* contributed to `LoopChatTurn` — so two workspaces on one page do not share
|
|
10
|
+
* a turn. The chat view drives it: `begin` on send (which is what clears the
|
|
11
|
+
* previous turn), `assistant` as the reply arrives, `end` when the agent
|
|
12
|
+
* stops. Readers hold the signal.
|
|
13
|
+
*
|
|
14
|
+
* @module loop/plugins/chat/turnState
|
|
15
|
+
*/
|
|
16
|
+
import { signal } from '@datalayer/reactor';
|
|
17
|
+
const IDLE = { id: 0, status: 'idle' };
|
|
18
|
+
export function createTurnFeed() {
|
|
19
|
+
const turn = signal(IDLE);
|
|
20
|
+
return {
|
|
21
|
+
turn,
|
|
22
|
+
begin: user => {
|
|
23
|
+
// The window's fill carries over: it is the conversation's, not the
|
|
24
|
+
// turn's, and the footer under a fresh turn should not read empty
|
|
25
|
+
// until the agent reports again.
|
|
26
|
+
turn.value = {
|
|
27
|
+
id: turn.value.id + 1,
|
|
28
|
+
user,
|
|
29
|
+
status: 'thinking',
|
|
30
|
+
usage: turn.value.usage,
|
|
31
|
+
};
|
|
32
|
+
},
|
|
33
|
+
assistant: text => {
|
|
34
|
+
const current = turn.value;
|
|
35
|
+
// Nothing to attach it to, or nothing new: leave the value alone so
|
|
36
|
+
// readers do not re-render for an identical snapshot.
|
|
37
|
+
if (current.status === 'idle' || current.assistant === text) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
turn.value = {
|
|
41
|
+
...current,
|
|
42
|
+
assistant: text,
|
|
43
|
+
status: current.status === 'done' || current.status === 'error'
|
|
44
|
+
? current.status
|
|
45
|
+
: text
|
|
46
|
+
? 'streaming'
|
|
47
|
+
: current.status,
|
|
48
|
+
};
|
|
49
|
+
},
|
|
50
|
+
usage: snapshot => {
|
|
51
|
+
const current = turn.value;
|
|
52
|
+
// Kept even while idle: the agent reports the window once at mount,
|
|
53
|
+
// before anyone has typed, and the first turn wants those figures.
|
|
54
|
+
if (current.usage === snapshot) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
turn.value = { ...current, usage: snapshot };
|
|
58
|
+
},
|
|
59
|
+
activity: label => {
|
|
60
|
+
const current = turn.value;
|
|
61
|
+
if (current.status === 'idle' || current.activity === label) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
turn.value = { ...current, activity: label };
|
|
65
|
+
},
|
|
66
|
+
end: (status = 'done') => {
|
|
67
|
+
const current = turn.value;
|
|
68
|
+
if (current.status === 'idle') {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
turn.value = { ...current, status, activity: undefined };
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The writers, as extra fields on the contribution.
|
|
77
|
+
*
|
|
78
|
+
* `ChatTurnContribution` is read-only by type — that is what readers get —
|
|
79
|
+
* but the chat view has to reach the same feed to drive it, and it finds it
|
|
80
|
+
* through the contribution like everyone else. So the writers ride along as
|
|
81
|
+
* fields the public type does not name; {@link turnWritersOf} is how the view
|
|
82
|
+
* gets them back.
|
|
83
|
+
*/
|
|
84
|
+
export const TURN_WRITERS = Symbol.for('loop.chat.turn.writers');
|
|
85
|
+
export function feedWriters(feed) {
|
|
86
|
+
return { [TURN_WRITERS]: feed };
|
|
87
|
+
}
|
|
88
|
+
export function turnWritersOf(value) {
|
|
89
|
+
return value?.[TURN_WRITERS];
|
|
90
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReactorPlugin } from '@datalayer/reactor';
|
|
2
|
+
import { type LoopChatExtrasValue } from '../../core';
|
|
3
|
+
export declare const CHAT_EXTRAS_PLUGIN_NAME = "@datalayer/loop-plugin-chat-extras";
|
|
4
|
+
export type ChatExtrasHandle = {
|
|
5
|
+
plugin: ReactorPlugin<Record<string, never>, unknown, unknown>;
|
|
6
|
+
/** Replace the live extras the chat view reads. */
|
|
7
|
+
setExtras: (value: LoopChatExtrasValue) => void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A chat-extras plugin plus its setter. Call once per workspace (memoise it),
|
|
11
|
+
* then push updates through `setExtras`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createChatExtrasPlugin(): ChatExtrasHandle;
|
|
14
|
+
export default createChatExtrasPlugin;
|
|
@@ -0,0 +1,51 @@
|
|
|
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-extras` — a live channel from a host example
|
|
7
|
+
* into the loop's conversation.
|
|
8
|
+
*
|
|
9
|
+
* An example that wraps a `LoopEmbed` in its own panels still has things to
|
|
10
|
+
* say to the chat column that change over the life of the page: an error
|
|
11
|
+
* banner it derives from its own state, the codemode toggle, the MCP and
|
|
12
|
+
* codemode status the footer shows. {@link createChatExtrasPlugin} returns a
|
|
13
|
+
* plugin to hand `LoopEmbed` and a `setExtras` the example calls whenever
|
|
14
|
+
* those change — backed by a signal, so the chat view re-renders without the
|
|
15
|
+
* plugin being rebuilt.
|
|
16
|
+
*
|
|
17
|
+
* ```tsx
|
|
18
|
+
* const { plugin, setExtras } = useMemo(() => createChatExtrasPlugin(), []);
|
|
19
|
+
* useEffect(() => setExtras({ errorBanner, codemodeEnabled }), […]);
|
|
20
|
+
* <LoopEmbed plugins={[capacityPlugin, plugin]} … />
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @module loop/plugins/chat-extras
|
|
24
|
+
*/
|
|
25
|
+
import { contribution, definePlugin, signal } from '@datalayer/reactor';
|
|
26
|
+
import { LoopChatExtras } from '../../core';
|
|
27
|
+
export const CHAT_EXTRAS_PLUGIN_NAME = '@datalayer/loop-plugin-chat-extras';
|
|
28
|
+
let counter = 0;
|
|
29
|
+
/**
|
|
30
|
+
* A chat-extras plugin plus its setter. Call once per workspace (memoise it),
|
|
31
|
+
* then push updates through `setExtras`.
|
|
32
|
+
*/
|
|
33
|
+
export function createChatExtrasPlugin() {
|
|
34
|
+
const id = `chat-extras-${(counter += 1)}`;
|
|
35
|
+
const extras = signal({});
|
|
36
|
+
const plugin = definePlugin({
|
|
37
|
+
name: CHAT_EXTRAS_PLUGIN_NAME,
|
|
38
|
+
displayName: 'Chat Extras',
|
|
39
|
+
description: 'A host example’s live banner and footer status.',
|
|
40
|
+
octicon: 'megaphone',
|
|
41
|
+
emoji: '\u{1F4E3}',
|
|
42
|
+
contributes: [contribution(LoopChatExtras, { id, extras }, { id })],
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
plugin,
|
|
46
|
+
setExtras: value => {
|
|
47
|
+
extras.value = value;
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export default createChatExtrasPlugin;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The standard bar: the assembled props, rendered by `ChatBaseHeader`.
|
|
3
|
+
*
|
|
4
|
+
* In its own file for the same reason as the composer's view: the header
|
|
5
|
+
* pulls the kernel indicator and its friends, and the plugin's module
|
|
6
|
+
* should stay a manifest.
|
|
7
|
+
*
|
|
8
|
+
* @module loop/plugins/chat-header/HeaderView
|
|
9
|
+
*/
|
|
10
|
+
import type { JSX } from 'react';
|
|
11
|
+
import type { LoopChatHeaderProps } from '../../core';
|
|
12
|
+
export declare function HeaderView({ header }: LoopChatHeaderProps): JSX.Element;
|
|
13
|
+
export default HeaderView;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense, lazy } from 'react';
|
|
3
|
+
import { contribution, definePlugin } from '@datalayer/reactor';
|
|
4
|
+
import { LoopChatHeader } from '../../core';
|
|
5
|
+
export const CHAT_HEADER_PLUGIN_NAME = '@datalayer/loop-plugin-chat-header';
|
|
6
|
+
const LazyHeaderView = lazy(() => import('./HeaderView'));
|
|
7
|
+
/** The lazy boundary, so the point's consumers need no Suspense of theirs. */
|
|
8
|
+
function HeaderView(props) {
|
|
9
|
+
return (_jsx(Suspense, { fallback: null, children: _jsx(LazyHeaderView, { ...props }) }));
|
|
10
|
+
}
|
|
11
|
+
export const ChatHeaderPlugin = definePlugin({
|
|
12
|
+
name: CHAT_HEADER_PLUGIN_NAME,
|
|
13
|
+
displayName: 'Chat Header',
|
|
14
|
+
description: 'The conversation’s title bar: agent, kernel, actions.',
|
|
15
|
+
octicon: 'rows',
|
|
16
|
+
emoji: '\u{1F3F7}\u{FE0F}',
|
|
17
|
+
contributes: [
|
|
18
|
+
contribution(LoopChatHeader, { id: 'chat-header', Component: HeaderView }, { id: 'chat-header' }),
|
|
19
|
+
],
|
|
20
|
+
});
|
|
21
|
+
export default ChatHeaderPlugin;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const CHAT_VIEW_PLUGIN_NAME = "@datalayer/loop-plugin-chat-view";
|
|
2
|
+
export declare const ChatViewPlugin: import("@datalayer/reactor").ReactorPlugin<Record<string, never>, unknown, {
|
|
3
|
+
components: {
|
|
4
|
+
id: string;
|
|
5
|
+
slot: "loop.promptAction";
|
|
6
|
+
order: number;
|
|
7
|
+
Component: () => import("react").JSX.Element | null;
|
|
8
|
+
}[];
|
|
9
|
+
}>;
|
|
10
|
+
export default ChatViewPlugin;
|