@datalayer/agent-runtimes 1.0.29 → 1.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/AgentDocument.js +5 -22
- package/lib/AgentNode.d.ts +1 -1
- package/lib/AgentNode.js +193 -23
- package/lib/AgentNotebook.js +1 -1
- package/lib/App.d.ts +1 -1
- package/lib/AppExamples2.d.ts +1 -1
- package/lib/agent-node/AgentNodeGallery.d.ts +14 -1
- package/lib/agent-node/AgentNodeGallery.js +19 -15
- package/lib/agent-node/themeStore.js +7 -6
- package/lib/agents/AgentDetails.d.ts +8 -2
- package/lib/agents/AgentDetails.js +41 -11
- package/lib/agents/AgentRuntimeChat.d.ts +3 -3
- package/lib/agents/AgentRuntimeChat.js +15 -15
- package/lib/api/agents.d.ts +10 -10
- package/lib/api/agents.js +15 -15
- package/lib/api/checkpoints.d.ts +40 -0
- package/lib/api/checkpoints.js +75 -0
- package/lib/api/index.d.ts +1 -0
- package/lib/api/index.js +2 -1
- package/lib/api/notifications.d.ts +21 -6
- package/lib/api/notifications.js +32 -14
- package/lib/api/runtimes/environments.d.ts +385 -4
- package/lib/api/runtimes/environments.js +610 -9
- package/lib/api/runtimes/runtimes.d.ts +19 -19
- package/lib/api/runtimes/runtimes.js +47 -46
- package/lib/api/spacer/notebooks.js +1 -1
- package/lib/chat/Chat.d.ts +16 -4
- package/lib/chat/Chat.js +18 -5
- package/lib/chat/ChatFloating.d.ts +13 -2
- package/lib/chat/ChatFloating.js +192 -117
- package/lib/chat/ChatInline.d.ts +15 -0
- package/lib/chat/ChatInline.js +0 -18
- package/lib/chat/ChatPopupStandalone.d.ts +1 -1
- package/lib/chat/ChatSidebar.d.ts +14 -2
- package/lib/chat/ChatSidebar.js +1 -1
- package/lib/chat/ChatStandalone.d.ts +1 -1
- package/lib/chat/EphemeralSurfaceControl.d.ts +30 -0
- package/lib/chat/EphemeralSurfaceControl.js +55 -0
- package/lib/chat/base/ChatAvailability.d.ts +34 -0
- package/lib/chat/base/ChatAvailability.js +18 -0
- package/lib/chat/base/ChatBase.d.ts +2 -1
- package/lib/chat/base/ChatBase.js +657 -28
- package/lib/chat/display/EmptyState.d.ts +15 -1
- package/lib/chat/display/EmptyState.js +78 -12
- package/lib/chat/display/FloatingBrandButton.d.ts +1 -1
- package/lib/chat/display/PoweredByTag.d.ts +1 -1
- package/lib/chat/display/groupSuggestions.d.ts +21 -0
- package/lib/chat/display/groupSuggestions.js +18 -0
- package/lib/chat/document/EphemeralDocument.d.ts +70 -6
- package/lib/chat/document/EphemeralDocument.js +154 -52
- package/lib/chat/header/ChatHeader.d.ts +1 -1
- package/lib/chat/header/ChatHeaderBase.d.ts +10 -1
- package/lib/chat/header/ChatHeaderBase.js +67 -96
- package/lib/chat/index.d.ts +4 -1
- package/lib/chat/index.js +8 -1
- package/lib/chat/indicators/McpStatusIndicator.d.ts +1 -1
- package/lib/chat/indicators/SandboxStatusIndicator.d.ts +1 -1
- package/lib/chat/indicators/SandboxStatusIndicator.js +1 -1
- package/lib/chat/indicators/SkillsStatusIndicator.d.ts +1 -1
- package/lib/chat/messages/ChatMessageList.d.ts +22 -1
- package/lib/chat/messages/ChatMessageList.js +370 -166
- package/lib/chat/messages/ChatMessages.d.ts +1 -1
- package/lib/chat/messages/NotebookToolSurfaces.d.ts +68 -0
- package/lib/chat/messages/NotebookToolSurfaces.js +302 -0
- package/lib/chat/messages/TurnFooter.d.ts +42 -0
- package/lib/chat/messages/TurnFooter.js +75 -0
- package/lib/chat/messages/assistantMarkdown.d.ts +22 -0
- package/lib/chat/messages/assistantMarkdown.js +56 -0
- package/lib/chat/notebook/EphemeralNotebook.d.ts +67 -6
- package/lib/chat/notebook/EphemeralNotebook.js +194 -61
- package/lib/chat/parts/DynamicToolPart.d.ts +1 -1
- package/lib/chat/parts/MessagePart.d.ts +1 -1
- package/lib/chat/parts/ReasoningPart.d.ts +8 -1
- package/lib/chat/parts/TextPart.d.ts +1 -1
- package/lib/chat/parts/ToolPart.d.ts +8 -1
- package/lib/chat/prompt/FloatingCard.d.ts +26 -0
- package/lib/chat/prompt/FloatingCard.js +80 -0
- package/lib/chat/prompt/InputPrompt.d.ts +206 -53
- package/lib/chat/prompt/InputPrompt.js +161 -80
- package/lib/chat/prompt/InputPromptBase.d.ts +112 -0
- package/lib/chat/prompt/InputPromptBase.js +225 -0
- package/lib/chat/prompt/InputPromptLexical.d.ts +18 -1
- package/lib/chat/prompt/InputPromptLexical.js +227 -30
- package/lib/chat/prompt/InputPromptText.d.ts +10 -2
- package/lib/chat/prompt/InputPromptText.js +35 -3
- package/lib/chat/prompt/footer/BelowPromptFooter.d.ts +25 -0
- package/lib/chat/prompt/footer/BelowPromptFooter.js +12 -0
- package/lib/chat/prompt/footer/InPromptFooter.d.ts +35 -0
- package/lib/chat/prompt/footer/InPromptFooter.js +16 -0
- package/lib/chat/prompt/footer/index.d.ts +7 -0
- package/lib/chat/prompt/footer/index.js +11 -0
- package/lib/chat/prompt/header/BelowPromptHeader.d.ts +23 -0
- package/lib/chat/prompt/header/BelowPromptHeader.js +12 -0
- package/lib/chat/prompt/header/InPromptHeader.d.ts +31 -0
- package/lib/chat/prompt/header/InPromptHeader.js +14 -0
- package/lib/chat/prompt/header/index.d.ts +7 -0
- package/lib/chat/prompt/header/index.js +11 -0
- package/lib/chat/prompt/index.d.ts +8 -4
- package/lib/chat/prompt/index.js +15 -3
- package/lib/chat/prompt/menus/AgentsMenu.d.ts +14 -0
- package/lib/chat/prompt/menus/AgentsMenu.js +42 -0
- package/lib/chat/prompt/menus/InlineAgentsMenu.d.ts +22 -0
- package/lib/chat/prompt/menus/InlineAgentsMenu.js +24 -0
- package/lib/chat/prompt/menus/ModelSelector.d.ts +7 -0
- package/lib/chat/prompt/menus/ModelSelector.js +27 -0
- package/lib/chat/prompt/menus/SkillsMenu.d.ts +10 -0
- package/lib/chat/prompt/menus/SkillsMenu.js +75 -0
- package/lib/chat/prompt/menus/SuggestionsMenu.d.ts +13 -0
- package/lib/chat/prompt/menus/SuggestionsMenu.js +31 -0
- package/lib/chat/prompt/menus/ToolsMenu.d.ts +13 -0
- package/lib/chat/prompt/menus/ToolsMenu.js +103 -0
- package/lib/chat/prompt/menus/index.d.ts +15 -0
- package/lib/chat/prompt/menus/index.js +19 -0
- package/lib/chat/prompt/plugins/AgentMentionPlugin.d.ts +54 -0
- package/lib/chat/prompt/plugins/AgentMentionPlugin.js +370 -0
- package/lib/chat/prompt/plugins/CommandPlugin.d.ts +52 -0
- package/lib/chat/prompt/plugins/CommandPlugin.js +359 -0
- package/lib/chat/prompt/plugins/MentionChip.d.ts +15 -0
- package/lib/chat/prompt/plugins/MentionChip.js +24 -0
- package/lib/chat/prompt/plugins/MentionNode.d.ts +66 -0
- package/lib/chat/prompt/plugins/MentionNode.js +77 -0
- package/lib/chat/prompt/promptHistory.d.ts +52 -0
- package/lib/chat/prompt/promptHistory.js +123 -0
- package/lib/chat/prompt/stack.d.ts +81 -0
- package/lib/chat/prompt/stack.js +41 -0
- package/lib/chat/prompt/useTypingPlaceholder.d.ts +52 -0
- package/lib/chat/prompt/useTypingPlaceholder.js +180 -0
- package/lib/chat/tools/A2AAgentDialog.d.ts +60 -0
- package/lib/chat/tools/A2AAgentDialog.js +265 -0
- package/lib/chat/tools/ToolApprovalBanner.d.ts +1 -1
- package/lib/chat/tools/ToolApprovalDialog.d.ts +1 -1
- package/lib/chat/tools/ToolCallDisplay.d.ts +8 -1
- package/lib/chat/tools/index.d.ts +1 -0
- package/lib/chat/tools/index.js +1 -0
- package/lib/chat/usage/ContextPie.d.ts +17 -0
- package/lib/chat/usage/{TokenUsageBar.js → ContextPie.js} +20 -14
- package/lib/chat/useViewportDrag.d.ts +11 -0
- package/lib/chat/useViewportDrag.js +61 -0
- package/lib/chat/viewModes.d.ts +51 -0
- package/lib/chat/viewModes.js +57 -0
- package/lib/client/AgentRuntimesClient.d.ts +10 -9
- package/lib/client/AgentRuntimesClient.js +1 -1
- package/lib/client/AgentRuntimesClientContext.d.ts +1 -0
- package/lib/client/AgentsMixin.d.ts +12 -12
- package/lib/client/AgentsMixin.js +31 -31
- package/lib/client/IAgentRuntimesClient.d.ts +10 -10
- package/lib/client/SdkAgentRuntimesClient.d.ts +10 -10
- package/lib/client/SdkAgentRuntimesClient.js +10 -10
- package/lib/client/mixins/RuntimesMixin.d.ts +37 -10
- package/lib/client/mixins/RuntimesMixin.js +54 -21
- package/lib/components/a2ui/A2uiSurfaceComposed.d.ts +1 -1
- package/lib/components/agents/AgentSummary.d.ts +13 -0
- package/lib/components/agents/AgentSummary.js +21 -4
- package/lib/components/cards/NotificationEventCard.d.ts +1 -1
- package/lib/components/cards/OutputCard.d.ts +1 -1
- package/lib/components/cards/ToolApprovalCard.d.ts +2 -2
- package/lib/components/cards/ToolApprovalCard.js +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariables.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariables.js +0 -4
- package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxCellVariablesDialog.js +0 -4
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.d.ts +35 -0
- package/lib/components/code-sandboxes/CodeSandboxEnvironmentSelect.js +27 -29
- package/lib/components/code-sandboxes/CodeSandboxLauncher.d.ts +1 -0
- package/lib/components/code-sandboxes/CodeSandboxLauncher.js +42 -19
- 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 +86 -0
- package/lib/components/code-sandboxes/codeSandboxEnvironments.js +147 -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/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 +894 -0
- package/lib/loop/core/index.js +264 -0
- package/lib/loop/core/promptStore.d.ts +44 -0
- package/lib/loop/core/promptStore.js +63 -0
- package/lib/loop/core/surfaceRequests.d.ts +33 -0
- package/lib/loop/core/surfaceRequests.js +29 -0
- package/lib/loop/core/toolbar.d.ts +28 -0
- package/lib/loop/core/toolbar.js +59 -0
- package/lib/loop/embed/LoopEmbed.d.ts +57 -0
- package/lib/loop/embed/LoopEmbed.js +118 -0
- package/lib/loop/extensions.d.ts +10 -0
- package/lib/loop/extensions.js +49 -0
- package/lib/loop/index.d.ts +68 -0
- package/lib/loop/index.js +87 -0
- package/lib/loop/plugins/a2a-sidebar/A2ASidebar.d.ts +48 -0
- package/lib/loop/plugins/a2a-sidebar/A2ASidebar.js +190 -0
- package/lib/loop/plugins/a2a-sidebar/index.d.ts +5 -0
- package/lib/loop/plugins/a2a-sidebar/index.js +39 -0
- package/lib/loop/plugins/a2ui/A2uiView.d.ts +12 -0
- package/lib/loop/plugins/a2ui/A2uiView.js +97 -0
- package/lib/loop/plugins/a2ui/index.d.ts +3 -0
- package/lib/loop/plugins/a2ui/index.js +50 -0
- package/lib/loop/plugins/a2ui-scene/index.d.ts +36 -0
- package/lib/loop/plugins/a2ui-scene/index.js +28 -0
- package/lib/loop/plugins/agent-a2a/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2a/index.js +26 -0
- package/lib/loop/plugins/agent-a2ui/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2ui/index.js +42 -0
- package/lib/loop/plugins/agent-a2ui-jupyter-output/index.d.ts +3 -0
- package/lib/loop/plugins/agent-a2ui-jupyter-output/index.js +53 -0
- package/lib/loop/plugins/agent-capacity/index.d.ts +39 -0
- package/lib/loop/plugins/agent-capacity/index.js +52 -0
- package/lib/loop/plugins/agent-checkpoints/index.d.ts +3 -0
- package/lib/loop/plugins/agent-checkpoints/index.js +26 -0
- package/lib/loop/plugins/agent-code-sandbox/index.d.ts +3 -0
- package/lib/loop/plugins/agent-code-sandbox/index.js +24 -0
- package/lib/loop/plugins/agent-code-sandboxes/index.d.ts +13 -0
- package/lib/loop/plugins/agent-code-sandboxes/index.js +85 -0
- package/lib/loop/plugins/agent-codemode/index.d.ts +5 -0
- package/lib/loop/plugins/agent-codemode/index.js +41 -0
- package/lib/loop/plugins/agent-compaction/index.d.ts +10 -0
- package/lib/loop/plugins/agent-compaction/index.js +34 -0
- package/lib/loop/plugins/agent-evals/index.d.ts +3 -0
- package/lib/loop/plugins/agent-evals/index.js +25 -0
- package/lib/loop/plugins/agent-guardrails/index.d.ts +3 -0
- package/lib/loop/plugins/agent-guardrails/index.js +25 -0
- package/lib/loop/plugins/agent-hooks/index.d.ts +3 -0
- package/lib/loop/plugins/agent-hooks/index.js +28 -0
- package/lib/loop/plugins/agent-inference/index.d.ts +7 -0
- package/lib/loop/plugins/agent-inference/index.js +29 -0
- package/lib/loop/plugins/agent-mcp/index.d.ts +3 -0
- package/lib/loop/plugins/agent-mcp/index.js +25 -0
- package/lib/loop/plugins/agent-memory/index.d.ts +3 -0
- package/lib/loop/plugins/agent-memory/index.js +25 -0
- package/lib/loop/plugins/agent-monitoring/index.d.ts +3 -0
- package/lib/loop/plugins/agent-monitoring/index.js +25 -0
- package/lib/loop/plugins/agent-notifications/index.d.ts +3 -0
- package/lib/loop/plugins/agent-notifications/index.js +25 -0
- package/lib/loop/plugins/agent-otel/index.d.ts +3 -0
- package/lib/loop/plugins/agent-otel/index.js +25 -0
- package/lib/loop/plugins/agent-outputs/index.d.ts +3 -0
- package/lib/loop/plugins/agent-outputs/index.js +25 -0
- package/lib/loop/plugins/agent-parameters/index.d.ts +3 -0
- package/lib/loop/plugins/agent-parameters/index.js +25 -0
- package/lib/loop/plugins/agent-skills/index.d.ts +3 -0
- package/lib/loop/plugins/agent-skills/index.js +25 -0
- package/lib/loop/plugins/agent-subagents/index.d.ts +3 -0
- package/lib/loop/plugins/agent-subagents/index.js +25 -0
- package/lib/loop/plugins/agent-tool-approvals/index.d.ts +11 -0
- package/lib/loop/plugins/agent-tool-approvals/index.js +38 -0
- package/lib/loop/plugins/agent-triggers/index.d.ts +3 -0
- package/lib/loop/plugins/agent-triggers/index.js +26 -0
- package/lib/loop/plugins/agents/AgentSummaryPanel.d.ts +20 -0
- package/lib/loop/plugins/agents/AgentSummaryPanel.js +50 -0
- package/lib/loop/plugins/agents/AnonymousKeyBadge.d.ts +35 -0
- package/lib/loop/plugins/agents/AnonymousKeyBadge.js +53 -0
- package/lib/loop/plugins/agents/DatalayerAgentBridge.d.ts +24 -0
- package/lib/loop/plugins/agents/DatalayerAgentBridge.js +102 -0
- package/lib/loop/plugins/agents/DatalayerAgentMount.d.ts +18 -0
- package/lib/loop/plugins/agents/DatalayerAgentMount.js +12 -0
- package/lib/loop/plugins/agents/SandboxSelector.d.ts +18 -0
- package/lib/loop/plugins/agents/SandboxSelector.js +99 -0
- package/lib/loop/plugins/agents/SandboxStatusBridge.d.ts +19 -0
- package/lib/loop/plugins/agents/SandboxStatusBridge.js +23 -0
- package/lib/loop/plugins/agents/SandboxView.d.ts +11 -0
- package/lib/loop/plugins/agents/SandboxView.js +43 -0
- package/lib/loop/plugins/agents/TeamMemberPicker.d.ts +17 -0
- package/lib/loop/plugins/agents/TeamMemberPicker.js +60 -0
- package/lib/loop/plugins/agents/agentIcons.d.ts +23 -0
- package/lib/loop/plugins/agents/agentIcons.js +88 -0
- package/lib/loop/plugins/agents/browserService.d.ts +50 -0
- package/lib/loop/plugins/agents/browserService.js +233 -0
- package/lib/loop/plugins/agents/index.d.ts +13 -0
- package/lib/loop/plugins/agents/index.js +17 -0
- package/lib/loop/plugins/agents/plugin.d.ts +91 -0
- package/lib/loop/plugins/agents/plugin.js +201 -0
- package/lib/loop/plugins/agents/service.d.ts +99 -0
- package/lib/loop/plugins/agents/service.js +167 -0
- package/lib/loop/plugins/agents/specSubagents.d.ts +18 -0
- package/lib/loop/plugins/agents/specSubagents.js +33 -0
- package/lib/loop/plugins/agents/switchable.d.ts +107 -0
- package/lib/loop/plugins/agents/switchable.js +405 -0
- package/lib/loop/plugins/agents/team.d.ts +87 -0
- package/lib/loop/plugins/agents/team.js +143 -0
- package/lib/loop/plugins/agents/useSandboxService.d.ts +11 -0
- package/lib/loop/plugins/agents/useSandboxService.js +36 -0
- package/lib/loop/plugins/agents/useTeamSelection.d.ts +10 -0
- package/lib/loop/plugins/agents/useTeamSelection.js +27 -0
- package/lib/loop/plugins/agentspecs/AgentspecPicker.d.ts +15 -0
- package/lib/loop/plugins/agentspecs/AgentspecPicker.js +90 -0
- package/lib/loop/plugins/agentspecs/index.d.ts +6 -0
- package/lib/loop/plugins/agentspecs/index.js +63 -0
- package/lib/loop/plugins/chat/ChatView.d.ts +20 -0
- package/lib/loop/plugins/chat/ChatView.js +1670 -0
- package/lib/loop/plugins/chat/chatViewTools.d.ts +41 -0
- package/lib/loop/plugins/chat/chatViewTools.js +92 -0
- package/lib/loop/plugins/chat/index.d.ts +111 -0
- package/lib/loop/plugins/chat/index.js +143 -0
- package/lib/loop/plugins/chat/turnState.d.ts +41 -0
- package/lib/loop/plugins/chat/turnState.js +90 -0
- package/lib/loop/plugins/chat-extras/index.d.ts +14 -0
- package/lib/loop/plugins/chat-extras/index.js +51 -0
- package/lib/loop/plugins/chat-header/HeaderView.d.ts +13 -0
- package/lib/loop/plugins/chat-header/HeaderView.js +6 -0
- package/lib/loop/plugins/chat-header/index.d.ts +3 -0
- package/lib/loop/plugins/chat-header/index.js +21 -0
- package/lib/loop/plugins/chat-view/index.d.ts +10 -0
- package/lib/loop/plugins/chat-view/index.js +29 -0
- package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.d.ts +27 -0
- package/lib/loop/plugins/checkpoints-sidebar/CheckpointsSidebar.js +174 -0
- package/lib/loop/plugins/checkpoints-sidebar/index.d.ts +5 -0
- package/lib/loop/plugins/checkpoints-sidebar/index.js +39 -0
- package/lib/loop/plugins/commands/index.d.ts +20 -0
- package/lib/loop/plugins/commands/index.js +148 -0
- package/lib/loop/plugins/decks/DeckSurface.d.ts +10 -0
- package/lib/loop/plugins/decks/DeckSurface.js +6 -0
- package/lib/loop/plugins/decks/DecksMenu.d.ts +11 -0
- package/lib/loop/plugins/decks/DecksMenu.js +42 -0
- package/lib/loop/plugins/decks/index.d.ts +19 -0
- package/lib/loop/plugins/decks/index.js +133 -0
- package/lib/loop/plugins/decks/surface.d.ts +7 -0
- package/lib/loop/plugins/decks/surface.js +11 -0
- package/lib/loop/plugins/document/DocumentView.d.ts +12 -0
- package/lib/loop/plugins/document/DocumentView.js +68 -0
- package/lib/loop/plugins/document/index.d.ts +3 -0
- package/lib/loop/plugins/document/index.js +86 -0
- package/lib/loop/plugins/document/openingDocument.d.ts +28 -0
- package/lib/loop/plugins/document/openingDocument.js +122 -0
- package/lib/loop/plugins/document-toolbar/SandboxStatusItem.d.ts +16 -0
- package/lib/loop/plugins/document-toolbar/SandboxStatusItem.js +31 -0
- package/lib/loop/plugins/document-toolbar/index.d.ts +4 -0
- package/lib/loop/plugins/document-toolbar/index.js +35 -0
- package/lib/loop/plugins/document-toolbar/names.d.ts +6 -0
- package/lib/loop/plugins/document-toolbar/names.js +10 -0
- package/lib/loop/plugins/document-toolbar/plugin.d.ts +2 -0
- package/lib/loop/plugins/document-toolbar/plugin.js +38 -0
- package/lib/loop/plugins/document-view/index.d.ts +10 -0
- package/lib/loop/plugins/document-view/index.js +28 -0
- package/lib/loop/plugins/graph/GraphToggle.d.ts +17 -0
- package/lib/loop/plugins/graph/GraphToggle.js +22 -0
- package/lib/loop/plugins/graph/GraphView.d.ts +16 -0
- package/lib/loop/plugins/graph/GraphView.js +6 -0
- package/lib/loop/plugins/graph/index.d.ts +5 -0
- package/lib/loop/plugins/graph/index.js +80 -0
- package/lib/loop/plugins/graph/viewType.d.ts +10 -0
- package/lib/loop/plugins/graph/viewType.js +14 -0
- package/lib/loop/plugins/input-prompt/ComposerView.d.ts +15 -0
- package/lib/loop/plugins/input-prompt/ComposerView.js +25 -0
- package/lib/loop/plugins/input-prompt/index.d.ts +25 -0
- package/lib/loop/plugins/input-prompt/index.js +26 -0
- package/lib/loop/plugins/models/index.d.ts +3 -0
- package/lib/loop/plugins/models/index.js +49 -0
- package/lib/loop/plugins/notebook/NotebookView.d.ts +9 -0
- package/lib/loop/plugins/notebook/NotebookView.js +189 -0
- package/lib/loop/plugins/notebook/index.d.ts +3 -0
- package/lib/loop/plugins/notebook/index.js +91 -0
- package/lib/loop/plugins/notebook/openingNotebook.d.ts +72 -0
- package/lib/loop/plugins/notebook/openingNotebook.js +90 -0
- package/lib/loop/plugins/notebook-toolbar/index.d.ts +4 -0
- package/lib/loop/plugins/notebook-toolbar/index.js +45 -0
- package/lib/loop/plugins/notebook-toolbar/items.d.ts +10 -0
- package/lib/loop/plugins/notebook-toolbar/items.js +45 -0
- package/lib/loop/plugins/notebook-toolbar/names.d.ts +9 -0
- package/lib/loop/plugins/notebook-toolbar/names.js +13 -0
- package/lib/loop/plugins/notebook-toolbar/plugin.d.ts +2 -0
- package/lib/loop/plugins/notebook-toolbar/plugin.js +24 -0
- package/lib/loop/plugins/notebook-view/index.d.ts +10 -0
- package/lib/loop/plugins/notebook-view/index.js +30 -0
- package/lib/loop/plugins/page-layout/TurnPanel.d.ts +25 -0
- package/lib/loop/plugins/page-layout/TurnPanel.js +126 -0
- package/lib/loop/plugins/page-layout/index.d.ts +35 -0
- package/lib/loop/plugins/page-layout/index.js +80 -0
- package/lib/loop/plugins/plugins-panel/index.d.ts +14 -0
- package/lib/loop/plugins/plugins-panel/index.js +74 -0
- package/lib/loop/plugins/prompt/NewChatAction.d.ts +19 -0
- package/lib/loop/plugins/prompt/NewChatAction.js +10 -0
- package/lib/loop/plugins/prompt/index.d.ts +11 -0
- package/lib/loop/plugins/prompt/index.js +73 -0
- package/lib/loop/plugins/shell/editorChoice.d.ts +31 -0
- package/lib/loop/plugins/shell/editorChoice.js +58 -0
- package/lib/loop/plugins/shell/index.d.ts +47 -0
- package/lib/loop/plugins/shell/index.js +142 -0
- package/lib/loop/plugins/shell/useEditorPreviews.d.ts +32 -0
- package/lib/loop/plugins/shell/useEditorPreviews.js +217 -0
- package/lib/loop/plugins/subagent-activity/SubagentPulse.d.ts +16 -0
- package/lib/loop/plugins/subagent-activity/SubagentPulse.js +45 -0
- package/lib/loop/plugins/subagent-activity/index.d.ts +12 -0
- package/lib/loop/plugins/subagent-activity/index.js +42 -0
- package/lib/loop/plugins/view-switch/index.d.ts +46 -0
- package/lib/loop/plugins/view-switch/index.js +68 -0
- package/lib/loop/plugins/window-frame/WindowFrame.d.ts +48 -0
- package/lib/loop/plugins/window-frame/WindowFrame.js +63 -0
- package/lib/loop/plugins/window-frame/index.d.ts +6 -0
- package/lib/loop/plugins/window-frame/index.js +79 -0
- package/lib/loop/plugins/window-frame/slots.d.ts +26 -0
- package/lib/loop/plugins/window-frame/slots.js +30 -0
- package/lib/loop/presets.d.ts +167 -0
- package/lib/loop/presets.js +139 -0
- package/lib/loop/shell/LoopWorkspace.d.ts +109 -0
- package/lib/loop/shell/LoopWorkspace.js +231 -0
- package/lib/loop/shell/PluginToggles.d.ts +21 -0
- package/lib/loop/shell/PluginToggles.js +41 -0
- package/lib/loop/shell/ViewSwitcher.d.ts +24 -0
- package/lib/loop/shell/ViewSwitcher.js +43 -0
- package/lib/loop/shell/WorkspaceFullScreenAction.d.ts +25 -0
- package/lib/loop/shell/WorkspaceFullScreenAction.js +24 -0
- package/lib/loop/shell/index.d.ts +10 -0
- package/lib/loop/shell/index.js +14 -0
- package/lib/loop/shell/useWorkspaceFullScreen.d.ts +93 -0
- package/lib/loop/shell/useWorkspaceFullScreen.js +167 -0
- package/lib/loop-example-main.d.ts +1 -0
- package/lib/loop-example-main.js +42 -0
- package/lib/loop-main.d.ts +1 -0
- package/lib/loop-main.js +138 -0
- package/lib/mcp/McpServerManager.d.ts +1 -1
- package/lib/models/CodeSandboxSnapshotDTO.d.ts +1 -1
- package/lib/models/CodeSandboxVariant.d.ts +13 -5
- package/lib/models/CodeSandboxVariant.js +17 -5
- package/lib/models/Content.d.ts +26 -0
- package/lib/models/Environment.d.ts +561 -5
- package/lib/models/Environment.js +12 -1
- package/lib/models/EnvironmentDTO.d.ts +24 -6
- package/lib/models/EnvironmentDTO.js +13 -2
- package/lib/models/Exercise.d.ts +0 -2
- package/lib/models/Library.d.ts +0 -2
- package/lib/models/Notebook.d.ts +0 -2
- package/lib/models/ProjectDTO.d.ts +2 -2
- package/lib/models/ProjectDTO.js +4 -4
- package/lib/models/Runtime.d.ts +11 -11
- package/lib/models/RuntimeDTO.d.ts +16 -7
- package/lib/models/RuntimeDTO.js +9 -9
- package/lib/models/Space.d.ts +10 -0
- package/lib/models/Space.js +1 -1
- package/lib/models/SpaceDTO.d.ts +1 -1
- package/lib/models/SpaceItem.d.ts +1 -2
- package/lib/models/environments.generated.d.ts +113 -0
- package/lib/models/environments.generated.js +13 -0
- package/lib/models/index.d.ts +0 -1
- package/lib/models/index.js +0 -1
- package/lib/protocols/A2AAdapter.d.ts +39 -6
- package/lib/protocols/A2AAdapter.js +180 -11
- package/lib/protocols/ACPAdapter.js +40 -37
- package/lib/protocols/AGUIAdapter.d.ts +14 -0
- package/lib/protocols/AGUIAdapter.js +34 -9
- package/lib/protocols/BrowserAgentAdapter.d.ts +117 -0
- package/lib/protocols/BrowserAgentAdapter.js +310 -0
- package/lib/protocols/VercelAIAdapter.d.ts +10 -0
- package/lib/protocols/VercelAIAdapter.js +27 -7
- package/lib/protocols/index.d.ts +1 -0
- package/lib/protocols/index.js +1 -0
- package/lib/runtimes/actions.d.ts +3 -3
- package/lib/runtimes/actions.js +27 -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 +128 -112
- package/lib/specs/agents/agents.js +8024 -5052
- package/lib/specs/evals.js +9 -0
- package/lib/specs/frontendTools.d.ts +3 -0
- package/lib/specs/frontendTools.js +46 -3
- package/lib/specs/mcpServers.d.ts +1 -0
- package/lib/specs/mcpServers.js +25 -2
- package/lib/specs/models.d.ts +18 -0
- package/lib/specs/models.js +154 -0
- package/lib/specs/outputs.d.ts +2 -0
- package/lib/specs/outputs.js +22 -0
- package/lib/specs/personas.js +1 -1
- package/lib/specs/teams/teams.d.ts +2 -0
- package/lib/specs/teams/teams.js +628 -111
- package/lib/state/index.d.ts +1 -1
- package/lib/state/index.js +1 -1
- package/lib/state/substates/RuntimesState.d.ts +5 -5
- package/lib/state/substates/RuntimesState.js +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/{models/Dataset.js → tools/adapters/commands/index.js} +1 -1
- package/lib/tools/adapters/copilotkit/lexicalHooks.js +7 -3
- package/lib/tools/index.d.ts +1 -0
- package/lib/tools/index.js +1 -0
- package/lib/types/a2a.d.ts +15 -1
- package/lib/types/agents-lifecycle.d.ts +11 -6
- package/lib/types/agents.d.ts +31 -6
- package/lib/types/agentspecs.d.ts +120 -4
- package/lib/types/chat.d.ts +251 -3
- package/lib/types/checkpoints.d.ts +20 -0
- package/lib/types/config.d.ts +13 -1
- package/lib/types/connection.d.ts +1 -1
- package/lib/types/evals.d.ts +2 -0
- package/lib/types/messages.d.ts +60 -0
- package/lib/types/models.d.ts +26 -0
- package/lib/types/notifications.d.ts +15 -6
- package/lib/types/protocol.d.ts +7 -2
- package/lib/types/stream.d.ts +48 -3
- package/lib/types/stream.js +5 -0
- package/lib/types/teams.d.ts +102 -4
- package/lib/types/tool-approvals.d.ts +1 -1
- package/lib/types/tools.d.ts +8 -2
- package/lib/utils/utils.js +7 -1
- package/package.json +376 -361
- package/scripts/codegen/__pycache__/compose.cpython-313.pyc +0 -0
- package/scripts/codegen/__pycache__/versioning.cpython-313.pyc +0 -0
- package/scripts/codegen/compose.py +208 -0
- package/scripts/codegen/generate_agents.py +202 -31
- package/scripts/codegen/generate_evals.py +2 -0
- package/scripts/codegen/generate_frontend_tools.py +35 -6
- package/scripts/codegen/generate_models.py +40 -15
- package/scripts/codegen/generate_sandbox_agents.py +76 -62
- package/scripts/codegen/generate_teams.py +178 -4
- package/scripts/codegen/generate_tools.py +6 -4
- package/scripts/gen_workers.py +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
|
@@ -2,8 +2,78 @@
|
|
|
2
2
|
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
3
|
* Distributed under the terms of the Modified BSD License.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* A2A (Agent-to-Agent) protocol adapter using SSE transport.
|
|
7
|
+
*
|
|
8
|
+
* @module protocols/A2AAdapter
|
|
9
|
+
*/
|
|
10
|
+
import { ORCHESTRATION_EXTENSION_URI, ENVELOPE_KEY as DATALAYER_META_KEY, readUsageMeta, } from '@datalayer/agent-teams';
|
|
5
11
|
import { generateMessageId, createAssistantMessage } from '../types/messages';
|
|
6
12
|
import { BaseProtocolAdapter } from './BaseProtocolAdapter';
|
|
13
|
+
/**
|
|
14
|
+
* The header fasta2a-based workers (`agent-runtimes`'s own, and any other
|
|
15
|
+
* built on it) actually read to activate an extension for one request —
|
|
16
|
+
* confirmed from `fasta2a.extensions`, not assumed: comma-separated URIs,
|
|
17
|
+
* answered on the same header naming which of them the agent knows.
|
|
18
|
+
* Neither this codebase's own `configuration.requestedExtensions` (read by
|
|
19
|
+
* nothing server-side) nor the A2A SDK's `Message.extensions` field is what
|
|
20
|
+
* a `fasta2a` worker's `activated_extensions()` looks at — this header is.
|
|
21
|
+
*/
|
|
22
|
+
const A2A_EXTENSIONS_HEADER = 'A2A-Extensions';
|
|
23
|
+
const TERMINAL_TASK_STATES = new Set([
|
|
24
|
+
'completed',
|
|
25
|
+
'failed',
|
|
26
|
+
'canceled',
|
|
27
|
+
'rejected',
|
|
28
|
+
]);
|
|
29
|
+
/**
|
|
30
|
+
* `fasta2a` wraps every `message/send` result and every `message/stream`
|
|
31
|
+
* event in a named key — `{ task: Task }`, `{ statusUpdate: ... }`,
|
|
32
|
+
* `{ artifactUpdate: ... }`, `{ message: Message }` — instead of the bare,
|
|
33
|
+
* `kind`-discriminated object
|
|
34
|
+
* (`Task.kind: 'task'`, `TaskStatusUpdateEvent.kind: 'status-update'`, ...)
|
|
35
|
+
* the current A2A specification requires and this file was written
|
|
36
|
+
* against. Confirmed directly, not assumed: `fasta2a.schema.SendMessageResult`
|
|
37
|
+
* and `StreamResponse` are TypedDicts with those named optional fields, and
|
|
38
|
+
* neither `Task` nor `TaskStatusUpdateEvent` in that schema carries a
|
|
39
|
+
* `kind` field at all. `agent_runtimes`' own A2A route is the same
|
|
40
|
+
* `FastA2A`, so every production Datalayer A2A worker serves this shape —
|
|
41
|
+
* a spec-conformant client (this file, or a genuine `a2a-sdk`-based one)
|
|
42
|
+
* could not render a single reply without this normalizer.
|
|
43
|
+
*
|
|
44
|
+
* A worker built to the current spec (its `result` already carries
|
|
45
|
+
* `kind`) passes through unchanged — this only steps in for the shape
|
|
46
|
+
* `fasta2a` actually sends.
|
|
47
|
+
*
|
|
48
|
+
* `fasta2a`'s `TaskStatusUpdateEvent` also has no `final` field, which the
|
|
49
|
+
* spec has and this file's status-update handling gates on; inferred here
|
|
50
|
+
* from the status being one of the terminal states, since nothing else in
|
|
51
|
+
* the payload says so.
|
|
52
|
+
*/
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
54
|
+
function normalizeA2AResult(result) {
|
|
55
|
+
if (!result || typeof result !== 'object' || result.kind) {
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
if (result.task) {
|
|
59
|
+
return { ...result.task, kind: 'task' };
|
|
60
|
+
}
|
|
61
|
+
if (result.statusUpdate) {
|
|
62
|
+
const update = result.statusUpdate;
|
|
63
|
+
return {
|
|
64
|
+
...update,
|
|
65
|
+
kind: 'status-update',
|
|
66
|
+
final: update.final ?? TERMINAL_TASK_STATES.has(update.status?.state),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (result.artifactUpdate) {
|
|
70
|
+
return { ...result.artifactUpdate, kind: 'artifact-update' };
|
|
71
|
+
}
|
|
72
|
+
if (result.message) {
|
|
73
|
+
return { ...result.message, kind: 'message' };
|
|
74
|
+
}
|
|
75
|
+
return result;
|
|
76
|
+
}
|
|
7
77
|
/**
|
|
8
78
|
* A2A protocol adapter
|
|
9
79
|
* Uses JSON-RPC 2.0 with SSE streaming for responses
|
|
@@ -13,8 +83,29 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
13
83
|
protocolTransport = 'sse';
|
|
14
84
|
a2aConfig;
|
|
15
85
|
abortController = null;
|
|
86
|
+
/**
|
|
87
|
+
* Every in-flight request's abort controller, not just the newest.
|
|
88
|
+
*
|
|
89
|
+
* `abortController` is a single field that each request overwrites, and each
|
|
90
|
+
* request's `finally` used to clear it unconditionally — so a request that
|
|
91
|
+
* finished just after a newer one started would null the newer one's handle,
|
|
92
|
+
* and a subsequent stop had nothing left to abort. The stream carried on and
|
|
93
|
+
* the transcript went on typing itself after the reader had asked it not to.
|
|
94
|
+
*/
|
|
95
|
+
inFlight = new Set();
|
|
16
96
|
agentCard = null;
|
|
17
97
|
currentTaskId = null;
|
|
98
|
+
/**
|
|
99
|
+
* Whether the connected agent's card advertised the Datalayer
|
|
100
|
+
* orchestration extension (ORCHESTRATOR.md, O3-03). Set once, from
|
|
101
|
+
* `connect()`'s card fetch: neither side infers support from a
|
|
102
|
+
* successful message (the extension's own negotiation rule), so this is
|
|
103
|
+
* the one place that decides it, and every request either activates the
|
|
104
|
+
* extension by this or sends nothing extension-related at all — a worker
|
|
105
|
+
* that never advertised it sees a plain A2A client, unchanged from
|
|
106
|
+
* before this existed.
|
|
107
|
+
*/
|
|
108
|
+
orchestrationExtensionSupported = false;
|
|
18
109
|
constructor(config) {
|
|
19
110
|
super(config);
|
|
20
111
|
this.a2aConfig = {
|
|
@@ -28,9 +119,18 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
28
119
|
async connect() {
|
|
29
120
|
this.setConnectionState('connecting');
|
|
30
121
|
try {
|
|
31
|
-
// Fetch agent card from .well-known endpoint
|
|
122
|
+
// Fetch agent card from .well-known endpoint. The current A2A
|
|
123
|
+
// specification's path is `agent-card.json` — `fasta2a`'s FastA2A
|
|
124
|
+
// (and a2a-sdk's own A2ACardResolver default) serves only that,
|
|
125
|
+
// confirmed by reading FastA2A's own route registration; the plain
|
|
126
|
+
// `agent.json` this fetched before was an earlier draft's path, and
|
|
127
|
+
// fetching it here 404s against every real worker, silently, since
|
|
128
|
+
// a missing card is caught below and connect() still "succeeds" —
|
|
129
|
+
// found live, against agent_teams.a2a.reference_worker
|
|
130
|
+
// (ORCHESTRATOR.md O3-04), not assumed: `supportsOrchestrationExtension`
|
|
131
|
+
// stayed false against a worker whose card plainly advertised it.
|
|
32
132
|
const agentUrl = this.a2aConfig.agentUrl || this.a2aConfig.baseUrl;
|
|
33
|
-
const wellKnownUrl = new URL('/.well-known/agent.json', agentUrl).toString();
|
|
133
|
+
const wellKnownUrl = new URL('/.well-known/agent-card.json', agentUrl).toString();
|
|
34
134
|
const response = await fetch(wellKnownUrl, {
|
|
35
135
|
method: 'GET',
|
|
36
136
|
headers: this.buildHeaders(),
|
|
@@ -38,6 +138,8 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
38
138
|
});
|
|
39
139
|
if (response.ok) {
|
|
40
140
|
this.agentCard = await response.json();
|
|
141
|
+
this.orchestrationExtensionSupported =
|
|
142
|
+
this.agentCard?.capabilities?.extensions?.some(extension => extension.uri === ORCHESTRATION_EXTENSION_URI) ?? false;
|
|
41
143
|
}
|
|
42
144
|
this.setConnectionState('connected');
|
|
43
145
|
}
|
|
@@ -51,10 +153,8 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
51
153
|
* Disconnect and terminate any ongoing agent execution
|
|
52
154
|
*/
|
|
53
155
|
disconnect() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
this.abortController = null;
|
|
57
|
-
}
|
|
156
|
+
// Every open stream, not merely the newest.
|
|
157
|
+
this.stopGeneration();
|
|
58
158
|
// Send terminate request to backend if we have a task ID
|
|
59
159
|
if (this.currentTaskId) {
|
|
60
160
|
this.terminateTask(this.currentTaskId).catch(err => {
|
|
@@ -99,11 +199,23 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
99
199
|
async getAgentCard() {
|
|
100
200
|
return this.agentCard;
|
|
101
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Whether the connected agent advertised the Datalayer orchestration
|
|
204
|
+
* extension. `false` until `connect()` has fetched a card, and `false`
|
|
205
|
+
* for any card that does not list it — including one that could not be
|
|
206
|
+
* fetched at all, so a worker with no card behaves exactly as it did
|
|
207
|
+
* before this existed.
|
|
208
|
+
*/
|
|
209
|
+
get supportsOrchestrationExtension() {
|
|
210
|
+
return this.orchestrationExtensionSupported;
|
|
211
|
+
}
|
|
102
212
|
/**
|
|
103
213
|
* Send a message through A2A protocol
|
|
104
214
|
*/
|
|
105
215
|
async sendMessage(message, options) {
|
|
106
|
-
|
|
216
|
+
const controller = new AbortController();
|
|
217
|
+
this.abortController = controller;
|
|
218
|
+
this.inFlight.add(controller);
|
|
107
219
|
const taskId = options?.threadId || this.currentTaskId || generateMessageId();
|
|
108
220
|
this.currentTaskId = taskId;
|
|
109
221
|
// Build A2A message parts (A2A uses 'kind' discriminator, not 'type')
|
|
@@ -166,9 +278,15 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
166
278
|
method: 'POST',
|
|
167
279
|
headers: this.buildHeaders({
|
|
168
280
|
Accept: 'text/event-stream, application/json',
|
|
281
|
+
// Activates the extension for this one request, only once the
|
|
282
|
+
// worker's own card advertised it — degrading to a plain A2A
|
|
283
|
+
// request (no header at all) otherwise.
|
|
284
|
+
...(this.orchestrationExtensionSupported && {
|
|
285
|
+
[A2A_EXTENSIONS_HEADER]: ORCHESTRATION_EXTENSION_URI,
|
|
286
|
+
}),
|
|
169
287
|
}),
|
|
170
288
|
body: JSON.stringify(jsonRpcRequest),
|
|
171
|
-
signal:
|
|
289
|
+
signal: controller.signal,
|
|
172
290
|
});
|
|
173
291
|
if (!response.ok) {
|
|
174
292
|
throw new Error(`A2A request failed: ${response.status} ${response.statusText}`);
|
|
@@ -198,8 +316,26 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
198
316
|
throw error;
|
|
199
317
|
}
|
|
200
318
|
finally {
|
|
201
|
-
this.
|
|
319
|
+
this.inFlight.delete(controller);
|
|
320
|
+
if (this.abortController === controller) {
|
|
321
|
+
this.abortController = null;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Abort every in-flight stream without tearing the adapter down.
|
|
327
|
+
*
|
|
328
|
+
* This adapter had no such method, so pressing Stop reached only
|
|
329
|
+
* `terminateTask` — a request to the backend to cancel — and never closed
|
|
330
|
+
* the client's own stream. Whatever was already on the wire kept arriving
|
|
331
|
+
* and kept being rendered. `ChatBase` looks for this by name.
|
|
332
|
+
*/
|
|
333
|
+
stopGeneration() {
|
|
334
|
+
for (const controller of this.inFlight) {
|
|
335
|
+
controller.abort();
|
|
202
336
|
}
|
|
337
|
+
this.inFlight.clear();
|
|
338
|
+
this.abortController = null;
|
|
203
339
|
}
|
|
204
340
|
/**
|
|
205
341
|
* Send tool result back
|
|
@@ -269,7 +405,7 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
269
405
|
console.log('[A2AAdapter] Received event:', JSON.stringify(event, null, 2));
|
|
270
406
|
// Handle JSON-RPC response
|
|
271
407
|
if (event.result) {
|
|
272
|
-
this.handleTaskUpdate(event.result);
|
|
408
|
+
this.handleTaskUpdate(normalizeA2AResult(event.result));
|
|
273
409
|
}
|
|
274
410
|
else if (event.error) {
|
|
275
411
|
this.emit({
|
|
@@ -298,9 +434,42 @@ export class A2AAdapter extends BaseProtocolAdapter {
|
|
|
298
434
|
console.log('[A2AAdapter] Status update:', state, 'final:', task.final);
|
|
299
435
|
if (task.final &&
|
|
300
436
|
(state === 'completed' || state === 'failed' || state === 'canceled')) {
|
|
437
|
+
// Only read the envelope once the worker actually named the
|
|
438
|
+
// extension active — a plain worker's status carries no
|
|
439
|
+
// `datalayer` key, and this stays `undefined` for it exactly as
|
|
440
|
+
// it did before the extension existed.
|
|
441
|
+
const datalayerMeta = this.orchestrationExtensionSupported
|
|
442
|
+
? task.status?.message?.metadata?.[DATALAYER_META_KEY]
|
|
443
|
+
: undefined;
|
|
444
|
+
const datalayerUsage = datalayerMeta
|
|
445
|
+
? readUsageMeta(task.status.message.metadata)
|
|
446
|
+
: undefined;
|
|
301
447
|
this.emit({
|
|
302
448
|
type: 'state-update',
|
|
303
|
-
data: {
|
|
449
|
+
data: {
|
|
450
|
+
state,
|
|
451
|
+
final: true,
|
|
452
|
+
...(datalayerMeta?.paused && {
|
|
453
|
+
datalayerPaused: datalayerMeta.paused,
|
|
454
|
+
}),
|
|
455
|
+
...(datalayerMeta?.error && {
|
|
456
|
+
datalayerError: datalayerMeta.error,
|
|
457
|
+
}),
|
|
458
|
+
...(datalayerUsage && { datalayerUsage }),
|
|
459
|
+
},
|
|
460
|
+
// Best-effort mapping onto the cross-protocol shape; a worker
|
|
461
|
+
// that priced the run also sets `datalayerUsage.cost`, which
|
|
462
|
+
// has no field here and is not dropped — it is still on `data`.
|
|
463
|
+
...(datalayerUsage && {
|
|
464
|
+
usage: {
|
|
465
|
+
promptTokens: datalayerUsage.inputTokens ?? 0,
|
|
466
|
+
completionTokens: datalayerUsage.outputTokens ?? 0,
|
|
467
|
+
...(datalayerUsage.inputTokens !== undefined &&
|
|
468
|
+
datalayerUsage.outputTokens !== undefined && {
|
|
469
|
+
totalTokens: datalayerUsage.inputTokens + datalayerUsage.outputTokens,
|
|
470
|
+
}),
|
|
471
|
+
},
|
|
472
|
+
}),
|
|
304
473
|
timestamp: new Date(),
|
|
305
474
|
});
|
|
306
475
|
}
|
|
@@ -183,17 +183,16 @@ export class ACPAdapter extends BaseProtocolAdapter {
|
|
|
183
183
|
console.warn('[ACPAdapter] Cannot terminate: No session ID');
|
|
184
184
|
return;
|
|
185
185
|
}
|
|
186
|
-
//
|
|
187
|
-
|
|
188
|
-
const
|
|
186
|
+
// A notification, as the ACP schema makes session/cancel: no id and no
|
|
187
|
+
// answer. The running prompt answers with stopReason "cancelled".
|
|
188
|
+
const cancelNotification = {
|
|
189
189
|
jsonrpc: '2.0',
|
|
190
190
|
method: 'session/cancel',
|
|
191
191
|
params: {
|
|
192
192
|
sessionId: targetSessionId,
|
|
193
193
|
},
|
|
194
|
-
id: requestId,
|
|
195
194
|
};
|
|
196
|
-
this.ws.send(JSON.stringify(
|
|
195
|
+
this.ws.send(JSON.stringify(cancelNotification));
|
|
197
196
|
console.debug('[ACPAdapter] Sent session/cancel for:', targetSessionId);
|
|
198
197
|
}
|
|
199
198
|
catch (err) {
|
|
@@ -237,7 +236,7 @@ export class ACPAdapter extends BaseProtocolAdapter {
|
|
|
237
236
|
}
|
|
238
237
|
await this.sendRequest(AGENT_METHODS.session_prompt, {
|
|
239
238
|
sessionId: this.session.sessionId,
|
|
240
|
-
|
|
239
|
+
prompt: [{ type: 'text', text: content }],
|
|
241
240
|
// Include metadata with model and identities
|
|
242
241
|
...(Object.keys(metadata).length > 0 && { metadata }),
|
|
243
242
|
});
|
|
@@ -413,12 +412,22 @@ export class ACPAdapter extends BaseProtocolAdapter {
|
|
|
413
412
|
* Handle session update notifications
|
|
414
413
|
*/
|
|
415
414
|
handleSessionUpdate(params) {
|
|
416
|
-
|
|
417
|
-
//
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
415
|
+
// As the ACP schema spells it: the update nested under `update`, its text
|
|
416
|
+
// in a content block. A failed turn is the prompt's JSON-RPC error, not an
|
|
417
|
+
// update.
|
|
418
|
+
const update = params.update;
|
|
419
|
+
if (!update) {
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
const updateType = update.sessionUpdate;
|
|
423
|
+
const textOf = (content) => content &&
|
|
424
|
+
typeof content === 'object' &&
|
|
425
|
+
content.type === 'text'
|
|
426
|
+
? String(content.text ?? '')
|
|
427
|
+
: '';
|
|
428
|
+
if (updateType === 'agent_message_chunk') {
|
|
429
|
+
const chunk = textOf(update.content);
|
|
430
|
+
if (chunk) {
|
|
422
431
|
this.streamingContent += chunk;
|
|
423
432
|
// Use stable message ID for streaming updates
|
|
424
433
|
const streamingMessage = createAssistantMessage(this.streamingContent);
|
|
@@ -432,47 +441,41 @@ export class ACPAdapter extends BaseProtocolAdapter {
|
|
|
432
441
|
});
|
|
433
442
|
}
|
|
434
443
|
}
|
|
435
|
-
// Handle tool calls
|
|
436
444
|
if (updateType === 'tool_call') {
|
|
445
|
+
const call = update;
|
|
437
446
|
this.emit({
|
|
438
447
|
type: 'tool-call',
|
|
439
448
|
toolCall: {
|
|
440
|
-
toolCallId:
|
|
441
|
-
toolName:
|
|
442
|
-
args:
|
|
449
|
+
toolCallId: call.toolCallId || generateMessageId(),
|
|
450
|
+
toolName: call.title || '',
|
|
451
|
+
args: call.rawInput || {},
|
|
443
452
|
},
|
|
444
453
|
timestamp: new Date(),
|
|
445
454
|
});
|
|
446
455
|
}
|
|
447
|
-
// Handle tool results
|
|
448
456
|
if (updateType === 'tool_call_update') {
|
|
457
|
+
const progress = update;
|
|
449
458
|
this.emit({
|
|
450
459
|
type: 'tool-result',
|
|
451
460
|
toolResult: {
|
|
452
|
-
success:
|
|
453
|
-
result:
|
|
454
|
-
},
|
|
455
|
-
timestamp: new Date(),
|
|
456
|
-
});
|
|
457
|
-
}
|
|
458
|
-
// Handle thought chunks (could be displayed differently)
|
|
459
|
-
if (updateType === 'agent_thought_chunk' && params.chunk) {
|
|
460
|
-
this.emit({
|
|
461
|
-
type: 'activity',
|
|
462
|
-
activity: {
|
|
463
|
-
type: 'thought',
|
|
464
|
-
data: params.chunk,
|
|
461
|
+
success: progress.status !== 'failed',
|
|
462
|
+
result: progress.rawOutput,
|
|
465
463
|
},
|
|
466
464
|
timestamp: new Date(),
|
|
467
465
|
});
|
|
468
466
|
}
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
467
|
+
if (updateType === 'agent_thought_chunk') {
|
|
468
|
+
const thought = textOf(update.content);
|
|
469
|
+
if (thought) {
|
|
470
|
+
this.emit({
|
|
471
|
+
type: 'activity',
|
|
472
|
+
activity: {
|
|
473
|
+
type: 'thought',
|
|
474
|
+
data: thought,
|
|
475
|
+
},
|
|
476
|
+
timestamp: new Date(),
|
|
477
|
+
});
|
|
478
|
+
}
|
|
476
479
|
}
|
|
477
480
|
}
|
|
478
481
|
/**
|
|
@@ -23,6 +23,20 @@ export declare class AGUIAdapter extends BaseProtocolAdapter {
|
|
|
23
23
|
readonly protocolTransport: "sse";
|
|
24
24
|
private aguiConfig;
|
|
25
25
|
private abortController;
|
|
26
|
+
/**
|
|
27
|
+
* Every in-flight request's abort controller, not just the newest.
|
|
28
|
+
*
|
|
29
|
+
* A turn is rarely one request. Each tool result starts a continuation
|
|
30
|
+
* through `sendMessage`, and that overwrites `abortController` — so the
|
|
31
|
+
* moment two streams overlap, the earlier one's controller is no longer
|
|
32
|
+
* reachable and `stopGeneration` cannot abort it. It aborted whichever
|
|
33
|
+
* request happened to be last and left the others pouring tokens into a
|
|
34
|
+
* transcript the reader had already asked to stop, which is worst in
|
|
35
|
+
* exactly the tool-heavy sessions where stopping matters most.
|
|
36
|
+
*
|
|
37
|
+
* A set, because the fix has to hold however many are open.
|
|
38
|
+
*/
|
|
39
|
+
private inFlight;
|
|
26
40
|
private currentThreadId;
|
|
27
41
|
private pendingToolCalls;
|
|
28
42
|
private collectedToolResults;
|
|
@@ -13,6 +13,20 @@ export class AGUIAdapter extends BaseProtocolAdapter {
|
|
|
13
13
|
protocolTransport = 'sse';
|
|
14
14
|
aguiConfig;
|
|
15
15
|
abortController = null;
|
|
16
|
+
/**
|
|
17
|
+
* Every in-flight request's abort controller, not just the newest.
|
|
18
|
+
*
|
|
19
|
+
* A turn is rarely one request. Each tool result starts a continuation
|
|
20
|
+
* through `sendMessage`, and that overwrites `abortController` — so the
|
|
21
|
+
* moment two streams overlap, the earlier one's controller is no longer
|
|
22
|
+
* reachable and `stopGeneration` cannot abort it. It aborted whichever
|
|
23
|
+
* request happened to be last and left the others pouring tokens into a
|
|
24
|
+
* transcript the reader had already asked to stop, which is worst in
|
|
25
|
+
* exactly the tool-heavy sessions where stopping matters most.
|
|
26
|
+
*
|
|
27
|
+
* A set, because the fix has to hold however many are open.
|
|
28
|
+
*/
|
|
29
|
+
inFlight = new Set();
|
|
16
30
|
currentThreadId = null;
|
|
17
31
|
// Track in-progress tool calls to accumulate args and emit results
|
|
18
32
|
pendingToolCalls = new Map();
|
|
@@ -66,11 +80,8 @@ export class AGUIAdapter extends BaseProtocolAdapter {
|
|
|
66
80
|
* Disconnect and terminate any ongoing agent execution
|
|
67
81
|
*/
|
|
68
82
|
disconnect() {
|
|
69
|
-
// Abort
|
|
70
|
-
|
|
71
|
-
this.abortController.abort();
|
|
72
|
-
this.abortController = null;
|
|
73
|
-
}
|
|
83
|
+
// Abort every ongoing fetch request, not merely the newest.
|
|
84
|
+
this.stopGeneration();
|
|
74
85
|
// Send terminate request to backend if we have a thread ID
|
|
75
86
|
if (this.currentThreadId) {
|
|
76
87
|
this.terminateAgent(this.currentThreadId).catch(err => {
|
|
@@ -112,7 +123,12 @@ export class AGUIAdapter extends BaseProtocolAdapter {
|
|
|
112
123
|
* @param options - Options including full message history
|
|
113
124
|
*/
|
|
114
125
|
async sendMessage(message, options) {
|
|
115
|
-
|
|
126
|
+
// Held in a local as well as the field: by the time the `finally` below
|
|
127
|
+
// runs, a continuation may already have replaced the field, and this
|
|
128
|
+
// request must only ever retire its own controller.
|
|
129
|
+
const controller = new AbortController();
|
|
130
|
+
this.abortController = controller;
|
|
131
|
+
this.inFlight.add(controller);
|
|
116
132
|
const threadId = options?.threadId || this.currentThreadId || generateMessageId();
|
|
117
133
|
this.currentThreadId = threadId;
|
|
118
134
|
// Use full message history if provided, otherwise just the new message
|
|
@@ -195,7 +211,7 @@ export class AGUIAdapter extends BaseProtocolAdapter {
|
|
|
195
211
|
Accept: 'text/event-stream',
|
|
196
212
|
}),
|
|
197
213
|
body: JSON.stringify(runAgentInput),
|
|
198
|
-
signal:
|
|
214
|
+
signal: controller.signal,
|
|
199
215
|
});
|
|
200
216
|
if (!response.ok) {
|
|
201
217
|
throw new Error(`AG-UI request failed: ${response.status} ${response.statusText}`);
|
|
@@ -215,7 +231,13 @@ export class AGUIAdapter extends BaseProtocolAdapter {
|
|
|
215
231
|
throw error;
|
|
216
232
|
}
|
|
217
233
|
finally {
|
|
218
|
-
|
|
234
|
+
// This request's own controller, captured before any continuation could
|
|
235
|
+
// have replaced the field — clearing the field itself would drop a
|
|
236
|
+
// newer, still-running request's handle on the floor.
|
|
237
|
+
this.inFlight.delete(controller);
|
|
238
|
+
if (this.abortController === controller) {
|
|
239
|
+
this.abortController = null;
|
|
240
|
+
}
|
|
219
241
|
}
|
|
220
242
|
}
|
|
221
243
|
/**
|
|
@@ -352,7 +374,10 @@ export class AGUIAdapter extends BaseProtocolAdapter {
|
|
|
352
374
|
* the adapter connection.
|
|
353
375
|
*/
|
|
354
376
|
stopGeneration() {
|
|
355
|
-
this.
|
|
377
|
+
for (const controller of this.inFlight) {
|
|
378
|
+
controller.abort();
|
|
379
|
+
}
|
|
380
|
+
this.inFlight.clear();
|
|
356
381
|
this.abortController = null;
|
|
357
382
|
}
|
|
358
383
|
/**
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The browser harness, behind the protocol interface every chat surface uses.
|
|
3
|
+
*
|
|
4
|
+
* The other adapters carry messages to somewhere else — AG-UI over SSE, Vercel
|
|
5
|
+
* AI over SSE, ACP over a socket. This one carries them nowhere: the loop turns
|
|
6
|
+
* in this page with the Vercel AI SDK, and the adapter exists so that fact
|
|
7
|
+
* stays invisible to `<Chat>`, `<ChatFloating>` and everything downstream of
|
|
8
|
+
* them. Suggestions, tool rendering, the panel, the history: all unchanged.
|
|
9
|
+
*
|
|
10
|
+
* That is the point of putting it here rather than writing a bespoke chat for
|
|
11
|
+
* in-browser agents. There is nothing chat-shaped about the browser harness —
|
|
12
|
+
* only a different answer to "where does the loop turn" — so it belongs at the
|
|
13
|
+
* one seam the package already has for that question.
|
|
14
|
+
*
|
|
15
|
+
* **Who executes the tools.** In every other adapter the runtime asks and the
|
|
16
|
+
* client answers: a `tool-call` arrives, `ChatBase` runs the frontend tool's
|
|
17
|
+
* handler and posts the result back with {@link sendToolResult}. Here the SDK
|
|
18
|
+
* owns the loop and calls the handler itself, so a host must NOT also pass
|
|
19
|
+
* `frontendTools` to the chat component — the tools go to this adapter, and the
|
|
20
|
+
* chat is left to render what happened. {@link sendToolResult} is therefore a
|
|
21
|
+
* no-op: by the time anyone could call it, the tool has already run.
|
|
22
|
+
*
|
|
23
|
+
* @module protocols/BrowserAgentAdapter
|
|
24
|
+
*/
|
|
25
|
+
import { type LanguageModel } from 'ai';
|
|
26
|
+
import type { ProtocolAdapterConfig } from '../types/protocol';
|
|
27
|
+
import type { ChatMessage } from '../types/messages';
|
|
28
|
+
import type { FrontendToolDefinition } from '../types/tools';
|
|
29
|
+
import type { AgentStreamSubagentPayload } from '../types/stream';
|
|
30
|
+
import { BaseProtocolAdapter } from './BaseProtocolAdapter';
|
|
31
|
+
import type { TeamContextSharing } from '../types/teams';
|
|
32
|
+
import { type BrowserSubagent, type BrowserModelOptions, type FrontendToolsToVercelAIOptions } from '../runtimes/browser';
|
|
33
|
+
/**
|
|
34
|
+
* What a browser agent needs that a remote one does not.
|
|
35
|
+
*
|
|
36
|
+
* These arrive through `ProtocolConfig.options`, which `createProtocolAdapter`
|
|
37
|
+
* spreads onto the adapter config. They are live objects — a tool set bound to
|
|
38
|
+
* this page's notebook — rather than the URLs and tokens the other adapters
|
|
39
|
+
* take, which is exactly the difference between running a loop and calling one.
|
|
40
|
+
*/
|
|
41
|
+
export interface BrowserAgentAdapterConfig extends ProtocolAdapterConfig, FrontendToolsToVercelAIOptions {
|
|
42
|
+
/** The agent's instructions. From the spec's `systemPrompt`. */
|
|
43
|
+
instructions?: string;
|
|
44
|
+
/** The tools the agent can call in this page. */
|
|
45
|
+
frontendTools?: FrontendToolDefinition[];
|
|
46
|
+
/** Where to reach a model, unless one is supplied outright. */
|
|
47
|
+
inference?: Omit<BrowserModelOptions, 'model'>;
|
|
48
|
+
/** The model id, as a spec spells it. */
|
|
49
|
+
model?: string;
|
|
50
|
+
/** A ready-made model, for a host that resolves models its own way. */
|
|
51
|
+
languageModel?: LanguageModel;
|
|
52
|
+
/** Turn ceiling for one request. */
|
|
53
|
+
maxSteps?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Agents this one may hand work to.
|
|
56
|
+
*
|
|
57
|
+
* They join the frontend tools as tools of their own, which is how the SDK
|
|
58
|
+
* models delegation: a subagent is another agent the parent reaches by
|
|
59
|
+
* calling it.
|
|
60
|
+
*/
|
|
61
|
+
subagents?: BrowserSubagent[];
|
|
62
|
+
/** What a subagent is told about the conversation so far. */
|
|
63
|
+
sharing?: TeamContextSharing;
|
|
64
|
+
/** Told what a delegated run does, as it does it — see `subagentTools`. */
|
|
65
|
+
onSubagentEvent?: (event: AgentStreamSubagentPayload) => void;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* An agent loop running in the page, speaking the protocol adapter interface.
|
|
69
|
+
*/
|
|
70
|
+
export declare class BrowserAgentAdapter extends BaseProtocolAdapter {
|
|
71
|
+
readonly protocol: "browser-vercel-ai";
|
|
72
|
+
readonly protocolTransport: "http";
|
|
73
|
+
private browserConfig;
|
|
74
|
+
private abortController;
|
|
75
|
+
private tools;
|
|
76
|
+
constructor(config: BrowserAgentAdapterConfig);
|
|
77
|
+
/**
|
|
78
|
+
* Nothing to dial.
|
|
79
|
+
*
|
|
80
|
+
* The interface asks for a connection because the other adapters have one.
|
|
81
|
+
* This reports connected because the loop is already here.
|
|
82
|
+
*/
|
|
83
|
+
connect(): Promise<void>;
|
|
84
|
+
disconnect(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Stop the run in flight, and stay connected.
|
|
87
|
+
*
|
|
88
|
+
* What the chat's stop button calls on an adapter that has it. The other
|
|
89
|
+
* adapters cut a network stream; this one cuts the model call turning in
|
|
90
|
+
* the page — and, through the signal every delegation reads, the
|
|
91
|
+
* subagents that call started. Without this the button stopped the
|
|
92
|
+
* chat's *display* of the run and nothing else: the parent kept calling
|
|
93
|
+
* the model and the children kept working.
|
|
94
|
+
*/
|
|
95
|
+
stopGeneration(): void;
|
|
96
|
+
supportsFeature(feature: string): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Already done.
|
|
99
|
+
*
|
|
100
|
+
* The SDK executed the tool before this adapter reported it, so there is no
|
|
101
|
+
* result to carry back and nothing to resume. Kept because the interface has
|
|
102
|
+
* it and a host should not have to know which adapter it is holding.
|
|
103
|
+
*/
|
|
104
|
+
sendToolResult(): Promise<void>;
|
|
105
|
+
/** The model this agent asks, resolved once per request. */
|
|
106
|
+
private resolveModel;
|
|
107
|
+
/**
|
|
108
|
+
* Run one turn of the loop and report it as it happens.
|
|
109
|
+
*
|
|
110
|
+
* The SDK's `fullStream` is already the event stream this interface wants —
|
|
111
|
+
* text deltas, tool calls, tool results, a finish — so the body of this is a
|
|
112
|
+
* translation rather than a protocol implementation.
|
|
113
|
+
*/
|
|
114
|
+
sendMessage(message: ChatMessage, options?: {
|
|
115
|
+
messages?: ChatMessage[];
|
|
116
|
+
}): Promise<void>;
|
|
117
|
+
}
|