@agent-native/core 0.46.0 → 0.48.1
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/bin/agent-native.js +41 -0
- package/dist/a2a/handlers.js +2 -2
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/server.js +2 -2
- package/dist/a2a/server.js.map +1 -1
- package/dist/action.d.ts +43 -2
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/context-xray/actions/context-evict.d.ts +7 -1
- package/dist/agent/context-xray/actions/context-evict.d.ts.map +1 -1
- package/dist/agent/context-xray/actions/context-manifest-get.d.ts +4 -1
- package/dist/agent/context-xray/actions/context-manifest-get.d.ts.map +1 -1
- package/dist/agent/context-xray/actions/context-pin.d.ts +7 -1
- package/dist/agent/context-xray/actions/context-pin.d.ts.map +1 -1
- package/dist/agent/context-xray/actions/context-report.d.ts +12 -1
- package/dist/agent/context-xray/actions/context-report.d.ts.map +1 -1
- package/dist/agent/context-xray/actions/context-restore.d.ts +7 -1
- package/dist/agent/context-xray/actions/context-restore.d.ts.map +1 -1
- package/dist/agent/context-xray/apply-directives.d.ts.map +1 -1
- package/dist/agent/context-xray/apply-directives.js.map +1 -1
- package/dist/agent/context-xray/schema.d.ts +10 -10
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +26 -3
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +47 -8
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/builtin.js +1 -1
- package/dist/agent/engine/builtin.js.map +1 -1
- package/dist/agent/engine/output-tokens.d.ts +1 -1
- package/dist/agent/engine/output-tokens.d.ts.map +1 -1
- package/dist/agent/engine/output-tokens.js +6 -2
- package/dist/agent/engine/output-tokens.js.map +1 -1
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +7 -4
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/engine/types.d.ts +19 -0
- package/dist/agent/engine/types.d.ts.map +1 -1
- package/dist/agent/engine/types.js +6 -0
- package/dist/agent/engine/types.js.map +1 -1
- package/dist/agent/model-config.d.ts +22 -14
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +113 -8
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/production-agent.d.ts +47 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +267 -46
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +10 -0
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/run-manager.d.ts +1 -0
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +36 -9
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +47 -4
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +154 -4
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +57 -2
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +3 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/agent-web/generator.d.ts +3 -3
- package/dist/appearance/actions/change-appearance.d.ts +6 -1
- package/dist/appearance/actions/change-appearance.d.ts.map +1 -1
- package/dist/application-state/handlers.d.ts +2 -2
- package/dist/application-state/handlers.d.ts.map +1 -1
- package/dist/application-state/store.d.ts.map +1 -1
- package/dist/application-state/store.js +17 -0
- package/dist/application-state/store.js.map +1 -1
- package/dist/catalog.json +2 -1
- package/dist/cli/code-agent-commands.d.ts.map +1 -1
- package/dist/cli/code-agent-commands.js +2 -0
- package/dist/cli/code-agent-commands.js.map +1 -1
- package/dist/cli/code-agent-connector.js +7 -13
- package/dist/cli/code-agent-connector.js.map +1 -1
- package/dist/cli/code-agent-executor.d.ts +54 -2
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +504 -48
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/code-agent-runs.d.ts +13 -0
- package/dist/cli/code-agent-runs.d.ts.map +1 -1
- package/dist/cli/code-agent-runs.js +36 -0
- package/dist/cli/code-agent-runs.js.map +1 -1
- package/dist/cli/code.js +59 -5
- package/dist/cli/code.js.map +1 -1
- package/dist/cli/connect.js +141 -3
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/index.js +0 -0
- package/dist/cli/pr-visual-recap-workflow.js +1 -1
- package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
- package/dist/cli/recap.js +476 -46
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.js +331 -179
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +29 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AgentTaskCard.d.ts.map +1 -1
- package/dist/client/AgentTaskCard.js +17 -2
- package/dist/client/AgentTaskCard.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +310 -1732
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +1 -1
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/HighlightedCodeBlock.d.ts +40 -0
- package/dist/client/HighlightedCodeBlock.d.ts.map +1 -0
- package/dist/client/HighlightedCodeBlock.js +110 -0
- package/dist/client/HighlightedCodeBlock.js.map +1 -0
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +8 -1
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/PoweredByBadge.d.ts +2 -2
- package/dist/client/PoweredByBadge.d.ts.map +1 -1
- package/dist/client/RunStuckBanner.d.ts +1 -1
- package/dist/client/RunStuckBanner.d.ts.map +1 -1
- package/dist/client/StarfieldBackground.d.ts.map +1 -1
- package/dist/client/StarfieldBackground.js +10 -5
- package/dist/client/StarfieldBackground.js.map +1 -1
- package/dist/client/Turnstile.d.ts +1 -1
- package/dist/client/Turnstile.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +3 -2
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +13 -9
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/app-providers.d.ts +99 -0
- package/dist/client/app-providers.d.ts.map +1 -0
- package/dist/client/app-providers.js +19 -0
- package/dist/client/app-providers.js.map +1 -0
- package/dist/client/assistant-ui-recovery.d.ts +1 -1
- package/dist/client/auth-redirect-url.d.ts +1 -1
- package/dist/client/auth-redirect-url.d.ts.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts +0 -19
- package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/AnnotatedCodeBlock.js +141 -55
- package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
- package/dist/client/blocks/library/DiffBlock.js +1 -1
- package/dist/client/blocks/library/DiffBlock.js.map +1 -1
- package/dist/client/blocks/library/FileTreeBlock.d.ts.map +1 -1
- package/dist/client/blocks/library/FileTreeBlock.js +1 -1
- package/dist/client/blocks/library/FileTreeBlock.js.map +1 -1
- package/dist/client/blocks/library/HighlightedCode.d.ts.map +1 -1
- package/dist/client/blocks/library/HighlightedCode.js +5 -3
- package/dist/client/blocks/library/HighlightedCode.js.map +1 -1
- package/dist/client/blocks/library/annotation-rail.d.ts +5 -4
- package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -1
- package/dist/client/blocks/library/annotation-rail.js +22 -3
- package/dist/client/blocks/library/annotation-rail.js.map +1 -1
- package/dist/client/blocks/library/diagram.js +1 -1
- package/dist/client/blocks/library/diagram.js.map +1 -1
- package/dist/client/blocks/library/diff.config.d.ts +3 -2
- package/dist/client/blocks/library/diff.config.d.ts.map +1 -1
- package/dist/client/blocks/library/diff.config.js +4 -3
- package/dist/client/blocks/library/diff.config.js.map +1 -1
- package/dist/client/blocks/library/question-form.d.ts.map +1 -1
- package/dist/client/blocks/library/question-form.js +2 -1
- package/dist/client/blocks/library/question-form.js.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.d.ts +1 -1
- package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe.js +1 -1
- package/dist/client/blocks/library/wireframe.js.map +1 -1
- package/dist/client/chat/attachment-adapters.d.ts +58 -0
- package/dist/client/chat/attachment-adapters.d.ts.map +1 -0
- package/dist/client/chat/attachment-adapters.js +331 -0
- package/dist/client/chat/attachment-adapters.js.map +1 -0
- package/dist/client/chat/index.d.ts +13 -0
- package/dist/client/chat/index.d.ts.map +1 -0
- package/dist/client/chat/index.js +13 -0
- package/dist/client/chat/index.js.map +1 -0
- package/dist/client/chat/markdown-renderer.d.ts +49 -0
- package/dist/client/chat/markdown-renderer.d.ts.map +1 -0
- package/dist/client/chat/markdown-renderer.js +391 -0
- package/dist/client/chat/markdown-renderer.js.map +1 -0
- package/dist/client/chat/message-components.d.ts +35 -0
- package/dist/client/chat/message-components.d.ts.map +1 -0
- package/dist/client/chat/message-components.js +452 -0
- package/dist/client/chat/message-components.js.map +1 -0
- package/dist/client/chat/repo-helpers.d.ts +41 -0
- package/dist/client/chat/repo-helpers.d.ts.map +1 -0
- package/dist/client/chat/repo-helpers.js +61 -0
- package/dist/client/chat/repo-helpers.js.map +1 -0
- package/dist/client/chat/run-recovery.d.ts +41 -0
- package/dist/client/chat/run-recovery.d.ts.map +1 -0
- package/dist/client/chat/run-recovery.js +348 -0
- package/dist/client/chat/run-recovery.js.map +1 -0
- package/dist/client/chat/tool-call-display.d.ts +34 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -0
- package/dist/client/chat/tool-call-display.js +284 -0
- package/dist/client/chat/tool-call-display.js.map +1 -0
- package/dist/client/code-agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/code-agent-chat-adapter.js +20 -0
- package/dist/client/code-agent-chat-adapter.js.map +1 -1
- package/dist/client/collab/index.d.ts +10 -0
- package/dist/client/collab/index.d.ts.map +1 -0
- package/dist/client/collab/index.js +10 -0
- package/dist/client/collab/index.js.map +1 -0
- package/dist/client/components/AgentPresenceChip.d.ts +1 -1
- package/dist/client/components/AgentPresenceChip.d.ts.map +1 -1
- package/dist/client/components/ApiKeySettings.d.ts +1 -1
- package/dist/client/components/ApiKeySettings.d.ts.map +1 -1
- package/dist/client/components/CodeAgentIndicator.d.ts +1 -1
- package/dist/client/components/CodeAgentIndicator.d.ts.map +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
- package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
- package/dist/client/components/LiveCursorOverlay.js.map +1 -1
- package/dist/client/components/PresenceBar.d.ts +1 -1
- package/dist/client/components/PresenceBar.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.d.ts.map +1 -1
- package/dist/client/composer/PromptComposer.js +6 -26
- package/dist/client/composer/PromptComposer.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +8 -2
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +21 -9
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts +2 -2
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/index.d.ts +1 -1
- package/dist/client/composer/index.d.ts.map +1 -1
- package/dist/client/composer/index.js +1 -1
- package/dist/client/composer/index.js.map +1 -1
- package/dist/client/composer/use-skills.d.ts +1 -1
- package/dist/client/context-xray/ContextMeter.d.ts +1 -1
- package/dist/client/context-xray/ContextMeter.d.ts.map +1 -1
- package/dist/client/context-xray/ContextMeter.js +3 -3
- package/dist/client/context-xray/ContextMeter.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +4 -3
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/context-xray/format.d.ts +11 -0
- package/dist/client/context-xray/format.d.ts.map +1 -1
- package/dist/client/context-xray/format.js +16 -0
- package/dist/client/context-xray/format.js.map +1 -1
- package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/client/conversation/AgentConversation.js +8 -53
- package/dist/client/conversation/AgentConversation.js.map +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.d.ts.map +1 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.js +14 -1
- package/dist/client/conversation/use-near-bottom-autoscroll.js.map +1 -1
- package/dist/client/create-query-client.d.ts +28 -0
- package/dist/client/create-query-client.d.ts.map +1 -0
- package/dist/client/create-query-client.js +78 -0
- package/dist/client/create-query-client.js.map +1 -0
- package/dist/client/db-admin/DevDatabaseLink.d.ts +1 -1
- package/dist/client/db-admin/DevDatabaseLink.d.ts.map +1 -1
- package/dist/client/db-admin/RowSidePanel.d.ts +1 -1
- package/dist/client/db-admin/RowSidePanel.d.ts.map +1 -1
- package/dist/client/db-admin/RowSidePanel.js +2 -2
- package/dist/client/db-admin/RowSidePanel.js.map +1 -1
- package/dist/client/db-admin/TableEditor.d.ts +1 -1
- package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
- package/dist/client/db-admin/TableEditor.js +1 -1
- package/dist/client/db-admin/TableEditor.js.map +1 -1
- package/dist/client/db-admin/cell-format.d.ts +1 -1
- package/dist/client/db-admin/cell-format.d.ts.map +1 -1
- package/dist/client/dev-overlay/DevOverlay.d.ts +1 -1
- package/dist/client/dev-overlay/DevOverlay.d.ts.map +1 -1
- package/dist/client/editor/index.d.ts +2 -0
- package/dist/client/editor/index.d.ts.map +1 -0
- package/dist/client/editor/index.js +2 -0
- package/dist/client/editor/index.js.map +1 -0
- package/dist/client/error-format.d.ts.map +1 -1
- package/dist/client/error-format.js +4 -0
- package/dist/client/error-format.js.map +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts +1 -1
- package/dist/client/extensions/AgentNativeExtensionFrame.d.ts.map +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts +1 -1
- package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts +1 -1
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewerPage.d.ts +1 -1
- package/dist/client/extensions/ExtensionViewerPage.d.ts.map +1 -1
- package/dist/client/guided-questions.d.ts +6 -6
- package/dist/client/host-bridge.d.ts.map +1 -1
- package/dist/client/host-bridge.js +2 -0
- package/dist/client/host-bridge.js.map +1 -1
- package/dist/client/index.d.ts +7 -6
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +5 -3
- package/dist/client/index.js.map +1 -1
- package/dist/client/onboarding/OnboardingBanner.d.ts +1 -1
- package/dist/client/onboarding/OnboardingBanner.d.ts.map +1 -1
- package/dist/client/onboarding/OnboardingPanel.d.ts +1 -1
- package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -1
- package/dist/client/onboarding/SetupButton.d.ts +1 -1
- package/dist/client/onboarding/SetupButton.d.ts.map +1 -1
- package/dist/client/org/InvitationBanner.d.ts +1 -1
- package/dist/client/org/InvitationBanner.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/RequireActiveOrg.d.ts +1 -1
- package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
- package/dist/client/org/hooks.d.ts +3 -3
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.d.ts +2 -2
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +34 -9
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
- package/dist/client/resources/ResourceEditor.js +1 -1
- package/dist/client/resources/ResourceEditor.js.map +1 -1
- package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
- package/dist/client/resources/ResourcesPanel.js +2 -0
- package/dist/client/resources/ResourcesPanel.js.map +1 -1
- package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts +1 -1
- package/dist/client/rich-markdown-editor/BubbleToolbar.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/CodeBlockNode.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/CodeBlockNode.js +2 -1
- package/dist/client/rich-markdown-editor/CodeBlockNode.js.map +1 -1
- package/dist/client/rich-markdown-editor/ImageExtension.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/ImageExtension.js +2 -1
- package/dist/client/rich-markdown-editor/ImageExtension.js.map +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js +1 -1
- package/dist/client/rich-markdown-editor/RegistryBlockNode.js.map +1 -1
- package/dist/client/rich-markdown-editor/RichMarkdownEditor.d.ts +1 -1
- package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/SharedRichEditor.js +2 -3
- package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +1 -1
- package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts +1 -1
- package/dist/client/rich-markdown-editor/SlashCommandMenu.d.ts.map +1 -1
- package/dist/client/route-state.d.ts +12 -2
- package/dist/client/route-state.d.ts.map +1 -1
- package/dist/client/route-state.js +1 -1
- package/dist/client/route-state.js.map +1 -1
- package/dist/client/route-warmup.d.ts +1 -1
- package/dist/client/route-warmup.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +2 -2
- package/dist/client/sharing/ShareDialog.d.ts +1 -1
- package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
- package/dist/client/sse-event-processor.d.ts +8 -0
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +33 -10
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/terminal/AgentTerminal.d.ts +1 -1
- package/dist/client/terminal/AgentTerminal.d.ts.map +1 -1
- package/dist/client/terminal/AgentTerminal.js +4 -2
- package/dist/client/terminal/AgentTerminal.js.map +1 -1
- package/dist/client/tool-cells/BashCell.d.ts +25 -0
- package/dist/client/tool-cells/BashCell.d.ts.map +1 -0
- package/dist/client/tool-cells/BashCell.js +49 -0
- package/dist/client/tool-cells/BashCell.js.map +1 -0
- package/dist/client/tool-cells/EditCell.d.ts +24 -0
- package/dist/client/tool-cells/EditCell.d.ts.map +1 -0
- package/dist/client/tool-cells/EditCell.js +126 -0
- package/dist/client/tool-cells/EditCell.js.map +1 -0
- package/dist/client/tool-cells/FilesChangedSummary.d.ts +13 -0
- package/dist/client/tool-cells/FilesChangedSummary.d.ts.map +1 -0
- package/dist/client/tool-cells/FilesChangedSummary.js +98 -0
- package/dist/client/tool-cells/FilesChangedSummary.js.map +1 -0
- package/dist/client/tool-cells/WriteCell.d.ts +17 -0
- package/dist/client/tool-cells/WriteCell.d.ts.map +1 -0
- package/dist/client/tool-cells/WriteCell.js +26 -0
- package/dist/client/tool-cells/WriteCell.js.map +1 -0
- package/dist/client/tool-cells/index.d.ts +8 -0
- package/dist/client/tool-cells/index.d.ts.map +1 -0
- package/dist/client/tool-cells/index.js +5 -0
- package/dist/client/tool-cells/index.js.map +1 -0
- package/dist/client/transcription/BuilderTranscriptionCta.d.ts +1 -1
- package/dist/client/transcription/BuilderTranscriptionCta.d.ts.map +1 -1
- package/dist/client/use-chat-threads.d.ts +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +11 -8
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +2 -0
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +329 -302
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/code-agents/transcript-normalizer.d.ts +15 -1
- package/dist/code-agents/transcript-normalizer.d.ts.map +1 -1
- package/dist/code-agents/transcript-normalizer.js +47 -0
- package/dist/code-agents/transcript-normalizer.js.map +1 -1
- package/dist/coding-tools/index.d.ts +75 -0
- package/dist/coding-tools/index.d.ts.map +1 -1
- package/dist/coding-tools/index.js +137 -10
- package/dist/coding-tools/index.js.map +1 -1
- package/dist/coding-tools/run-code.d.ts +40 -0
- package/dist/coding-tools/run-code.d.ts.map +1 -0
- package/dist/coding-tools/run-code.js +511 -0
- package/dist/coding-tools/run-code.js.map +1 -0
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +15 -9
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/ydoc-manager.d.ts +1 -1
- package/dist/collab/ydoc-manager.d.ts.map +1 -1
- package/dist/collab/ydoc-manager.js +1 -1
- package/dist/collab/ydoc-manager.js.map +1 -1
- package/dist/db/client.d.ts +9 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +204 -48
- package/dist/db/client.js.map +1 -1
- package/dist/db/create-get-db.d.ts +38 -0
- package/dist/db/create-get-db.d.ts.map +1 -1
- package/dist/db/create-get-db.js +204 -4
- package/dist/db/create-get-db.js.map +1 -1
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +159 -67
- package/dist/db/migrations.js.map +1 -1
- package/dist/demo/actions/toggle-demo-mode.d.ts +6 -1
- package/dist/demo/actions/toggle-demo-mode.d.ts.map +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +80 -39
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.js +20 -10
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/extensions/fetch-tool.d.ts.map +1 -1
- package/dist/extensions/fetch-tool.js +62 -7
- package/dist/extensions/fetch-tool.js.map +1 -1
- package/dist/extensions/schema.d.ts +51 -51
- package/dist/extensions/slots/schema.d.ts +13 -13
- package/dist/extensions/web-search-tool.d.ts +41 -0
- package/dist/extensions/web-search-tool.d.ts.map +1 -0
- package/dist/extensions/web-search-tool.js +200 -0
- package/dist/extensions/web-search-tool.js.map +1 -0
- package/dist/file-upload/actions/upload-image.d.ts +26 -1
- package/dist/file-upload/actions/upload-image.d.ts.map +1 -1
- package/dist/file-upload/index.d.ts +1 -1
- package/dist/file-upload/index.d.ts.map +1 -1
- package/dist/file-upload/index.js +1 -1
- package/dist/file-upload/index.js.map +1 -1
- package/dist/file-upload/pre-upload-attachments.d.ts +37 -0
- package/dist/file-upload/pre-upload-attachments.d.ts.map +1 -1
- package/dist/file-upload/pre-upload-attachments.js +79 -19
- package/dist/file-upload/pre-upload-attachments.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/integrations/adapters/slack.js +1 -1
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/plugin.js +1 -1
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/jobs/scheduler.js +70 -21
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/mcp/actions/create-org-service-token.d.ts +14 -0
- package/dist/mcp/actions/create-org-service-token.d.ts.map +1 -0
- package/dist/mcp/actions/create-org-service-token.js +74 -0
- package/dist/mcp/actions/create-org-service-token.js.map +1 -0
- package/dist/mcp/actions/list-org-service-tokens.d.ts +17 -0
- package/dist/mcp/actions/list-org-service-tokens.d.ts.map +1 -0
- package/dist/mcp/actions/list-org-service-tokens.js +42 -0
- package/dist/mcp/actions/list-org-service-tokens.js.map +1 -0
- package/dist/mcp/actions/revoke-org-service-token.d.ts +7 -0
- package/dist/mcp/actions/revoke-org-service-token.d.ts.map +1 -0
- package/dist/mcp/actions/revoke-org-service-token.js +28 -0
- package/dist/mcp/actions/revoke-org-service-token.js.map +1 -0
- package/dist/mcp/actions/service-token-access.d.ts +24 -0
- package/dist/mcp/actions/service-token-access.d.ts.map +1 -0
- package/dist/mcp/actions/service-token-access.js +63 -0
- package/dist/mcp/actions/service-token-access.js.map +1 -0
- package/dist/mcp/build-server.d.ts +42 -11
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +53 -3
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/connect-route.d.ts +35 -0
- package/dist/mcp/connect-route.d.ts.map +1 -1
- package/dist/mcp/connect-route.js +57 -2
- package/dist/mcp/connect-route.js.map +1 -1
- package/dist/mcp/connect-store.d.ts +43 -0
- package/dist/mcp/connect-store.d.ts.map +1 -1
- package/dist/mcp/connect-store.js +129 -12
- package/dist/mcp/connect-store.js.map +1 -1
- package/dist/mcp/oauth-token.d.ts +10 -0
- package/dist/mcp/oauth-token.d.ts.map +1 -1
- package/dist/mcp/oauth-token.js +2 -0
- package/dist/mcp/oauth-token.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +3 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp-client/routes.js +1 -1
- package/dist/mcp-client/routes.js.map +1 -1
- package/dist/org/context.d.ts +4 -0
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +10 -0
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts +11 -7
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +0 -8
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/migrations.d.ts.map +1 -1
- package/dist/org/migrations.js +8 -0
- package/dist/org/migrations.js.map +1 -1
- package/dist/org/schema.d.ts +15 -15
- package/dist/progress/actions.d.ts.map +1 -1
- package/dist/progress/actions.js +13 -5
- package/dist/progress/actions.js.map +1 -1
- package/dist/provider-api/actions/delete-staged-dataset.d.ts +9 -0
- package/dist/provider-api/actions/delete-staged-dataset.d.ts.map +1 -0
- package/dist/provider-api/actions/delete-staged-dataset.js +35 -0
- package/dist/provider-api/actions/delete-staged-dataset.js.map +1 -0
- package/dist/provider-api/actions/list-staged-datasets.d.ts +15 -0
- package/dist/provider-api/actions/list-staged-datasets.d.ts.map +1 -0
- package/dist/provider-api/actions/list-staged-datasets.js +41 -0
- package/dist/provider-api/actions/list-staged-datasets.js.map +1 -0
- package/dist/provider-api/actions/query-staged-dataset.d.ts +29 -0
- package/dist/provider-api/actions/query-staged-dataset.d.ts.map +1 -0
- package/dist/provider-api/actions/query-staged-dataset.js +116 -0
- package/dist/provider-api/actions/query-staged-dataset.js.map +1 -0
- package/dist/provider-api/custom-registry.d.ts +92 -0
- package/dist/provider-api/custom-registry.d.ts.map +1 -0
- package/dist/provider-api/custom-registry.js +289 -0
- package/dist/provider-api/custom-registry.js.map +1 -0
- package/dist/provider-api/index.d.ts +88 -52
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +569 -23
- package/dist/provider-api/index.js.map +1 -1
- package/dist/provider-api/staged-datasets-aggregate.d.ts +46 -0
- package/dist/provider-api/staged-datasets-aggregate.d.ts.map +1 -0
- package/dist/provider-api/staged-datasets-aggregate.js +209 -0
- package/dist/provider-api/staged-datasets-aggregate.js.map +1 -0
- package/dist/provider-api/staged-datasets-store.d.ts +76 -0
- package/dist/provider-api/staged-datasets-store.d.ts.map +1 -0
- package/dist/provider-api/staged-datasets-store.js +319 -0
- package/dist/provider-api/staged-datasets-store.js.map +1 -0
- package/dist/provider-api/staging.d.ts +100 -0
- package/dist/provider-api/staging.d.ts.map +1 -0
- package/dist/provider-api/staging.js +281 -0
- package/dist/provider-api/staging.js.map +1 -0
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +13 -1
- package/dist/resources/handlers.js.map +1 -1
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +1 -2
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/resources/migrate-learnings.d.ts +1 -1
- package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -1
- package/dist/scripts/resources/migrate-learnings.js +1 -1
- package/dist/scripts/resources/migrate-learnings.js.map +1 -1
- package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
- package/dist/secrets/register-framework-secrets.js +36 -3
- package/dist/secrets/register-framework-secrets.js.map +1 -1
- package/dist/secrets/schema.d.ts +7 -7
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +14 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +3 -2
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +69 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +369 -179
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-discovery.d.ts.map +1 -1
- package/dist/server/agent-discovery.js +13 -16
- package/dist/server/agent-discovery.js.map +1 -1
- package/dist/server/agent-teams-run-queue.d.ts +31 -8
- package/dist/server/agent-teams-run-queue.d.ts.map +1 -1
- package/dist/server/agent-teams-run-queue.js +61 -18
- package/dist/server/agent-teams-run-queue.js.map +1 -1
- package/dist/server/agent-teams.d.ts +27 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +214 -14
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/app-base-path.d.ts +20 -0
- package/dist/server/app-base-path.d.ts.map +1 -1
- package/dist/server/app-base-path.js +36 -0
- package/dist/server/app-base-path.js.map +1 -1
- package/dist/server/attachment-actions.d.ts +43 -0
- package/dist/server/attachment-actions.d.ts.map +1 -0
- package/dist/server/attachment-actions.js +214 -0
- package/dist/server/attachment-actions.js.map +1 -0
- package/dist/server/auth.js +1 -1
- package/dist/server/auth.js.map +1 -1
- package/dist/server/complete-text.d.ts +56 -0
- package/dist/server/complete-text.d.ts.map +1 -0
- package/dist/server/complete-text.js +147 -0
- package/dist/server/complete-text.js.map +1 -0
- package/dist/server/core-routes-plugin.d.ts +1 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +37 -27
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/cors-origins.d.ts.map +1 -1
- package/dist/server/cors-origins.js +6 -1
- package/dist/server/cors-origins.js.map +1 -1
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +2 -1
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/csrf.d.ts +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/email-actions.d.ts +19 -0
- package/dist/server/email-actions.d.ts.map +1 -0
- package/dist/server/email-actions.js +191 -0
- package/dist/server/email-actions.js.map +1 -0
- package/dist/server/embed-route.js +1 -1
- package/dist/server/embed-route.js.map +1 -1
- package/dist/server/embed-session.d.ts.map +1 -1
- package/dist/server/embed-session.js +5 -1
- package/dist/server/embed-session.js.map +1 -1
- package/dist/server/entry-server.d.ts +24 -0
- package/dist/server/entry-server.d.ts.map +1 -0
- package/dist/server/entry-server.js +54 -0
- package/dist/server/entry-server.js.map +1 -0
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +2 -10
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +2 -9
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/google-realtime-session.d.ts.map +1 -1
- package/dist/server/google-realtime-session.js +6 -4
- package/dist/server/google-realtime-session.js.map +1 -1
- package/dist/server/h3-helpers.d.ts +39 -0
- package/dist/server/h3-helpers.d.ts.map +1 -1
- package/dist/server/h3-helpers.js +104 -1
- package/dist/server/h3-helpers.js.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +1 -8
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/open-route.d.ts.map +1 -1
- package/dist/server/open-route.js +1 -0
- package/dist/server/open-route.js.map +1 -1
- package/dist/server/prompts/framework-core-compact.d.ts +19 -0
- package/dist/server/prompts/framework-core-compact.d.ts.map +1 -0
- package/dist/server/prompts/framework-core-compact.js +69 -0
- package/dist/server/prompts/framework-core-compact.js.map +1 -0
- package/dist/server/prompts/framework-core.d.ts +26 -0
- package/dist/server/prompts/framework-core.d.ts.map +1 -0
- package/dist/server/prompts/framework-core.js +130 -0
- package/dist/server/prompts/framework-core.js.map +1 -0
- package/dist/server/prompts/index.d.ts +9 -0
- package/dist/server/prompts/index.d.ts.map +1 -0
- package/dist/server/prompts/index.js +9 -0
- package/dist/server/prompts/index.js.map +1 -0
- package/dist/server/prompts/model-overlays.d.ts +18 -0
- package/dist/server/prompts/model-overlays.d.ts.map +1 -0
- package/dist/server/prompts/model-overlays.js +46 -0
- package/dist/server/prompts/model-overlays.js.map +1 -0
- package/dist/server/prompts/shared-rules.d.ts +29 -0
- package/dist/server/prompts/shared-rules.d.ts.map +1 -0
- package/dist/server/prompts/shared-rules.js +54 -0
- package/dist/server/prompts/shared-rules.js.map +1 -0
- package/dist/server/security-headers.d.ts +7 -1
- package/dist/server/security-headers.d.ts.map +1 -1
- package/dist/server/security-headers.js +11 -0
- package/dist/server/security-headers.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +135 -46
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts.map +1 -1
- package/dist/server/transcribe-voice.js +7 -4
- package/dist/server/transcribe-voice.js.map +1 -1
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +9 -0
- package/dist/settings/store.js.map +1 -1
- package/dist/shared/markdown-block-split.d.ts +39 -0
- package/dist/shared/markdown-block-split.d.ts.map +1 -0
- package/dist/shared/markdown-block-split.js +97 -0
- package/dist/shared/markdown-block-split.js.map +1 -0
- package/dist/shared/reasoning-effort.js +13 -1
- package/dist/shared/reasoning-effort.js.map +1 -1
- package/dist/shared/streaming-text-smoothing.d.ts +18 -0
- package/dist/shared/streaming-text-smoothing.d.ts.map +1 -1
- package/dist/shared/streaming-text-smoothing.js +70 -4
- package/dist/shared/streaming-text-smoothing.js.map +1 -1
- package/dist/sharing/actions/list-resource-shares.d.ts +24 -1
- package/dist/sharing/actions/list-resource-shares.d.ts.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.d.ts +8 -1
- package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -1
- package/dist/sharing/actions/share-resource.d.ts +12 -1
- package/dist/sharing/actions/share-resource.d.ts.map +1 -1
- package/dist/sharing/actions/unshare-resource.d.ts +8 -1
- package/dist/sharing/actions/unshare-resource.d.ts.map +1 -1
- package/dist/sharing/schema.d.ts +10 -10
- package/dist/styles/agent-conversation.css +239 -0
- package/dist/templates/default/.agents/skills/delegate-to-agent/SKILL.md +50 -2
- package/dist/templates/default/AGENTS.md +1 -1
- package/dist/templates/default/DEVELOPING.md +19 -0
- package/dist/templates/default/app/entry.client.tsx +4 -1
- package/dist/templates/default/app/entry.server.tsx +4 -56
- package/dist/templates/default/app/global.css +3 -2
- package/dist/templates/default/app/root.tsx +8 -24
- package/dist/templates/default/app/routes/_index.tsx +0 -13
- package/dist/templates/default/package.json +6 -5
- package/dist/templates/default/tsconfig.json +2 -1
- package/dist/templates/starter-shell-sync.spec.ts +118 -0
- package/dist/templates/ui-primitives-sync.spec.ts +399 -0
- package/dist/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +50 -2
- package/dist/terminal/pty-server.js +1 -1
- package/dist/terminal/pty-server.js.map +1 -1
- package/dist/triggers/dispatcher.js +1 -1
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/usage/store.d.ts.map +1 -1
- package/dist/usage/store.js +60 -7
- package/dist/usage/store.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +44 -12
- package/dist/vite/client.js.map +1 -1
- package/dist/workspace-files/index.d.ts +4 -0
- package/dist/workspace-files/index.d.ts.map +1 -0
- package/dist/workspace-files/index.js +4 -0
- package/dist/workspace-files/index.js.map +1 -0
- package/dist/workspace-files/schema.d.ts +195 -0
- package/dist/workspace-files/schema.d.ts.map +1 -0
- package/dist/workspace-files/schema.js +48 -0
- package/dist/workspace-files/schema.js.map +1 -0
- package/dist/workspace-files/store.d.ts +89 -0
- package/dist/workspace-files/store.d.ts.map +1 -0
- package/dist/workspace-files/store.js +298 -0
- package/dist/workspace-files/store.js.map +1 -0
- package/dist/workspace-files/tool.d.ts +15 -0
- package/dist/workspace-files/tool.d.ts.map +1 -0
- package/dist/workspace-files/tool.js +225 -0
- package/dist/workspace-files/tool.js.map +1 -0
- package/docs/content/a2a-protocol.md +18 -12
- package/docs/content/actions.md +42 -10
- package/docs/content/agent-mentions.md +7 -8
- package/docs/content/agent-teams.md +23 -37
- package/docs/content/agent-web-surfaces.md +18 -9
- package/docs/content/authentication.md +6 -17
- package/docs/content/automations.md +43 -15
- package/docs/content/cli-adapters.md +25 -24
- package/docs/content/client.md +66 -17
- package/docs/content/cloneable-saas.md +19 -23
- package/docs/content/code-agents-ui.md +3 -31
- package/docs/content/components.md +308 -0
- package/docs/content/context-awareness.md +4 -0
- package/docs/content/creating-templates.md +4 -2
- package/docs/content/cross-app-sso.md +45 -19
- package/docs/content/database.md +26 -1
- package/docs/content/deployment.md +3 -1
- package/docs/content/dispatch.md +9 -37
- package/docs/content/drop-in-agent.md +123 -2
- package/docs/content/embedding-sdk.md +35 -0
- package/docs/content/extensions.md +2 -2
- package/docs/content/external-agents.md +86 -171
- package/docs/content/faq.md +6 -27
- package/docs/content/frames.md +9 -12
- package/docs/content/getting-started.md +80 -77
- package/docs/content/key-concepts.md +29 -19
- package/docs/content/mcp-apps.md +103 -0
- package/docs/content/mcp-clients.md +2 -2
- package/docs/content/mcp-protocol.md +40 -17
- package/docs/content/messaging.md +11 -4
- package/docs/content/migration-workbench.md +4 -47
- package/docs/content/multi-app-workspace.md +48 -17
- package/docs/content/multi-tenancy.md +1 -1
- package/docs/content/notifications.md +8 -6
- package/docs/content/observability.md +26 -15
- package/docs/content/onboarding.md +7 -1
- package/docs/content/pr-visual-recap.md +203 -23
- package/docs/content/progress.md +5 -5
- package/docs/content/pure-agent-apps.md +3 -1
- package/docs/content/real-time-collaboration.md +106 -0
- package/docs/content/recurring-jobs.md +17 -1
- package/docs/content/security.md +17 -3
- package/docs/content/server.md +39 -3
- package/docs/content/sharing.md +20 -1
- package/docs/content/skills-guide.md +151 -125
- package/docs/content/template-analytics.md +8 -0
- package/docs/content/template-assets.md +2 -0
- package/docs/content/template-brain.md +59 -3
- package/docs/content/template-calendar.md +8 -0
- package/docs/content/template-clips.md +11 -2
- package/docs/content/template-content.md +24 -4
- package/docs/content/template-design.md +19 -17
- package/docs/content/template-dispatch.md +2 -0
- package/docs/content/template-forms.md +28 -1
- package/docs/content/template-mail.md +17 -0
- package/docs/content/template-plan.md +177 -10
- package/docs/content/template-slides.md +51 -12
- package/docs/content/template-videos.md +17 -0
- package/docs/content/tracking.md +17 -13
- package/docs/content/using-your-agent.md +15 -5
- package/docs/content/voice-input.md +1 -1
- package/docs/content/what-is-agent-native.md +5 -6
- package/docs/content/workspace-connections.md +138 -424
- package/docs/content/workspace-management.md +12 -128
- package/docs/content/workspace.md +125 -199
- package/docs/content/writing-agent-instructions.md +17 -1
- package/package.json +26 -6
- package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +50 -2
- package/src/templates/default/AGENTS.md +1 -1
- package/src/templates/default/DEVELOPING.md +19 -0
- package/src/templates/default/app/entry.client.tsx +4 -1
- package/src/templates/default/app/entry.server.tsx +4 -56
- package/src/templates/default/app/global.css +3 -2
- package/src/templates/default/app/root.tsx +8 -24
- package/src/templates/default/app/routes/_index.tsx +0 -13
- package/src/templates/default/package.json +6 -5
- package/src/templates/default/tsconfig.json +2 -1
- package/src/templates/starter-shell-sync.spec.ts +118 -0
- package/src/templates/ui-primitives-sync.spec.ts +399 -0
- package/src/templates/workspace-core/.agents/skills/delegate-to-agent/SKILL.md +50 -2
- package/tsconfig.base.json +2 -10
- package/dist/cli/app-skill.d.ts +0 -157
- package/dist/cli/app-skill.d.ts.map +0 -1
- package/dist/cli/audit-agent-web.d.ts +0 -2
- package/dist/cli/audit-agent-web.d.ts.map +0 -1
- package/dist/cli/code-agent-connector.d.ts +0 -17
- package/dist/cli/code-agent-connector.d.ts.map +0 -1
- package/dist/cli/code.d.ts +0 -66
- package/dist/cli/code.d.ts.map +0 -1
- package/dist/cli/connect.d.ts +0 -140
- package/dist/cli/connect.d.ts.map +0 -1
- package/dist/cli/context-xray-local.d.ts +0 -16
- package/dist/cli/context-xray-local.d.ts.map +0 -1
- package/dist/cli/create-workspace.d.ts +0 -8
- package/dist/cli/create-workspace.d.ts.map +0 -1
- package/dist/cli/index.d.ts +0 -3
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/info.d.ts +0 -2
- package/dist/cli/info.d.ts.map +0 -1
- package/dist/cli/mcp-config-writers.d.ts +0 -82
- package/dist/cli/mcp-config-writers.d.ts.map +0 -1
- package/dist/cli/mcp.d.ts +0 -16
- package/dist/cli/mcp.d.ts.map +0 -1
- package/dist/cli/migrate.d.ts +0 -38
- package/dist/cli/migrate.d.ts.map +0 -1
- package/dist/cli/plan-local.d.ts +0 -43
- package/dist/cli/plan-local.d.ts.map +0 -1
- package/dist/cli/plan-publish-store.d.ts +0 -62
- package/dist/cli/plan-publish-store.d.ts.map +0 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts +0 -11
- package/dist/cli/pr-visual-recap-workflow.d.ts.map +0 -1
- package/dist/cli/recap.d.ts +0 -297
- package/dist/cli/recap.d.ts.map +0 -1
- package/dist/cli/skills.d.ts +0 -162
- package/dist/cli/skills.d.ts.map +0 -1
- package/dist/cli/workspace-dev.d.ts +0 -96
- package/dist/cli/workspace-dev.d.ts.map +0 -1
|
@@ -9,7 +9,7 @@ import { PROVIDER_TO_ENV } from "./engine/provider-env-vars.js";
|
|
|
9
9
|
import { readAppState } from "../application-state/script-helpers.js";
|
|
10
10
|
import { isDemoModeEnabled } from "../demo/config.js";
|
|
11
11
|
import { redactDemoData, redactDemoString } from "../demo/redact.js";
|
|
12
|
-
import { startRun, subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, } from "./run-manager.js";
|
|
12
|
+
import { startRun, subscribeToRun, getActiveRunForThread, getActiveRunForThreadAsync, getRun, abortRun, tryClaimRunSlot, } from "./run-manager.js";
|
|
13
13
|
import { readBody } from "../server/h3-helpers.js";
|
|
14
14
|
import { isReadOnlyShellCommand } from "../coding-tools/index.js";
|
|
15
15
|
import { getRequestRunContext, ensureRequestRunContext, getRequestOrgId, getRequestUserEmail, } from "../server/request-context.js";
|
|
@@ -19,7 +19,8 @@ import { createToolSearchEntry, TOOL_SEARCH_ACTION_NAME, } from "./tool-search.j
|
|
|
19
19
|
import { getDefaultMaxIterations, normalizeMaxIterations, readAgentLoopSettings, } from "./loop-settings.js";
|
|
20
20
|
import { isReasoningEffort, normalizeReasoningEffortForModel, } from "../shared/reasoning-effort.js";
|
|
21
21
|
import { isAgentActionStopError } from "../action.js";
|
|
22
|
-
import {
|
|
22
|
+
import { writeLedgerEntry, readLedgerEntry, clearLedgerForThread, } from "./run-store.js";
|
|
23
|
+
import { preUploadAttachments } from "../file-upload/pre-upload-attachments.js";
|
|
23
24
|
import { extensionIdFromPathname } from "../extensions/path.js";
|
|
24
25
|
import { applyContextDirectives } from "./context-xray/apply-directives.js";
|
|
25
26
|
import { completeRun as completeProgressRun, startRun as startProgressRun, updateRunProgress, } from "../progress/registry.js";
|
|
@@ -450,8 +451,10 @@ function generateRunId() {
|
|
|
450
451
|
function toolInputActivityLabel(toolName) {
|
|
451
452
|
return toolName ? `Preparing ${toolName} action` : "Preparing action input";
|
|
452
453
|
}
|
|
453
|
-
/** Check if an error is transient and should be retried
|
|
454
|
-
|
|
454
|
+
/** Check if an error is transient and should be retried
|
|
455
|
+
* @internal exported for unit tests only
|
|
456
|
+
*/
|
|
457
|
+
export function isContextTooLongError(err) {
|
|
455
458
|
if (!(err instanceof Error))
|
|
456
459
|
return false;
|
|
457
460
|
const msg = err.message.toLowerCase();
|
|
@@ -459,7 +462,10 @@ function isContextTooLongError(err) {
|
|
|
459
462
|
msg.includes("input_too_long") ||
|
|
460
463
|
msg.includes("too many tokens") ||
|
|
461
464
|
msg.includes("prompt is too long") ||
|
|
462
|
-
msg.includes("reduce the length")
|
|
465
|
+
msg.includes("reduce the length") ||
|
|
466
|
+
// Gemini phrasing
|
|
467
|
+
msg.includes("input token count exceeds") ||
|
|
468
|
+
msg.includes("request too large"))
|
|
463
469
|
return true;
|
|
464
470
|
if (err instanceof EngineError) {
|
|
465
471
|
const code = (err.errorCode ?? "").toLowerCase();
|
|
@@ -468,25 +474,48 @@ function isContextTooLongError(err) {
|
|
|
468
474
|
}
|
|
469
475
|
return false;
|
|
470
476
|
}
|
|
471
|
-
|
|
477
|
+
/** @internal exported for unit tests only */
|
|
478
|
+
export function isRetryableError(err) {
|
|
472
479
|
if (!(err instanceof Error))
|
|
473
480
|
return false;
|
|
474
481
|
const msg = err.message.toLowerCase();
|
|
475
|
-
const
|
|
482
|
+
const engineErr = err instanceof EngineError ? err : null;
|
|
483
|
+
const code = (engineErr?.errorCode ?? "").toLowerCase();
|
|
484
|
+
// Hard non-retryable codes — check these first.
|
|
476
485
|
if (code === "builder_gateway_timeout")
|
|
477
486
|
return false;
|
|
478
487
|
if (code === "rate_limit_exceeded" ||
|
|
479
488
|
msg.includes("daily gateway request cap"))
|
|
480
489
|
return false;
|
|
490
|
+
// Prefer structured fields from the engine before falling back to message
|
|
491
|
+
// keyword matching — avoids false positives on user-supplied text that
|
|
492
|
+
// happens to contain "rate_limit" etc.
|
|
493
|
+
if (engineErr) {
|
|
494
|
+
// Provider explicitly said it is retryable.
|
|
495
|
+
if (engineErr.providerRetryable === true)
|
|
496
|
+
return true;
|
|
497
|
+
// HTTP status-code checks (429, 500, 502, 503, 529 = Anthropic overloaded).
|
|
498
|
+
const sc = engineErr.statusCode;
|
|
499
|
+
if (sc === 429 || sc === 500 || sc === 502 || sc === 503 || sc === 529)
|
|
500
|
+
return true;
|
|
501
|
+
}
|
|
481
502
|
return (code === "builder_gateway_error" ||
|
|
482
503
|
code === "builder_gateway_network_error" ||
|
|
504
|
+
code === "http_500" ||
|
|
483
505
|
code === "http_502" ||
|
|
484
506
|
code === "http_503" ||
|
|
485
507
|
code === "http_504" ||
|
|
486
508
|
code === "timeout" ||
|
|
509
|
+
// Anthropic
|
|
487
510
|
msg.includes("overloaded") ||
|
|
488
511
|
msg.includes("rate_limit") ||
|
|
489
512
|
msg.includes("529") ||
|
|
513
|
+
// OpenAI phrasing
|
|
514
|
+
msg.includes("rate limit reached") ||
|
|
515
|
+
// Google / Gemini
|
|
516
|
+
msg.includes("resource_exhausted") ||
|
|
517
|
+
msg.includes("quota exceeded") ||
|
|
518
|
+
// Generic HTTP codes
|
|
490
519
|
msg.includes("502") ||
|
|
491
520
|
msg.includes("503") ||
|
|
492
521
|
msg.includes("504") ||
|
|
@@ -499,6 +528,50 @@ function isRetryableError(err) {
|
|
|
499
528
|
msg.includes("inactivity timeout") ||
|
|
500
529
|
msg.includes("too much time has passed without sending any data"));
|
|
501
530
|
}
|
|
531
|
+
// ---------------------------------------------------------------------------
|
|
532
|
+
// Context-window overflow recovery
|
|
533
|
+
// ---------------------------------------------------------------------------
|
|
534
|
+
/**
|
|
535
|
+
* Number of recent messages to protect when trimming tool results.
|
|
536
|
+
* Messages in the tail of this length are left completely intact; only
|
|
537
|
+
* older messages have their tool-result text replaced with a stub.
|
|
538
|
+
*/
|
|
539
|
+
const CONTEXT_TRIM_KEEP_TAIL = 10;
|
|
540
|
+
const CONTEXT_TRIM_STUB = "[result trimmed to save context — re-run the tool if needed]";
|
|
541
|
+
/**
|
|
542
|
+
* Attempt one aggressive trim of old tool-result content to reduce the
|
|
543
|
+
* context window usage. Tool-result messages older than the last
|
|
544
|
+
* {@link CONTEXT_TRIM_KEEP_TAIL} messages have their text replaced with a
|
|
545
|
+
* short stub. All user/assistant text messages and the recent tail are
|
|
546
|
+
* preserved exactly.
|
|
547
|
+
*
|
|
548
|
+
* Returns a new array — the original is not mutated.
|
|
549
|
+
* Returns `null` when there are no trimable tool results (so the caller can
|
|
550
|
+
* skip the retry).
|
|
551
|
+
*/
|
|
552
|
+
export function trimOldToolResults(messages, keepTail = CONTEXT_TRIM_KEEP_TAIL) {
|
|
553
|
+
const cutoff = Math.max(0, messages.length - keepTail);
|
|
554
|
+
let trimmed = false;
|
|
555
|
+
const result = messages.map((msg, idx) => {
|
|
556
|
+
// Keep messages in the protected tail intact
|
|
557
|
+
if (idx >= cutoff)
|
|
558
|
+
return msg;
|
|
559
|
+
// Only touch user messages that contain tool-result parts
|
|
560
|
+
if (msg.role !== "user")
|
|
561
|
+
return msg;
|
|
562
|
+
const hasToolResult = msg.content.some((p) => p.type === "tool-result");
|
|
563
|
+
if (!hasToolResult)
|
|
564
|
+
return msg;
|
|
565
|
+
const stubbedContent = msg.content.map((p) => {
|
|
566
|
+
if (p.type !== "tool-result")
|
|
567
|
+
return p;
|
|
568
|
+
trimmed = true;
|
|
569
|
+
return { ...p, content: CONTEXT_TRIM_STUB };
|
|
570
|
+
});
|
|
571
|
+
return { role: "user", content: stubbedContent };
|
|
572
|
+
});
|
|
573
|
+
return trimmed ? result : null;
|
|
574
|
+
}
|
|
502
575
|
/** Wait with exponential backoff, respecting abort signal */
|
|
503
576
|
function retryDelay(attempt, signal) {
|
|
504
577
|
const baseMs = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);
|
|
@@ -535,16 +608,19 @@ function unwrapTextAttachmentEnvelope(text) {
|
|
|
535
608
|
const match = text.match(/^<attachment\b[^>]*>\n([\s\S]*)\n<\/attachment>$/);
|
|
536
609
|
return match ? match[1] : text;
|
|
537
610
|
}
|
|
538
|
-
function truncateTextAttachment(text) {
|
|
611
|
+
function truncateTextAttachment(text, attachmentName) {
|
|
539
612
|
if (text.length <= MAX_TEXT_ATTACHMENT_CHARS)
|
|
540
613
|
return text;
|
|
541
614
|
const omitted = text.length - MAX_TEXT_ATTACHMENT_CHARS;
|
|
542
|
-
|
|
615
|
+
const readHint = attachmentName
|
|
616
|
+
? ` Use the \`read-attachment\` tool with name="${escapeAttachmentAttribute(attachmentName)}" to read the rest.`
|
|
617
|
+
: "";
|
|
618
|
+
return `${text.slice(0, MAX_TEXT_ATTACHMENT_CHARS)}\n\n[Attachment truncated after ${MAX_TEXT_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted.${readHint}]`;
|
|
543
619
|
}
|
|
544
620
|
function formatTextAttachment(att) {
|
|
545
621
|
if (typeof att.text !== "string" || att.text.length === 0)
|
|
546
622
|
return null;
|
|
547
|
-
const text = truncateTextAttachment(unwrapTextAttachmentEnvelope(att.text));
|
|
623
|
+
const text = truncateTextAttachment(unwrapTextAttachmentEnvelope(att.text), att.name);
|
|
548
624
|
const attrs = [
|
|
549
625
|
`name="${escapeAttachmentAttribute(att.name || "attachment")}"`,
|
|
550
626
|
att.contentType
|
|
@@ -571,7 +647,20 @@ export function buildUserContentWithAttachments(opts) {
|
|
|
571
647
|
const userContent = [];
|
|
572
648
|
const textAttachments = [];
|
|
573
649
|
for (const att of opts.attachments ?? []) {
|
|
574
|
-
if (att.type === "image"
|
|
650
|
+
if (att.type === "image") {
|
|
651
|
+
// Prefer the hosted URL when one exists (set by preUploadAttachments).
|
|
652
|
+
// Anthropic / AI SDK accept URL image parts natively; for other engines
|
|
653
|
+
// the translate layer falls back to base64 automatically.
|
|
654
|
+
const uploadedUrl = att.url;
|
|
655
|
+
if (uploadedUrl) {
|
|
656
|
+
userContent.push({
|
|
657
|
+
type: "image",
|
|
658
|
+
url: uploadedUrl,
|
|
659
|
+
});
|
|
660
|
+
continue;
|
|
661
|
+
}
|
|
662
|
+
if (!att.data)
|
|
663
|
+
continue;
|
|
575
664
|
const match = att.data.match(/^data:(image\/[^;]+);base64,(.+)$/);
|
|
576
665
|
if (match && isSupportedImageMediaType(match[1])) {
|
|
577
666
|
userContent.push({
|
|
@@ -580,6 +669,17 @@ export function buildUserContentWithAttachments(opts) {
|
|
|
580
669
|
mediaType: match[1],
|
|
581
670
|
});
|
|
582
671
|
}
|
|
672
|
+
else {
|
|
673
|
+
// The client sent an image in an unsupported format (HEIC, TIFF, AVIF,
|
|
674
|
+
// etc.). Inject a short text placeholder so the model knows the image
|
|
675
|
+
// was present but could not be processed, rather than silently omitting
|
|
676
|
+
// it and leaving the model confused ("I don't see an image").
|
|
677
|
+
const mime = match?.[1] ?? att.contentType ?? "unknown format";
|
|
678
|
+
const label = att.name ? `"${att.name}"` : "An image";
|
|
679
|
+
textAttachments.push(`[${label} could not be processed — unsupported image format (${mime}). ` +
|
|
680
|
+
`Inform the user that only JPEG, PNG, GIF, and WebP images are supported, ` +
|
|
681
|
+
`and ask them to convert the file before attaching.]`);
|
|
682
|
+
}
|
|
583
683
|
continue;
|
|
584
684
|
}
|
|
585
685
|
const filePart = dataUrlToFilePart(att);
|
|
@@ -1219,9 +1319,10 @@ export async function runAgentLoop(opts) {
|
|
|
1219
1319
|
}
|
|
1220
1320
|
else if (event.type === "thinking-delta") {
|
|
1221
1321
|
thinkingBuffer += event.text;
|
|
1222
|
-
//
|
|
1223
|
-
//
|
|
1224
|
-
//
|
|
1322
|
+
// Forward thinking deltas as a distinct event type so the UI
|
|
1323
|
+
// can render a collapsible "Thinking…" cell while the model
|
|
1324
|
+
// reasons, then collapse it when content arrives.
|
|
1325
|
+
send({ type: "thinking", text: event.text });
|
|
1225
1326
|
}
|
|
1226
1327
|
else if (event.type === "tool-input-start") {
|
|
1227
1328
|
if (event.id && event.name) {
|
|
@@ -1259,6 +1360,8 @@ export async function runAgentLoop(opts) {
|
|
|
1259
1360
|
throw new EngineError(event.error ?? "Engine stream error", {
|
|
1260
1361
|
errorCode: event.errorCode,
|
|
1261
1362
|
upgradeUrl: event.upgradeUrl,
|
|
1363
|
+
statusCode: event.statusCode,
|
|
1364
|
+
providerRetryable: event.providerRetryable,
|
|
1262
1365
|
});
|
|
1263
1366
|
}
|
|
1264
1367
|
}
|
|
@@ -1269,7 +1372,22 @@ export async function runAgentLoop(opts) {
|
|
|
1269
1372
|
if (signal.aborted)
|
|
1270
1373
|
throw err;
|
|
1271
1374
|
if (isContextTooLongError(err)) {
|
|
1272
|
-
|
|
1375
|
+
// ── One-shot recovery: trim old tool results and retry once ────────
|
|
1376
|
+
// Only attempt recovery on the first overflow (retry === 0) to avoid
|
|
1377
|
+
// infinite trim loops. On subsequent overflows fall through to the
|
|
1378
|
+
// terminal error.
|
|
1379
|
+
if (retry === 0) {
|
|
1380
|
+
const trimmed = trimOldToolResults(contextMessages);
|
|
1381
|
+
if (trimmed !== null) {
|
|
1382
|
+
// Replace the sent messages for this iteration with the trimmed
|
|
1383
|
+
// version, clear any partial output, and retry immediately
|
|
1384
|
+
// (no delay — context errors are not transient).
|
|
1385
|
+
contextMessages = trimmed;
|
|
1386
|
+
send({ type: "clear" });
|
|
1387
|
+
continue;
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
throw new EngineError("Conversation has grown too long. The agent tried to recover automatically but the context is still too large. You can continue in a new chat, or ask the agent to summarize the conversation and continue.", { errorCode: "context_length_exceeded" });
|
|
1273
1391
|
}
|
|
1274
1392
|
if (retry < maxRetriesForError(err) && isRetryableError(err)) {
|
|
1275
1393
|
// Clear partial text from the failed attempt so the retry
|
|
@@ -1445,9 +1563,37 @@ export async function runAgentLoop(opts) {
|
|
|
1445
1563
|
// this turn (connection drop mid-execution → agent retries → repeat).
|
|
1446
1564
|
// A write tool that keeps failing likely has a timeout / large-payload
|
|
1447
1565
|
// problem; retrying indefinitely creates duplicates and confuses users.
|
|
1566
|
+
//
|
|
1567
|
+
// LEDGER RECOVERY: before applying the give-up budget, check whether the
|
|
1568
|
+
// previous invocation's zombie actually completed and wrote its result to
|
|
1569
|
+
// the durable ledger. If so, return the ledger result without re-executing
|
|
1570
|
+
// (prevents the duplicate side effect) and skip counting it toward the
|
|
1571
|
+
// interruption budget.
|
|
1448
1572
|
if (!actionEntry.readOnly) {
|
|
1449
1573
|
const writeCacheKey = toolCallCacheKey(toolCall.name, toolCall.input);
|
|
1450
1574
|
const priorInterruptions = writeToolInterruptions.get(writeCacheKey) ?? 0;
|
|
1575
|
+
if (priorInterruptions > 0 && opts.threadId) {
|
|
1576
|
+
const ledgerResult = await readLedgerEntry(opts.threadId, writeCacheKey);
|
|
1577
|
+
if (ledgerResult !== null) {
|
|
1578
|
+
// Zombie completed — recover the real result without re-executing.
|
|
1579
|
+
const result = `(Recovered from prior interrupted chunk — action already completed.)\n\n` +
|
|
1580
|
+
ledgerResult;
|
|
1581
|
+
send({
|
|
1582
|
+
type: "tool_start",
|
|
1583
|
+
tool: toolCall.name,
|
|
1584
|
+
input: toolCall.input,
|
|
1585
|
+
});
|
|
1586
|
+
send({ type: "tool_done", tool: toolCall.name, result });
|
|
1587
|
+
recordToolResult(result, false);
|
|
1588
|
+
return {
|
|
1589
|
+
type: "tool-result",
|
|
1590
|
+
toolCallId: toolCall.id,
|
|
1591
|
+
toolName: toolCall.name,
|
|
1592
|
+
toolInput: wireToolInput,
|
|
1593
|
+
content: result,
|
|
1594
|
+
};
|
|
1595
|
+
}
|
|
1596
|
+
}
|
|
1451
1597
|
if (priorInterruptions >= MAX_WRITE_TOOL_INTERRUPTIONS) {
|
|
1452
1598
|
const result = `The ${toolCall.name} action was interrupted ${priorInterruptions} time(s) in this session — ` +
|
|
1453
1599
|
`likely a connection timeout with a large payload. Please start a new chat and try again, ` +
|
|
@@ -1508,23 +1654,57 @@ export async function runAgentLoop(opts) {
|
|
|
1508
1654
|
isError: true,
|
|
1509
1655
|
};
|
|
1510
1656
|
}
|
|
1511
|
-
const
|
|
1512
|
-
const
|
|
1657
|
+
const DEFAULT_TOOL_RESULT_CHARS = 50_000;
|
|
1658
|
+
const DEFAULT_TOOL_TIMEOUT_MS = 60_000;
|
|
1659
|
+
const toolTimeoutMs = actionEntry.timeoutMs ??
|
|
1660
|
+
opts.toolLimits?.timeoutMs ??
|
|
1661
|
+
DEFAULT_TOOL_TIMEOUT_MS;
|
|
1662
|
+
const toolMaxResultChars = actionEntry.maxResultChars ??
|
|
1663
|
+
opts.toolLimits?.maxResultChars ??
|
|
1664
|
+
DEFAULT_TOOL_RESULT_CHARS;
|
|
1513
1665
|
let result;
|
|
1514
1666
|
let isError = false;
|
|
1515
1667
|
let mcpApp;
|
|
1516
1668
|
try {
|
|
1517
|
-
const timeoutSignal = AbortSignal.timeout(
|
|
1669
|
+
const timeoutSignal = AbortSignal.timeout(toolTimeoutMs);
|
|
1670
|
+
// Keep a reference to the action promise so we can attach a zombie-
|
|
1671
|
+
// detection continuation AFTER Promise.race abandons it on run abort.
|
|
1672
|
+
// The promise itself is not awaited here — Promise.race owns the await.
|
|
1673
|
+
const actionPromise = Promise.resolve(actionEntry.run(toolCall.input, {
|
|
1674
|
+
send,
|
|
1675
|
+
userEmail: getRequestUserEmail(),
|
|
1676
|
+
orgId: getRequestOrgId() ?? null,
|
|
1677
|
+
caller: "tool",
|
|
1678
|
+
attachments: opts.attachments,
|
|
1679
|
+
signal,
|
|
1680
|
+
}));
|
|
1681
|
+
// When the run is aborted (soft-timeout / user cancel) while this tool
|
|
1682
|
+
// call is in flight, Promise.race below will throw "Run aborted" and the
|
|
1683
|
+
// action's promise becomes a zombie — it keeps running but its result is
|
|
1684
|
+
// never returned to the loop. If the zombie eventually resolves, write
|
|
1685
|
+
// the result to the durable ledger keyed by (threadId, toolKey) so the
|
|
1686
|
+
// next continuation chunk can recover it instead of re-executing the
|
|
1687
|
+
// side effect.
|
|
1688
|
+
if (opts.threadId && !actionEntry.readOnly) {
|
|
1689
|
+
const ledgerThreadId = opts.threadId;
|
|
1690
|
+
const ledgerToolKey = toolCallCacheKey(toolCall.name, toolCall.input);
|
|
1691
|
+
actionPromise
|
|
1692
|
+
.then((zombieRaw) => {
|
|
1693
|
+
const zombieMcp = isMcpActionResult(zombieRaw) ? zombieRaw : null;
|
|
1694
|
+
const zombieText = zombieMcp ? zombieMcp.text : zombieRaw;
|
|
1695
|
+
const zombieStr = typeof zombieText === "string"
|
|
1696
|
+
? zombieText
|
|
1697
|
+
: JSON.stringify(zombieText, null, 2);
|
|
1698
|
+
void writeLedgerEntry(ledgerThreadId, ledgerToolKey, zombieStr);
|
|
1699
|
+
})
|
|
1700
|
+
.catch(() => {
|
|
1701
|
+
// Action errored in the zombie — no result to ledger.
|
|
1702
|
+
});
|
|
1703
|
+
}
|
|
1518
1704
|
const raw = await Promise.race([
|
|
1519
|
-
|
|
1520
|
-
send,
|
|
1521
|
-
userEmail: getRequestUserEmail(),
|
|
1522
|
-
orgId: getRequestOrgId() ?? null,
|
|
1523
|
-
caller: "tool",
|
|
1524
|
-
attachments: opts.attachments,
|
|
1525
|
-
}),
|
|
1705
|
+
actionPromise,
|
|
1526
1706
|
new Promise((_, reject) => {
|
|
1527
|
-
timeoutSignal.addEventListener("abort", () => reject(new Error(
|
|
1707
|
+
timeoutSignal.addEventListener("abort", () => reject(new Error(`Tool call timed out after ${toolTimeoutMs / 1000} seconds`)));
|
|
1528
1708
|
}),
|
|
1529
1709
|
// Stop waiting on the tool when the run itself is aborted (e.g. the
|
|
1530
1710
|
// run-manager soft timeout, or a user cancel). Without this leg the
|
|
@@ -1571,9 +1751,9 @@ export async function runAgentLoop(opts) {
|
|
|
1571
1751
|
let resultStr = typeof redacted === "string"
|
|
1572
1752
|
? redacted
|
|
1573
1753
|
: JSON.stringify(redacted, null, 2);
|
|
1574
|
-
if (resultStr.length >
|
|
1575
|
-
const truncated = resultStr.slice(0,
|
|
1576
|
-
resultStr = `${truncated}\n\n...[truncated — full result was ${resultStr.length.toLocaleString()} chars; only first ${
|
|
1754
|
+
if (resultStr.length > toolMaxResultChars) {
|
|
1755
|
+
const truncated = resultStr.slice(0, toolMaxResultChars);
|
|
1756
|
+
resultStr = `${truncated}\n\n...[truncated — full result was ${resultStr.length.toLocaleString()} chars; only first ${toolMaxResultChars.toLocaleString()} shown]`;
|
|
1577
1757
|
}
|
|
1578
1758
|
result = resultStr;
|
|
1579
1759
|
}
|
|
@@ -1684,12 +1864,21 @@ export async function runAgentLoop(opts) {
|
|
|
1684
1864
|
await flushParallelBatch();
|
|
1685
1865
|
messages.push({ role: "user", content: toolResultParts });
|
|
1686
1866
|
if (requestedActionStop) {
|
|
1687
|
-
|
|
1867
|
+
// TypeScript can't track ??= through async closures; cast to known type.
|
|
1868
|
+
const stop = requestedActionStop;
|
|
1869
|
+
send({ type: "text", text: stop.message });
|
|
1688
1870
|
break;
|
|
1689
1871
|
}
|
|
1690
1872
|
}
|
|
1691
|
-
if (!signal.aborted)
|
|
1873
|
+
if (!signal.aborted) {
|
|
1692
1874
|
send({ type: "done" });
|
|
1875
|
+
// Clean up any zombie-completion ledger entries for this thread now that
|
|
1876
|
+
// the turn completed normally. If the run was aborted the ledger must stay
|
|
1877
|
+
// intact so the next continuation chunk can still recover from it.
|
|
1878
|
+
if (opts.threadId) {
|
|
1879
|
+
void clearLedgerForThread(opts.threadId).catch(() => { });
|
|
1880
|
+
}
|
|
1881
|
+
}
|
|
1693
1882
|
return usage;
|
|
1694
1883
|
}
|
|
1695
1884
|
function backgroundChatProgressRunId(turnId) {
|
|
@@ -1832,19 +2021,23 @@ export function createProductionAgentHandler(options) {
|
|
|
1832
2021
|
requestAttachments = preparedRequest.attachments;
|
|
1833
2022
|
}
|
|
1834
2023
|
}
|
|
1835
|
-
// Pre-upload chat
|
|
1836
|
-
// provider (Builder.io by default). The model still sees the
|
|
1837
|
-
// multimodal content for
|
|
1838
|
-
//
|
|
2024
|
+
// Pre-upload chat attachments (images AND files/PDFs) through the framework
|
|
2025
|
+
// file-upload provider (Builder.io by default). The model still sees the
|
|
2026
|
+
// base64 multimodal content for the current turn; each uploaded attachment
|
|
2027
|
+
// also gets a hosted `url` injected so the agent can embed it in slides,
|
|
2028
|
+
// docs, or outbound messages, and callers can persist a URL reference
|
|
2029
|
+
// instead of the raw base64.
|
|
1839
2030
|
//
|
|
1840
2031
|
// When no provider is configured, leave attachments untouched and inject a
|
|
1841
|
-
// hint recommending Builder.io connect — the model can still see
|
|
1842
|
-
//
|
|
1843
|
-
if (hasAttachments &&
|
|
2032
|
+
// hint recommending Builder.io connect — the model can still see images via
|
|
2033
|
+
// base64, and files via their data URL / text, but has no hosted URL.
|
|
2034
|
+
if (hasAttachments &&
|
|
2035
|
+
requestAttachments.some((a) => a.type === "image" || a.type === "file" || a.type === "document")) {
|
|
1844
2036
|
try {
|
|
1845
|
-
const preUpload = await
|
|
2037
|
+
const preUpload = await preUploadAttachments({
|
|
1846
2038
|
attachments: requestAttachments,
|
|
1847
2039
|
ownerEmail,
|
|
2040
|
+
includeFiles: true,
|
|
1848
2041
|
});
|
|
1849
2042
|
if (preUpload.injectedText) {
|
|
1850
2043
|
requestMessage = requestMessage
|
|
@@ -1853,7 +2046,28 @@ export function createProductionAgentHandler(options) {
|
|
|
1853
2046
|
}
|
|
1854
2047
|
}
|
|
1855
2048
|
catch (err) {
|
|
1856
|
-
console.warn("[agent-native]
|
|
2049
|
+
console.warn("[agent-native] preUploadAttachments failed:", err instanceof Error ? err.message : String(err));
|
|
2050
|
+
}
|
|
2051
|
+
}
|
|
2052
|
+
// Persist text-ish attachments as thread-scoped agent_scratch resources so
|
|
2053
|
+
// the model can page through them with the `read-attachment` tool. We do
|
|
2054
|
+
// this here — before buildUserContentWithAttachments — so the resource IDs
|
|
2055
|
+
// are available when we inject the truncation notice into the text content.
|
|
2056
|
+
const textAttachmentResourceMap = new Map();
|
|
2057
|
+
if (hasAttachments && threadId) {
|
|
2058
|
+
try {
|
|
2059
|
+
const { persistTextAttachmentsAsResources } = await import("../server/attachment-actions.js");
|
|
2060
|
+
const stored = await persistTextAttachmentsAsResources({
|
|
2061
|
+
attachments: requestAttachments,
|
|
2062
|
+
threadId,
|
|
2063
|
+
ownerEmail,
|
|
2064
|
+
});
|
|
2065
|
+
for (const [k, v] of stored) {
|
|
2066
|
+
textAttachmentResourceMap.set(k, v);
|
|
2067
|
+
}
|
|
2068
|
+
}
|
|
2069
|
+
catch (err) {
|
|
2070
|
+
console.warn("[agent-native] persistTextAttachmentsAsResources failed:", err instanceof Error ? err.message : String(err));
|
|
1857
2071
|
}
|
|
1858
2072
|
}
|
|
1859
2073
|
// When a per-request engine override is specified, resolve the API key
|
|
@@ -2169,15 +2383,18 @@ export function createProductionAgentHandler(options) {
|
|
|
2169
2383
|
...historyMessages,
|
|
2170
2384
|
{ role: "user", content: userContent },
|
|
2171
2385
|
];
|
|
2172
|
-
//
|
|
2173
|
-
//
|
|
2386
|
+
// Atomically claim the run slot for this thread. The claim checks SQL for
|
|
2387
|
+
// a live (non-stale) running row so two near-simultaneous POSTs on
|
|
2388
|
+
// different serverless isolates both see the correct state — a plain
|
|
2389
|
+
// read-then-act check races on multi-isolate deployments because both
|
|
2390
|
+
// reads see no running row before either insert commits.
|
|
2174
2391
|
if (threadId) {
|
|
2175
|
-
const
|
|
2176
|
-
if (
|
|
2392
|
+
const slot = await tryClaimRunSlot(threadId);
|
|
2393
|
+
if (!slot.claimed) {
|
|
2177
2394
|
setResponseStatus(event, 409);
|
|
2178
2395
|
return {
|
|
2179
2396
|
error: "Run already in progress for this thread",
|
|
2180
|
-
activeRunId:
|
|
2397
|
+
activeRunId: slot.activeRunId,
|
|
2181
2398
|
};
|
|
2182
2399
|
}
|
|
2183
2400
|
}
|
|
@@ -2525,12 +2742,16 @@ export function createProductionAgentHandler(options) {
|
|
|
2525
2742
|
executionMode: requestMode,
|
|
2526
2743
|
maxIterations: loopSettings.maxIterations,
|
|
2527
2744
|
finalResponseGuard: options.finalResponseGuard,
|
|
2745
|
+
...(options.toolLimits ? { toolLimits: options.toolLimits } : {}),
|
|
2528
2746
|
...(threadId
|
|
2529
2747
|
? { threadId: effectiveThreadId, turnId: effectiveTurnId }
|
|
2530
2748
|
: {}),
|
|
2531
2749
|
};
|
|
2532
2750
|
send({ type: "activity", label: "Contacting model" });
|
|
2533
|
-
|
|
2751
|
+
// loopUsage is always assigned — either via instrumentAgentLoop or
|
|
2752
|
+
// runAgentLoop before use below. The definite-assignment guard is
|
|
2753
|
+
// conservative because the try/catch makes the control flow non-obvious.
|
|
2754
|
+
let loopUsage = undefined;
|
|
2534
2755
|
let instrumented = false;
|
|
2535
2756
|
try {
|
|
2536
2757
|
const { getObservabilityConfig, instrumentAgentLoop } = await import("../observability/traces.js");
|