@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,300 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* A key for a visitor who has not signed in, and the clock on it.
|
|
7
|
+
*
|
|
8
|
+
* The inference service admits members only — a page cannot hold an AWS
|
|
9
|
+
* credential, so completions go through a service that does, and that service
|
|
10
|
+
* has to know who is spending. A public landing page has nobody to name, which
|
|
11
|
+
* is why an in-page agent there answered every request with 401.
|
|
12
|
+
*
|
|
13
|
+
* `POST /anonymous/token` is the service's answer: a short-lived token, no user
|
|
14
|
+
* attached, no other route, and no way to renew it. This module is the client
|
|
15
|
+
* for it.
|
|
16
|
+
*
|
|
17
|
+
* **One key, and the key says when it dies.** No renewal loop: renewing on a
|
|
18
|
+
* timer would give an anonymous visitor unmetered access to a members-only
|
|
19
|
+
* service with nothing on screen admitting it, and a clock that resets never
|
|
20
|
+
* reaches the moment where the workspace asks them to sign in — which is the
|
|
21
|
+
* whole point of showing one.
|
|
22
|
+
*
|
|
23
|
+
* **The deadline is read out of the token, not calculated beside it.** The JWT
|
|
24
|
+
* carries `exp`, and that claim is what the service will actually enforce; an
|
|
25
|
+
* `expires_in` counted against this machine's clock is a second opinion, and
|
|
26
|
+
* the two disagree whenever anything sits between them. What is taken from the
|
|
27
|
+
* token is its *lifetime* — `exp - iat`, both from the same issuer at the same
|
|
28
|
+
* instant — and that is added to the local clock. A duration is immune to the
|
|
29
|
+
* skew an absolute timestamp is not: a visitor whose laptop is ten minutes
|
|
30
|
+
* fast would otherwise be told their key expired before it was issued.
|
|
31
|
+
*
|
|
32
|
+
* The trial is an offer, not a boundary. It lives in a page, so a reload or a
|
|
33
|
+
* switch of target gets another key, and nothing here pretends otherwise:
|
|
34
|
+
* what actually limits anonymous use is the service, which rate limits the
|
|
35
|
+
* mint endpoint precisely because it is open to anyone. Spending effort making
|
|
36
|
+
* this side harder to reset would buy nothing the server does not already own.
|
|
37
|
+
*
|
|
38
|
+
* How long a key lives is the service's to decide —
|
|
39
|
+
* `DATALAYER_ANONYMOUS_TOKEN_TTL_SECONDS`, sixty seconds by default. Nothing
|
|
40
|
+
* here assumes a number; whatever is signed is what is counted.
|
|
41
|
+
*
|
|
42
|
+
* A shared session rather than a hook's private state, because three things
|
|
43
|
+
* need the same answer: the chat, which sends the token; the timer in the
|
|
44
|
+
* chat header, which draws what is left of it; and the panel that takes over
|
|
45
|
+
* when it is gone. Three hooks would have minted three keys.
|
|
46
|
+
*
|
|
47
|
+
* @module runtimes/browser/anonymousToken
|
|
48
|
+
*/
|
|
49
|
+
import { useEffect } from 'react';
|
|
50
|
+
import { create } from 'zustand';
|
|
51
|
+
/**
|
|
52
|
+
* What to assume when a token says nothing about its own life.
|
|
53
|
+
*
|
|
54
|
+
* Matches the service's default, and is kept in step with it. Only reached for
|
|
55
|
+
* a token that is neither a JWT with the claims to read nor accompanied by an
|
|
56
|
+
* `expires_in` — which the service has never sent, so this is a floor under a
|
|
57
|
+
* bug rather than a policy.
|
|
58
|
+
*/
|
|
59
|
+
const DEFAULT_TTL_MS = 300_000;
|
|
60
|
+
/** How long to wait before trying again when the service refuses. */
|
|
61
|
+
const RETRY_MS = 3_000;
|
|
62
|
+
/**
|
|
63
|
+
* The expiry timer, module-scoped because the store is.
|
|
64
|
+
*
|
|
65
|
+
* Held outside the state so that clearing the session can cancel it — a timer
|
|
66
|
+
* left running would mark a signed-in member's session expired a minute after
|
|
67
|
+
* they signed in.
|
|
68
|
+
*/
|
|
69
|
+
let pendingTimer;
|
|
70
|
+
/**
|
|
71
|
+
* Read a JWT's claims without verifying it.
|
|
72
|
+
*
|
|
73
|
+
* Deliberately unverified, and safe to be: this is the page reading the
|
|
74
|
+
* expiry off a key it was just handed, so it can draw a countdown. Nothing is
|
|
75
|
+
* authorised on the strength of it — the service verifies the signature on
|
|
76
|
+
* every request, and a visitor who forged a longer `exp` would only be lying
|
|
77
|
+
* to their own clock.
|
|
78
|
+
*
|
|
79
|
+
* Returns nothing for anything that is not a three-part JWT with a JSON
|
|
80
|
+
* payload, so an opaque token degrades to the `expires_in` beside it rather
|
|
81
|
+
* than throwing in a header.
|
|
82
|
+
*/
|
|
83
|
+
export function readJwtClaims(token) {
|
|
84
|
+
const payload = token.split('.')[1];
|
|
85
|
+
if (!payload) {
|
|
86
|
+
return undefined;
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
// base64url → base64, then padded: `atob` accepts neither `-`/`_` nor a
|
|
90
|
+
// missing tail, and JWTs are written with both.
|
|
91
|
+
const base64 = payload.replace(/-/g, '+').replace(/_/g, '/');
|
|
92
|
+
const padded = base64.padEnd(base64.length + ((4 - (base64.length % 4)) % 4), '=');
|
|
93
|
+
const claims = JSON.parse(atob(padded));
|
|
94
|
+
return claims && typeof claims === 'object'
|
|
95
|
+
? claims
|
|
96
|
+
: undefined;
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* How long a freshly issued token is good for, in milliseconds.
|
|
104
|
+
*
|
|
105
|
+
* `exp - iat` first: both claims come from the issuer, at the same instant, so
|
|
106
|
+
* their difference is a duration that no clock anywhere can distort. It is
|
|
107
|
+
* also the only source that is certainly the truth, because `exp` is the claim
|
|
108
|
+
* the service enforces.
|
|
109
|
+
*
|
|
110
|
+
* `expires_in` is the fallback, for a token that is not a JWT or carries no
|
|
111
|
+
* `iat`. An absolute `exp` against the local clock is deliberately *not* in
|
|
112
|
+
* this chain: on a machine whose clock is minutes out it produces a key that
|
|
113
|
+
* appears to expire before it was issued, which is worse than either.
|
|
114
|
+
*/
|
|
115
|
+
export function tokenLifetimeMs(token, expiresInSeconds) {
|
|
116
|
+
const claims = readJwtClaims(token);
|
|
117
|
+
if (claims?.exp && claims?.iat && claims.exp > claims.iat) {
|
|
118
|
+
return (claims.exp - claims.iat) * 1000;
|
|
119
|
+
}
|
|
120
|
+
if (expiresInSeconds && expiresInSeconds > 0) {
|
|
121
|
+
return expiresInSeconds * 1000;
|
|
122
|
+
}
|
|
123
|
+
return DEFAULT_TTL_MS;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Mint one. Throws if the service refuses.
|
|
127
|
+
*
|
|
128
|
+
* The moment it dies is read off the token itself; see {@link tokenLifetimeMs}.
|
|
129
|
+
*/
|
|
130
|
+
export async function fetchAnonymousToken(inferenceUrl, signal) {
|
|
131
|
+
const base = inferenceUrl.replace(/\/+$/, '');
|
|
132
|
+
const response = await fetch(`${base}/api/ai-inference/v1/anonymous/token`, {
|
|
133
|
+
method: 'POST',
|
|
134
|
+
headers: { 'Content-Type': 'application/json' },
|
|
135
|
+
signal,
|
|
136
|
+
});
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
throw new Error(`Anonymous inference token refused by ${base} (HTTP ${response.status})`);
|
|
139
|
+
}
|
|
140
|
+
const body = (await response.json());
|
|
141
|
+
if (!body.token) {
|
|
142
|
+
throw new Error(`No token in the reply from ${base}`);
|
|
143
|
+
}
|
|
144
|
+
const lifetimeMs = tokenLifetimeMs(body.token, body.expires_in);
|
|
145
|
+
return {
|
|
146
|
+
token: body.token,
|
|
147
|
+
lifetimeMs,
|
|
148
|
+
expiresAt: Date.now() + lifetimeMs,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export const useAnonymousSessionStore = create((set, get) => {
|
|
152
|
+
/** Ask for a key, and arrange for the end of it. */
|
|
153
|
+
const mint = (inferenceUrl) => {
|
|
154
|
+
set({ status: 'minting', error: undefined });
|
|
155
|
+
void fetchAnonymousToken(inferenceUrl)
|
|
156
|
+
.then(minted => {
|
|
157
|
+
// Somebody signed in while the request was in flight; their token is
|
|
158
|
+
// the better one and this session was already cleared.
|
|
159
|
+
if (get().status !== 'minting') {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
set({
|
|
163
|
+
status: 'active',
|
|
164
|
+
token: minted.token,
|
|
165
|
+
// Both straight from the token: when it dies, and how long it was
|
|
166
|
+
// given — which is what a countdown needs to draw a proportion
|
|
167
|
+
// rather than just a number.
|
|
168
|
+
expiresAt: minted.expiresAt,
|
|
169
|
+
grantedMs: minted.lifetimeMs,
|
|
170
|
+
error: undefined,
|
|
171
|
+
});
|
|
172
|
+
clearTimeout(pendingTimer);
|
|
173
|
+
/*
|
|
174
|
+
* The store expires itself rather than waiting to be told.
|
|
175
|
+
*
|
|
176
|
+
* The countdown in the header would do it, but only while it is
|
|
177
|
+
* mounted — and a workspace whose chat header is hidden would then
|
|
178
|
+
* go on sending a dead key and reading the 401 as the agent being
|
|
179
|
+
* broken.
|
|
180
|
+
*/
|
|
181
|
+
pendingTimer = setTimeout(() => get().expire(), Math.max(0, minted.expiresAt - Date.now()));
|
|
182
|
+
})
|
|
183
|
+
.catch((error) => {
|
|
184
|
+
if (get().status !== 'minting') {
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
188
|
+
console.warn('[anonymousToken] could not mint a token', error);
|
|
189
|
+
/*
|
|
190
|
+
* One more attempt, backed off.
|
|
191
|
+
*
|
|
192
|
+
* The endpoint is open to anyone and therefore rate limited, and a
|
|
193
|
+
* page that hammered it after a refusal would earn itself a longer
|
|
194
|
+
* one. A single retry covers the case worth covering — a service
|
|
195
|
+
* that was briefly unreachable — without turning a refusal into a
|
|
196
|
+
* loop.
|
|
197
|
+
*/
|
|
198
|
+
const firstFailure = !get().retried;
|
|
199
|
+
set({ status: 'failed', error: message, retried: true });
|
|
200
|
+
if (firstFailure) {
|
|
201
|
+
clearTimeout(pendingTimer);
|
|
202
|
+
pendingTimer = setTimeout(() => {
|
|
203
|
+
if (get().status === 'failed') {
|
|
204
|
+
mint(inferenceUrl);
|
|
205
|
+
}
|
|
206
|
+
}, RETRY_MS);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
return {
|
|
211
|
+
status: 'idle',
|
|
212
|
+
start: (inferenceUrl) => {
|
|
213
|
+
const { status } = get();
|
|
214
|
+
// Minting, live, retrying, or spent: all four already have their
|
|
215
|
+
// answer. Only a visitor who has never asked gets a key, which is what
|
|
216
|
+
// stops one being handed out again on the next render.
|
|
217
|
+
if (status !== 'idle') {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (!inferenceUrl) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
mint(inferenceUrl);
|
|
224
|
+
},
|
|
225
|
+
expire: () => {
|
|
226
|
+
const { status } = get();
|
|
227
|
+
if (status === 'idle' || status === 'expired') {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
clearTimeout(pendingTimer);
|
|
231
|
+
pendingTimer = undefined;
|
|
232
|
+
// The token goes with the status: anything still holding a reference
|
|
233
|
+
// to this session must not be able to send a key the service will
|
|
234
|
+
// refuse.
|
|
235
|
+
set({ status: 'expired', token: undefined });
|
|
236
|
+
},
|
|
237
|
+
clear: () => {
|
|
238
|
+
if (get().status === 'idle') {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
clearTimeout(pendingTimer);
|
|
242
|
+
pendingTimer = undefined;
|
|
243
|
+
set({
|
|
244
|
+
status: 'idle',
|
|
245
|
+
token: undefined,
|
|
246
|
+
expiresAt: undefined,
|
|
247
|
+
grantedMs: undefined,
|
|
248
|
+
error: undefined,
|
|
249
|
+
retried: false,
|
|
250
|
+
});
|
|
251
|
+
},
|
|
252
|
+
};
|
|
253
|
+
});
|
|
254
|
+
/** Read the shared session without touching it. For anything that only draws it. */
|
|
255
|
+
export function useAnonymousSession() {
|
|
256
|
+
/*
|
|
257
|
+
* The whole state, not a projection of it.
|
|
258
|
+
*
|
|
259
|
+
* A selector building `{status, token, ...}` returns a new object on every
|
|
260
|
+
* render, and React's `useSyncExternalStore` — which is what zustand is
|
|
261
|
+
* built on — treats an unstable snapshot as a loop. The store object itself
|
|
262
|
+
* changes identity exactly when something in it changed, which is the
|
|
263
|
+
* subscription that was wanted anyway.
|
|
264
|
+
*/
|
|
265
|
+
return useAnonymousSessionStore();
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Hold an anonymous key for as long as one is wanted.
|
|
269
|
+
*
|
|
270
|
+
* The driving half: exactly one component in a tree should call this — the
|
|
271
|
+
* chat that would send the token — and everything else that needs to know
|
|
272
|
+
* reads {@link useAnonymousSession}.
|
|
273
|
+
*
|
|
274
|
+
* @param inferenceUrl Where the service is.
|
|
275
|
+
* @param enabled False when there is a signed-in member, whose own token is
|
|
276
|
+
* better in every way — it names them, it is metered to them, and it does
|
|
277
|
+
* not expire. Also false where no in-page agent will ask for inference at
|
|
278
|
+
* all, so a workspace on a server-backed agent does not burn a trial nobody
|
|
279
|
+
* is using.
|
|
280
|
+
*/
|
|
281
|
+
export function useAnonymousInferenceSession(inferenceUrl, enabled) {
|
|
282
|
+
const session = useAnonymousSession();
|
|
283
|
+
useEffect(() => {
|
|
284
|
+
const { start, clear } = useAnonymousSessionStore.getState();
|
|
285
|
+
if (enabled && inferenceUrl) {
|
|
286
|
+
start(inferenceUrl);
|
|
287
|
+
return undefined;
|
|
288
|
+
}
|
|
289
|
+
// Somebody signed in, or the workspace moved to an agent that does its own
|
|
290
|
+
// authenticating: the key is not ours to keep holding.
|
|
291
|
+
clear();
|
|
292
|
+
return undefined;
|
|
293
|
+
}, [inferenceUrl, enabled]);
|
|
294
|
+
return session;
|
|
295
|
+
}
|
|
296
|
+
/** How much of the key's life is left, in milliseconds. Never negative. */
|
|
297
|
+
export function anonymousTimeLeft(session, now = Date.now()) {
|
|
298
|
+
return Math.max(0, (session.expiresAt ?? now) - now);
|
|
299
|
+
}
|
|
300
|
+
export default useAnonymousInferenceSession;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontend tools, as the Vercel AI SDK wants them.
|
|
3
|
+
*
|
|
4
|
+
* This is the piece that makes an in-browser agent worth having. A
|
|
5
|
+
* {@link FrontendToolDefinition} is a tool that runs in the page — it reaches
|
|
6
|
+
* into the notebook the reader is looking at, or the document they are
|
|
7
|
+
* editing — and the AG-UI path has always been able to call them: the client
|
|
8
|
+
* advertises `{name, description, parameters}` to the runtime, the model asks
|
|
9
|
+
* for one, and the client runs its `handler`.
|
|
10
|
+
*
|
|
11
|
+
* The browser harness needs exactly the same tools to work, and they do,
|
|
12
|
+
* because nothing about a frontend tool was ever server-shaped. What changes
|
|
13
|
+
* is only the round trip: AG-UI advertises the tool over the wire and posts
|
|
14
|
+
* the result back, while here the model call and the handler are in the same
|
|
15
|
+
* page, so the SDK calls the handler itself.
|
|
16
|
+
*
|
|
17
|
+
* So this module is a translation and not a second implementation:
|
|
18
|
+
*
|
|
19
|
+
* - the same array of definitions a host already passes to `<Chat>`
|
|
20
|
+
* - the same {@link ToolExecutor} underneath, so location routing,
|
|
21
|
+
* human-in-the-loop and status reporting behave identically
|
|
22
|
+
* - the same JSON Schema the AG-UI path sends over the wire
|
|
23
|
+
*
|
|
24
|
+
* A host that has tools working in one harness gets them working in the other
|
|
25
|
+
* by passing the same array.
|
|
26
|
+
*
|
|
27
|
+
* @module runtimes/browser/frontendTools
|
|
28
|
+
*/
|
|
29
|
+
import { type ToolSet } from 'ai';
|
|
30
|
+
import type { FrontendToolDefinition, ToolCallRequest, ToolRenderStatus } from '../../types/tools';
|
|
31
|
+
/**
|
|
32
|
+
* The JSON Schema for a tool's input.
|
|
33
|
+
*
|
|
34
|
+
* `parameters` comes in two shapes, because two ecosystems put it there: the
|
|
35
|
+
* notebook and document tools carry JSON Schema already, and CopilotKit-style
|
|
36
|
+
* definitions carry a `ToolParameter[]`. The AG-UI path sends whichever it
|
|
37
|
+
* finds straight over the wire; this does the same conversion so a tool
|
|
38
|
+
* describes itself identically to a model in either harness.
|
|
39
|
+
*/
|
|
40
|
+
export declare function toolInputSchema(definition: Pick<FrontendToolDefinition, 'parameters'>): Record<string, unknown>;
|
|
41
|
+
export type FrontendToolsToVercelAIOptions = {
|
|
42
|
+
/**
|
|
43
|
+
* Asks a person to approve a call before it runs.
|
|
44
|
+
*
|
|
45
|
+
* Only consulted for tools that declare `renderAndWaitForResponse`, and it
|
|
46
|
+
* is the same callback the AG-UI path uses. Returning `null` rejects the
|
|
47
|
+
* call — the model is told so and can carry on.
|
|
48
|
+
*/
|
|
49
|
+
onHitlRequired?: (toolCall: ToolCallRequest, definition: FrontendToolDefinition) => Promise<unknown | null>;
|
|
50
|
+
/** Reports a call moving through executing → complete/failed. */
|
|
51
|
+
onStatusChange?: (toolCallId: string, status: ToolRenderStatus, result?: unknown, error?: string) => void;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Turn frontend tools into a Vercel AI SDK tool set.
|
|
55
|
+
*
|
|
56
|
+
* Errors come back as tool output rather than thrown. A throw would abort the
|
|
57
|
+
* whole generation over one bad call; an error the model can read is a step it
|
|
58
|
+
* can recover from — it can try a different cell, or tell the person what went
|
|
59
|
+
* wrong. This is what the AG-UI path does with a failed tool result too.
|
|
60
|
+
*/
|
|
61
|
+
export declare function frontendToolsToVercelAI(frontendTools: FrontendToolDefinition[], options?: FrontendToolsToVercelAIOptions): ToolSet;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
*
|
|
8
|
+
* MIT License
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Frontend tools, as the Vercel AI SDK wants them.
|
|
12
|
+
*
|
|
13
|
+
* This is the piece that makes an in-browser agent worth having. A
|
|
14
|
+
* {@link FrontendToolDefinition} is a tool that runs in the page — it reaches
|
|
15
|
+
* into the notebook the reader is looking at, or the document they are
|
|
16
|
+
* editing — and the AG-UI path has always been able to call them: the client
|
|
17
|
+
* advertises `{name, description, parameters}` to the runtime, the model asks
|
|
18
|
+
* for one, and the client runs its `handler`.
|
|
19
|
+
*
|
|
20
|
+
* The browser harness needs exactly the same tools to work, and they do,
|
|
21
|
+
* because nothing about a frontend tool was ever server-shaped. What changes
|
|
22
|
+
* is only the round trip: AG-UI advertises the tool over the wire and posts
|
|
23
|
+
* the result back, while here the model call and the handler are in the same
|
|
24
|
+
* page, so the SDK calls the handler itself.
|
|
25
|
+
*
|
|
26
|
+
* So this module is a translation and not a second implementation:
|
|
27
|
+
*
|
|
28
|
+
* - the same array of definitions a host already passes to `<Chat>`
|
|
29
|
+
* - the same {@link ToolExecutor} underneath, so location routing,
|
|
30
|
+
* human-in-the-loop and status reporting behave identically
|
|
31
|
+
* - the same JSON Schema the AG-UI path sends over the wire
|
|
32
|
+
*
|
|
33
|
+
* A host that has tools working in one harness gets them working in the other
|
|
34
|
+
* by passing the same array.
|
|
35
|
+
*
|
|
36
|
+
* @module runtimes/browser/frontendTools
|
|
37
|
+
*/
|
|
38
|
+
// From `ai` rather than `@ai-sdk/provider-utils` directly. `ai` re-exports
|
|
39
|
+
// these from the copy of provider-utils it resolves itself, and a schema built
|
|
40
|
+
// against a different copy is not the same type to TypeScript — the identity
|
|
41
|
+
// is carried by a private symbol.
|
|
42
|
+
import { jsonSchema, tool } from 'ai';
|
|
43
|
+
import { createToolExecutor } from '../../tools/ToolExecutor';
|
|
44
|
+
/** JSON Schema for a tool that takes nothing. */
|
|
45
|
+
const NO_PARAMETERS = { type: 'object', properties: {} };
|
|
46
|
+
/** The JSON Schema type for one of the shorthand parameter types. */
|
|
47
|
+
function schemaForParameter(parameter) {
|
|
48
|
+
const described = parameter.description
|
|
49
|
+
? { description: parameter.description }
|
|
50
|
+
: {};
|
|
51
|
+
const enumerated = parameter.enum ? { enum: parameter.enum } : {};
|
|
52
|
+
const base = { ...described, ...enumerated };
|
|
53
|
+
switch (parameter.type) {
|
|
54
|
+
case 'string[]':
|
|
55
|
+
return { ...base, type: 'array', items: { type: 'string' } };
|
|
56
|
+
case 'number[]':
|
|
57
|
+
return { ...base, type: 'array', items: { type: 'number' } };
|
|
58
|
+
case 'object[]':
|
|
59
|
+
return {
|
|
60
|
+
...base,
|
|
61
|
+
type: 'array',
|
|
62
|
+
items: objectSchema(parameter.attributes),
|
|
63
|
+
};
|
|
64
|
+
case 'object':
|
|
65
|
+
return { ...base, ...objectSchema(parameter.attributes) };
|
|
66
|
+
default:
|
|
67
|
+
return { ...base, type: parameter.type ?? 'string' };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** An object schema built from a nested attribute list. */
|
|
71
|
+
function objectSchema(attributes) {
|
|
72
|
+
if (!attributes?.length) {
|
|
73
|
+
return { type: 'object', properties: {} };
|
|
74
|
+
}
|
|
75
|
+
return { type: 'object', ...parametersToSchema(attributes) };
|
|
76
|
+
}
|
|
77
|
+
/** The `properties`/`required` pair for a list of parameters. */
|
|
78
|
+
function parametersToSchema(parameters) {
|
|
79
|
+
const properties = {};
|
|
80
|
+
const required = [];
|
|
81
|
+
for (const parameter of parameters) {
|
|
82
|
+
properties[parameter.name] = schemaForParameter(parameter);
|
|
83
|
+
if (parameter.required) {
|
|
84
|
+
required.push(parameter.name);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return required.length ? { properties, required } : { properties };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* The JSON Schema for a tool's input.
|
|
91
|
+
*
|
|
92
|
+
* `parameters` comes in two shapes, because two ecosystems put it there: the
|
|
93
|
+
* notebook and document tools carry JSON Schema already, and CopilotKit-style
|
|
94
|
+
* definitions carry a `ToolParameter[]`. The AG-UI path sends whichever it
|
|
95
|
+
* finds straight over the wire; this does the same conversion so a tool
|
|
96
|
+
* describes itself identically to a model in either harness.
|
|
97
|
+
*/
|
|
98
|
+
export function toolInputSchema(definition) {
|
|
99
|
+
const parameters = definition.parameters;
|
|
100
|
+
if (!parameters) {
|
|
101
|
+
return { ...NO_PARAMETERS };
|
|
102
|
+
}
|
|
103
|
+
if (Array.isArray(parameters)) {
|
|
104
|
+
return { type: 'object', ...parametersToSchema(parameters) };
|
|
105
|
+
}
|
|
106
|
+
// Already JSON Schema. Passed through rather than rebuilt: it is the tool
|
|
107
|
+
// author's own description of the tool, and rewriting it could only lose
|
|
108
|
+
// something the model was meant to see.
|
|
109
|
+
return parameters;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Turn frontend tools into a Vercel AI SDK tool set.
|
|
113
|
+
*
|
|
114
|
+
* Errors come back as tool output rather than thrown. A throw would abort the
|
|
115
|
+
* whole generation over one bad call; an error the model can read is a step it
|
|
116
|
+
* can recover from — it can try a different cell, or tell the person what went
|
|
117
|
+
* wrong. This is what the AG-UI path does with a failed tool result too.
|
|
118
|
+
*/
|
|
119
|
+
export function frontendToolsToVercelAI(frontendTools, options = {}) {
|
|
120
|
+
const byName = new Map(frontendTools.map(entry => [entry.name, entry]));
|
|
121
|
+
// The same executor the rest of the package uses. It owns the parts that
|
|
122
|
+
// must not drift between harnesses: frontend/backend routing, the HITL
|
|
123
|
+
// pause, and the status callbacks a host renders progress from.
|
|
124
|
+
const executor = createToolExecutor({
|
|
125
|
+
getToolDefinition: (name) => byName.get(name),
|
|
126
|
+
onHitlRequired: options.onHitlRequired,
|
|
127
|
+
onStatusChange: options.onStatusChange,
|
|
128
|
+
});
|
|
129
|
+
const toolSet = {};
|
|
130
|
+
for (const definition of frontendTools) {
|
|
131
|
+
toolSet[definition.name] = tool({
|
|
132
|
+
description: definition.description,
|
|
133
|
+
inputSchema: jsonSchema(toolInputSchema(definition)),
|
|
134
|
+
execute: async (input, executionOptions) => {
|
|
135
|
+
const result = await executor.execute({
|
|
136
|
+
toolCallId: executionOptions?.toolCallId ?? definition.name,
|
|
137
|
+
toolName: definition.name,
|
|
138
|
+
args: (input ?? {}),
|
|
139
|
+
// The SDK hands over a complete argument set: unlike AG-UI, which
|
|
140
|
+
// streams arguments and emits a first call with none, a tool call
|
|
141
|
+
// here arrives once and whole.
|
|
142
|
+
argsComplete: true,
|
|
143
|
+
});
|
|
144
|
+
if (!result.success) {
|
|
145
|
+
return { error: result.error ?? 'The tool call failed.' };
|
|
146
|
+
}
|
|
147
|
+
return result.result ?? null;
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return toolSet;
|
|
152
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The browser harness: an agent loop that runs in the page.
|
|
3
|
+
*
|
|
4
|
+
* @module runtimes/browser
|
|
5
|
+
*/
|
|
6
|
+
export * from './agent';
|
|
7
|
+
export * from './anonymousToken';
|
|
8
|
+
export * from './frontendTools';
|
|
9
|
+
export * from './model';
|
|
10
|
+
export * from './protocol';
|
|
11
|
+
export * from './subagents';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025-2026 Datalayer, Inc.
|
|
3
|
+
* Distributed under the terms of the Modified BSD License.
|
|
4
|
+
*/
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2023-2026 Datalayer, Inc.
|
|
7
|
+
*
|
|
8
|
+
* MIT License
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* The browser harness: an agent loop that runs in the page.
|
|
12
|
+
*
|
|
13
|
+
* @module runtimes/browser
|
|
14
|
+
*/
|
|
15
|
+
export * from './agent';
|
|
16
|
+
export * from './anonymousToken';
|
|
17
|
+
export * from './frontendTools';
|
|
18
|
+
export * from './model';
|
|
19
|
+
export * from './protocol';
|
|
20
|
+
export * from './subagents';
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { LanguageModel } from 'ai';
|
|
2
|
+
/** Where the inference service's OpenAI-compatible API lives under its host. */
|
|
3
|
+
export declare const INFERENCE_API_PATH = "/api/ai-inference/v1";
|
|
4
|
+
/**
|
|
5
|
+
* The model a spec asks for when it says nothing.
|
|
6
|
+
*
|
|
7
|
+
* Matches the specs written for this harness rather than being a general
|
|
8
|
+
* default, so a caller that forgets to pass one still gets a working agent
|
|
9
|
+
* instead of a 404 from a model nobody provisioned.
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_BROWSER_MODEL = "bedrock:us.anthropic.claude-sonnet-4-6";
|
|
12
|
+
export type BrowserModelOptions = {
|
|
13
|
+
/**
|
|
14
|
+
* Base URL of the inference service — `configuration.aiInferenceUrl`.
|
|
15
|
+
*
|
|
16
|
+
* The `/api/ai-inference/v1` suffix is added when it is not already there,
|
|
17
|
+
* so a caller can pass either the host or the full API root.
|
|
18
|
+
*/
|
|
19
|
+
inferenceUrl: string;
|
|
20
|
+
/** The model id, as a spec spells it. */
|
|
21
|
+
model?: string;
|
|
22
|
+
/**
|
|
23
|
+
* The signed-in person's Datalayer token.
|
|
24
|
+
*
|
|
25
|
+
* Required in practice: the inference service admits platform members only.
|
|
26
|
+
* Optional in the type so a host can build the model before the token has
|
|
27
|
+
* arrived, and {@link browserModelRequiresSignIn} is the check to make
|
|
28
|
+
* before offering the agent rather than letting it fail on the first turn.
|
|
29
|
+
*/
|
|
30
|
+
token?: string;
|
|
31
|
+
/** Extra headers, for a host that authenticates some other way. */
|
|
32
|
+
headers?: Record<string, string>;
|
|
33
|
+
/** Custom fetch, for tests and for hosts that wrap the network. */
|
|
34
|
+
fetch?: typeof globalThis.fetch;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Whether this agent would be refused for want of a sign-in.
|
|
38
|
+
*
|
|
39
|
+
* Worth asking before showing a chat: an agent that answers every message with
|
|
40
|
+
* a 401 is worse than one a host had the sense not to offer.
|
|
41
|
+
*/
|
|
42
|
+
export declare function browserModelRequiresSignIn(options: Pick<BrowserModelOptions, 'token'>): boolean;
|
|
43
|
+
/** The API root for an inference host, given either form of the URL. */
|
|
44
|
+
export declare function inferenceApiUrl(inferenceUrl: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* A language model that answers from the inference service.
|
|
47
|
+
*
|
|
48
|
+
* `.chat()` rather than the provider's default: that is the
|
|
49
|
+
* `/chat/completions` endpoint, which is the one the inference service
|
|
50
|
+
* normalises tools and model names for.
|
|
51
|
+
*/
|
|
52
|
+
export declare function createBrowserModel(options: BrowserModelOptions): LanguageModel;
|