@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,265 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* The overlay behind "card" on an A2A run.
|
|
8
|
+
*
|
|
9
|
+
* Everything the run's events said about the agent — where it was launched,
|
|
10
|
+
* its endpoint, its task and state — and the agent card fetched live from the
|
|
11
|
+
* agent itself, laid out field by field with the raw JSON underneath, and a
|
|
12
|
+
* link out to the card's URL for whoever wants the tab after all.
|
|
13
|
+
*
|
|
14
|
+
* @module chat/tools/A2AAgentDialog
|
|
15
|
+
*/
|
|
16
|
+
import React, { useEffect, useState } from 'react';
|
|
17
|
+
import { Heading, Label, Link, Spinner, Text } from '@primer/react';
|
|
18
|
+
import { Dialog } from '@primer/react/experimental';
|
|
19
|
+
import { LinkExternalIcon } from '@primer/octicons-react';
|
|
20
|
+
import { Box } from '@datalayer/primer-addons';
|
|
21
|
+
/**
|
|
22
|
+
* The agent behind a delegated run, or `null` when the run is not over A2A.
|
|
23
|
+
* Later events win, except the name, which is the first one's.
|
|
24
|
+
*/
|
|
25
|
+
export function a2aAgentDetails(events, fallbackName) {
|
|
26
|
+
if (!events.some(event => event.transport === 'a2a')) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const details = {
|
|
30
|
+
name: events[0]?.subagentName ?? fallbackName ?? 'agent',
|
|
31
|
+
};
|
|
32
|
+
for (const event of events) {
|
|
33
|
+
if (event.url)
|
|
34
|
+
details.url = event.url;
|
|
35
|
+
if (event.launch && event.launch !== 'auto')
|
|
36
|
+
details.launch = event.launch;
|
|
37
|
+
if (event.phase === 'status' && event.state)
|
|
38
|
+
details.state = event.state;
|
|
39
|
+
if (event.taskId)
|
|
40
|
+
details.taskId = event.taskId;
|
|
41
|
+
if (event.runtimeUid)
|
|
42
|
+
details.runtimeUid = event.runtimeUid;
|
|
43
|
+
if (event.agentCard)
|
|
44
|
+
details.card = event.agentCard;
|
|
45
|
+
}
|
|
46
|
+
return details;
|
|
47
|
+
}
|
|
48
|
+
/** Where an A2A agent publishes its card. */
|
|
49
|
+
export function agentCardUrl(url) {
|
|
50
|
+
return `${url.replace(/\/+$/, '')}/.well-known/agent-card.json`;
|
|
51
|
+
}
|
|
52
|
+
/** The agent card at `url`, fetched when the URL is known and refetched when it changes. */
|
|
53
|
+
export function useAgentCard(url) {
|
|
54
|
+
const [state, setState] = useState({
|
|
55
|
+
status: url ? 'loading' : 'idle',
|
|
56
|
+
});
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (!url) {
|
|
59
|
+
setState({ status: 'idle' });
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const controller = new AbortController();
|
|
63
|
+
setState({ status: 'loading' });
|
|
64
|
+
fetch(agentCardUrl(url), {
|
|
65
|
+
signal: controller.signal,
|
|
66
|
+
headers: { Accept: 'application/json' },
|
|
67
|
+
})
|
|
68
|
+
.then(async (response) => {
|
|
69
|
+
if (!response.ok) {
|
|
70
|
+
throw new Error(`${response.status} ${response.statusText}`.trim());
|
|
71
|
+
}
|
|
72
|
+
const body = await response.json();
|
|
73
|
+
if (!body || typeof body !== 'object' || Array.isArray(body)) {
|
|
74
|
+
throw new Error('The agent card is not a JSON object');
|
|
75
|
+
}
|
|
76
|
+
setState({ status: 'loaded', card: body });
|
|
77
|
+
})
|
|
78
|
+
.catch((reason) => {
|
|
79
|
+
if (controller.signal.aborted)
|
|
80
|
+
return;
|
|
81
|
+
setState({
|
|
82
|
+
status: 'error',
|
|
83
|
+
error: reason instanceof Error ? reason.message : String(reason),
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
return () => controller.abort();
|
|
87
|
+
}, [url]);
|
|
88
|
+
return state;
|
|
89
|
+
}
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
// Reading a card without trusting its shape
|
|
92
|
+
// ---------------------------------------------------------------------------
|
|
93
|
+
const record = (value) => value && typeof value === 'object' && !Array.isArray(value)
|
|
94
|
+
? value
|
|
95
|
+
: undefined;
|
|
96
|
+
const items = (value) => Array.isArray(value)
|
|
97
|
+
? value.map(record).filter((v) => !!v)
|
|
98
|
+
: [];
|
|
99
|
+
const text = (value) => typeof value === 'string' && value ? value : undefined;
|
|
100
|
+
const strings = (value) => Array.isArray(value)
|
|
101
|
+
? value.filter((v) => typeof v === 'string')
|
|
102
|
+
: [];
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Pieces
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
function Section({ title, children, }) {
|
|
107
|
+
return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: [_jsx(Heading, { as: "h4", sx: { fontSize: 1, m: 0 }, children: title }), children] }));
|
|
108
|
+
}
|
|
109
|
+
function Row({ label, children, }) {
|
|
110
|
+
return (_jsxs(Box, { sx: {
|
|
111
|
+
display: 'grid',
|
|
112
|
+
gridTemplateColumns: '112px 1fr',
|
|
113
|
+
gap: 2,
|
|
114
|
+
alignItems: 'baseline',
|
|
115
|
+
fontSize: 0,
|
|
116
|
+
}, children: [_jsx(Text, { sx: { color: 'fg.muted', fontSize: 0 }, children: label }), _jsx(Box, { sx: { minWidth: 0, wordBreak: 'break-all' }, children: children })] }));
|
|
117
|
+
}
|
|
118
|
+
function External({ href, children, }) {
|
|
119
|
+
return (_jsxs(Link, { href: href, target: "_blank", rel: "noreferrer", sx: {
|
|
120
|
+
fontSize: 0,
|
|
121
|
+
fontFamily: 'mono',
|
|
122
|
+
display: 'inline-flex',
|
|
123
|
+
alignItems: 'center',
|
|
124
|
+
gap: 1,
|
|
125
|
+
}, children: [children ?? href, _jsx(LinkExternalIcon, { size: 12 })] }));
|
|
126
|
+
}
|
|
127
|
+
function Mono({ children }) {
|
|
128
|
+
return _jsx(Text, { sx: { fontSize: 0, fontFamily: 'mono' }, children: children });
|
|
129
|
+
}
|
|
130
|
+
/** camelCase or snake_case, as words, for a key the card renderer never heard of. */
|
|
131
|
+
function humanize(key) {
|
|
132
|
+
const spaced = key
|
|
133
|
+
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
|
134
|
+
.replace(/[_-]+/g, ' ')
|
|
135
|
+
.toLowerCase();
|
|
136
|
+
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
|
|
137
|
+
}
|
|
138
|
+
const isUrl = (value) => /^https?:\/\//.test(value);
|
|
139
|
+
const None = ({ word = 'none' }) => (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: word }));
|
|
140
|
+
/**
|
|
141
|
+
* Any JSON value, laid out: scalars as text (URLs as links, booleans as
|
|
142
|
+
* yes/no), arrays as lists, objects as key/value rows — three levels deep,
|
|
143
|
+
* compact JSON below that. A key the card renderer never heard of still
|
|
144
|
+
* reads as information rather than as a blob to open the raw JSON for.
|
|
145
|
+
*/
|
|
146
|
+
function ValueView({ value, depth = 0, }) {
|
|
147
|
+
if (value === null || value === undefined) {
|
|
148
|
+
return _jsx(None, { word: "\u2014" });
|
|
149
|
+
}
|
|
150
|
+
if (typeof value === 'boolean') {
|
|
151
|
+
return (_jsx(Label, { size: "small", variant: value ? 'success' : 'secondary', children: value ? 'yes' : 'no' }));
|
|
152
|
+
}
|
|
153
|
+
if (typeof value === 'number') {
|
|
154
|
+
return _jsx(Mono, { children: String(value) });
|
|
155
|
+
}
|
|
156
|
+
if (typeof value === 'string') {
|
|
157
|
+
return isUrl(value) ? (_jsx(External, { href: value })) : (_jsx(Text, { sx: { fontSize: 0 }, children: value }));
|
|
158
|
+
}
|
|
159
|
+
if (depth >= 3) {
|
|
160
|
+
return _jsx(Mono, { children: JSON.stringify(value) });
|
|
161
|
+
}
|
|
162
|
+
if (Array.isArray(value)) {
|
|
163
|
+
if (value.length === 0) {
|
|
164
|
+
return _jsx(None, {});
|
|
165
|
+
}
|
|
166
|
+
if (value.every(item => typeof item !== 'object' || item === null)) {
|
|
167
|
+
return (_jsx(Box, { sx: { display: 'flex', gap: 2, flexWrap: 'wrap' }, children: value.map((item, index) => (_jsx(ValueView, { value: item, depth: depth + 1 }, index))) }));
|
|
168
|
+
}
|
|
169
|
+
return (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: value.map((item, index) => (_jsx(Box, { sx: { pl: 2, borderLeft: '2px solid', borderColor: 'border.muted' }, children: _jsx(ValueView, { value: item, depth: depth + 1 }) }, index))) }));
|
|
170
|
+
}
|
|
171
|
+
const entries = Object.entries(value);
|
|
172
|
+
if (entries.length === 0) {
|
|
173
|
+
return _jsx(None, { word: "empty" });
|
|
174
|
+
}
|
|
175
|
+
return (_jsx(Box, { sx: {
|
|
176
|
+
display: 'grid',
|
|
177
|
+
gridTemplateColumns: 'max-content 1fr',
|
|
178
|
+
columnGap: 2,
|
|
179
|
+
rowGap: 1,
|
|
180
|
+
alignItems: 'baseline',
|
|
181
|
+
}, children: entries.map(([key, entry]) => (_jsxs(React.Fragment, { children: [_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: humanize(key) }), _jsx(Box, { sx: { minWidth: 0, wordBreak: 'break-all' }, children: _jsx(ValueView, { value: entry, depth: depth + 1 }) })] }, key))) }));
|
|
182
|
+
}
|
|
183
|
+
/** The keys laid out by hand below; every other top-level key gets a row of its own. */
|
|
184
|
+
const HANDLED_KEYS = new Set([
|
|
185
|
+
'name',
|
|
186
|
+
'description',
|
|
187
|
+
'version',
|
|
188
|
+
'protocolVersion',
|
|
189
|
+
'url',
|
|
190
|
+
'documentationUrl',
|
|
191
|
+
'iconUrl',
|
|
192
|
+
'provider',
|
|
193
|
+
'supportedInterfaces',
|
|
194
|
+
'capabilities',
|
|
195
|
+
'skills',
|
|
196
|
+
'defaultInputModes',
|
|
197
|
+
'defaultOutputModes',
|
|
198
|
+
]);
|
|
199
|
+
/**
|
|
200
|
+
* The card, field by field: the fields the A2A card schema names, laid out
|
|
201
|
+
* the way a reader wants them, then every other top-level key the agent
|
|
202
|
+
* chose to publish — nothing is left to the raw JSON alone.
|
|
203
|
+
*/
|
|
204
|
+
function CardFields({ card, }) {
|
|
205
|
+
const provider = record(card.provider);
|
|
206
|
+
const capabilities = record(card.capabilities);
|
|
207
|
+
const capabilityEntries = Object.entries(capabilities ?? {});
|
|
208
|
+
const extensions = items(capabilities?.extensions);
|
|
209
|
+
const interfaces = items(card.supportedInterfaces);
|
|
210
|
+
const skills = items(card.skills);
|
|
211
|
+
const inputs = strings(card.defaultInputModes);
|
|
212
|
+
const outputs = strings(card.defaultOutputModes);
|
|
213
|
+
const others = Object.entries(card).filter(([key]) => !HANDLED_KEYS.has(key));
|
|
214
|
+
return (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 2 }, children: [_jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 1, fontWeight: 'bold' }, children: text(card.name) ?? 'Unnamed agent' }), text(card.version) ? (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', ml: 2 }, children: ["v", text(card.version)] })) : null, text(card.protocolVersion) ? (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', ml: 2 }, children: ["A2A ", text(card.protocolVersion)] })) : null, text(card.description) ? (_jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', mt: 1, mb: 0 }, children: text(card.description) })) : null] }), text(card.url) ? (_jsx(Row, { label: "Endpoint", children: _jsx(External, { href: text(card.url) }) })) : null, text(card.documentationUrl) ? (_jsx(Row, { label: "Documentation", children: _jsx(External, { href: text(card.documentationUrl) }) })) : null, text(card.iconUrl) ? (_jsx(Row, { label: "Icon", children: _jsx(External, { href: text(card.iconUrl) }) })) : null, provider ? (_jsx(Row, { label: "Provider", children: _jsx(ValueView, { value: provider, depth: 1 }) })) : null, card.supportedInterfaces !== undefined ? (_jsx(Row, { label: "Interfaces", children: interfaces.length === 0 ? (_jsx(None, {})) : (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: interfaces.map((entry, index) => (_jsxs(Box, { sx: {
|
|
215
|
+
display: 'flex',
|
|
216
|
+
gap: 2,
|
|
217
|
+
alignItems: 'center',
|
|
218
|
+
flexWrap: 'wrap',
|
|
219
|
+
}, children: [_jsx(Label, { size: "small", children: text(entry.protocolBinding) ?? 'binding' }), text(entry.url) ? _jsx(Mono, { children: text(entry.url) }) : null, text(entry.protocolVersion) ? (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["v", text(entry.protocolVersion)] })) : null] }, index))) })) })) : null, capabilities !== undefined ? (_jsx(Row, { label: "Capabilities", children: capabilityEntries.length === 0 ? (_jsx(None, {})) : (_jsxs(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: [_jsx(Box, { sx: { display: 'flex', gap: 1, flexWrap: 'wrap' }, children: capabilityEntries
|
|
220
|
+
.filter(([, flag]) => typeof flag === 'boolean')
|
|
221
|
+
.map(([key, flag]) => (_jsxs(Label, { size: "small", variant: flag ? 'success' : 'secondary', children: [key, ": ", flag ? 'yes' : 'no'] }, key))) }), extensions.map((extension, index) => (_jsxs(Box, { sx: {
|
|
222
|
+
display: 'flex',
|
|
223
|
+
gap: 2,
|
|
224
|
+
alignItems: 'baseline',
|
|
225
|
+
flexWrap: 'wrap',
|
|
226
|
+
}, children: [_jsx(Mono, { children: text(extension.uri) ?? 'extension' }), extension.required === true ? (_jsx(Label, { size: "small", variant: "attention", children: "required" })) : null, text(extension.description) ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: text(extension.description) })) : null] }, index))), capabilityEntries
|
|
227
|
+
.filter(([key, entry]) => typeof entry !== 'boolean' && key !== 'extensions')
|
|
228
|
+
.map(([key, entry]) => (_jsxs(Box, { sx: { display: 'flex', gap: 2 }, children: [_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: humanize(key) }), _jsx(ValueView, { value: entry, depth: 1 })] }, key)))] })) })) : null, card.skills !== undefined ? (_jsx(Row, { label: "Skills", children: skills.length === 0 ? (_jsx(None, {})) : (_jsx(Box, { sx: { display: 'flex', flexDirection: 'column', gap: 1 }, children: skills.map((skill, index) => (_jsxs(Box, { children: [_jsx(Text, { sx: { fontSize: 0, fontWeight: 'bold' }, children: text(skill.name) ?? text(skill.id) ?? 'skill' }), text(skill.description) ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted', ml: 2 }, children: text(skill.description) })) : null, strings(skill.tags).length > 0 ? (_jsx(Box, { sx: { display: 'inline-flex', gap: 1, ml: 2 }, children: strings(skill.tags).map(tag => (_jsx(Label, { size: "small", children: tag }, tag))) })) : null] }, index))) })) })) : null, card.defaultInputModes !== undefined ? (_jsx(Row, { label: "Input modes", children: inputs.length ? _jsx(Mono, { children: inputs.join(', ') }) : _jsx(None, {}) })) : null, card.defaultOutputModes !== undefined ? (_jsx(Row, { label: "Output modes", children: outputs.length ? _jsx(Mono, { children: outputs.join(', ') }) : _jsx(None, {}) })) : null, others.map(([key, value]) => (_jsx(Row, { label: humanize(key), children: _jsx(ValueView, { value: value }) }, key)))] }));
|
|
229
|
+
}
|
|
230
|
+
const LAUNCH_LABEL = {
|
|
231
|
+
local: 'launched on the local agent-runtimes server',
|
|
232
|
+
cloud: 'launched on a Datalayer runtime',
|
|
233
|
+
remote: 'reached at a URL the spec named',
|
|
234
|
+
auto: 'launch not decided yet',
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Everything about the agent behind an A2A run: the run's own facts, the
|
|
238
|
+
* card fetched from the agent, the raw JSON, and the way out to the URL.
|
|
239
|
+
*/
|
|
240
|
+
export function A2AAgentDialog({ details, onClose, }) {
|
|
241
|
+
const fetched = useAgentCard(details.url);
|
|
242
|
+
const cardUrl = details.url ? agentCardUrl(details.url) : undefined;
|
|
243
|
+
const openCard = () => {
|
|
244
|
+
if (cardUrl)
|
|
245
|
+
window.open(cardUrl, '_blank', 'noopener,noreferrer');
|
|
246
|
+
};
|
|
247
|
+
return (_jsx(Dialog, { onClose: onClose, title: `A2A agent · ${details.name}`, subtitle: "A separate agent, reached over the A2A protocol", width: "large", footerButtons: [
|
|
248
|
+
...(cardUrl
|
|
249
|
+
? [{ content: 'Open agent card', onClick: openCard }]
|
|
250
|
+
: []),
|
|
251
|
+
{ content: 'Close', onClick: onClose, buttonType: 'primary' },
|
|
252
|
+
], children: _jsxs(Box, { "data-a2a-agent-dialog": details.name, "data-a2a-card-status": fetched.status, sx: { display: 'flex', flexDirection: 'column', gap: 3 }, children: [_jsxs(Section, { title: "This run", children: [details.description ? (_jsx(Text, { as: "p", sx: { fontSize: 0, color: 'fg.muted', m: 0 }, children: details.description })) : null, _jsx(Row, { label: "Launch", children: _jsxs(Text, { sx: { fontSize: 0 }, children: [details.launch ?? 'auto', _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: [' ', "\u2014 ", LAUNCH_LABEL[details.launch ?? 'auto'] ?? ''] })] }) }), details.ref ? (_jsx(Row, { label: "Agentspec", children: _jsx(Mono, { children: details.ref }) })) : null, _jsx(Row, { label: "State", children: _jsx(Text, { sx: { fontSize: 0 }, children: details.state ?? 'unknown' }) }), details.taskId ? (_jsx(Row, { label: "Task", children: _jsx(Mono, { children: details.taskId }) })) : null, details.runtimeUid ? (_jsx(Row, { label: "Runtime", children: _jsx(Mono, { children: details.runtimeUid }) })) : null, details.url ? (_jsx(Row, { label: "Endpoint", children: _jsx(External, { href: details.url }) })) : null, cardUrl ? (_jsx(Row, { label: "Agent card", children: _jsx(External, { href: cardUrl }) })) : null] }), _jsxs(Section, { title: "Agent card", children: [fetched.status === 'idle' ? (_jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: "No endpoint known yet: the card can be fetched once the agent is launched." })) : null, fetched.status === 'loading' ? (_jsxs(Box, { sx: { display: 'flex', alignItems: 'center', gap: 2 }, children: [_jsx(Spinner, { size: "small" }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: ["Fetching ", cardUrl, "\u2026"] })] })) : null, fetched.status === 'error' ? (_jsxs(Text, { sx: { fontSize: 0, color: 'danger.fg' }, children: ["The card could not be fetched from here (", fetched.error, "). It may still open in a tab through the link above."] })) : null, fetched.status === 'loaded' ? (_jsxs(_Fragment, { children: [_jsx(CardFields, { card: fetched.card }), _jsxs(Box, { as: "details", sx: { fontSize: 0 }, children: [_jsx(Box, { as: "summary", sx: { cursor: 'pointer', color: 'fg.muted' }, children: "Raw JSON" }), _jsx(Box, { as: "pre", "data-a2a-card-json": true, sx: {
|
|
253
|
+
mt: 2,
|
|
254
|
+
p: 2,
|
|
255
|
+
bg: 'canvas.subtle',
|
|
256
|
+
border: '1px solid',
|
|
257
|
+
borderColor: 'border.default',
|
|
258
|
+
borderRadius: 2,
|
|
259
|
+
overflow: 'auto',
|
|
260
|
+
maxHeight: 280,
|
|
261
|
+
fontSize: 0,
|
|
262
|
+
m: 0,
|
|
263
|
+
}, children: JSON.stringify(fetched.card, null, 2) })] })] })) : null] }), details.card && fetched.status !== 'loaded' ? (_jsxs(Section, { title: "Card, as the server saw it at launch", children: [_jsx(Row, { label: "Name", children: _jsxs(Text, { sx: { fontSize: 0 }, children: [details.card.name ?? '—', details.card.version ? ` v${details.card.version}` : ''] }) }), details.card.description ? (_jsx(Row, { label: "Description", children: _jsx(Text, { sx: { fontSize: 0 }, children: details.card.description }) })) : null, details.card.skills && details.card.skills.length > 0 ? (_jsx(Row, { label: "Skills", children: _jsx(Text, { sx: { fontSize: 0 }, children: details.card.skills.join(', ') }) })) : null] })) : null] }) }));
|
|
264
|
+
}
|
|
265
|
+
export default A2AAgentDialog;
|
|
@@ -27,5 +27,5 @@ export interface ToolApprovalBannerProps {
|
|
|
27
27
|
/**
|
|
28
28
|
* Persistent banner for tool approval notifications.
|
|
29
29
|
*/
|
|
30
|
-
export declare function ToolApprovalBanner({ pendingApprovals, onReview, onApproveAll, onDismiss, collapsible, }: ToolApprovalBannerProps): import("react
|
|
30
|
+
export declare function ToolApprovalBanner({ pendingApprovals, onReview, onApproveAll, onDismiss, collapsible, }: ToolApprovalBannerProps): import("react").JSX.Element | null;
|
|
31
31
|
export default ToolApprovalBanner;
|
|
@@ -22,7 +22,7 @@ export interface ToolApprovalDialogProps {
|
|
|
22
22
|
/**
|
|
23
23
|
* Tool Approval Dialog component
|
|
24
24
|
*/
|
|
25
|
-
export declare function ToolApprovalDialog({ isOpen, toolName, toolDescription, args, onApprove, onDeny, onClose, showRememberChoice, }: ToolApprovalDialogProps): import("react
|
|
25
|
+
export declare function ToolApprovalDialog({ isOpen, toolName, toolDescription, args, onApprove, onDeny, onClose, showRememberChoice, }: ToolApprovalDialogProps): import("react").JSX.Element | null;
|
|
26
26
|
/**
|
|
27
27
|
* Hook to manage tool approval dialog state
|
|
28
28
|
*/
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default tool call display component.
|
|
3
|
+
* Shows tool execution with collapsible details.
|
|
4
|
+
*
|
|
5
|
+
* @module chat/tools/ToolCallDisplay
|
|
6
|
+
*/
|
|
7
|
+
import React from 'react';
|
|
1
8
|
import type { CodeError, ExecutionResult, DisplayToolCallStatus } from '../../types';
|
|
2
9
|
/**
|
|
3
10
|
* Error type classification for display purposes
|
|
@@ -47,5 +54,5 @@ export interface ToolCallDisplayProps {
|
|
|
47
54
|
* - Color-coded status indicators
|
|
48
55
|
* - Rich error display distinguishing execution errors from code errors
|
|
49
56
|
*/
|
|
50
|
-
export declare function ToolCallDisplay({ toolCallId, toolName, args, result, status, error, executionResult, codeError, exitCode, executionError, approvalRequired, approvalState, approvalDecisionSource, onApprove, onDeny, approvalLoading, }: ToolCallDisplayProps):
|
|
57
|
+
export declare function ToolCallDisplay({ toolCallId, toolName, args, result, status, error, executionResult, codeError, exitCode, executionError, approvalRequired, approvalState, approvalDecisionSource, onApprove, onDeny, approvalLoading, }: ToolCallDisplayProps): React.JSX.Element;
|
|
51
58
|
export default ToolCallDisplay;
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export { ToolCallDisplay, type ToolCallDisplayProps, type ErrorType, } from './ToolCallDisplay';
|
|
7
7
|
export { SubagentActivity, type SubagentActivityProps, } from './SubagentActivity';
|
|
8
|
+
export { A2AAgentDialog, a2aAgentDetails, agentCardUrl, useAgentCard, type A2AAgentDetails, type A2AAgentDialogProps, type AgentCardFetch, } from './A2AAgentDialog';
|
|
8
9
|
export { ToolApprovalBanner, type ToolApprovalBannerProps, type PendingApproval, } from './ToolApprovalBanner';
|
|
9
10
|
export { ToolApprovalDialog, useToolApprovalDialog, type ToolApprovalDialogProps, } from './ToolApprovalDialog';
|
package/lib/chat/tools/index.js
CHANGED
|
@@ -9,5 +9,6 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export { ToolCallDisplay, } from './ToolCallDisplay';
|
|
11
11
|
export { SubagentActivity, } from './SubagentActivity';
|
|
12
|
+
export { A2AAgentDialog, a2aAgentDetails, agentCardUrl, useAgentCard, } from './A2AAgentDialog';
|
|
12
13
|
export { ToolApprovalBanner, } from './ToolApprovalBanner';
|
|
13
14
|
export { ToolApprovalDialog, useToolApprovalDialog, } from './ToolApprovalDialog';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ContextSnapshotData } from '../../types/context';
|
|
2
|
+
export interface ContextPieProps {
|
|
3
|
+
/** Agent usage data from the context-snapshot API */
|
|
4
|
+
agentUsage: ContextSnapshotData;
|
|
5
|
+
/** Horizontal padding to match the chat layout */
|
|
6
|
+
padding: number;
|
|
7
|
+
/**
|
|
8
|
+
* Whether to draw the context ring.
|
|
9
|
+
*
|
|
10
|
+
* False by default. It is a small pie of how the window is spent, and it
|
|
11
|
+
* earns its place only where a person is likely to fill one — an agent
|
|
12
|
+
* working through a notebook — rather than in every chat that happens to
|
|
13
|
+
* report usage. The numbers beside it are shown either way.
|
|
14
|
+
*/
|
|
15
|
+
showContextRing?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function ContextPie({ agentUsage, padding, showContextRing, }: ContextPieProps): import("react").JSX.Element;
|
|
@@ -4,11 +4,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
4
4
|
* Distributed under the terms of the Modified BSD License.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* tiny pie chart, session totals, and a hover overlay with category
|
|
9
|
-
* breakdown.
|
|
7
|
+
* What the context window is holding.
|
|
10
8
|
*
|
|
11
|
-
*
|
|
9
|
+
* A row under the prompt: a ring of how the window is spent, the totals for
|
|
10
|
+
* the session and the last turn, and a hover overlay breaking the ring down
|
|
11
|
+
* by category.
|
|
12
|
+
*
|
|
13
|
+
* @module chat/usage/ContextPie
|
|
12
14
|
*/
|
|
13
15
|
import { useRef, useState } from 'react';
|
|
14
16
|
import { Text } from '@primer/react';
|
|
@@ -18,17 +20,21 @@ import { formatTokenCount } from '../../utils';
|
|
|
18
20
|
// ---------------------------------------------------------------------------
|
|
19
21
|
// Component
|
|
20
22
|
// ---------------------------------------------------------------------------
|
|
21
|
-
export function
|
|
23
|
+
export function ContextPie({ agentUsage, padding, showContextRing = false, }) {
|
|
22
24
|
// State for context pie chart overlay
|
|
23
25
|
const [contextOverlayOpen, setContextOverlayOpen] = useState(false);
|
|
24
26
|
const contextAnchorRef = useRef(null);
|
|
25
27
|
const hoverTimeoutRef = useRef(null);
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
/*
|
|
29
|
+
* Shown whenever the agent reports them, zero included.
|
|
30
|
+
*
|
|
31
|
+
* They were hidden until one of the two counts went above zero, which meant
|
|
32
|
+
* the bar changed shape after the first answer — and, worse, that a reader
|
|
33
|
+
* could not tell "nothing sent yet" from "this agent does not report it".
|
|
34
|
+
* A zero is an answer; a missing row is not.
|
|
35
|
+
*/
|
|
36
|
+
const hasTurn = !!agentUsage.turnUsage;
|
|
37
|
+
const hasSession = !!agentUsage.sessionUsage;
|
|
32
38
|
const hasCostUsage = !!agentUsage.costUsage &&
|
|
33
39
|
(agentUsage.costUsage.cumulativeCostUsd > 0 ||
|
|
34
40
|
agentUsage.costUsage.lastTurnCostUsd > 0);
|
|
@@ -156,7 +162,7 @@ export function TokenUsageBar({ agentUsage, padding }) {
|
|
|
156
162
|
overflow: 'visible',
|
|
157
163
|
whiteSpace: 'nowrap',
|
|
158
164
|
minWidth: 0,
|
|
159
|
-
}, children: [_jsxs(Box, { sx: { position: 'relative', flexShrink: 0 }, onMouseEnter: () => {
|
|
165
|
+
}, children: [showContextRing && (_jsxs(Box, { sx: { position: 'relative', flexShrink: 0 }, onMouseEnter: () => {
|
|
160
166
|
if (hoverTimeoutRef.current)
|
|
161
167
|
clearTimeout(hoverTimeoutRef.current);
|
|
162
168
|
hoverTimeoutRef.current = setTimeout(() => setContextOverlayOpen(true), 150);
|
|
@@ -193,7 +199,7 @@ export function TokenUsageBar({ agentUsage, padding }) {
|
|
|
193
199
|
color: 'fg.default',
|
|
194
200
|
display: 'block',
|
|
195
201
|
mb: 2,
|
|
196
|
-
}, children: "Context
|
|
202
|
+
}, children: "Context" }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', display: 'block', mb: 1 }, children: [_jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default' }, children: formatTokenCount(usedTokens) }), ' / ', formatTokenCount(windowTokens), ' tokens'] }), agentUsage.costUsage && (_jsxs(Text, { sx: {
|
|
197
203
|
fontSize: 0,
|
|
198
204
|
color: 'fg.muted',
|
|
199
205
|
display: 'block',
|
|
@@ -227,5 +233,5 @@ export function TokenUsageBar({ agentUsage, padding }) {
|
|
|
227
233
|
display: 'block',
|
|
228
234
|
mt: 2,
|
|
229
235
|
fontStyle: 'italic',
|
|
230
|
-
}, children: "Quality may decline as limit nears." }))] }))] }), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: [_jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatTokenCount(agentUsage.totalTokens) }), ' / ', formatTokenCount(agentUsage.contextWindow), ' ctx'] }), hasCostUsage && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· cost ', _jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatUsd(costUsage?.lastTurnCostUsd ?? 0) }), ' turn / ', _jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatUsd(costUsage?.cumulativeCostUsd ?? 0) })] })), hasSession && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· ', formatTokenCount(sessionUsage?.inputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'success.fg', fontSize: 0 }, children: '▲' }), ' ', formatTokenCount(sessionUsage?.outputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'attention.fg', fontSize: 0 }, children: '▼' })] })), hasTurn && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· turn ', formatTokenCount(turnUsage?.inputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'success.fg', fontSize: 0 }, children: '▲' }), ' ', formatTokenCount(turnUsage?.outputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'attention.fg', fontSize: 0 }, children: '▼' })] }))] }));
|
|
236
|
+
}, children: "Quality may decline as limit nears." }))] }))] })), _jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: [_jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatTokenCount(agentUsage.totalTokens) }), ' / ', formatTokenCount(agentUsage.contextWindow), ' ctx'] }), hasCostUsage && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· cost ', _jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatUsd(costUsage?.lastTurnCostUsd ?? 0) }), ' turn / ', _jsx(Text, { as: "span", sx: { fontWeight: 'semibold', color: 'fg.default', fontSize: 0 }, children: formatUsd(costUsage?.cumulativeCostUsd ?? 0) })] })), hasSession && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· session ', formatTokenCount(sessionUsage?.inputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'success.fg', fontSize: 0 }, children: '▲' }), ' ', formatTokenCount(sessionUsage?.outputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'attention.fg', fontSize: 0 }, children: '▼' })] })), hasTurn && (_jsxs(Text, { sx: { fontSize: 0, color: 'fg.muted', flexShrink: 0 }, children: ['· turn ', formatTokenCount(turnUsage?.inputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'success.fg', fontSize: 0 }, children: '▲' }), ' ', formatTokenCount(turnUsage?.outputTokens ?? 0), _jsx(Text, { as: "span", sx: { color: 'attention.fg', fontSize: 0 }, children: '▼' })] }))] }));
|
|
231
237
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Where the box sits once somebody has moved it, in viewport pixels. */
|
|
2
|
+
export type DragPosition = {
|
|
3
|
+
left: number;
|
|
4
|
+
top: number;
|
|
5
|
+
} | null;
|
|
6
|
+
export declare function useViewportDrag(boxRef: React.RefObject<HTMLElement | null>): {
|
|
7
|
+
position: DragPosition;
|
|
8
|
+
onHandlePointerDown: (event: React.PointerEvent<HTMLElement>) => void;
|
|
9
|
+
reset: () => void;
|
|
10
|
+
};
|
|
11
|
+
export default useViewportDrag;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Moving a fixed-position box about the viewport by a handle.
|
|
7
|
+
*
|
|
8
|
+
* The mechanics behind the chat's "Floating draggable" mode. The same idea
|
|
9
|
+
* as `FloatingCard`'s, which moves a prompt about its host; this one moves
|
|
10
|
+
* the whole chat window about the viewport, because that is what a fixed
|
|
11
|
+
* box is positioned against. The box stays reachable: however far it is
|
|
12
|
+
* dragged, a margin of it stays on screen, so its handle can always be
|
|
13
|
+
* picked up again.
|
|
14
|
+
*
|
|
15
|
+
* @module chat/useViewportDrag
|
|
16
|
+
*/
|
|
17
|
+
import { useCallback, useRef, useState } from 'react';
|
|
18
|
+
/** How much of the box must stay inside the viewport. */
|
|
19
|
+
const MARGIN = 24;
|
|
20
|
+
export function useViewportDrag(boxRef) {
|
|
21
|
+
const [position, setPosition] = useState(null);
|
|
22
|
+
/* Where the pointer took hold, so the box moves by the pointer's delta
|
|
23
|
+
rather than snapping its corner to the cursor. */
|
|
24
|
+
const grip = useRef(null);
|
|
25
|
+
const onHandlePointerDown = useCallback((event) => {
|
|
26
|
+
const box = boxRef.current;
|
|
27
|
+
if (!box) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const rect = box.getBoundingClientRect();
|
|
31
|
+
grip.current = {
|
|
32
|
+
dx: event.clientX - rect.left,
|
|
33
|
+
dy: event.clientY - rect.top,
|
|
34
|
+
};
|
|
35
|
+
const handle = event.currentTarget;
|
|
36
|
+
// Absent in test DOMs; the move listeners below still work there.
|
|
37
|
+
handle.setPointerCapture?.(event.pointerId);
|
|
38
|
+
const move = (moved) => {
|
|
39
|
+
if (!grip.current) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const left = Math.min(Math.max(moved.clientX - grip.current.dx, MARGIN - rect.width), window.innerWidth - MARGIN);
|
|
43
|
+
const top = Math.min(Math.max(moved.clientY - grip.current.dy, 0), window.innerHeight - MARGIN);
|
|
44
|
+
setPosition({ left, top });
|
|
45
|
+
};
|
|
46
|
+
const up = () => {
|
|
47
|
+
grip.current = null;
|
|
48
|
+
handle.removeEventListener('pointermove', move);
|
|
49
|
+
handle.removeEventListener('pointerup', up);
|
|
50
|
+
handle.removeEventListener('pointercancel', up);
|
|
51
|
+
};
|
|
52
|
+
handle.addEventListener('pointermove', move);
|
|
53
|
+
handle.addEventListener('pointerup', up);
|
|
54
|
+
handle.addEventListener('pointercancel', up);
|
|
55
|
+
event.preventDefault();
|
|
56
|
+
}, [boxRef]);
|
|
57
|
+
/** Back to wherever the box starts: called when the mode changes. */
|
|
58
|
+
const reset = useCallback(() => setPosition(null), []);
|
|
59
|
+
return { position, onHandlePointerDown, reset };
|
|
60
|
+
}
|
|
61
|
+
export default useViewportDrag;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ways a chat can be shown, and which of them a host can offer.
|
|
3
|
+
*
|
|
4
|
+
* The header draws these as a segmented toggle. The list lives here, apart
|
|
5
|
+
* from the header, so the rules about it — the order, the words, and which
|
|
6
|
+
* modes are greyed out — can be read and tested without rendering anything.
|
|
7
|
+
*
|
|
8
|
+
* "Sidebar panel" is the one with a condition. The other three float over
|
|
9
|
+
* the page and need nothing from it; a sidebar has to dock *somewhere*, and
|
|
10
|
+
* where is the host's to say. A host says it by passing a mount point — the
|
|
11
|
+
* element the panel goes into — and without one the option is shown but
|
|
12
|
+
* disabled, so the person can see the mode exists and that this page has no
|
|
13
|
+
* place for it, rather than clicking it and watching nothing happen.
|
|
14
|
+
*
|
|
15
|
+
* @module chat/viewModes
|
|
16
|
+
*/
|
|
17
|
+
import type { ChatViewMode } from '../types/chat';
|
|
18
|
+
/** One entry of the header's toggle. */
|
|
19
|
+
export type ChatViewModeOption = {
|
|
20
|
+
mode: ChatViewMode;
|
|
21
|
+
/** The tooltip, and the button's accessible name. */
|
|
22
|
+
label: string;
|
|
23
|
+
};
|
|
24
|
+
/** The modes, in the order the toggle shows them: floating first, docked last. */
|
|
25
|
+
export declare const CHAT_VIEW_MODES: readonly ChatViewModeOption[];
|
|
26
|
+
/** Why the sidebar option is greyed out, for its tooltip. */
|
|
27
|
+
export declare const SIDEBAR_NEEDS_MOUNT_POINT = "No mount point for a sidebar on this page";
|
|
28
|
+
/** Whether a mode floats over the page rather than docking into it. */
|
|
29
|
+
export declare function isFloatingChatViewMode(mode: ChatViewMode | undefined): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Where a host said the sidebar goes.
|
|
32
|
+
*
|
|
33
|
+
* An element, or a selector for one — a host that renders the sidebar itself
|
|
34
|
+
* marks the container with an attribute and passes the selector, which is
|
|
35
|
+
* easier than threading a ref through a layout. Resolved when asked, since a
|
|
36
|
+
* container may mount after the chat does; nothing is cached.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveMountPoint(mountPoint: HTMLElement | string | null | undefined): HTMLElement | null;
|
|
39
|
+
/**
|
|
40
|
+
* The modes the toggle shows but does not let anyone pick.
|
|
41
|
+
*
|
|
42
|
+
* Only the sidebar can be one, and only for want of a mount point. A chat
|
|
43
|
+
* already docked keeps its option live whatever the host passed: it is
|
|
44
|
+
* there, and greying out the mode it is in would read as a bug.
|
|
45
|
+
*/
|
|
46
|
+
export declare function disabledChatViewModes({ sidebarMountPoint, viewMode, }: {
|
|
47
|
+
/** The resolved element, or nothing. */
|
|
48
|
+
sidebarMountPoint?: HTMLElement | null;
|
|
49
|
+
/** The mode the chat is in now. */
|
|
50
|
+
viewMode?: ChatViewMode;
|
|
51
|
+
}): ChatViewMode[];
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/** The modes, in the order the toggle shows them: floating first, docked last. */
|
|
6
|
+
export const CHAT_VIEW_MODES = [
|
|
7
|
+
{ mode: 'floating', label: 'Full-height popup' },
|
|
8
|
+
{ mode: 'floating-small', label: 'Floating popup' },
|
|
9
|
+
{ mode: 'floating-draggable', label: 'Floating draggable' },
|
|
10
|
+
{ mode: 'sidebar', label: 'Sidebar panel' },
|
|
11
|
+
];
|
|
12
|
+
/** Why the sidebar option is greyed out, for its tooltip. */
|
|
13
|
+
export const SIDEBAR_NEEDS_MOUNT_POINT = 'No mount point for a sidebar on this page';
|
|
14
|
+
/** Whether a mode floats over the page rather than docking into it. */
|
|
15
|
+
export function isFloatingChatViewMode(mode) {
|
|
16
|
+
return (mode === 'floating' ||
|
|
17
|
+
mode === 'floating-small' ||
|
|
18
|
+
mode === 'floating-draggable');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Where a host said the sidebar goes.
|
|
22
|
+
*
|
|
23
|
+
* An element, or a selector for one — a host that renders the sidebar itself
|
|
24
|
+
* marks the container with an attribute and passes the selector, which is
|
|
25
|
+
* easier than threading a ref through a layout. Resolved when asked, since a
|
|
26
|
+
* container may mount after the chat does; nothing is cached.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveMountPoint(mountPoint) {
|
|
29
|
+
if (!mountPoint) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (typeof mountPoint !== 'string') {
|
|
33
|
+
return mountPoint.isConnected ? mountPoint : null;
|
|
34
|
+
}
|
|
35
|
+
if (typeof document === 'undefined') {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
return document.querySelector(mountPoint);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The modes the toggle shows but does not let anyone pick.
|
|
47
|
+
*
|
|
48
|
+
* Only the sidebar can be one, and only for want of a mount point. A chat
|
|
49
|
+
* already docked keeps its option live whatever the host passed: it is
|
|
50
|
+
* there, and greying out the mode it is in would read as a bug.
|
|
51
|
+
*/
|
|
52
|
+
export function disabledChatViewModes({ sidebarMountPoint, viewMode, }) {
|
|
53
|
+
if (sidebarMountPoint || viewMode === 'sidebar') {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
return ['sidebar'];
|
|
57
|
+
}
|