@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
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
* An agent loop that turns in the page.
|
|
12
|
+
*
|
|
13
|
+
* The server-side harness reads a spec and builds a pydantic-ai agent from it.
|
|
14
|
+
* This reads the same spec and builds a Vercel AI SDK agent from it — same
|
|
15
|
+
* prompt, same model name, same tools, different thing turning the loop.
|
|
16
|
+
*
|
|
17
|
+
* What a browser agent does *not* get comes from the spec too, and it is not a
|
|
18
|
+
* limitation this module has to enforce: a spec written for this harness
|
|
19
|
+
* declares no MCP servers, no sandbox and no codemode, because none of them
|
|
20
|
+
* exist without a server. All that is left is the frontend tools, and those
|
|
21
|
+
* were always the ones that ran here anyway.
|
|
22
|
+
*
|
|
23
|
+
* @module runtimes/browser/agent
|
|
24
|
+
*/
|
|
25
|
+
import { ToolLoopAgent, stepCountIs } from 'ai';
|
|
26
|
+
import { frontendToolsToVercelAI, } from './frontendTools';
|
|
27
|
+
import { createBrowserModel } from './model';
|
|
28
|
+
/**
|
|
29
|
+
* How many model turns one request may take.
|
|
30
|
+
*
|
|
31
|
+
* A compaction reads a notebook cell by cell and then edits it, so the loop
|
|
32
|
+
* needs room — but it is running against a person's own page with nothing
|
|
33
|
+
* between it and a bill, so it needs a ceiling too.
|
|
34
|
+
*/
|
|
35
|
+
export const DEFAULT_BROWSER_MAX_STEPS = 24;
|
|
36
|
+
/**
|
|
37
|
+
* Build the agent a browser variant runs.
|
|
38
|
+
*
|
|
39
|
+
* The result is an SDK agent, so it drops straight into `DirectChatTransport`
|
|
40
|
+
* and from there into the same `useChat` the rest of the chat UI is built on
|
|
41
|
+
* — which is why nothing downstream of the transport has to know which
|
|
42
|
+
* harness produced its messages.
|
|
43
|
+
*/
|
|
44
|
+
export function createBrowserAgent(options) {
|
|
45
|
+
const { spec, frontendTools, inference, model, maxSteps = DEFAULT_BROWSER_MAX_STEPS, onHitlRequired, onStatusChange, } = options;
|
|
46
|
+
if (!model && !inference) {
|
|
47
|
+
throw new Error('A browser agent needs either a `model` or an `inference` endpoint to reach one.');
|
|
48
|
+
}
|
|
49
|
+
return new ToolLoopAgent({
|
|
50
|
+
id: spec.id,
|
|
51
|
+
model: model ??
|
|
52
|
+
createBrowserModel({
|
|
53
|
+
...inference,
|
|
54
|
+
model: spec.model,
|
|
55
|
+
}),
|
|
56
|
+
instructions: spec.systemPrompt,
|
|
57
|
+
tools: frontendToolsToVercelAI(frontendTools, {
|
|
58
|
+
onHitlRequired,
|
|
59
|
+
onStatusChange,
|
|
60
|
+
}),
|
|
61
|
+
stopWhen: stepCountIs(maxSteps),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/** A minted token and the moment it stops being worth sending. */
|
|
2
|
+
export type AnonymousToken = {
|
|
3
|
+
token: string;
|
|
4
|
+
/** Epoch milliseconds, from the token's own lifetime plus the local clock. */
|
|
5
|
+
expiresAt: number;
|
|
6
|
+
/** How long the service signed it for, as the token itself declares. */
|
|
7
|
+
lifetimeMs: number;
|
|
8
|
+
};
|
|
9
|
+
/** Where an anonymous visitor's access has got to. */
|
|
10
|
+
export type AnonymousSessionStatus =
|
|
11
|
+
/** Nobody has asked for a key — the usual case, because somebody is signed in. */
|
|
12
|
+
'idle'
|
|
13
|
+
/** Asked for, not yet answered. */
|
|
14
|
+
| 'minting'
|
|
15
|
+
/** Held, and still worth sending. */
|
|
16
|
+
| 'active'
|
|
17
|
+
/** Spent. The agent will be refused from here on. */
|
|
18
|
+
| 'expired'
|
|
19
|
+
/** The service would not issue one. */
|
|
20
|
+
| 'failed';
|
|
21
|
+
export type AnonymousSession = {
|
|
22
|
+
status: AnonymousSessionStatus;
|
|
23
|
+
/** The key, while it is worth sending. */
|
|
24
|
+
token?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Epoch milliseconds at which the key stops being honoured.
|
|
27
|
+
*
|
|
28
|
+
* Read out of the token — see {@link tokenLifetimeMs} — rather than assumed,
|
|
29
|
+
* so a service that signs keys for five minutes is counted for five minutes
|
|
30
|
+
* without anything here being changed.
|
|
31
|
+
*/
|
|
32
|
+
expiresAt?: number;
|
|
33
|
+
/** How long the key was signed for, so a countdown can draw a proportion. */
|
|
34
|
+
grantedMs?: number;
|
|
35
|
+
/** Why there is no key, when the service refused. */
|
|
36
|
+
error?: string;
|
|
37
|
+
};
|
|
38
|
+
type AnonymousSessionStore = AnonymousSession & {
|
|
39
|
+
/** Whether the one retry has been spent, so a refusal cannot loop. */
|
|
40
|
+
retried?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Get a key, if this visitor has not had one.
|
|
43
|
+
*
|
|
44
|
+
* Idempotent by design: every consumer may call it, and a session already
|
|
45
|
+
* under way — or already spent — is left exactly as it is. Spent in
|
|
46
|
+
* particular: minting again on the next render is how a trial that is
|
|
47
|
+
* supposed to end becomes one that never does.
|
|
48
|
+
*/
|
|
49
|
+
start: (inferenceUrl: string) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Declare the key spent, now.
|
|
52
|
+
*
|
|
53
|
+
* Called by the store's own timer, and by anything that can see the clock
|
|
54
|
+
* has passed — a countdown on screen recomputes from the wall clock every
|
|
55
|
+
* tick, where a `setTimeout` in a background tab is only ever late.
|
|
56
|
+
*/
|
|
57
|
+
expire: () => void;
|
|
58
|
+
/** Give the key up. Called when a member signs in, whose token is better. */
|
|
59
|
+
clear: () => void;
|
|
60
|
+
};
|
|
61
|
+
/** The claims this module reads. Everything else in the token is the service's. */
|
|
62
|
+
type JwtClaims = {
|
|
63
|
+
/** Seconds since the epoch, issuer's clock. */
|
|
64
|
+
exp?: number;
|
|
65
|
+
iat?: number;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Read a JWT's claims without verifying it.
|
|
69
|
+
*
|
|
70
|
+
* Deliberately unverified, and safe to be: this is the page reading the
|
|
71
|
+
* expiry off a key it was just handed, so it can draw a countdown. Nothing is
|
|
72
|
+
* authorised on the strength of it — the service verifies the signature on
|
|
73
|
+
* every request, and a visitor who forged a longer `exp` would only be lying
|
|
74
|
+
* to their own clock.
|
|
75
|
+
*
|
|
76
|
+
* Returns nothing for anything that is not a three-part JWT with a JSON
|
|
77
|
+
* payload, so an opaque token degrades to the `expires_in` beside it rather
|
|
78
|
+
* than throwing in a header.
|
|
79
|
+
*/
|
|
80
|
+
export declare function readJwtClaims(token: string): JwtClaims | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* How long a freshly issued token is good for, in milliseconds.
|
|
83
|
+
*
|
|
84
|
+
* `exp - iat` first: both claims come from the issuer, at the same instant, so
|
|
85
|
+
* their difference is a duration that no clock anywhere can distort. It is
|
|
86
|
+
* also the only source that is certainly the truth, because `exp` is the claim
|
|
87
|
+
* the service enforces.
|
|
88
|
+
*
|
|
89
|
+
* `expires_in` is the fallback, for a token that is not a JWT or carries no
|
|
90
|
+
* `iat`. An absolute `exp` against the local clock is deliberately *not* in
|
|
91
|
+
* this chain: on a machine whose clock is minutes out it produces a key that
|
|
92
|
+
* appears to expire before it was issued, which is worse than either.
|
|
93
|
+
*/
|
|
94
|
+
export declare function tokenLifetimeMs(token: string, expiresInSeconds?: number): number;
|
|
95
|
+
/**
|
|
96
|
+
* Mint one. Throws if the service refuses.
|
|
97
|
+
*
|
|
98
|
+
* The moment it dies is read off the token itself; see {@link tokenLifetimeMs}.
|
|
99
|
+
*/
|
|
100
|
+
export declare function fetchAnonymousToken(inferenceUrl: string, signal?: AbortSignal): Promise<AnonymousToken>;
|
|
101
|
+
export declare const useAnonymousSessionStore: import("zustand").UseBoundStore<import("zustand").StoreApi<AnonymousSessionStore>>;
|
|
102
|
+
/** Read the shared session without touching it. For anything that only draws it. */
|
|
103
|
+
export declare function useAnonymousSession(): AnonymousSession;
|
|
104
|
+
/**
|
|
105
|
+
* Hold an anonymous key for as long as one is wanted.
|
|
106
|
+
*
|
|
107
|
+
* The driving half: exactly one component in a tree should call this — the
|
|
108
|
+
* chat that would send the token — and everything else that needs to know
|
|
109
|
+
* reads {@link useAnonymousSession}.
|
|
110
|
+
*
|
|
111
|
+
* @param inferenceUrl Where the service is.
|
|
112
|
+
* @param enabled False when there is a signed-in member, whose own token is
|
|
113
|
+
* better in every way — it names them, it is metered to them, and it does
|
|
114
|
+
* not expire. Also false where no in-page agent will ask for inference at
|
|
115
|
+
* all, so a workspace on a server-backed agent does not burn a trial nobody
|
|
116
|
+
* is using.
|
|
117
|
+
*/
|
|
118
|
+
export declare function useAnonymousInferenceSession(inferenceUrl: string, enabled: boolean): AnonymousSession;
|
|
119
|
+
/** How much of the key's life is left, in milliseconds. Never negative. */
|
|
120
|
+
export declare function anonymousTimeLeft(session: Pick<AnonymousSession, 'expiresAt'>, now?: number): number;
|
|
121
|
+
export default useAnonymousInferenceSession;
|
|
@@ -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;
|