@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,225 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
|
+
import { Box } from '@datalayer/primer-addons';
|
|
4
|
+
import { useTypingPlaceholder } from './useTypingPlaceholder';
|
|
5
|
+
import { InPromptHeader } from './header';
|
|
6
|
+
import { InPromptFooter } from './footer';
|
|
7
|
+
import { InputPromptText } from './InputPromptText';
|
|
8
|
+
import { InputPromptLexical } from './InputPromptLexical';
|
|
9
|
+
import { usePromptHistory } from './promptHistory';
|
|
10
|
+
/**
|
|
11
|
+
* InputPromptBase — the editor, its header and its footer with header, input area, and footer.
|
|
12
|
+
*/
|
|
13
|
+
export function InputPromptBase({ variant = 'lexical', placeholder = 'Ask anything…', typingSuggestions, isLoading = false, isKernelBusy = false, onSend, onStop, autoFocus = false, focusTrigger, showBorderTop = true, showBackground = true, padding = 3, disabled = false, readOnly = false, mentionableAgents, promptHistory, sx, value: controlledValue, onChange: controlledOnChange, headerContent, headerStacks, footerContent, footerStacks, footerRightContent, }) {
|
|
14
|
+
// ---- Controlled / uncontrolled state -----------------------------------
|
|
15
|
+
const [internalInput, setInternalInput] = useState('');
|
|
16
|
+
const input = controlledValue !== undefined ? controlledValue : internalInput;
|
|
17
|
+
const setInput = controlledOnChange !== undefined ? controlledOnChange : setInternalInput;
|
|
18
|
+
// ---- Prompt history ----------------------------------------------------
|
|
19
|
+
const { remember, edited, navigate } = usePromptHistory(promptHistory);
|
|
20
|
+
/*
|
|
21
|
+
* The value as of now, for handlers that must not be rebuilt on every
|
|
22
|
+
* keystroke: the Lexical variant registers its arrow-key commands afresh
|
|
23
|
+
* whenever its handler changes, and a handler closing over `input` would
|
|
24
|
+
* change on each character typed.
|
|
25
|
+
*/
|
|
26
|
+
const valueRef = useRef(input);
|
|
27
|
+
valueRef.current = input;
|
|
28
|
+
/*
|
|
29
|
+
* Typing ends a walk through the history — but this component's own
|
|
30
|
+
* writes are not typing. The editors report back whatever value is pushed
|
|
31
|
+
* into them, and that report says the same text that was just set, which
|
|
32
|
+
* is how the two are told apart.
|
|
33
|
+
*/
|
|
34
|
+
const handleChange = useCallback((next) => {
|
|
35
|
+
if (next !== valueRef.current) {
|
|
36
|
+
edited();
|
|
37
|
+
}
|
|
38
|
+
setInput(next);
|
|
39
|
+
}, [edited, setInput]);
|
|
40
|
+
/** A step through the history: the box shows it, or the key is left alone. */
|
|
41
|
+
const navigateHistory = useCallback((direction) => {
|
|
42
|
+
const text = navigate(direction, valueRef.current);
|
|
43
|
+
if (text === null) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
setInput(text);
|
|
47
|
+
return true;
|
|
48
|
+
}, [navigate, setInput]);
|
|
49
|
+
// ---- Refs (text variant only) ------------------------------------------
|
|
50
|
+
const inputRef = useRef(null);
|
|
51
|
+
// ---- Typed placeholder --------------------------------------------------
|
|
52
|
+
/*
|
|
53
|
+
* Focus for the whole prompt, not for the editor alone.
|
|
54
|
+
*
|
|
55
|
+
* React's focus events bubble, so one pair of handlers on the container
|
|
56
|
+
* covers both variants and the controls in the footer — and somebody
|
|
57
|
+
* choosing a model from a menu is interacting with this prompt just as
|
|
58
|
+
* surely as somebody typing in it. `relatedTarget` is what distinguishes
|
|
59
|
+
* leaving the prompt from moving around inside it; without that check,
|
|
60
|
+
* every step between the editor and a button would restart the animation.
|
|
61
|
+
*/
|
|
62
|
+
const [focused, setFocused] = useState(false);
|
|
63
|
+
/*
|
|
64
|
+
* The focus this prompt gave itself does not count as somebody arriving.
|
|
65
|
+
*
|
|
66
|
+
* `autoFocus` puts the caret in the box on mount — which is right, it is why
|
|
67
|
+
* the workspace exists — and it would otherwise stop the animation before
|
|
68
|
+
* its first character, on exactly the pages that most need the invitation. A
|
|
69
|
+
* click, a tab-in, or any later focus is a person; the first one is us.
|
|
70
|
+
*/
|
|
71
|
+
const selfFocused = useRef(autoFocus);
|
|
72
|
+
/** The whole prompt — editor, footer controls and all. */
|
|
73
|
+
const containerRef = useRef(null);
|
|
74
|
+
/**
|
|
75
|
+
* Bumped to ask the Lexical editor for the caret.
|
|
76
|
+
*
|
|
77
|
+
* That editor is not focused by calling a method on a ref: it needs the
|
|
78
|
+
* retry loop in `AutoFocusPlugin`, which gives up if somebody is typing
|
|
79
|
+
* elsewhere. A counter re-runs the whole of it.
|
|
80
|
+
*/
|
|
81
|
+
const [lexicalFocusSignal, setLexicalFocusSignal] = useState(0);
|
|
82
|
+
const animatedPlaceholder = useTypingPlaceholder({
|
|
83
|
+
phrases: typingSuggestions ?? [],
|
|
84
|
+
// Nothing to stand in for once there is something typed, and nothing to
|
|
85
|
+
// invite while the agent is answering or the box is inert.
|
|
86
|
+
enabled: !focused && !input && !isLoading && !disabled && !readOnly,
|
|
87
|
+
idle: placeholder,
|
|
88
|
+
});
|
|
89
|
+
// ---- Auto-focus --------------------------------------------------------
|
|
90
|
+
useEffect(() => {
|
|
91
|
+
if (autoFocus && variant === 'text' && inputRef.current) {
|
|
92
|
+
const t = setTimeout(() => inputRef.current?.focus(), 100);
|
|
93
|
+
return () => clearTimeout(t);
|
|
94
|
+
}
|
|
95
|
+
}, [autoFocus, variant]);
|
|
96
|
+
// ---- Refocus when focusTrigger changes ---------------------------------
|
|
97
|
+
// Both variants, for the same reason as the turn-end refocus below: the
|
|
98
|
+
// default variant is `lexical`, so a caller bumping this got nothing.
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (focusTrigger === undefined || focusTrigger <= 0) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (variant === 'lexical') {
|
|
104
|
+
setLexicalFocusSignal(signal => signal + 1);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (!inputRef.current) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const t = setTimeout(() => inputRef.current?.focus(), 150);
|
|
111
|
+
return () => clearTimeout(t);
|
|
112
|
+
}, [focusTrigger, variant]);
|
|
113
|
+
/*
|
|
114
|
+
* The caret comes back when the turn ends.
|
|
115
|
+
*
|
|
116
|
+
* A turn finishing is an invitation to say the next thing, and having to
|
|
117
|
+
* click into the box first is a small tax charged on every single exchange.
|
|
118
|
+
*
|
|
119
|
+
* It used to be `variant === 'text'` only — and the default variant is
|
|
120
|
+
* `lexical`, so on every surface that ships the real prompt this did
|
|
121
|
+
* nothing at all. Both are handled now: the textarea takes focus directly,
|
|
122
|
+
* and the Lexical editor is asked through a signal, because focusing that
|
|
123
|
+
* one is a retry loop rather than a method call and it already lives in
|
|
124
|
+
* `AutoFocusPlugin`.
|
|
125
|
+
*
|
|
126
|
+
* Not if the reader has gone somewhere else in the meantime. Waiting out a
|
|
127
|
+
* turn is exactly when somebody edits a cell or scrolls the notebook, and
|
|
128
|
+
* snatching the caret out of that would be a far worse bug than the one
|
|
129
|
+
* being fixed. `document.body` means nobody is anywhere; anything inside
|
|
130
|
+
* this prompt is already us.
|
|
131
|
+
*/
|
|
132
|
+
const wasLoadingRef = useRef(false);
|
|
133
|
+
useEffect(() => {
|
|
134
|
+
const justFinished = wasLoadingRef.current && !isLoading;
|
|
135
|
+
// Recorded before any early return: leaving it below one is how this kind
|
|
136
|
+
// of edge-trigger quietly stops firing.
|
|
137
|
+
wasLoadingRef.current = isLoading;
|
|
138
|
+
if (!justFinished || disabled || readOnly) {
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
const active = document.activeElement;
|
|
142
|
+
const elsewhere = active &&
|
|
143
|
+
active !== document.body &&
|
|
144
|
+
!containerRef.current?.contains(active);
|
|
145
|
+
if (elsewhere) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (variant === 'lexical') {
|
|
149
|
+
setLexicalFocusSignal(signal => signal + 1);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const t = setTimeout(() => inputRef.current?.focus(), 50);
|
|
153
|
+
return () => clearTimeout(t);
|
|
154
|
+
}, [isLoading, variant, disabled, readOnly]);
|
|
155
|
+
// ---- Send / Stop handlers ----------------------------------------------
|
|
156
|
+
const handleSend = useCallback(() => {
|
|
157
|
+
if (!input.trim() || isLoading || disabled || readOnly)
|
|
158
|
+
return;
|
|
159
|
+
const message = input.trim();
|
|
160
|
+
// Newest in the history from now on, whatever the runtime records.
|
|
161
|
+
remember(message);
|
|
162
|
+
if (controlledValue === undefined) {
|
|
163
|
+
setInput('');
|
|
164
|
+
}
|
|
165
|
+
onSend(message);
|
|
166
|
+
}, [
|
|
167
|
+
input,
|
|
168
|
+
isLoading,
|
|
169
|
+
disabled,
|
|
170
|
+
readOnly,
|
|
171
|
+
onSend,
|
|
172
|
+
setInput,
|
|
173
|
+
controlledValue,
|
|
174
|
+
remember,
|
|
175
|
+
]);
|
|
176
|
+
const handleStop = useCallback(() => {
|
|
177
|
+
onStop?.();
|
|
178
|
+
}, [onStop]);
|
|
179
|
+
// ---- Render ------------------------------------------------------------
|
|
180
|
+
return (_jsx(Box, { sx: sx, children: _jsx(Box, { sx: {
|
|
181
|
+
p: padding,
|
|
182
|
+
...(showBorderTop && {
|
|
183
|
+
borderTop: '1px solid',
|
|
184
|
+
borderColor: 'border.default',
|
|
185
|
+
}),
|
|
186
|
+
...(showBackground && {
|
|
187
|
+
bg: 'canvas.subtle',
|
|
188
|
+
}),
|
|
189
|
+
}, children: _jsxs(Box
|
|
190
|
+
// Named so the turn-end refocus can ask whether the caret is already
|
|
191
|
+
// somewhere inside this prompt before it reaches for it.
|
|
192
|
+
, {
|
|
193
|
+
// Named so the turn-end refocus can ask whether the caret is already
|
|
194
|
+
// somewhere inside this prompt before it reaches for it.
|
|
195
|
+
ref: containerRef, onFocusCapture: () => {
|
|
196
|
+
if (selfFocused.current) {
|
|
197
|
+
selfFocused.current = false;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
setFocused(true);
|
|
201
|
+
},
|
|
202
|
+
// Typing is arriving too, whoever moved the caret. Without this an
|
|
203
|
+
// auto-focused prompt would keep animating under a person's first
|
|
204
|
+
// keystroke, until the character they typed made it stop.
|
|
205
|
+
onKeyDownCapture: () => {
|
|
206
|
+
selfFocused.current = false;
|
|
207
|
+
setFocused(true);
|
|
208
|
+
}, onBlurCapture: event => {
|
|
209
|
+
if (!event.currentTarget.contains(event.relatedTarget)) {
|
|
210
|
+
setFocused(false);
|
|
211
|
+
}
|
|
212
|
+
}, sx: {
|
|
213
|
+
border: '1px solid',
|
|
214
|
+
borderColor: 'border.default',
|
|
215
|
+
borderRadius: 2,
|
|
216
|
+
bg: 'canvas.default',
|
|
217
|
+
overflow: 'hidden',
|
|
218
|
+
transition: 'border-color 0.2s ease',
|
|
219
|
+
'&:focus-within': {
|
|
220
|
+
borderColor: 'accent.fg',
|
|
221
|
+
boxShadow: (t) => `0 0 0 1px ${t?.colors?.accent?.fg ?? '#16A085'}`,
|
|
222
|
+
},
|
|
223
|
+
}, children: [_jsx(InPromptHeader, { stacks: headerStacks, children: headerContent }), variant === 'lexical' ? (_jsx(InputPromptLexical, { value: input, onChange: handleChange, placeholder: animatedPlaceholder, disabled: isLoading || disabled, readOnly: readOnly, onSubmit: handleSend, onHistory: navigateHistory, autoFocus: autoFocus, focusSignal: lexicalFocusSignal, mentionableAgents: mentionableAgents })) : (_jsx(InputPromptText, { value: input, onChange: handleChange, placeholder: animatedPlaceholder, disabled: isLoading || disabled, readOnly: readOnly, onSubmit: handleSend, onHistory: navigateHistory, inputRef: inputRef })), _jsx(InPromptFooter, { stacks: footerStacks, isLoading: isLoading, isKernelBusy: isKernelBusy, sendDisabled: !input.trim() || disabled || readOnly, onSend: handleSend, onStop: handleStop, rightContent: footerRightContent, children: footerContent })] }) }) }));
|
|
224
|
+
}
|
|
225
|
+
export default InputPromptBase;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type MentionableAgent } from './plugins/AgentMentionPlugin';
|
|
2
|
+
import type { HistoryDirection } from './promptHistory';
|
|
1
3
|
export interface InputPromptLexicalProps {
|
|
2
4
|
/** Current input value */
|
|
3
5
|
value: string;
|
|
@@ -11,8 +13,23 @@ export interface InputPromptLexicalProps {
|
|
|
11
13
|
readOnly?: boolean;
|
|
12
14
|
/** Callback when the user presses Enter (without Shift) */
|
|
13
15
|
onSubmit?: () => void;
|
|
16
|
+
/**
|
|
17
|
+
* Up or down through the prompt history, asked when the caret is on the
|
|
18
|
+
* first or last line. Answers whether it had somewhere to go; when it did
|
|
19
|
+
* not, the key moves the caret as it normally would.
|
|
20
|
+
*/
|
|
21
|
+
onHistory?: (direction: HistoryDirection) => boolean;
|
|
14
22
|
/** Auto-focus the editor on mount */
|
|
15
23
|
autoFocus?: boolean;
|
|
24
|
+
/** Bumped by the parent to ask for the caret back — see `AutoFocusPlugin`. */
|
|
25
|
+
focusSignal?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Agents this prompt may address by typing `@`.
|
|
28
|
+
*
|
|
29
|
+
* Empty or absent means no menu: a workspace with one agent has nobody to
|
|
30
|
+
* choose between, and a menu on every `@` would be in the way.
|
|
31
|
+
*/
|
|
32
|
+
mentionableAgents?: MentionableAgent[];
|
|
16
33
|
}
|
|
17
|
-
export declare function InputPromptLexical({ value, onChange, placeholder, disabled, readOnly, onSubmit, autoFocus, }: InputPromptLexicalProps): import("react
|
|
34
|
+
export declare function InputPromptLexical({ value, onChange, placeholder, disabled, readOnly, onSubmit, onHistory, autoFocus, focusSignal, mentionableAgents, }: InputPromptLexicalProps): import("react").JSX.Element;
|
|
18
35
|
export default InputPromptLexical;
|
|
@@ -8,35 +8,44 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
8
8
|
*
|
|
9
9
|
* Uses a minimal Lexical setup (plain text only) as an alternative
|
|
10
10
|
* to the plain textarea. Enter-to-submit and Shift+Enter for newline
|
|
11
|
-
* are handled via a custom Lexical plugin
|
|
11
|
+
* are handled via a custom Lexical plugin, and the arrow keys walk the
|
|
12
|
+
* prompt history from the text's edges via another.
|
|
12
13
|
*
|
|
13
|
-
* IMPORTANT: This file imports from `@lexical
|
|
14
|
+
* IMPORTANT: This file imports from the light `@lexical/*` packages only — it does NOT
|
|
14
15
|
* import from `@datalayer/jupyter-lexical` to avoid pulling in heavy
|
|
15
16
|
* Lumino / Jupyter dependencies (see separated-hook-files pattern in CLAUDE.md).
|
|
16
17
|
*
|
|
17
18
|
* @module chat/prompt/InputPromptLexical
|
|
18
19
|
*/
|
|
19
20
|
import { useCallback, useEffect, useRef } from 'react';
|
|
20
|
-
import { $getRoot, $createParagraphNode, $createTextNode, KEY_ENTER_COMMAND, COMMAND_PRIORITY_HIGH, } from 'lexical';
|
|
21
|
-
import {
|
|
22
|
-
import { PlainTextPlugin } from '@lexical/react/LexicalPlainTextPlugin';
|
|
21
|
+
import { $getRoot, $getSelection, $createParagraphNode, $createTextNode, $isElementNode, $isRangeSelection, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ENTER_COMMAND, COMMAND_PRIORITY_HIGH, COMMAND_PRIORITY_LOW, defineExtension, } from 'lexical';
|
|
22
|
+
import { LexicalExtensionComposer } from '@lexical/react/LexicalExtensionComposer';
|
|
23
23
|
import { ContentEditable } from '@lexical/react/LexicalContentEditable';
|
|
24
|
-
import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';
|
|
25
24
|
import { OnChangePlugin } from '@lexical/react/LexicalOnChangePlugin';
|
|
26
25
|
import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
|
|
27
|
-
import {
|
|
26
|
+
import { HistoryExtension } from '@lexical/history';
|
|
27
|
+
import { PlainTextExtension } from '@lexical/plain-text';
|
|
28
|
+
import { MentionNode } from './plugins/MentionNode';
|
|
28
29
|
import { Box } from '@datalayer/primer-addons';
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
import { AgentMentionPlugin, } from './plugins/AgentMentionPlugin';
|
|
31
|
+
import { CommandPlugin, PROMPT_COMMANDS } from './plugins/CommandPlugin';
|
|
32
|
+
// ---- Lexical extension (plain-text only) ---------------------------------
|
|
33
|
+
// Module scope on purpose: the composer rebuilds the editor whenever this
|
|
34
|
+
// reference changes.
|
|
35
|
+
const EDITOR_EXTENSION = defineExtension({
|
|
36
|
+
name: '@datalayer/agent-runtimes/InputPrompt',
|
|
31
37
|
namespace: 'InputPromptLexical',
|
|
32
38
|
theme: {
|
|
33
39
|
paragraph: 'input-prompt-lexical-p',
|
|
34
40
|
},
|
|
35
|
-
|
|
41
|
+
// The `@agent` chip. A node the editor does not know about is dropped on
|
|
42
|
+
// insert, silently — the mention would simply never appear.
|
|
43
|
+
nodes: () => [MentionNode],
|
|
44
|
+
dependencies: [PlainTextExtension, HistoryExtension],
|
|
36
45
|
onError(error) {
|
|
37
46
|
console.error('[InputPromptLexical]', error);
|
|
38
47
|
},
|
|
39
|
-
};
|
|
48
|
+
});
|
|
40
49
|
// ---- Enter-to-submit plugin ---------------------------------------------
|
|
41
50
|
function EnterSubmitPlugin({ onSubmit, disabled, readOnly, }) {
|
|
42
51
|
const [editor] = useLexicalComposerContext();
|
|
@@ -51,6 +60,118 @@ function EnterSubmitPlugin({ onSubmit, disabled, readOnly, }) {
|
|
|
51
60
|
}, [editor, onSubmit, disabled, readOnly]);
|
|
52
61
|
return null;
|
|
53
62
|
}
|
|
63
|
+
// ---- History plugin: the arrow keys over what was sent ------------------
|
|
64
|
+
/**
|
|
65
|
+
* The text before and after the caret, over the whole editor — or `null`
|
|
66
|
+
* when there is no caret to speak of: nothing focused, or a range selected.
|
|
67
|
+
*
|
|
68
|
+
* Lines decide whether an arrow key walks the history — up from the first
|
|
69
|
+
* line, down from the last — and a plain-text editor keeps its lines as
|
|
70
|
+
* line-break nodes inside paragraphs, and as paragraphs, so the text is
|
|
71
|
+
* gathered by walking the tree rather than read off one node.
|
|
72
|
+
*/
|
|
73
|
+
function $textAroundCaret() {
|
|
74
|
+
const selection = $getSelection();
|
|
75
|
+
if (!$isRangeSelection(selection) || !selection.isCollapsed()) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
const { anchor } = selection;
|
|
79
|
+
const anchorNode = anchor.getNode();
|
|
80
|
+
let before = '';
|
|
81
|
+
let after = '';
|
|
82
|
+
let passed = false;
|
|
83
|
+
const take = (text) => {
|
|
84
|
+
if (passed) {
|
|
85
|
+
after += text;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
before += text;
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
const visit = (node) => {
|
|
92
|
+
if (node.is(anchorNode)) {
|
|
93
|
+
if ($isElementNode(node)) {
|
|
94
|
+
// The caret sits between children, and the offset counts them.
|
|
95
|
+
node.getChildren().forEach((child, index) => {
|
|
96
|
+
if (index === anchor.offset) {
|
|
97
|
+
passed = true;
|
|
98
|
+
}
|
|
99
|
+
take(child.getTextContent());
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
const text = node.getTextContent();
|
|
104
|
+
before += text.slice(0, anchor.offset);
|
|
105
|
+
after += text.slice(anchor.offset);
|
|
106
|
+
}
|
|
107
|
+
passed = true;
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if ($isElementNode(node)) {
|
|
111
|
+
node.getChildren().forEach(visit);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
take(node.getTextContent());
|
|
115
|
+
};
|
|
116
|
+
$getRoot()
|
|
117
|
+
.getChildren()
|
|
118
|
+
.forEach((paragraph, index) => {
|
|
119
|
+
if (index > 0) {
|
|
120
|
+
take('\n');
|
|
121
|
+
}
|
|
122
|
+
visit(paragraph);
|
|
123
|
+
});
|
|
124
|
+
return passed ? { before, after } : null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Up from the first line and down from the last walk the prompt history;
|
|
128
|
+
* anywhere else the keys move the caret, as in any editor.
|
|
129
|
+
*
|
|
130
|
+
* Registered at a low priority, and mounted after the `@` and `/` menus, so
|
|
131
|
+
* that a menu which is open takes the arrow keys first — it answers them
|
|
132
|
+
* and this never hears them.
|
|
133
|
+
*/
|
|
134
|
+
function HistoryPlugin({ onHistory, disabled, readOnly, }) {
|
|
135
|
+
const [editor] = useLexicalComposerContext();
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (!onHistory) {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
const handle = (direction) => (event) => {
|
|
141
|
+
if (disabled || readOnly) {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
// A modifier means something else is being asked for.
|
|
145
|
+
if (event &&
|
|
146
|
+
(event.shiftKey || event.altKey || event.metaKey || event.ctrlKey)) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
let atEdge = false;
|
|
150
|
+
editor.getEditorState().read(() => {
|
|
151
|
+
const around = $textAroundCaret();
|
|
152
|
+
if (!around) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
atEdge =
|
|
156
|
+
direction === 'up'
|
|
157
|
+
? !around.before.includes('\n')
|
|
158
|
+
: !around.after.includes('\n');
|
|
159
|
+
});
|
|
160
|
+
if (!atEdge || !onHistory(direction)) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
event?.preventDefault();
|
|
164
|
+
return true;
|
|
165
|
+
};
|
|
166
|
+
const unregisterUp = editor.registerCommand(KEY_ARROW_UP_COMMAND, handle('up'), COMMAND_PRIORITY_LOW);
|
|
167
|
+
const unregisterDown = editor.registerCommand(KEY_ARROW_DOWN_COMMAND, handle('down'), COMMAND_PRIORITY_LOW);
|
|
168
|
+
return () => {
|
|
169
|
+
unregisterUp();
|
|
170
|
+
unregisterDown();
|
|
171
|
+
};
|
|
172
|
+
}, [editor, onHistory, disabled, readOnly]);
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
54
175
|
// ---- Sync plugin (controlled component bridge) --------------------------
|
|
55
176
|
function SyncPlugin({ value, onChange, }) {
|
|
56
177
|
const [editor] = useLexicalComposerContext();
|
|
@@ -71,6 +192,9 @@ function SyncPlugin({ value, onChange, }) {
|
|
|
71
192
|
p.append($createTextNode(value));
|
|
72
193
|
}
|
|
73
194
|
root.append(p);
|
|
195
|
+
// The caret after what was put there — a history entry, a suggestion —
|
|
196
|
+
// where typing on from it is expected to continue.
|
|
197
|
+
p.selectEnd();
|
|
74
198
|
});
|
|
75
199
|
}, [editor, value]);
|
|
76
200
|
// Editor → external value
|
|
@@ -84,14 +208,54 @@ function SyncPlugin({ value, onChange, }) {
|
|
|
84
208
|
return _jsx(OnChangePlugin, { onChange: handleChange });
|
|
85
209
|
}
|
|
86
210
|
// ---- Auto-focus plugin --------------------------------------------------
|
|
87
|
-
function AutoFocusPlugin({ autoFocus }) {
|
|
211
|
+
function AutoFocusPlugin({ autoFocus, focusSignal, }) {
|
|
88
212
|
const [editor] = useLexicalComposerContext();
|
|
89
213
|
useEffect(() => {
|
|
90
|
-
if (autoFocus) {
|
|
91
|
-
|
|
92
|
-
return () => clearTimeout(t);
|
|
214
|
+
if (!autoFocus && !focusSignal) {
|
|
215
|
+
return undefined;
|
|
93
216
|
}
|
|
94
|
-
|
|
217
|
+
/*
|
|
218
|
+
* Asked for repeatedly, briefly, rather than once after a guessed delay.
|
|
219
|
+
*
|
|
220
|
+
* One `setTimeout(100)` assumed the editor was mounted and focusable by
|
|
221
|
+
* then. In a workspace that arrives through a lazy chunk it often is not:
|
|
222
|
+
* the notebook mounts alongside and takes focus, or the contenteditable
|
|
223
|
+
* is not in the document yet, and the single attempt lands on nothing and
|
|
224
|
+
* is never retried — which is exactly the prompt that would not focus.
|
|
225
|
+
*
|
|
226
|
+
* So: try immediately, then keep trying for a second, and stop the moment
|
|
227
|
+
* it works or the moment the person clicks somewhere themselves. Giving
|
|
228
|
+
* up matters as much as retrying — stealing focus back from someone who
|
|
229
|
+
* has started typing in a cell would be worse than never taking it.
|
|
230
|
+
*/
|
|
231
|
+
let cancelled = false;
|
|
232
|
+
const deadline = Date.now() + 1000;
|
|
233
|
+
const focused = () => {
|
|
234
|
+
const root = editor.getRootElement();
|
|
235
|
+
return !!root && document.activeElement === root;
|
|
236
|
+
};
|
|
237
|
+
const attempt = () => {
|
|
238
|
+
if (cancelled || focused()) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const active = document.activeElement;
|
|
242
|
+
const stolen = active &&
|
|
243
|
+
active !== document.body &&
|
|
244
|
+
!editor.getRootElement()?.contains(active);
|
|
245
|
+
if (stolen) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
editor.focus();
|
|
249
|
+
if (!focused() && Date.now() < deadline) {
|
|
250
|
+
timer = window.setTimeout(attempt, 50);
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
let timer = window.setTimeout(attempt, 0);
|
|
254
|
+
return () => {
|
|
255
|
+
cancelled = true;
|
|
256
|
+
window.clearTimeout(timer);
|
|
257
|
+
};
|
|
258
|
+
}, [editor, autoFocus, focusSignal]);
|
|
95
259
|
return null;
|
|
96
260
|
}
|
|
97
261
|
function ReadOnlyPlugin({ readOnly }) {
|
|
@@ -101,29 +265,62 @@ function ReadOnlyPlugin({ readOnly }) {
|
|
|
101
265
|
}, [editor, readOnly]);
|
|
102
266
|
return null;
|
|
103
267
|
}
|
|
104
|
-
export function InputPromptLexical({ value, onChange, placeholder = 'Ask anything…', disabled = false, readOnly = false, onSubmit, autoFocus = false, }) {
|
|
268
|
+
export function InputPromptLexical({ value, onChange, placeholder = 'Ask anything…', disabled = false, readOnly = false, onSubmit, onHistory, autoFocus = false, focusSignal, mentionableAgents, }) {
|
|
105
269
|
return (_jsx(Box, { sx: {
|
|
270
|
+
/*
|
|
271
|
+
The placeholder is positioned against this box.
|
|
272
|
+
|
|
273
|
+
It is `position: absolute` and this was `static`, so it resolved
|
|
274
|
+
against whatever ancestor happened to be positioned — which put
|
|
275
|
+
"Type a message..." up in the header, nowhere near the box it
|
|
276
|
+
describes. A containing block is the whole fix.
|
|
277
|
+
*/
|
|
278
|
+
position: 'relative',
|
|
106
279
|
px: 2,
|
|
107
|
-
|
|
280
|
+
// A little more above than the 2px it had: the text sat hard against
|
|
281
|
+
// the edge of the box, which reads as clipped rather than as tight.
|
|
282
|
+
// Still less than below, where the footer's own padding follows.
|
|
283
|
+
pt: '6px',
|
|
284
|
+
pb: 1,
|
|
285
|
+
/*
|
|
286
|
+
* Greyed while it cannot be typed in.
|
|
287
|
+
*
|
|
288
|
+
* `contenteditable=false` stops the caret and nothing else — the text
|
|
289
|
+
* kept the same weight and colour as a live prompt, so a person had to
|
|
290
|
+
* try typing to discover the box was inert. The colour is set on the
|
|
291
|
+
* container and inherited, because the editable element deliberately
|
|
292
|
+
* declares no colour of its own.
|
|
293
|
+
*/
|
|
294
|
+
color: disabled || readOnly ? 'fg.subtle' : undefined,
|
|
295
|
+
cursor: disabled || readOnly ? 'not-allowed' : undefined,
|
|
108
296
|
'& .input-prompt-lexical-p': {
|
|
109
297
|
margin: 0,
|
|
110
298
|
},
|
|
111
|
-
}, children: _jsxs(
|
|
112
|
-
outline: 'none',
|
|
113
|
-
minHeight: 40,
|
|
114
|
-
maxHeight: 120,
|
|
115
|
-
overflowY: 'auto',
|
|
116
|
-
fontSize: 14,
|
|
117
|
-
lineHeight: '1.5',
|
|
118
|
-
padding: '2px 0',
|
|
119
|
-
} }), placeholder: _jsx(Box, { sx: {
|
|
299
|
+
}, children: _jsxs(LexicalExtensionComposer, { extension: EDITOR_EXTENSION, contentEditable: null, children: [_jsx(ContentEditable, { placeholder: _jsx(Box, { sx: {
|
|
120
300
|
position: 'absolute',
|
|
121
|
-
|
|
122
|
-
|
|
301
|
+
/*
|
|
302
|
+
Level with the first line of typing.
|
|
303
|
+
|
|
304
|
+
Relative to the box above, which establishes the containing
|
|
305
|
+
block. The editor's own `padding: 2px 0` sits inside this
|
|
306
|
+
box's `pt: 2px`, so the caret's first line starts 4px down —
|
|
307
|
+
matching it here is what stops the placeholder floating
|
|
308
|
+
above the text it stands in for.
|
|
309
|
+
*/
|
|
310
|
+
top: '8px',
|
|
311
|
+
left: '8px',
|
|
123
312
|
color: 'fg.subtle',
|
|
124
313
|
fontSize: 1,
|
|
125
314
|
pointerEvents: 'none',
|
|
126
315
|
userSelect: 'none',
|
|
127
|
-
}, children: placeholder }),
|
|
316
|
+
}, children: placeholder }), "aria-placeholder": placeholder, className: "input-prompt-lexical-content", "aria-label": "Message input", style: {
|
|
317
|
+
outline: 'none',
|
|
318
|
+
minHeight: 32,
|
|
319
|
+
maxHeight: 120,
|
|
320
|
+
overflowY: 'auto',
|
|
321
|
+
fontSize: 14,
|
|
322
|
+
lineHeight: '1.5',
|
|
323
|
+
padding: '2px 0',
|
|
324
|
+
} }), _jsx(SyncPlugin, { value: value, onChange: onChange }), _jsx(ReadOnlyPlugin, { readOnly: readOnly || disabled }), _jsx(EnterSubmitPlugin, { onSubmit: onSubmit, disabled: disabled, readOnly: readOnly }), _jsx(AutoFocusPlugin, { autoFocus: autoFocus, focusSignal: focusSignal }), _jsx(CommandPlugin, { commands: PROMPT_COMMANDS }), mentionableAgents?.length ? (_jsx(AgentMentionPlugin, { agents: mentionableAgents })) : null, _jsx(HistoryPlugin, { onHistory: onHistory, disabled: disabled, readOnly: readOnly })] }) }));
|
|
128
325
|
}
|
|
129
326
|
export default InputPromptLexical;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* InputPromptText — Plain-text input variant for InputPrompt.
|
|
3
3
|
*
|
|
4
|
-
* Auto-resizing textarea with Enter-to-send and Shift+Enter for newline
|
|
4
|
+
* Auto-resizing textarea with Enter-to-send and Shift+Enter for newline,
|
|
5
|
+
* and the arrow keys through the prompt history from the text's edges.
|
|
5
6
|
*
|
|
6
7
|
* @module chat/prompt/InputPromptText
|
|
7
8
|
*/
|
|
8
9
|
import { type Ref } from 'react';
|
|
10
|
+
import type { HistoryDirection } from './promptHistory';
|
|
9
11
|
export interface InputPromptTextProps {
|
|
10
12
|
/** Current input value */
|
|
11
13
|
value: string;
|
|
@@ -19,8 +21,14 @@ export interface InputPromptTextProps {
|
|
|
19
21
|
readOnly?: boolean;
|
|
20
22
|
/** Callback when the user presses Enter (without Shift) */
|
|
21
23
|
onSubmit?: () => void;
|
|
24
|
+
/**
|
|
25
|
+
* Up or down through the prompt history, asked when the caret is on the
|
|
26
|
+
* first or last line. Answers whether it had somewhere to go; when it did
|
|
27
|
+
* not, the key moves the caret as it normally would.
|
|
28
|
+
*/
|
|
29
|
+
onHistory?: (direction: HistoryDirection) => boolean;
|
|
22
30
|
/** Ref forwarded to the underlying textarea */
|
|
23
31
|
inputRef?: Ref<HTMLTextAreaElement>;
|
|
24
32
|
}
|
|
25
|
-
export declare function InputPromptText({ value, onChange, placeholder, disabled, readOnly, onSubmit, inputRef, }: InputPromptTextProps): import("react
|
|
33
|
+
export declare function InputPromptText({ value, onChange, placeholder, disabled, readOnly, onSubmit, onHistory, inputRef, }: InputPromptTextProps): import("react").JSX.Element;
|
|
26
34
|
export default InputPromptText;
|
|
@@ -6,14 +6,15 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
6
6
|
/**
|
|
7
7
|
* InputPromptText — Plain-text input variant for InputPrompt.
|
|
8
8
|
*
|
|
9
|
-
* Auto-resizing textarea with Enter-to-send and Shift+Enter for newline
|
|
9
|
+
* Auto-resizing textarea with Enter-to-send and Shift+Enter for newline,
|
|
10
|
+
* and the arrow keys through the prompt history from the text's edges.
|
|
10
11
|
*
|
|
11
12
|
* @module chat/prompt/InputPromptText
|
|
12
13
|
*/
|
|
13
14
|
import { useCallback, useEffect, } from 'react';
|
|
14
15
|
import { Textarea } from '@primer/react';
|
|
15
16
|
import { Box } from '@datalayer/primer-addons';
|
|
16
|
-
export function InputPromptText({ value, onChange, placeholder = 'Ask anything…', disabled = false, readOnly = false, onSubmit, inputRef, }) {
|
|
17
|
+
export function InputPromptText({ value, onChange, placeholder = 'Ask anything…', disabled = false, readOnly = false, onSubmit, onHistory, inputRef, }) {
|
|
17
18
|
// Auto-resize
|
|
18
19
|
const adjustHeight = useCallback(() => {
|
|
19
20
|
const el = inputRef && 'current' in inputRef
|
|
@@ -39,11 +40,42 @@ export function InputPromptText({ value, onChange, placeholder = 'Ask anything
|
|
|
39
40
|
if (e.key === 'Enter' && !e.shiftKey) {
|
|
40
41
|
e.preventDefault();
|
|
41
42
|
onSubmit?.();
|
|
43
|
+
return;
|
|
42
44
|
}
|
|
43
|
-
|
|
45
|
+
/*
|
|
46
|
+
* The arrow keys walk the history, but only from the edge of the text:
|
|
47
|
+
* up from the first line, down from the last. Anywhere else they move
|
|
48
|
+
* the caret, as in any editor — somebody on the third line of a long
|
|
49
|
+
* prompt pressing up wants the second line, not last week's question.
|
|
50
|
+
* A modifier means something else is being asked for.
|
|
51
|
+
*/
|
|
52
|
+
if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') &&
|
|
53
|
+
onHistory &&
|
|
54
|
+
!e.shiftKey &&
|
|
55
|
+
!e.altKey &&
|
|
56
|
+
!e.metaKey &&
|
|
57
|
+
!e.ctrlKey) {
|
|
58
|
+
const el = e.currentTarget;
|
|
59
|
+
const direction = e.key === 'ArrowUp' ? 'up' : 'down';
|
|
60
|
+
const atEdge = direction === 'up'
|
|
61
|
+
? !el.value.slice(0, el.selectionStart).includes('\n')
|
|
62
|
+
: !el.value.slice(el.selectionEnd).includes('\n');
|
|
63
|
+
if (atEdge && onHistory(direction)) {
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}, [onSubmit, onHistory]);
|
|
44
68
|
return (_jsx(Box, { sx: { px: 2, py: 1 }, children: _jsx(Textarea, { ref: inputRef, value: value, onChange: e => onChange(e.target.value), onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled, readOnly: readOnly, sx: {
|
|
45
69
|
width: '100%',
|
|
46
70
|
resize: 'none',
|
|
71
|
+
// Greyed while it cannot be typed in, so the state is legible
|
|
72
|
+
// without trying it. Primer's `disabled` textarea keeps the
|
|
73
|
+
// author's colour, and `!important` is needed for the same reason
|
|
74
|
+
// the border rules below need it.
|
|
75
|
+
'& textarea:disabled, & textarea[readonly]': {
|
|
76
|
+
color: 'fg.subtle !important',
|
|
77
|
+
cursor: 'not-allowed',
|
|
78
|
+
},
|
|
47
79
|
minHeight: '40px',
|
|
48
80
|
maxHeight: '120px',
|
|
49
81
|
overflow: 'hidden',
|