@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,208 @@
|
|
|
1
|
+
# Copyright (c) 2025-2026 Datalayer, Inc.
|
|
2
|
+
# Distributed under the terms of the Modified BSD License.
|
|
3
|
+
|
|
4
|
+
"""Composing and extending agent specs.
|
|
5
|
+
|
|
6
|
+
Tracked upstream as `datalayer/agentspecs#2`. Four specs that share a sandbox
|
|
7
|
+
variant, a toolset and a set of conventions should not drift apart by hand, so
|
|
8
|
+
a spec can say what it builds on:
|
|
9
|
+
|
|
10
|
+
extends: loop-base:0.0.1 # inheritance — "the same agent, adjusted"
|
|
11
|
+
includes: [notebook-surfaces] # composition — "this bundle, wherever needed"
|
|
12
|
+
|
|
13
|
+
A **fragment** is not a runnable agent: no model, no system prompt, only
|
|
14
|
+
capability. That distinction is what avoids a recursion trap — if the notebook
|
|
15
|
+
specialists inherited from the base agent they would inherit its subagent list,
|
|
16
|
+
and `@NotebookCompactor` could delegate to itself. Shared capability goes in a
|
|
17
|
+
fragment; only the base declares subagents.
|
|
18
|
+
|
|
19
|
+
Resolution happens here, at generation time, so the generated catalogue stays
|
|
20
|
+
flat, the runtime keeps zero inheritance logic, the result is visible in a diff
|
|
21
|
+
— and the `runtimes-companion` sidecar, which forwards specs to the pod without
|
|
22
|
+
interpreting a single field (D33), never sees an unresolved `extends`.
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
from __future__ import annotations
|
|
26
|
+
|
|
27
|
+
from typing import Any, Iterable, Optional
|
|
28
|
+
|
|
29
|
+
#: How deep an inheritance chain may go before it stops being readable.
|
|
30
|
+
MAX_EXTENDS_DEPTH = 3
|
|
31
|
+
|
|
32
|
+
#: Fields merged by appending, deduplicated, rather than replaced.
|
|
33
|
+
LIST_FIELDS = (
|
|
34
|
+
"tags",
|
|
35
|
+
"tools",
|
|
36
|
+
"skills",
|
|
37
|
+
"mcp_servers",
|
|
38
|
+
"frontend_tools",
|
|
39
|
+
"envvars",
|
|
40
|
+
"suggestions",
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
#: Keyed collections merged entry by entry.
|
|
44
|
+
KEYED_FIELDS = {
|
|
45
|
+
"frontend_render_tools": "tool",
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
#: Markers a child uses to drop something a parent granted.
|
|
49
|
+
REMOVE_PREFIX = "!remove "
|
|
50
|
+
REPLACE_MARKER = "!replace"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class CompositionError(ValueError):
|
|
54
|
+
"""A spec graph that cannot be resolved, named plainly."""
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _key_of(entry: Any) -> str:
|
|
58
|
+
"""The identity of a list entry, ignoring its version."""
|
|
59
|
+
text = str(entry)
|
|
60
|
+
base, _, version = text.rpartition(":")
|
|
61
|
+
return base if base and "." in version else text
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def merge_lists(parent: list[Any], child: list[Any]) -> list[Any]:
|
|
65
|
+
"""Append the child's entries to the parent's, honouring the markers.
|
|
66
|
+
|
|
67
|
+
Append rather than replace, because the common case is "the parent's tools
|
|
68
|
+
plus mine". `!replace` starts from nothing; `!remove x` drops one thing the
|
|
69
|
+
parent granted — which a least-privilege specialist needs to be able to say.
|
|
70
|
+
"""
|
|
71
|
+
if REPLACE_MARKER in child:
|
|
72
|
+
remaining = [c for c in child if c != REPLACE_MARKER]
|
|
73
|
+
return merge_lists([], remaining)
|
|
74
|
+
|
|
75
|
+
removals = {
|
|
76
|
+
_key_of(str(entry)[len(REMOVE_PREFIX) :])
|
|
77
|
+
for entry in child
|
|
78
|
+
if isinstance(entry, str) and entry.startswith(REMOVE_PREFIX)
|
|
79
|
+
}
|
|
80
|
+
additions = [
|
|
81
|
+
entry
|
|
82
|
+
for entry in child
|
|
83
|
+
if not (isinstance(entry, str) and entry.startswith(REMOVE_PREFIX))
|
|
84
|
+
]
|
|
85
|
+
|
|
86
|
+
merged: list[Any] = []
|
|
87
|
+
seen: set[str] = set()
|
|
88
|
+
for entry in [*parent, *additions]:
|
|
89
|
+
key = _key_of(entry)
|
|
90
|
+
if key in removals or key in seen:
|
|
91
|
+
continue
|
|
92
|
+
seen.add(key)
|
|
93
|
+
merged.append(entry)
|
|
94
|
+
return merged
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def merge_keyed(parent: list[Any], child: list[Any], key: str) -> list[Any]:
|
|
98
|
+
"""Merge two lists of dicts by a key, child winning."""
|
|
99
|
+
by_key: dict[str, Any] = {}
|
|
100
|
+
order: list[str] = []
|
|
101
|
+
for entry in [*parent, *child]:
|
|
102
|
+
if not isinstance(entry, dict):
|
|
103
|
+
continue
|
|
104
|
+
identity = str(entry.get(key))
|
|
105
|
+
if identity not in by_key:
|
|
106
|
+
order.append(identity)
|
|
107
|
+
by_key[identity] = {**by_key.get(identity, {}), **entry}
|
|
108
|
+
return [by_key[identity] for identity in order]
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def merge_spec(parent: dict[str, Any], child: dict[str, Any]) -> dict[str, Any]:
|
|
112
|
+
"""Merge a child spec onto its parent."""
|
|
113
|
+
merged = dict(parent)
|
|
114
|
+
|
|
115
|
+
for field, value in child.items():
|
|
116
|
+
if field in ("extends", "includes"):
|
|
117
|
+
continue
|
|
118
|
+
if field in LIST_FIELDS and isinstance(value, list):
|
|
119
|
+
merged[field] = merge_lists(list(parent.get(field) or []), value)
|
|
120
|
+
elif field in KEYED_FIELDS and isinstance(value, list):
|
|
121
|
+
merged[field] = merge_keyed(
|
|
122
|
+
list(parent.get(field) or []), value, KEYED_FIELDS[field]
|
|
123
|
+
)
|
|
124
|
+
elif field == "system_prompt_prepend":
|
|
125
|
+
merged["system_prompt"] = (
|
|
126
|
+
f"{value}\n\n{parent.get('system_prompt', '')}".strip()
|
|
127
|
+
)
|
|
128
|
+
elif field == "system_prompt_append":
|
|
129
|
+
merged["system_prompt"] = (
|
|
130
|
+
f"{parent.get('system_prompt', '')}\n\n{value}".strip()
|
|
131
|
+
)
|
|
132
|
+
else:
|
|
133
|
+
# Scalars, and anything unlisted: the child wins.
|
|
134
|
+
merged[field] = value
|
|
135
|
+
|
|
136
|
+
return merged
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _lookup(
|
|
140
|
+
ref: str,
|
|
141
|
+
catalogue: dict[str, dict[str, Any]],
|
|
142
|
+
kind: str,
|
|
143
|
+
) -> dict[str, Any]:
|
|
144
|
+
base = _key_of(ref)
|
|
145
|
+
spec = catalogue.get(base) or catalogue.get(ref)
|
|
146
|
+
if spec is None:
|
|
147
|
+
known = ", ".join(sorted(catalogue)[:8]) or "nothing"
|
|
148
|
+
raise CompositionError(
|
|
149
|
+
f"{kind} {ref!r} is not defined (known: {known}…)"
|
|
150
|
+
)
|
|
151
|
+
return spec
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
def resolve_spec(
|
|
155
|
+
spec: dict[str, Any],
|
|
156
|
+
specs: dict[str, dict[str, Any]],
|
|
157
|
+
fragments: dict[str, dict[str, Any]],
|
|
158
|
+
*,
|
|
159
|
+
_seen: Optional[tuple[str, ...]] = None,
|
|
160
|
+
) -> dict[str, Any]:
|
|
161
|
+
"""Flatten one spec's `extends` chain and `includes`.
|
|
162
|
+
|
|
163
|
+
Fragments are applied first and inheritance second, so a child's own
|
|
164
|
+
`extends` parent can override capability a fragment brought in.
|
|
165
|
+
"""
|
|
166
|
+
seen = _seen or ()
|
|
167
|
+
identity = str(spec.get("id") or "")
|
|
168
|
+
|
|
169
|
+
if identity in seen:
|
|
170
|
+
chain = " → ".join([*seen, identity])
|
|
171
|
+
raise CompositionError(f"Circular spec inheritance: {chain}")
|
|
172
|
+
if len(seen) >= MAX_EXTENDS_DEPTH:
|
|
173
|
+
raise CompositionError(
|
|
174
|
+
f"Inheritance deeper than {MAX_EXTENDS_DEPTH} at {identity!r}: "
|
|
175
|
+
"a spec graph nobody can read is worse than a repeated field"
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
resolved: dict[str, Any] = {}
|
|
179
|
+
|
|
180
|
+
for include in spec.get("includes") or []:
|
|
181
|
+
fragment = _lookup(str(include), fragments, "Fragment")
|
|
182
|
+
resolved = merge_spec(resolved, {k: v for k, v in fragment.items() if k != "id"})
|
|
183
|
+
|
|
184
|
+
parent_ref = spec.get("extends")
|
|
185
|
+
if parent_ref:
|
|
186
|
+
parent = _lookup(str(parent_ref), specs, "Parent spec")
|
|
187
|
+
parent_resolved = resolve_spec(
|
|
188
|
+
parent, specs, fragments, _seen=(*seen, identity)
|
|
189
|
+
)
|
|
190
|
+
resolved = merge_spec(resolved, parent_resolved)
|
|
191
|
+
|
|
192
|
+
return merge_spec(resolved, spec)
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def resolve_all(
|
|
196
|
+
specs: Iterable[dict[str, Any]],
|
|
197
|
+
fragments: Iterable[dict[str, Any]] = (),
|
|
198
|
+
) -> list[dict[str, Any]]:
|
|
199
|
+
"""Flatten a whole catalogue, leaving specs that compose nothing untouched."""
|
|
200
|
+
by_id = {str(s.get("id")): s for s in specs if s.get("id")}
|
|
201
|
+
fragments_by_id = {str(f.get("id")): f for f in fragments if f.get("id")}
|
|
202
|
+
|
|
203
|
+
return [
|
|
204
|
+
resolve_spec(spec, by_id, fragments_by_id)
|
|
205
|
+
if (spec.get("extends") or spec.get("includes"))
|
|
206
|
+
else spec
|
|
207
|
+
for spec in by_id.values()
|
|
208
|
+
]
|
|
@@ -23,6 +23,8 @@ from versioning import (
|
|
|
23
23
|
versioned_ref,
|
|
24
24
|
)
|
|
25
25
|
|
|
26
|
+
from compose import resolve_spec # noqa: E402 (sibling module, same folder)
|
|
27
|
+
|
|
26
28
|
|
|
27
29
|
def _fmt_list(items: list[str]) -> str:
|
|
28
30
|
"""Format a list of strings with double quotes for ruff compliance."""
|
|
@@ -45,6 +47,112 @@ def _fmt_ts_literal(value: Any) -> str:
|
|
|
45
47
|
return json.dumps(value, ensure_ascii=False)
|
|
46
48
|
|
|
47
49
|
|
|
50
|
+
def _suggestion_fields(item: Any) -> dict[str, Any]:
|
|
51
|
+
"""A suggestion's fields, from either shape it may be written in.
|
|
52
|
+
|
|
53
|
+
A bare string is still read as a suggestion with no marks. Specs were all
|
|
54
|
+
migrated to the mapping form, so nothing in the catalogue takes this path —
|
|
55
|
+
it is here so a hand-written spec, or one restored from an older branch,
|
|
56
|
+
generates rather than crashing the build with an attribute error.
|
|
57
|
+
"""
|
|
58
|
+
if isinstance(item, str):
|
|
59
|
+
return {"text": item}
|
|
60
|
+
return {
|
|
61
|
+
"text": item.get("text", ""),
|
|
62
|
+
# The label, when the text is too long to be one.
|
|
63
|
+
"summary": item.get("summary"),
|
|
64
|
+
"icon": item.get("icon"),
|
|
65
|
+
"emoji": item.get("emoji"),
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def _fmt_py_suggestions(items: list[Any]) -> str:
|
|
70
|
+
"""`AgentSuggestion(...)` calls, one per line, or an empty list."""
|
|
71
|
+
if not items:
|
|
72
|
+
return "[]"
|
|
73
|
+
rendered = []
|
|
74
|
+
for item in items:
|
|
75
|
+
fields = _suggestion_fields(item)
|
|
76
|
+
parts = [f"text={_fmt_py_literal(fields['text'])}"]
|
|
77
|
+
for key in ("summary", "icon", "emoji"):
|
|
78
|
+
if fields.get(key):
|
|
79
|
+
parts.append(f"{key}={_fmt_py_literal(fields[key])}")
|
|
80
|
+
rendered.append(f"AgentSuggestion({', '.join(parts)})")
|
|
81
|
+
return "[\n " + ",\n ".join(rendered) + ",\n ]"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def _fmt_ts_suggestions(items: list[Any]) -> str:
|
|
85
|
+
"""Object literals, one per line, or an empty array."""
|
|
86
|
+
if not items:
|
|
87
|
+
return "[]"
|
|
88
|
+
rendered = []
|
|
89
|
+
for item in items:
|
|
90
|
+
fields = _suggestion_fields(item)
|
|
91
|
+
parts = [f"text: {_fmt_ts_literal(fields['text'])}"]
|
|
92
|
+
for key in ("summary", "icon", "emoji"):
|
|
93
|
+
if fields.get(key):
|
|
94
|
+
parts.append(f"{key}: {_fmt_ts_literal(fields[key])}")
|
|
95
|
+
rendered.append("{ " + ", ".join(parts) + " }")
|
|
96
|
+
return "[\n " + ",\n ".join(rendered) + ",\n ]"
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def _delegable_fields(item: Any) -> dict[str, Any]:
|
|
100
|
+
"""
|
|
101
|
+
One `delegable` entry from YAML, as a mapping.
|
|
102
|
+
|
|
103
|
+
Parameters
|
|
104
|
+
----------
|
|
105
|
+
item : Any
|
|
106
|
+
A mapping, or a bare string naming a capability with nothing else
|
|
107
|
+
said about it — the common case, and worth allowing so a spec that
|
|
108
|
+
has nothing to add beyond the id does not have to write a mapping.
|
|
109
|
+
|
|
110
|
+
Returns
|
|
111
|
+
-------
|
|
112
|
+
dict[str, Any]
|
|
113
|
+
The entry's fields.
|
|
114
|
+
"""
|
|
115
|
+
if isinstance(item, str):
|
|
116
|
+
return {"id": item}
|
|
117
|
+
return dict(item or {})
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def _fmt_py_delegable(items: list[Any]) -> str:
|
|
121
|
+
"""`AgentCapability(...)` calls, one per line, or an empty list."""
|
|
122
|
+
if not items:
|
|
123
|
+
return "[]"
|
|
124
|
+
rendered = []
|
|
125
|
+
for item in items:
|
|
126
|
+
fields = _delegable_fields(item)
|
|
127
|
+
parts = [f"id={_fmt_py_literal(fields['id'])}"]
|
|
128
|
+
for key in ("name", "description"):
|
|
129
|
+
if fields.get(key):
|
|
130
|
+
parts.append(f"{key}={_fmt_py_literal(fields[key])}")
|
|
131
|
+
for key in ("inputs", "outputs", "tags"):
|
|
132
|
+
if fields.get(key):
|
|
133
|
+
parts.append(f"{key}={_fmt_py_literal(list(fields[key]))}")
|
|
134
|
+
rendered.append(f"AgentCapability({', '.join(parts)})")
|
|
135
|
+
return "[\n " + ",\n ".join(rendered) + ",\n ]"
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def _fmt_ts_delegable(items: list[Any]) -> str:
|
|
139
|
+
"""Object literals, one per line, or an empty array."""
|
|
140
|
+
if not items:
|
|
141
|
+
return "[]"
|
|
142
|
+
rendered = []
|
|
143
|
+
for item in items:
|
|
144
|
+
fields = _delegable_fields(item)
|
|
145
|
+
parts = [f"id: {_fmt_ts_literal(fields['id'])}"]
|
|
146
|
+
for key in ("name", "description"):
|
|
147
|
+
if fields.get(key):
|
|
148
|
+
parts.append(f"{key}: {_fmt_ts_literal(fields[key])}")
|
|
149
|
+
for key in ("inputs", "outputs", "tags"):
|
|
150
|
+
if fields.get(key):
|
|
151
|
+
parts.append(f"{key}: {_fmt_ts_literal(list(fields[key]))}")
|
|
152
|
+
rendered.append("{ " + ", ".join(parts) + " }")
|
|
153
|
+
return "[\n " + ",\n ".join(rendered) + ",\n ]"
|
|
154
|
+
|
|
155
|
+
|
|
48
156
|
def _normalize_subagents_for_typescript(value: Any) -> Any:
|
|
49
157
|
"""Convert subagents config keys from YAML snake_case to TS camelCase."""
|
|
50
158
|
if not isinstance(value, dict):
|
|
@@ -107,10 +215,35 @@ def _sanitize_spec_for_codegen(spec: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
107
215
|
return sanitized
|
|
108
216
|
|
|
109
217
|
|
|
218
|
+
def load_fragments(specs_dir: Path) -> List[Dict[str, Any]]:
|
|
219
|
+
"""Load capability fragments, which live beside the agents.
|
|
220
|
+
|
|
221
|
+
A fragment is not a runnable agent — no model, no system prompt, only
|
|
222
|
+
capability — so it is loaded separately and never generated into the
|
|
223
|
+
catalogue. See `scripts/codegen/compose.py`.
|
|
224
|
+
"""
|
|
225
|
+
fragments_dir = specs_dir.parent / "fragments"
|
|
226
|
+
if not fragments_dir.is_dir():
|
|
227
|
+
return []
|
|
228
|
+
|
|
229
|
+
fragments: List[Dict[str, Any]] = []
|
|
230
|
+
for yaml_file in sorted(fragments_dir.glob("*.yaml")):
|
|
231
|
+
with open(yaml_file, "r") as f:
|
|
232
|
+
fragment = yaml.safe_load(f)
|
|
233
|
+
if fragment:
|
|
234
|
+
fragments.append(fragment)
|
|
235
|
+
return fragments
|
|
236
|
+
|
|
237
|
+
|
|
110
238
|
def load_yaml_specs(specs_dir: Path) -> List[tuple[str, Dict[str, Any]]]:
|
|
111
239
|
"""
|
|
112
240
|
Load all YAML agent specifications from directory and subdirectories.
|
|
113
241
|
|
|
242
|
+
Specs that declare `extends` or `includes` are flattened here, at
|
|
243
|
+
generation time, so the generated catalogue stays flat, the runtime keeps
|
|
244
|
+
no inheritance logic, and the pod companion — which forwards specs without
|
|
245
|
+
interpreting a field (D33) — never meets an unresolved reference.
|
|
246
|
+
|
|
114
247
|
Returns list of tuples: (subfolder_name, spec_dict)
|
|
115
248
|
where subfolder_name is the immediate parent folder name, or "" for root level.
|
|
116
249
|
"""
|
|
@@ -134,7 +267,17 @@ def load_yaml_specs(specs_dir: Path) -> List[tuple[str, Dict[str, Any]]]:
|
|
|
134
267
|
ensure_spec_version(spec)
|
|
135
268
|
specs.append((subdir.name, spec))
|
|
136
269
|
|
|
137
|
-
|
|
270
|
+
fragments = load_fragments(specs_dir)
|
|
271
|
+
by_id = {str(spec.get("id")): spec for _, spec in specs if spec.get("id")}
|
|
272
|
+
fragments_by_id = {str(f.get("id")): f for f in fragments if f.get("id")}
|
|
273
|
+
|
|
274
|
+
resolved: List[tuple[str, Dict[str, Any]]] = []
|
|
275
|
+
for subfolder, spec in specs:
|
|
276
|
+
if spec.get("extends") or spec.get("includes"):
|
|
277
|
+
spec = resolve_spec(spec, by_id, fragments_by_id)
|
|
278
|
+
resolved.append((subfolder, spec))
|
|
279
|
+
|
|
280
|
+
return resolved
|
|
138
281
|
|
|
139
282
|
|
|
140
283
|
def generate_python_code(specs: List[tuple[str, Dict[str, Any]]]) -> str:
|
|
@@ -154,7 +297,13 @@ Generated from YAML specifications in specs/agents/
|
|
|
154
297
|
from typing import Dict
|
|
155
298
|
|
|
156
299
|
from agent_runtimes.mcp.catalog_mcp_servers import MCP_SERVER_CATALOG
|
|
157
|
-
from agent_runtimes.types import
|
|
300
|
+
from agent_runtimes.types import (
|
|
301
|
+
AgentCapability,
|
|
302
|
+
Agentspec,
|
|
303
|
+
AgentSuggestion,
|
|
304
|
+
SubAgentspecConfig,
|
|
305
|
+
SubAgentsConfig,
|
|
306
|
+
)
|
|
158
307
|
|
|
159
308
|
# ============================================================================
|
|
160
309
|
# Agent Specs
|
|
@@ -234,13 +383,7 @@ from agent_runtimes.types import Agentspec, SubAgentspecConfig, SubAgentsConfig
|
|
|
234
383
|
emoji = f'"{spec.get("emoji")}"' if spec.get("emoji") else "None"
|
|
235
384
|
color = f'"{spec.get("color")}"' if spec.get("color") else "None"
|
|
236
385
|
suggestions = spec.get("suggestions", [])
|
|
237
|
-
suggestions_str = (
|
|
238
|
-
"[\n "
|
|
239
|
-
+ ",\n ".join(_fmt_py_literal(s) for s in suggestions)
|
|
240
|
-
+ ",\n ]"
|
|
241
|
-
if suggestions
|
|
242
|
-
else "[]"
|
|
243
|
-
)
|
|
386
|
+
suggestions_str = _fmt_py_suggestions(suggestions)
|
|
244
387
|
# Escape multi-line strings properly
|
|
245
388
|
welcome = (
|
|
246
389
|
spec.get("welcome_message", "").replace('"', '\\"').replace("\n", " ")
|
|
@@ -297,6 +440,10 @@ from agent_runtimes.types import Agentspec, SubAgentspecConfig, SubAgentsConfig
|
|
|
297
440
|
# Sandbox variant field
|
|
298
441
|
sandbox_variant = spec.get("sandbox_variant")
|
|
299
442
|
sandbox_variant_str = f'"{sandbox_variant}"' if sandbox_variant else "None"
|
|
443
|
+
# Defaulted rather than optional: every agent is run by something,
|
|
444
|
+
# and a spec that says nothing is run by the server-side harness
|
|
445
|
+
# that has always run it.
|
|
446
|
+
harness = spec.get("harness") or "pydantic-ai"
|
|
300
447
|
|
|
301
448
|
# New flow-level fields
|
|
302
449
|
goal_raw = spec.get("goal")
|
|
@@ -308,6 +455,7 @@ from agent_runtimes.types import Agentspec, SubAgentspecConfig, SubAgentsConfig
|
|
|
308
455
|
goal_str = _fmt_py_literal(goal_clean)
|
|
309
456
|
protocol_val = spec.get("protocol")
|
|
310
457
|
protocol_str = f'"{protocol_val}"' if protocol_val else "None"
|
|
458
|
+
delegable_str = _fmt_py_delegable(spec.get("delegable", []))
|
|
311
459
|
ui_ext = spec.get("ui_extension")
|
|
312
460
|
ui_ext_str = f'"{ui_ext}"' if ui_ext else "None"
|
|
313
461
|
trigger_val = spec.get("trigger")
|
|
@@ -318,6 +466,7 @@ from agent_runtimes.types import Agentspec, SubAgentspecConfig, SubAgentsConfig
|
|
|
318
466
|
codemode_val = spec.get("codemode")
|
|
319
467
|
output_val = spec.get("output")
|
|
320
468
|
advanced_val = spec.get("advanced")
|
|
469
|
+
checkpoints_val = spec.get("checkpoints")
|
|
321
470
|
auth_policy = spec.get("authorization_policy")
|
|
322
471
|
auth_policy_str = f'"{auth_policy}"' if auth_policy is not None else "None"
|
|
323
472
|
notifs = spec.get("notifications")
|
|
@@ -337,9 +486,15 @@ from agent_runtimes.types import Agentspec, SubAgentspecConfig, SubAgentsConfig
|
|
|
337
486
|
sa_fields = [
|
|
338
487
|
f"name={_fmt_py_literal(sa['name'])}",
|
|
339
488
|
f"description={_fmt_py_literal(sa['description'])}",
|
|
340
|
-
|
|
489
|
+
# Optional: a subagent that names a `ref` takes its
|
|
490
|
+
# instructions from the spec it refers to.
|
|
491
|
+
f"instructions={_fmt_py_literal(sa.get('instructions', ''))}",
|
|
341
492
|
]
|
|
342
493
|
for opt_key in (
|
|
494
|
+
"ref",
|
|
495
|
+
# Where a subagent reached over A2A is, or how to
|
|
496
|
+
# launch it; a mapping, coerced by the pydantic model.
|
|
497
|
+
"a2a",
|
|
343
498
|
"model",
|
|
344
499
|
"can_ask_questions",
|
|
345
500
|
"max_questions",
|
|
@@ -347,24 +502,39 @@ from agent_runtimes.types import Agentspec, SubAgentspecConfig, SubAgentsConfig
|
|
|
347
502
|
"typical_complexity",
|
|
348
503
|
"typically_needs_context",
|
|
349
504
|
):
|
|
505
|
+
camel_key = "".join(
|
|
506
|
+
part if index == 0 else part.capitalize()
|
|
507
|
+
for index, part in enumerate(opt_key.split("_"))
|
|
508
|
+
)
|
|
350
509
|
opt_val = sa.get(opt_key)
|
|
510
|
+
if opt_val is None:
|
|
511
|
+
opt_val = sa.get(camel_key)
|
|
351
512
|
if opt_val is not None:
|
|
352
513
|
sa_fields.append(f"{opt_key}={_fmt_py_literal(opt_val)}")
|
|
353
514
|
sa_items.append("SubAgentspecConfig(" + ", ".join(sa_fields) + ")")
|
|
354
515
|
sa_list_str = "[" + ", ".join(sa_items) + "]"
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
if subagents_val.get("max_nesting_depth") is not None:
|
|
365
|
-
cfg_parts.append(
|
|
366
|
-
f"max_nesting_depth={_fmt_py_literal(subagents_val['max_nesting_depth'])}"
|
|
516
|
+
|
|
517
|
+
# The specs are written in camelCase (`includeGeneralPurpose`),
|
|
518
|
+
# matching the TypeScript aliases, but only snake_case was read
|
|
519
|
+
# here — so `maxNestingDepth: 2` in a YAML silently generated
|
|
520
|
+
# the default of 0. Accept both spellings.
|
|
521
|
+
def _subagents_option(snake: str) -> Any:
|
|
522
|
+
camel = "".join(
|
|
523
|
+
part if index == 0 else part.capitalize()
|
|
524
|
+
for index, part in enumerate(snake.split("_"))
|
|
367
525
|
)
|
|
526
|
+
value = subagents_val.get(snake)
|
|
527
|
+
return value if value is not None else subagents_val.get(camel)
|
|
528
|
+
|
|
529
|
+
cfg_parts = [f"subagents={sa_list_str}"]
|
|
530
|
+
for option in (
|
|
531
|
+
"default_model",
|
|
532
|
+
"include_general_purpose",
|
|
533
|
+
"max_nesting_depth",
|
|
534
|
+
):
|
|
535
|
+
option_value = _subagents_option(option)
|
|
536
|
+
if option_value is not None:
|
|
537
|
+
cfg_parts.append(f"{option}={_fmt_py_literal(option_value)}")
|
|
368
538
|
subagents_str = "SubAgentsConfig(" + ", ".join(cfg_parts) + ")"
|
|
369
539
|
|
|
370
540
|
domain_value = spec.get("domain") or spec.get("vertical")
|
|
@@ -392,9 +562,11 @@ from agent_runtimes.types import Agentspec, SubAgentspecConfig, SubAgentsConfig
|
|
|
392
562
|
welcome_notebook={f'"{welcome_notebook}"' if welcome_notebook else "None"},
|
|
393
563
|
welcome_document={f'"{welcome_document}"' if welcome_document else "None"},
|
|
394
564
|
sandbox_variant={sandbox_variant_str},
|
|
565
|
+
harness="{harness}",
|
|
395
566
|
system_prompt={system_prompt_str},
|
|
396
567
|
system_prompt_codemode_addons={system_prompt_codemode_addons_str},
|
|
397
568
|
goal={goal_str},
|
|
569
|
+
delegable={delegable_str},
|
|
398
570
|
protocol={protocol_str},
|
|
399
571
|
ui_extension={ui_ext_str},
|
|
400
572
|
trigger={_fmt_py_literal(trigger_val)},
|
|
@@ -405,6 +577,7 @@ from agent_runtimes.types import Agentspec, SubAgentspecConfig, SubAgentsConfig
|
|
|
405
577
|
codemode={_fmt_py_literal(codemode_val)},
|
|
406
578
|
output={_fmt_py_literal(output_val)},
|
|
407
579
|
advanced={_fmt_py_literal(advanced_val)},
|
|
580
|
+
checkpoints={_fmt_py_literal(checkpoints_val)},
|
|
408
581
|
authorization_policy={auth_policy_str},
|
|
409
582
|
notifications={_fmt_py_literal(notifs)},
|
|
410
583
|
memory={memory_str},
|
|
@@ -843,15 +1016,7 @@ const FRONTEND_TOOL_MAP: Record<string, any> = {
|
|
|
843
1016
|
domain_ts = f"'{domain_val}'" if domain_val else "undefined"
|
|
844
1017
|
|
|
845
1018
|
suggestions = spec.get("suggestions", [])
|
|
846
|
-
|
|
847
|
-
escaped_suggestions = [s.replace("'", "\\'") for s in suggestions]
|
|
848
|
-
suggestions_str = (
|
|
849
|
-
"[\n "
|
|
850
|
-
+ ",\n ".join(f"'{s}'" for s in escaped_suggestions)
|
|
851
|
-
+ ",\n ]"
|
|
852
|
-
if suggestions
|
|
853
|
-
else "[]"
|
|
854
|
-
)
|
|
1019
|
+
suggestions_str = _fmt_ts_suggestions(suggestions)
|
|
855
1020
|
|
|
856
1021
|
# Format optional fields
|
|
857
1022
|
icon = f"'{spec.get('icon')}'" if spec.get("icon") else "undefined"
|
|
@@ -899,6 +1064,7 @@ const FRONTEND_TOOL_MAP: Record<string, any> = {
|
|
|
899
1064
|
sandbox_variant_ts = (
|
|
900
1065
|
f"'{sandbox_variant}'" if sandbox_variant else "undefined"
|
|
901
1066
|
)
|
|
1067
|
+
harness = spec.get("harness") or "pydantic-ai"
|
|
902
1068
|
|
|
903
1069
|
# New flow-level fields
|
|
904
1070
|
goal_raw = spec.get("goal")
|
|
@@ -909,6 +1075,7 @@ const FRONTEND_TOOL_MAP: Record<string, any> = {
|
|
|
909
1075
|
)
|
|
910
1076
|
protocol_val = spec.get("protocol")
|
|
911
1077
|
protocol_ts = f"'{protocol_val}'" if protocol_val else "undefined"
|
|
1078
|
+
delegable_ts = _fmt_ts_delegable(spec.get("delegable", []))
|
|
912
1079
|
ui_ext = spec.get("ui_extension")
|
|
913
1080
|
ui_ext_ts = f"'{ui_ext}'" if ui_ext else "undefined"
|
|
914
1081
|
trigger_val = spec.get("trigger")
|
|
@@ -919,6 +1086,7 @@ const FRONTEND_TOOL_MAP: Record<string, any> = {
|
|
|
919
1086
|
codemode_val = spec.get("codemode")
|
|
920
1087
|
output_val = spec.get("output")
|
|
921
1088
|
advanced_val = spec.get("advanced")
|
|
1089
|
+
checkpoints_val = spec.get("checkpoints")
|
|
922
1090
|
auth_policy = spec.get("authorization_policy")
|
|
923
1091
|
auth_policy_ts = (
|
|
924
1092
|
f"'{auth_policy}'" if auth_policy is not None else "undefined"
|
|
@@ -962,9 +1130,11 @@ const FRONTEND_TOOL_MAP: Record<string, any> = {
|
|
|
962
1130
|
welcomeNotebook: {_fmt_ts_literal(welcome_notebook)},
|
|
963
1131
|
welcomeDocument: {_fmt_ts_literal(welcome_document)},
|
|
964
1132
|
sandboxVariant: {sandbox_variant_ts},
|
|
1133
|
+
harness: '{harness}',
|
|
965
1134
|
systemPrompt: {f"`{system_prompt}`" if system_prompt else "undefined"},
|
|
966
1135
|
systemPromptCodemodeAddons: {f"`{system_prompt_codemode_addons}`" if system_prompt_codemode_addons else "undefined"},
|
|
967
1136
|
goal: {goal_ts},
|
|
1137
|
+
delegable: {delegable_ts},
|
|
968
1138
|
protocol: {protocol_ts},
|
|
969
1139
|
uiExtension: {ui_ext_ts},
|
|
970
1140
|
trigger: {_fmt_ts_literal(trigger_val)},
|
|
@@ -975,6 +1145,7 @@ const FRONTEND_TOOL_MAP: Record<string, any> = {
|
|
|
975
1145
|
codemode: {_fmt_ts_literal(codemode_val)},
|
|
976
1146
|
output: {_fmt_ts_literal(output_val)},
|
|
977
1147
|
advanced: {_fmt_ts_literal(advanced_val)},
|
|
1148
|
+
checkpoints: {_fmt_ts_literal(checkpoints_val)},
|
|
978
1149
|
authorizationPolicy: {auth_policy_ts},
|
|
979
1150
|
notifications: {_fmt_ts_literal(notifs)},
|
|
980
1151
|
memory: {memory_ts},
|
|
@@ -166,6 +166,7 @@ def generate_python_code(specs: list[dict[str, Any]]) -> str:
|
|
|
166
166
|
f' evaluator_type="{evaluator_type}",',
|
|
167
167
|
f' pydantic_class="{pydantic_class}",',
|
|
168
168
|
f' output_kind="{output_kind}",',
|
|
169
|
+
f" executable={bool(spec.get('executable', False))},",
|
|
169
170
|
f' cost_tier="{spec.get("cost_tier", "free")}",',
|
|
170
171
|
f' latency="{spec.get("latency", "instant")}",',
|
|
171
172
|
f" requires={_fmt_list(spec.get('requires', []))},",
|
|
@@ -267,6 +268,7 @@ def generate_typescript_code(specs: list[dict[str, Any]]) -> str:
|
|
|
267
268
|
f" evaluator_type: '{evaluator_type}',",
|
|
268
269
|
f" pydantic_class: '{pydantic_class}',",
|
|
269
270
|
f" output_kind: '{output_kind}',",
|
|
271
|
+
f" executable: {'true' if spec.get('executable', False) else 'false'},",
|
|
270
272
|
f" cost_tier: '{spec.get('cost_tier', 'free')}',",
|
|
271
273
|
f" latency: '{spec.get('latency', 'instant')}',",
|
|
272
274
|
f" requires: {_ts_list(spec.get('requires', []))},",
|
|
@@ -7,6 +7,7 @@ Generate Python and TypeScript code from YAML frontend-tool specifications.
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
9
|
import argparse
|
|
10
|
+
import json
|
|
10
11
|
import sys
|
|
11
12
|
from pathlib import Path
|
|
12
13
|
from typing import Any
|
|
@@ -31,6 +32,33 @@ def load_frontend_tool_specs(specs_dir: Path) -> list[dict[str, Any]]:
|
|
|
31
32
|
return specs
|
|
32
33
|
|
|
33
34
|
|
|
35
|
+
|
|
36
|
+
def _fmt_toolset(value):
|
|
37
|
+
"""A toolset is `"all"` or a list of tool names — emit whichever it is.
|
|
38
|
+
|
|
39
|
+
Quoting a list turns it into a string containing brackets, which then reads
|
|
40
|
+
as one very strange tool name.
|
|
41
|
+
"""
|
|
42
|
+
if isinstance(value, (list, tuple)):
|
|
43
|
+
return "[" + ", ".join(f'"{name}"' for name in value) + "]"
|
|
44
|
+
return f'"{value}"'
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def _fmt_toolset_ts(value):
|
|
48
|
+
"""The same, for TypeScript."""
|
|
49
|
+
if isinstance(value, (list, tuple)):
|
|
50
|
+
return "[" + ", ".join(f"'{name}'" for name in value) + "]"
|
|
51
|
+
return f"'{value}'"
|
|
52
|
+
|
|
53
|
+
def _py_literal(value: Any) -> str:
|
|
54
|
+
return (
|
|
55
|
+
json.dumps(value, ensure_ascii=False)
|
|
56
|
+
.replace(": true", ": True")
|
|
57
|
+
.replace(": false", ": False")
|
|
58
|
+
.replace(": null", ": None")
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
34
62
|
def generate_python_code(specs: list[dict[str, Any]]) -> str:
|
|
35
63
|
lines = [
|
|
36
64
|
"# Copyright (c) 2025-2026 Datalayer, Inc.",
|
|
@@ -67,11 +95,11 @@ def generate_python_code(specs: list[dict[str, Any]]) -> str:
|
|
|
67
95
|
f"{const_name} = FrontendToolSpec(",
|
|
68
96
|
f' id="{tool_id}",',
|
|
69
97
|
f' version="{version}",',
|
|
70
|
-
f
|
|
71
|
-
f
|
|
98
|
+
f" name={_py_literal(spec['name'])},",
|
|
99
|
+
f" description={_py_literal(spec.get('description', ''))},",
|
|
72
100
|
f" tags={_fmt_list(spec.get('tags', []))},",
|
|
73
101
|
f" enabled={spec.get('enabled', True)},",
|
|
74
|
-
f
|
|
102
|
+
f" toolset={_fmt_toolset(spec.get('toolset', 'all'))},",
|
|
75
103
|
f" icon={icon},",
|
|
76
104
|
f" emoji={emoji},",
|
|
77
105
|
")",
|
|
@@ -158,11 +186,12 @@ def generate_typescript_code(specs: list[dict[str, Any]]) -> str:
|
|
|
158
186
|
f"export const {const_name}: FrontendToolSpec = {{",
|
|
159
187
|
f" id: '{tool_id}',",
|
|
160
188
|
f" version: '{version}',",
|
|
161
|
-
|
|
162
|
-
f"
|
|
189
|
+
# JSON-escaped: an apostrophe in a description is not a syntax error.
|
|
190
|
+
f" name: {json.dumps(spec['name'], ensure_ascii=False)},",
|
|
191
|
+
f" description: {json.dumps(spec.get('description', ''), ensure_ascii=False)},",
|
|
163
192
|
f" tags: {tags_json},",
|
|
164
193
|
f" enabled: {str(spec.get('enabled', True)).lower()},",
|
|
165
|
-
f" toolset:
|
|
194
|
+
f" toolset: {_fmt_toolset_ts(spec.get('toolset', 'all'))},",
|
|
166
195
|
f" icon: {icon},",
|
|
167
196
|
f" emoji: {emoji},",
|
|
168
197
|
"};",
|