@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,103 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
4
|
+
* Distributed under the terms of the Modified BSD License.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* What the agent may call: builtin tools, MCP servers, and codemode.
|
|
8
|
+
*
|
|
9
|
+
* @module chat/prompt/menus/ToolsMenu
|
|
10
|
+
*/
|
|
11
|
+
import { Text, Button, ActionMenu, ActionList, ToggleSwitch, Tooltip, } from '@primer/react';
|
|
12
|
+
import { Box } from '@datalayer/primer-addons';
|
|
13
|
+
import { ToolsIcon } from '@primer/octicons-react';
|
|
14
|
+
export function ToolsMenu({ codemodeEnabled, onToggleCodemode, mcpServers, enabledMcpTools, enabledMcpToolCount, onToggleMcpTool, onToggleAllMcpServerTools, approvedMcpTools, onToggleMcpToolApproval, availableTools, }) {
|
|
15
|
+
const hasUsableMcpServers = mcpServers.some(server => server.isAvailable);
|
|
16
|
+
/*
|
|
17
|
+
* A count, not a word.
|
|
18
|
+
*
|
|
19
|
+
* Four labelled buttons on one row is most of the width of a chat panel, and
|
|
20
|
+
* the icon already says which menu this is. What the word was carrying — the
|
|
21
|
+
* name, and what is behind it — moves to the tooltip, where it costs nothing
|
|
22
|
+
* until somebody asks.
|
|
23
|
+
*/
|
|
24
|
+
const summary = [
|
|
25
|
+
`${availableTools.length} tool${availableTools.length === 1 ? '' : 's'}`,
|
|
26
|
+
enabledMcpToolCount > 0 ? `${enabledMcpToolCount} MCP enabled` : null,
|
|
27
|
+
hasUsableMcpServers ? null : 'no MCP server available',
|
|
28
|
+
]
|
|
29
|
+
.filter(Boolean)
|
|
30
|
+
.join(' · ');
|
|
31
|
+
return (_jsxs(ActionMenu, { children: [_jsx(ActionMenu.Anchor, { children: _jsx(Tooltip, { text: `Tools — ${summary}`, direction: "n", children: _jsx(Button, { type: "button", variant: "invisible", size: "small", "aria-label": `Tools — ${summary}`, leadingVisual: ToolsIcon, children: _jsx(Text, { sx: { fontSize: 0 }, children: availableTools.length + enabledMcpToolCount }) }) }) }), _jsx(ActionMenu.Overlay, { side: "outside-top", align: "start", width: "large", children: _jsx(Box, { sx: { maxHeight: '60vh', overflowY: 'auto' }, children: _jsxs(ActionList, { children: [_jsx(ActionList.Group, { title: "Codemode", children: _jsxs(Box, { sx: {
|
|
32
|
+
display: 'flex',
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
justifyContent: 'space-between',
|
|
35
|
+
px: 3,
|
|
36
|
+
py: 2,
|
|
37
|
+
borderBottom: '1px solid',
|
|
38
|
+
borderColor: 'border.muted',
|
|
39
|
+
gap: 2,
|
|
40
|
+
}, children: [_jsxs(Box, { sx: { flex: 1, minWidth: 0 }, children: [_jsx(Text, { id: "toggle-codemode", sx: { fontWeight: 'semibold', display: 'block' }, children: "Enable Codemode" }), _jsx(Text, { sx: { fontSize: 0, color: 'fg.muted' }, children: codemodeEnabled
|
|
41
|
+
? 'MCP tools accessible via meta-tools (search_tools, execute_code).'
|
|
42
|
+
: 'Expose MCP tools directly to the model.' })] }), _jsx(ToggleSwitch, { size: "small", checked: codemodeEnabled, disabled: !onToggleCodemode, onClick: () => {
|
|
43
|
+
if (onToggleCodemode) {
|
|
44
|
+
void onToggleCodemode(!codemodeEnabled);
|
|
45
|
+
}
|
|
46
|
+
}, "aria-labelledby": "toggle-codemode" })] }) }), availableTools.length > 0 ? (_jsx(ActionList.Group, { title: "Tools", children: availableTools.map(tool => (_jsx(ActionList.Item, { disabled: true, children: tool.name }, tool.id))) })) : null, mcpServers.length > 0 && hasUsableMcpServers ? (mcpServers.map(server => {
|
|
47
|
+
const serverTools = enabledMcpTools.get(server.id);
|
|
48
|
+
const allToolNames = server.tools.map(t => t.name);
|
|
49
|
+
const enabledCount = serverTools?.size ?? 0;
|
|
50
|
+
const allEnabled = enabledCount === allToolNames.length &&
|
|
51
|
+
allToolNames.length > 0;
|
|
52
|
+
return (_jsxs(ActionList.Group, { title: `${server.name}${server.isAvailable ? '' : ' (unavailable)'}`, children: [server.isAvailable && server.tools.length > 0 && (_jsxs(Box, { sx: {
|
|
53
|
+
display: 'flex',
|
|
54
|
+
alignItems: 'center',
|
|
55
|
+
justifyContent: 'space-between',
|
|
56
|
+
px: 3,
|
|
57
|
+
py: 2,
|
|
58
|
+
borderBottom: '1px solid',
|
|
59
|
+
borderColor: 'border.muted',
|
|
60
|
+
}, children: [_jsxs(Text, { id: `toggle-all-${server.id}`, sx: {
|
|
61
|
+
fontSize: 0,
|
|
62
|
+
fontWeight: 'semibold',
|
|
63
|
+
color: 'fg.muted',
|
|
64
|
+
}, children: ["Enable all (", enabledCount, "/", allToolNames.length, ")"] }), _jsx(ToggleSwitch, { size: "small", checked: allEnabled, onClick: () => onToggleAllMcpServerTools(server.id, allToolNames, !allEnabled), "aria-labelledby": `toggle-all-${server.id}` })] })), server.isAvailable && server.tools.length > 0 ? (server.tools.map(tool => {
|
|
65
|
+
const isEnabled = serverTools?.has(tool.name) ?? false;
|
|
66
|
+
const serverApproved = approvedMcpTools.get(server.id);
|
|
67
|
+
// Tools default to NOT approved — user must explicitly
|
|
68
|
+
// approve each one (matches the Skills approval UX).
|
|
69
|
+
const isApproved = serverApproved?.has(tool.name) ?? false;
|
|
70
|
+
return (_jsxs(Box, { sx: {
|
|
71
|
+
display: 'flex',
|
|
72
|
+
alignItems: 'center',
|
|
73
|
+
justifyContent: 'space-between',
|
|
74
|
+
px: 3,
|
|
75
|
+
py: 2,
|
|
76
|
+
'&:hover': {
|
|
77
|
+
backgroundColor: 'canvas.subtle',
|
|
78
|
+
},
|
|
79
|
+
}, children: [_jsxs(Box, { sx: { flex: 1, minWidth: 0 }, children: [_jsx(Text, { id: `toggle-tool-${server.id}-${tool.name}`, sx: { fontWeight: 'semibold' }, children: tool.name }), tool.description && (_jsx(Text, { sx: {
|
|
80
|
+
display: 'block',
|
|
81
|
+
fontSize: 0,
|
|
82
|
+
color: 'fg.muted',
|
|
83
|
+
overflow: 'hidden',
|
|
84
|
+
textOverflow: 'ellipsis',
|
|
85
|
+
whiteSpace: 'nowrap',
|
|
86
|
+
}, children: tool.description }))] }), _jsxs(Box, { sx: {
|
|
87
|
+
display: 'flex',
|
|
88
|
+
alignItems: 'center',
|
|
89
|
+
gap: 3,
|
|
90
|
+
}, children: [_jsxs(Box, { sx: {
|
|
91
|
+
display: 'flex',
|
|
92
|
+
flexDirection: 'column',
|
|
93
|
+
alignItems: 'center',
|
|
94
|
+
gap: '2px',
|
|
95
|
+
}, children: [_jsx(Text, { sx: { fontSize: '10px', color: 'fg.muted' }, children: "Enabled" }), _jsx(ToggleSwitch, { size: "small", checked: isEnabled, onClick: () => onToggleMcpTool(server.id, tool.name), "aria-labelledby": `toggle-tool-${server.id}-${tool.name}` })] }), _jsxs(Box, { sx: {
|
|
96
|
+
display: 'flex',
|
|
97
|
+
flexDirection: 'column',
|
|
98
|
+
alignItems: 'center',
|
|
99
|
+
gap: '2px',
|
|
100
|
+
}, children: [_jsx(Text, { sx: { fontSize: '10px', color: 'fg.muted' }, children: "Approved" }), _jsx(ToggleSwitch, { size: "small", checked: isApproved, onClick: () => onToggleMcpToolApproval(server.id, tool.name), "aria-labelledby": `toggle-tool-${server.id}-${tool.name}` })] })] })] }, `${server.id}-${tool.name}`));
|
|
101
|
+
})) : server.isAvailable ? (_jsx(ActionList.Item, { disabled: true, children: _jsx(Text, { sx: { color: 'fg.muted', fontStyle: 'italic' }, children: "No tools discovered" }) })) : (_jsx(ActionList.Item, { disabled: true, children: _jsx(Text, { sx: { color: 'fg.muted', fontStyle: 'italic' }, children: "Server unavailable" }) }))] }, server.id));
|
|
102
|
+
})) : (_jsx(ActionList.Group, { title: "No MCP Servers", children: _jsx(ActionList.Item, { disabled: true, children: _jsx(Text, { sx: { color: 'fg.muted', fontStyle: 'italic' }, children: "No MCP Servers" }) }) }))] }) }) })] }));
|
|
103
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The menus under the prompt.
|
|
3
|
+
*
|
|
4
|
+
* One file each, and exported from here so the prompt imports a folder rather
|
|
5
|
+
* than four paths. They were private sub-components of one 1100-line module,
|
|
6
|
+
* which made the file hard to read and each menu hard to find.
|
|
7
|
+
*
|
|
8
|
+
* @module chat/prompt/menus
|
|
9
|
+
*/
|
|
10
|
+
export { AgentsMenu } from './AgentsMenu';
|
|
11
|
+
export { InlineAgentsMenu } from './InlineAgentsMenu';
|
|
12
|
+
export { ToolsMenu } from './ToolsMenu';
|
|
13
|
+
export { SkillsMenu } from './SkillsMenu';
|
|
14
|
+
export { ModelSelector } from './ModelSelector';
|
|
15
|
+
export { SuggestionsMenu } from './SuggestionsMenu';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The menus under the prompt.
|
|
7
|
+
*
|
|
8
|
+
* One file each, and exported from here so the prompt imports a folder rather
|
|
9
|
+
* than four paths. They were private sub-components of one 1100-line module,
|
|
10
|
+
* which made the file hard to read and each menu hard to find.
|
|
11
|
+
*
|
|
12
|
+
* @module chat/prompt/menus
|
|
13
|
+
*/
|
|
14
|
+
export { AgentsMenu } from './AgentsMenu';
|
|
15
|
+
export { InlineAgentsMenu } from './InlineAgentsMenu';
|
|
16
|
+
export { ToolsMenu } from './ToolsMenu';
|
|
17
|
+
export { SkillsMenu } from './SkillsMenu';
|
|
18
|
+
export { ModelSelector } from './ModelSelector';
|
|
19
|
+
export { SuggestionsMenu } from './SuggestionsMenu';
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Addressing an agent from the prompt, by typing `@`.
|
|
3
|
+
*
|
|
4
|
+
* The picker in the header says who the *conversation* is with. This says who
|
|
5
|
+
* a single request is for, which is a different question and wants a different
|
|
6
|
+
* answer: a person mid-sentence should not have to leave the sentence.
|
|
7
|
+
*
|
|
8
|
+
* What it inserts is a plain `@Name`, not a node of its own. The name is read
|
|
9
|
+
* by the model — the agent is reachable because it is one of the parent's
|
|
10
|
+
* tools, and the tool is named after it — so a mention is a *hint in the
|
|
11
|
+
* prompt*, not a control channel. That means a person can type one by hand, or
|
|
12
|
+
* edit one afterwards, and it still works; a bespoke node would have made both
|
|
13
|
+
* of those break in ways nobody could see.
|
|
14
|
+
*
|
|
15
|
+
* @module chat/prompt/plugins/AgentMentionPlugin
|
|
16
|
+
*/
|
|
17
|
+
import type { JSX } from 'react';
|
|
18
|
+
import type { Icon } from '@primer/octicons-react';
|
|
19
|
+
/** One agent a prompt may address. */
|
|
20
|
+
export type MentionableAgent = {
|
|
21
|
+
/** The name typed after `@`, and the name of the tool that reaches it. */
|
|
22
|
+
name: string;
|
|
23
|
+
/** One line about what it is for. */
|
|
24
|
+
description?: string;
|
|
25
|
+
emoji?: string;
|
|
26
|
+
/**
|
|
27
|
+
* The octicon its agentspec asked for.
|
|
28
|
+
*
|
|
29
|
+
* Resolved by whoever builds the list — this module has no opinion about
|
|
30
|
+
* where an icon name comes from — and drawn in place of the emoji, which was
|
|
31
|
+
* the same picture for every agent that had not set one.
|
|
32
|
+
*/
|
|
33
|
+
icon?: Icon;
|
|
34
|
+
/**
|
|
35
|
+
* Shown, but not choosable.
|
|
36
|
+
*
|
|
37
|
+
* The member already being addressed is the case this exists for: leaving
|
|
38
|
+
* it out made the list look arbitrary — a team of two offering one name —
|
|
39
|
+
* while offering it would let a person address the agent they are already
|
|
40
|
+
* talking to. It stays visible, greyed, and says why.
|
|
41
|
+
*/
|
|
42
|
+
disabled?: boolean;
|
|
43
|
+
/** Why it cannot be chosen, when it cannot. */
|
|
44
|
+
disabledReason?: string;
|
|
45
|
+
};
|
|
46
|
+
export type AgentMentionPluginProps = {
|
|
47
|
+
/** Everyone this prompt may address. No menu when there is nobody. */
|
|
48
|
+
agents: MentionableAgent[];
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Offer the agents while `@` is being typed.
|
|
52
|
+
*/
|
|
53
|
+
export declare function AgentMentionPlugin({ agents, }: AgentMentionPluginProps): JSX.Element | null;
|
|
54
|
+
export default AgentMentionPlugin;
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { ActionList, Overlay } from '@primer/react';
|
|
4
|
+
import { AiAgentIcon } from '@datalayer/icons-react';
|
|
5
|
+
import { Box } from '@datalayer/primer-addons';
|
|
6
|
+
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
7
|
+
import { $getSelection, $isRangeSelection, COMMAND_PRIORITY_CRITICAL, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ENTER_COMMAND, KEY_ESCAPE_COMMAND, } from 'lexical';
|
|
8
|
+
import { $createMentionNode } from './MentionNode';
|
|
9
|
+
/**
|
|
10
|
+
* How wide the menu is, and how tall it may grow.
|
|
11
|
+
*
|
|
12
|
+
* Named because the position is computed from them: the menu is lifted its own
|
|
13
|
+
* height to sit above the caret, and held back from the right edge by its own
|
|
14
|
+
* width. A number that only lived in the style would put it off screen the
|
|
15
|
+
* moment either changed.
|
|
16
|
+
*/
|
|
17
|
+
const MENU_WIDTH = 440;
|
|
18
|
+
const MENU_MAX_HEIGHT = 240;
|
|
19
|
+
/**
|
|
20
|
+
* Read the `@word` immediately before the caret.
|
|
21
|
+
*
|
|
22
|
+
* Anchored to a word boundary so an email address or a decorator does not open
|
|
23
|
+
* a menu: `@` counts only at the start of the text or after whitespace.
|
|
24
|
+
*/
|
|
25
|
+
function readMentionQuery(editor) {
|
|
26
|
+
let query = null;
|
|
27
|
+
editor.getEditorState().read(() => {
|
|
28
|
+
const selection = $getSelection();
|
|
29
|
+
if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const node = selection.anchor.getNode();
|
|
33
|
+
const before = node.getTextContent().slice(0, selection.anchor.offset);
|
|
34
|
+
const match = /(?:^|\s)@([\w-]*)$/.exec(before);
|
|
35
|
+
if (!match) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const domSelection = window.getSelection();
|
|
39
|
+
const rect = domSelection && domSelection.rangeCount > 0
|
|
40
|
+
? domSelection.getRangeAt(0).getBoundingClientRect()
|
|
41
|
+
: null;
|
|
42
|
+
query = { text: match[1], rect };
|
|
43
|
+
});
|
|
44
|
+
return query;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Offer the agents while `@` is being typed.
|
|
48
|
+
*/
|
|
49
|
+
export function AgentMentionPlugin({ agents, }) {
|
|
50
|
+
const [editor] = useLexicalComposerContext();
|
|
51
|
+
const [query, setQuery] = useState(null);
|
|
52
|
+
const [highlighted, setHighlighted] = useState(0);
|
|
53
|
+
const anchorRef = useRef(null);
|
|
54
|
+
/* The rows, by agent name, so the lit one can be brought into view. */
|
|
55
|
+
const rowRefs = useRef(new Map());
|
|
56
|
+
/* Set while the document change that inserted a mention is being applied. */
|
|
57
|
+
const justInserted = useRef(false);
|
|
58
|
+
/*
|
|
59
|
+
* Choosable rows first, then the greyed ones.
|
|
60
|
+
*
|
|
61
|
+
* The highlight — where Enter lands — starts on the first row a person can
|
|
62
|
+
* pick. The one already being addressed is listed too, greyed, and it used
|
|
63
|
+
* to come first because the team lists its front door first: so the menu
|
|
64
|
+
* opened with its second row lit, which read as the wrong row preselected.
|
|
65
|
+
* A stable sort keeps the team's own order within each group.
|
|
66
|
+
*/
|
|
67
|
+
const matches = query
|
|
68
|
+
? agents
|
|
69
|
+
.filter(agent => agent.name.toLowerCase().startsWith(query.text.toLowerCase()))
|
|
70
|
+
.sort((left, right) => Number(!!left.disabled) - Number(!!right.disabled))
|
|
71
|
+
: [];
|
|
72
|
+
const open = matches.length > 0;
|
|
73
|
+
/*
|
|
74
|
+
* Where the arrows and Enter may land. A disabled row is in `matches` so it
|
|
75
|
+
* renders, and out of here so the keyboard never selects it — the two lists
|
|
76
|
+
* exist because "shown" and "choosable" stopped being the same thing.
|
|
77
|
+
*/
|
|
78
|
+
const choosable = matches.filter(agent => !agent.disabled);
|
|
79
|
+
/*
|
|
80
|
+
* Back to the first choosable row whenever the typing changes.
|
|
81
|
+
*
|
|
82
|
+
* Kept in range as the list narrows — a highlight past the end would submit
|
|
83
|
+
* nothing on Enter, which reads as the key being broken — and reset
|
|
84
|
+
* outright as the `@word` changes, so each new filter offers its best match
|
|
85
|
+
* rather than whichever position the last one happened to leave behind.
|
|
86
|
+
*/
|
|
87
|
+
useEffect(() => {
|
|
88
|
+
setHighlighted(0);
|
|
89
|
+
}, [query?.text]);
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
setHighlighted(current => (current < choosable.length ? current : 0));
|
|
92
|
+
}, [choosable.length]);
|
|
93
|
+
/*
|
|
94
|
+
* Keep the lit row in view.
|
|
95
|
+
*
|
|
96
|
+
* The menu shows a few rows and scrolls for the rest, so an arrow that
|
|
97
|
+
* moved the highlight past the fold moved it out of sight — and Enter then
|
|
98
|
+
* chose a row the person never saw. `nearest` scrolls the menu by the
|
|
99
|
+
* least that shows the row, and nothing when it already shows.
|
|
100
|
+
*/
|
|
101
|
+
const litName = choosable[highlighted]?.name;
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
if (!open || !litName) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const row = rowRefs.current.get(litName);
|
|
107
|
+
if (row && typeof row.scrollIntoView === 'function') {
|
|
108
|
+
row.scrollIntoView({ block: 'nearest' });
|
|
109
|
+
}
|
|
110
|
+
}, [open, litName]);
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
return editor.registerUpdateListener(() => {
|
|
113
|
+
const next = readMentionQuery(editor);
|
|
114
|
+
if (justInserted.current) {
|
|
115
|
+
/*
|
|
116
|
+
* Every update belonging to the insertion, not just the first.
|
|
117
|
+
*
|
|
118
|
+
* One `editor.update()` raises several of them — the range emptied,
|
|
119
|
+
* the node placed, the trailing space — and they all run
|
|
120
|
+
* synchronously. Clearing the flag on the first let a later one
|
|
121
|
+
* reopen the menu against the chip just written, a line higher, which
|
|
122
|
+
* is what a reader saw. Clearing it on "the caret asks nothing" was
|
|
123
|
+
* the same bet in a different disguise: it assumed one of those
|
|
124
|
+
* intermediate states would read as settled, and one did not.
|
|
125
|
+
*
|
|
126
|
+
* The flag is lifted on the next macrotask instead, which is after
|
|
127
|
+
* every synchronous update from this edit and before anything a
|
|
128
|
+
* person can type.
|
|
129
|
+
*/
|
|
130
|
+
setQuery(null);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
setQuery(next);
|
|
134
|
+
});
|
|
135
|
+
}, [editor]);
|
|
136
|
+
/** Replace the `@partial` with the chosen name. */
|
|
137
|
+
const insert = useCallback((agent) => {
|
|
138
|
+
editor.update(() => {
|
|
139
|
+
const selection = $getSelection();
|
|
140
|
+
if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const node = selection.anchor.getNode();
|
|
144
|
+
const offset = selection.anchor.offset;
|
|
145
|
+
const before = node.getTextContent().slice(0, offset);
|
|
146
|
+
const match = /(?:^|\s)@([\w-]*)$/.exec(before);
|
|
147
|
+
if (!match) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Only the typed fragment is replaced, so whatever preceded it —
|
|
151
|
+
// including the space that made `@` a mention — survives.
|
|
152
|
+
const start = offset - match[1].length - 1;
|
|
153
|
+
selection.setTextNodeRange(node, start, node, offset);
|
|
154
|
+
/*
|
|
155
|
+
* Deleted first, then inserted into the collapsed caret.
|
|
156
|
+
*
|
|
157
|
+
* `insertNodes` over a *range* decides for itself how to reconcile
|
|
158
|
+
* what it is replacing, and for a decorator it reconciled by splitting
|
|
159
|
+
* the paragraph — so the chip landed and the caret went to a new line.
|
|
160
|
+
* Emptying the range first leaves a collapsed selection inside a text
|
|
161
|
+
* node, which is the one state an inline insert has no choice about.
|
|
162
|
+
*/
|
|
163
|
+
selection.insertText('');
|
|
164
|
+
/*
|
|
165
|
+
* A node, not `@Name ` as text.
|
|
166
|
+
*
|
|
167
|
+
* As text a mention was several words to the editor: backspace took
|
|
168
|
+
* the last one off and left an address to somebody who does not
|
|
169
|
+
* exist. The trailing space stays plain, so the caret lands after the
|
|
170
|
+
* chip ready for the rest of the sentence.
|
|
171
|
+
*/
|
|
172
|
+
const chip = $createMentionNode({ name: agent.name, icon: agent.icon });
|
|
173
|
+
selection.insertNodes([chip]);
|
|
174
|
+
// Explicitly after the chip. `insertNodes` leaves the selection where
|
|
175
|
+
// it sees fit, and typing must continue on this line, beside it.
|
|
176
|
+
chip.selectNext();
|
|
177
|
+
const after = $getSelection();
|
|
178
|
+
if ($isRangeSelection(after)) {
|
|
179
|
+
after.insertText(' ');
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
justInserted.current = true;
|
|
183
|
+
setQuery(null);
|
|
184
|
+
window.setTimeout(() => {
|
|
185
|
+
justInserted.current = false;
|
|
186
|
+
}, 0);
|
|
187
|
+
}, [editor]);
|
|
188
|
+
/*
|
|
189
|
+
* The menu owns these keys only while it is open, so Enter still submits and
|
|
190
|
+
* the arrows still move the caret the rest of the time.
|
|
191
|
+
*
|
|
192
|
+
* At `CRITICAL`, above the `HIGH` the submit handler uses. Lexical runs the
|
|
193
|
+
* higher priority first and stops at the first handler that returns true —
|
|
194
|
+
* so registering these `LOW` meant Enter reached submit before the menu ever
|
|
195
|
+
* saw it, and choosing an agent sent the half-written message instead.
|
|
196
|
+
*
|
|
197
|
+
* Being above submit is safe precisely because this effect only runs while
|
|
198
|
+
* the menu is open, and each handler declines when it has nothing to do.
|
|
199
|
+
*/
|
|
200
|
+
useEffect(() => {
|
|
201
|
+
if (!open) {
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
const unregister = [
|
|
205
|
+
editor.registerCommand(KEY_ARROW_DOWN_COMMAND, (event) => {
|
|
206
|
+
/*
|
|
207
|
+
Declined when nothing can be chosen.
|
|
208
|
+
|
|
209
|
+
The menu opens for a single agent that is already the one being
|
|
210
|
+
addressed — shown greyed, because a menu that hides its only row
|
|
211
|
+
looks broken — and then `% choosable.length` is `% 0`, which is
|
|
212
|
+
NaN. Handing the key back leaves the caret working as it should.
|
|
213
|
+
*/
|
|
214
|
+
if (choosable.length === 0) {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
// The browser's default too: the arrow would otherwise move the
|
|
218
|
+
// caret off the `@word`, and the menu it was steering would close.
|
|
219
|
+
event.preventDefault();
|
|
220
|
+
setHighlighted(current => (current + 1) % choosable.length);
|
|
221
|
+
return true;
|
|
222
|
+
}, COMMAND_PRIORITY_CRITICAL),
|
|
223
|
+
editor.registerCommand(KEY_ARROW_UP_COMMAND, (event) => {
|
|
224
|
+
if (choosable.length === 0) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
event.preventDefault();
|
|
228
|
+
setHighlighted(current => (current - 1 + choosable.length) % choosable.length);
|
|
229
|
+
return true;
|
|
230
|
+
}, COMMAND_PRIORITY_CRITICAL),
|
|
231
|
+
editor.registerCommand(KEY_ENTER_COMMAND, (event) => {
|
|
232
|
+
const agent = choosable[highlighted];
|
|
233
|
+
if (!agent) {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
/*
|
|
237
|
+
* The browser's default, as well as Lexical's.
|
|
238
|
+
*
|
|
239
|
+
* Returning `true` stops the command reaching the plain-text
|
|
240
|
+
* plugin, but the keypress is still a keypress in a
|
|
241
|
+
* `contenteditable` — so the browser inserted its own line break
|
|
242
|
+
* after the chip. Choosing with the mouse never did, which is
|
|
243
|
+
* exactly the shape of a missing `preventDefault`.
|
|
244
|
+
*/
|
|
245
|
+
event?.preventDefault();
|
|
246
|
+
insert(agent);
|
|
247
|
+
return true;
|
|
248
|
+
}, COMMAND_PRIORITY_CRITICAL),
|
|
249
|
+
editor.registerCommand(KEY_ESCAPE_COMMAND, () => {
|
|
250
|
+
setQuery(null);
|
|
251
|
+
return true;
|
|
252
|
+
}, COMMAND_PRIORITY_CRITICAL),
|
|
253
|
+
];
|
|
254
|
+
return () => unregister.forEach(remove => remove());
|
|
255
|
+
}, [editor, open, choosable, highlighted, insert]);
|
|
256
|
+
if (!open || !query?.rect) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
return (_jsxs(_Fragment, { children: [_jsx(Box, { ref: anchorRef, sx: {
|
|
260
|
+
position: 'fixed',
|
|
261
|
+
left: query.rect.left,
|
|
262
|
+
top: query.rect.top,
|
|
263
|
+
width: 1,
|
|
264
|
+
height: query.rect.height || 16,
|
|
265
|
+
pointerEvents: 'none',
|
|
266
|
+
} }), _jsx(Overlay, { returnFocusRef: anchorRef, onEscape: () => setQuery(null), onClickOutside: () => setQuery(null), anchorSide: "outside-top",
|
|
267
|
+
// The caret already has focus and must keep it: a person is still
|
|
268
|
+
// typing, and the menu is a suggestion rather than a destination.
|
|
269
|
+
preventFocusOnOpen: true,
|
|
270
|
+
/*
|
|
271
|
+
* Primer's own width prop, not an `sx` width.
|
|
272
|
+
*
|
|
273
|
+
* `Overlay` renders its width as a `data-width-*` attribute backed by
|
|
274
|
+
* a CSS-module rule, and the default `auto` means "size to content" —
|
|
275
|
+
* which an `sx` width does not reliably beat, since the two are equal
|
|
276
|
+
* specificity and the module's rule wins on source order. That is why
|
|
277
|
+
* the menu stayed as wide as the longest description in it. `medium`
|
|
278
|
+
* is 320px.
|
|
279
|
+
*/
|
|
280
|
+
width: "large",
|
|
281
|
+
/*
|
|
282
|
+
* Positioned through `style`, not `sx`.
|
|
283
|
+
*
|
|
284
|
+
* `Overlay` writes `left`, `right`, `top`, `bottom` and `position` as
|
|
285
|
+
* *inline* styles taken from its own props, and spreads a `style` prop
|
|
286
|
+
* last. An `sx` rule is a class, and a class never beats an inline
|
|
287
|
+
* style — so every position written there was discarded and the menu
|
|
288
|
+
* rendered wherever the default left it: pinned to the left edge of
|
|
289
|
+
* the window, a long way from the `@` it belongs to.
|
|
290
|
+
*
|
|
291
|
+
* Anchored to the caret: `left` at the character, and its bottom edge
|
|
292
|
+
* just above the line, so it sits over what came before rather than
|
|
293
|
+
* over the word being typed. Clamped so a caret near the right edge
|
|
294
|
+
* does not push it off screen.
|
|
295
|
+
*/
|
|
296
|
+
style: {
|
|
297
|
+
position: 'fixed',
|
|
298
|
+
left: Math.max(8, Math.min(query.rect.left, window.innerWidth - MENU_WIDTH - 8)),
|
|
299
|
+
/*
|
|
300
|
+
The bottom edge, pinned above the caret — not the top edge pulled
|
|
301
|
+
up by a transform.
|
|
302
|
+
|
|
303
|
+
`top` plus `translateY(-100%)` is a position that depends on the
|
|
304
|
+
element's own height, and the height is only known once its rows
|
|
305
|
+
have been laid out. So it painted once at the caret's line and
|
|
306
|
+
again where it belonged, which reads as the menu falling into
|
|
307
|
+
place.
|
|
308
|
+
|
|
309
|
+
`bottom` needs no such measurement: the browser resolves it
|
|
310
|
+
against the viewport, and the first paint is the final one.
|
|
311
|
+
*/
|
|
312
|
+
...(query.rect.top >= MENU_MAX_HEIGHT + 16
|
|
313
|
+
? { bottom: window.innerHeight - query.rect.top + 6, top: 'auto' }
|
|
314
|
+
: // No room above — a caret near the top of the window — so it
|
|
315
|
+
// hangs below the line instead of being pushed off screen.
|
|
316
|
+
{
|
|
317
|
+
top: query.rect.top + (query.rect.height || 16) + 6,
|
|
318
|
+
bottom: 'auto',
|
|
319
|
+
}),
|
|
320
|
+
right: 'auto',
|
|
321
|
+
}, sx: {
|
|
322
|
+
maxHeight: MENU_MAX_HEIGHT,
|
|
323
|
+
overflowY: 'auto',
|
|
324
|
+
maxWidth: 'calc(100vw - 16px)',
|
|
325
|
+
}, children: _jsx(Box, { sx: { width: '100%', maxWidth: MENU_WIDTH, minWidth: 0 }, children: _jsx(ActionList, { selectionVariant: "single", children: matches.map(agent => {
|
|
326
|
+
const index = choosable.indexOf(agent);
|
|
327
|
+
return (_jsxs(ActionList.Item, { ref: element => {
|
|
328
|
+
if (element) {
|
|
329
|
+
rowRefs.current.set(agent.name, element);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
rowRefs.current.delete(agent.name);
|
|
333
|
+
}
|
|
334
|
+
}, active: index >= 0 && index === highlighted, "aria-disabled": agent.disabled, title: agent.disabledReason, onSelect: () => {
|
|
335
|
+
if (!agent.disabled) {
|
|
336
|
+
insert(agent);
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
/*
|
|
340
|
+
The highlight, drawn here rather than asked for.
|
|
341
|
+
|
|
342
|
+
`active` is Primer's "the keyboard is here" state and this
|
|
343
|
+
list renders it faintly; `selected` draws a tick in the
|
|
344
|
+
leading-visual slot, which these rows already fill with the
|
|
345
|
+
agent's own icon — so neither showed. The row Enter would
|
|
346
|
+
take looked exactly like the rest, which is the one thing a
|
|
347
|
+
menu driven by arrow keys must not do.
|
|
348
|
+
|
|
349
|
+
A background says it plainly, and says it the same way
|
|
350
|
+
whatever variant the list is in.
|
|
351
|
+
*/
|
|
352
|
+
sx: {
|
|
353
|
+
...(index >= 0 && index === highlighted
|
|
354
|
+
? { bg: 'accent.subtle' }
|
|
355
|
+
: null),
|
|
356
|
+
...(agent.disabled ? { opacity: 0.5 } : null),
|
|
357
|
+
}, children: [_jsx(ActionList.LeadingVisual, { children: agent.icon ? _jsx(agent.icon, {}) : _jsx(AiAgentIcon, {}) }), agent.name, agent.description ? (_jsx(ActionList.Description, { variant: "block",
|
|
358
|
+
/* Wrapped and breakable. `minWidth: 0` is the load-bearing
|
|
359
|
+
one: a grid item defaults to `min-content`, so without
|
|
360
|
+
it the description refuses to be narrower than its
|
|
361
|
+
longest unbroken run and pushes the row wide. */
|
|
362
|
+
sx: {
|
|
363
|
+
display: 'block',
|
|
364
|
+
whiteSpace: 'normal',
|
|
365
|
+
overflowWrap: 'anywhere',
|
|
366
|
+
minWidth: 0,
|
|
367
|
+
}, children: agent.description })) : null] }, agent.name));
|
|
368
|
+
}) }) }) })] }));
|
|
369
|
+
}
|
|
370
|
+
export default AgentMentionPlugin;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running something from the prompt, by typing `/`.
|
|
3
|
+
*
|
|
4
|
+
* The sibling of `AgentMentionPlugin`, and deliberately its twin: the same
|
|
5
|
+
* caret-anchored overlay, the same keyboard ownership while it is open, the
|
|
6
|
+
* same reset when the word changes. Two menus that behave differently for no
|
|
7
|
+
* reason a person could name would be worse than either.
|
|
8
|
+
*
|
|
9
|
+
* What it inserts is plain text, not a node. A command is read by whoever
|
|
10
|
+
* handles the prompt, and a person can type one by hand or edit one
|
|
11
|
+
* afterwards; a bespoke node would break both in ways nobody could see. That
|
|
12
|
+
* is the one place it differs from the mention plugin, whose chip exists
|
|
13
|
+
* because an agent's name has spaces in it and a command does not.
|
|
14
|
+
*
|
|
15
|
+
* The commands are hardcoded and every one of them is disabled: the menu is
|
|
16
|
+
* here to say what is coming, and offering something that does nothing when
|
|
17
|
+
* chosen would be worse than saying so.
|
|
18
|
+
*
|
|
19
|
+
* @module chat/prompt/plugins/CommandPlugin
|
|
20
|
+
*/
|
|
21
|
+
import type { JSX } from 'react';
|
|
22
|
+
import type { Icon } from '@primer/octicons-react';
|
|
23
|
+
/** One command a prompt may run. */
|
|
24
|
+
export type PromptCommand = {
|
|
25
|
+
/** The word typed after `/`. */
|
|
26
|
+
name: string;
|
|
27
|
+
/** One line about what it does. */
|
|
28
|
+
description?: string;
|
|
29
|
+
/** The mark shown beside it. */
|
|
30
|
+
icon?: Icon;
|
|
31
|
+
/** Shown, but not choosable. */
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
/** Why it cannot be chosen, when it cannot. */
|
|
34
|
+
disabledReason?: string;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* The commands, for now.
|
|
38
|
+
*
|
|
39
|
+
* Hardcoded and every one disabled, because none of them is wired to anything
|
|
40
|
+
* yet. A menu that lists what is coming is honest; one that accepts a choice
|
|
41
|
+
* and does nothing is not.
|
|
42
|
+
*/
|
|
43
|
+
export declare const PROMPT_COMMANDS: PromptCommand[];
|
|
44
|
+
export type CommandPluginProps = {
|
|
45
|
+
/** Every command this prompt offers. No menu when there are none. */
|
|
46
|
+
commands: PromptCommand[];
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Offer the commands while `/` is being typed.
|
|
50
|
+
*/
|
|
51
|
+
export declare function CommandPlugin({ commands, }: CommandPluginProps): JSX.Element | null;
|
|
52
|
+
export default CommandPlugin;
|