@agent-native/core 0.47.1 → 0.48.2
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 +19 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +253 -39
- 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 +298 -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/collab/client.d.ts +1 -1
- package/dist/collab/client.js +20 -14
- 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/schema.d.ts +51 -51
- package/dist/extensions/slots/schema.d.ts +13 -13
- 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.map +1 -1
- package/dist/provider-api/custom-registry.js.map +1 -1
- package/dist/provider-api/index.d.ts +10 -10
- package/dist/provider-api/index.js +0 -5
- 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/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 +33 -0
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +251 -180
- 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 +4 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +49 -29
- 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/schema.d.ts +8 -8
- package/dist/workspace-files/tool.d.ts.map +1 -1
- package/dist/workspace-files/tool.js +0 -1
- package/dist/workspace-files/tool.js.map +1 -1
- 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 +25 -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, ` +
|
|
@@ -1521,14 +1667,42 @@ export async function runAgentLoop(opts) {
|
|
|
1521
1667
|
let mcpApp;
|
|
1522
1668
|
try {
|
|
1523
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
|
+
}
|
|
1524
1704
|
const raw = await Promise.race([
|
|
1525
|
-
|
|
1526
|
-
send,
|
|
1527
|
-
userEmail: getRequestUserEmail(),
|
|
1528
|
-
orgId: getRequestOrgId() ?? null,
|
|
1529
|
-
caller: "tool",
|
|
1530
|
-
attachments: opts.attachments,
|
|
1531
|
-
}),
|
|
1705
|
+
actionPromise,
|
|
1532
1706
|
new Promise((_, reject) => {
|
|
1533
1707
|
timeoutSignal.addEventListener("abort", () => reject(new Error(`Tool call timed out after ${toolTimeoutMs / 1000} seconds`)));
|
|
1534
1708
|
}),
|
|
@@ -1690,12 +1864,21 @@ export async function runAgentLoop(opts) {
|
|
|
1690
1864
|
await flushParallelBatch();
|
|
1691
1865
|
messages.push({ role: "user", content: toolResultParts });
|
|
1692
1866
|
if (requestedActionStop) {
|
|
1693
|
-
|
|
1867
|
+
// TypeScript can't track ??= through async closures; cast to known type.
|
|
1868
|
+
const stop = requestedActionStop;
|
|
1869
|
+
send({ type: "text", text: stop.message });
|
|
1694
1870
|
break;
|
|
1695
1871
|
}
|
|
1696
1872
|
}
|
|
1697
|
-
if (!signal.aborted)
|
|
1873
|
+
if (!signal.aborted) {
|
|
1698
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
|
+
}
|
|
1699
1882
|
return usage;
|
|
1700
1883
|
}
|
|
1701
1884
|
function backgroundChatProgressRunId(turnId) {
|
|
@@ -1838,19 +2021,23 @@ export function createProductionAgentHandler(options) {
|
|
|
1838
2021
|
requestAttachments = preparedRequest.attachments;
|
|
1839
2022
|
}
|
|
1840
2023
|
}
|
|
1841
|
-
// Pre-upload chat
|
|
1842
|
-
// provider (Builder.io by default). The model still sees the
|
|
1843
|
-
// multimodal content for
|
|
1844
|
-
//
|
|
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.
|
|
1845
2030
|
//
|
|
1846
2031
|
// When no provider is configured, leave attachments untouched and inject a
|
|
1847
|
-
// hint recommending Builder.io connect — the model can still see
|
|
1848
|
-
//
|
|
1849
|
-
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")) {
|
|
1850
2036
|
try {
|
|
1851
|
-
const preUpload = await
|
|
2037
|
+
const preUpload = await preUploadAttachments({
|
|
1852
2038
|
attachments: requestAttachments,
|
|
1853
2039
|
ownerEmail,
|
|
2040
|
+
includeFiles: true,
|
|
1854
2041
|
});
|
|
1855
2042
|
if (preUpload.injectedText) {
|
|
1856
2043
|
requestMessage = requestMessage
|
|
@@ -1859,7 +2046,28 @@ export function createProductionAgentHandler(options) {
|
|
|
1859
2046
|
}
|
|
1860
2047
|
}
|
|
1861
2048
|
catch (err) {
|
|
1862
|
-
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));
|
|
1863
2071
|
}
|
|
1864
2072
|
}
|
|
1865
2073
|
// When a per-request engine override is specified, resolve the API key
|
|
@@ -2175,15 +2383,18 @@ export function createProductionAgentHandler(options) {
|
|
|
2175
2383
|
...historyMessages,
|
|
2176
2384
|
{ role: "user", content: userContent },
|
|
2177
2385
|
];
|
|
2178
|
-
//
|
|
2179
|
-
//
|
|
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.
|
|
2180
2391
|
if (threadId) {
|
|
2181
|
-
const
|
|
2182
|
-
if (
|
|
2392
|
+
const slot = await tryClaimRunSlot(threadId);
|
|
2393
|
+
if (!slot.claimed) {
|
|
2183
2394
|
setResponseStatus(event, 409);
|
|
2184
2395
|
return {
|
|
2185
2396
|
error: "Run already in progress for this thread",
|
|
2186
|
-
activeRunId:
|
|
2397
|
+
activeRunId: slot.activeRunId,
|
|
2187
2398
|
};
|
|
2188
2399
|
}
|
|
2189
2400
|
}
|
|
@@ -2537,7 +2748,10 @@ export function createProductionAgentHandler(options) {
|
|
|
2537
2748
|
: {}),
|
|
2538
2749
|
};
|
|
2539
2750
|
send({ type: "activity", label: "Contacting model" });
|
|
2540
|
-
|
|
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;
|
|
2541
2755
|
let instrumented = false;
|
|
2542
2756
|
try {
|
|
2543
2757
|
const { getObservabilityConfig, instrumentAgentLoop } = await import("../observability/traces.js");
|