@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
|
@@ -4,6 +4,7 @@ import { createSsrfSafeDispatcher, isBlockedExtensionUrlWithDns, } from "../exte
|
|
|
4
4
|
import { listOAuthAccountsByOwner, saveOAuthTokens, } from "../oauth-tokens/index.js";
|
|
5
5
|
import { getCredentialContext } from "../server/request-context.js";
|
|
6
6
|
import { resolveWorkspaceConnectionCredentialForApp } from "../workspace-connections/credentials.js";
|
|
7
|
+
export { upsertCustomProvider, deleteCustomProvider, listCustomProviders, getCustomProvider, validateCustomBaseUrl, } from "./custom-registry.js";
|
|
7
8
|
export const PROVIDER_API_IDS = [
|
|
8
9
|
"amplitude",
|
|
9
10
|
"apollo",
|
|
@@ -35,6 +36,10 @@ const DEFAULT_TIMEOUT_MS = 30_000;
|
|
|
35
36
|
const MAX_TIMEOUT_MS = 120_000;
|
|
36
37
|
const DEFAULT_MAX_BYTES = 1024 * 1024;
|
|
37
38
|
const MAX_MAX_BYTES = 4 * 1024 * 1024;
|
|
39
|
+
/** When saveToFile is used, allow a much larger per-page response since the
|
|
40
|
+
* content won't enter the model's context window. */
|
|
41
|
+
const SAVE_TO_FILE_MAX_BYTES = 20 * 1024 * 1024; // 20 MB
|
|
42
|
+
const FETCH_ALL_PAGES_MAX = 50;
|
|
38
43
|
const HEADER_NAME_RE = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
|
|
39
44
|
const BLOCKED_OUTBOUND_HEADERS = new Set([
|
|
40
45
|
"connection",
|
|
@@ -716,25 +721,45 @@ export function createProviderApiRuntime(options) {
|
|
|
716
721
|
};
|
|
717
722
|
return {
|
|
718
723
|
providerIds,
|
|
719
|
-
listCatalog: (provider) =>
|
|
724
|
+
listCatalog: (provider) => listProviderApiCatalogWithCustom(provider, { providerIds }, runtimeOptions),
|
|
720
725
|
fetchDocs: (docsOptions) => fetchProviderApiDocs(docsOptions, runtimeOptions),
|
|
721
726
|
executeRequest: (args) => executeProviderApiRequest(args, runtimeOptions),
|
|
722
727
|
};
|
|
723
728
|
}
|
|
724
729
|
export async function fetchProviderApiDocs(options, runtime = { appId: "app" }) {
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
const
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
const
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
730
|
+
await assertProviderAllowedAsync(options.provider, runtime);
|
|
731
|
+
// Resolve config — may be a built-in or a custom provider.
|
|
732
|
+
const builtIn = isProviderApiId(options.provider)
|
|
733
|
+
? getProviderApiConfig(options.provider)
|
|
734
|
+
: null;
|
|
735
|
+
const customConfig = builtIn
|
|
736
|
+
? null
|
|
737
|
+
: await resolveCustomProvider(options.provider, runtime);
|
|
738
|
+
if (!builtIn && !customConfig) {
|
|
739
|
+
const known = await listAllProviderIds(runtime);
|
|
740
|
+
throw new Error(`Unknown provider "${options.provider}". Known providers: ${known.join(", ")}`);
|
|
741
|
+
}
|
|
742
|
+
const catalog = builtIn
|
|
743
|
+
? listProviderApiCatalog(options.provider)[0]
|
|
744
|
+
: customProviderToCatalogEntry(customConfig);
|
|
745
|
+
if (!options.url) {
|
|
746
|
+
return {
|
|
747
|
+
provider: options.provider,
|
|
748
|
+
catalog,
|
|
749
|
+
guidance: "provider-api-docs can fetch ANY public http(s) URL — pass url to retrieve API documentation, OpenAPI specs, changelogs, or any public web page. Registered docsUrls above are curated starting points.",
|
|
750
|
+
};
|
|
751
|
+
}
|
|
752
|
+
// Open docs fetching: allow ANY public https/http URL.
|
|
753
|
+
// The SSRF guard still applies — private/internal addresses are blocked.
|
|
754
|
+
let url;
|
|
755
|
+
try {
|
|
756
|
+
url = new URL(options.url);
|
|
757
|
+
}
|
|
758
|
+
catch {
|
|
759
|
+
throw new Error(`Invalid docs URL: ${options.url}`);
|
|
760
|
+
}
|
|
761
|
+
if (url.protocol !== "https:" && url.protocol !== "http:") {
|
|
762
|
+
throw new Error(`Docs URL must use https: or http: (got ${url.protocol})`);
|
|
738
763
|
}
|
|
739
764
|
if (await isBlockedExtensionUrlWithDns(url.href)) {
|
|
740
765
|
throw new Error(`Blocked private/internal docs URL: ${url.href}`);
|
|
@@ -744,15 +769,30 @@ export async function fetchProviderApiDocs(options, runtime = { appId: "app" })
|
|
|
744
769
|
maxBytes: clampMaxBytes(options.maxBytes),
|
|
745
770
|
});
|
|
746
771
|
return {
|
|
747
|
-
provider:
|
|
772
|
+
provider: options.provider,
|
|
748
773
|
catalog,
|
|
749
774
|
request: { url: url.href },
|
|
750
775
|
response,
|
|
751
776
|
};
|
|
752
777
|
}
|
|
753
778
|
export async function executeProviderApiRequest(args, runtime) {
|
|
754
|
-
|
|
755
|
-
|
|
779
|
+
await assertProviderAllowedAsync(args.provider, runtime);
|
|
780
|
+
// Check whether this is a built-in or custom provider.
|
|
781
|
+
const builtIn = isProviderApiId(args.provider)
|
|
782
|
+
? getProviderApiConfig(args.provider)
|
|
783
|
+
: null;
|
|
784
|
+
const customConfig = builtIn
|
|
785
|
+
? null
|
|
786
|
+
: await resolveCustomProvider(args.provider, runtime);
|
|
787
|
+
if (!builtIn && !customConfig) {
|
|
788
|
+
const known = await listAllProviderIds(runtime);
|
|
789
|
+
throw new Error(`Unknown provider "${args.provider}". Known providers: ${known.join(", ")}`);
|
|
790
|
+
}
|
|
791
|
+
if (customConfig) {
|
|
792
|
+
return executeCustomProviderApiRequest(args, customConfig, runtime);
|
|
793
|
+
}
|
|
794
|
+
// --- built-in provider path (original code) ---
|
|
795
|
+
const config = builtIn;
|
|
756
796
|
const ctx = requireRuntimeCredentialContext(runtime, config.credentialKeys[0] ?? config.id);
|
|
757
797
|
const baseUrl = await resolveBaseUrl(config, runtime, ctx, args);
|
|
758
798
|
const placeholders = await resolvePlaceholders(config, runtime, ctx, args);
|
|
@@ -775,15 +815,78 @@ export async function executeProviderApiRequest(args, runtime) {
|
|
|
775
815
|
...(isPlainRecord(extraHeaders) ? extraHeaders : {}),
|
|
776
816
|
...auth.headers,
|
|
777
817
|
});
|
|
818
|
+
// Allow a much larger maxBytes ceiling when writing to a workspace file.
|
|
819
|
+
const effectiveMaxBytes = args.saveToFile
|
|
820
|
+
? SAVE_TO_FILE_MAX_BYTES
|
|
821
|
+
: clampMaxBytes(args.maxBytes);
|
|
822
|
+
// --- fetchAllPages mode ---
|
|
823
|
+
if (args.fetchAllPages) {
|
|
824
|
+
const pageCfg = args.fetchAllPages;
|
|
825
|
+
const { items, pageCount, lastStatus, lastContentType } = await fetchAllPages(pageCfg, async (extraQuery) => {
|
|
826
|
+
const queryWithCursor = extraQuery
|
|
827
|
+
? mergeQueryObjects(substituteUnknown(args.query, placeholders), extraQuery)
|
|
828
|
+
: substituteUnknown(args.query, placeholders);
|
|
829
|
+
const pageUrl = buildProviderUrl({
|
|
830
|
+
config,
|
|
831
|
+
baseUrl,
|
|
832
|
+
rawPath: substituteString(args.path, placeholders),
|
|
833
|
+
query: queryWithCursor,
|
|
834
|
+
});
|
|
835
|
+
const pageBody = prepareBody(substituteUnknown(args.body, placeholders), { ...headers });
|
|
836
|
+
const resp = await fetchWithTimeout(pageUrl.href, {
|
|
837
|
+
method,
|
|
838
|
+
headers,
|
|
839
|
+
body: pageBody,
|
|
840
|
+
maxBytes: effectiveMaxBytes,
|
|
841
|
+
timeoutMs: clampTimeout(args.timeoutMs),
|
|
842
|
+
secretValues: auth.secretValues,
|
|
843
|
+
});
|
|
844
|
+
return {
|
|
845
|
+
text: resp.text ??
|
|
846
|
+
(resp.json !== undefined ? JSON.stringify(resp.json) : ""),
|
|
847
|
+
contentType: resp.contentType,
|
|
848
|
+
status: resp.status,
|
|
849
|
+
ok: resp.ok,
|
|
850
|
+
};
|
|
851
|
+
});
|
|
852
|
+
const allItemsJson = JSON.stringify(items, null, 2);
|
|
853
|
+
const metadata = {
|
|
854
|
+
provider: { id: config.id, label: config.label },
|
|
855
|
+
pagesRead: pageCount,
|
|
856
|
+
totalItems: Array.isArray(items) ? items.length : 0,
|
|
857
|
+
lastStatus,
|
|
858
|
+
};
|
|
859
|
+
if (args.saveToFile) {
|
|
860
|
+
const saved = (await handleSaveToFile(args.saveToFile, allItemsJson, lastContentType ?? "application/json", lastStatus));
|
|
861
|
+
return { ...metadata, ...saved };
|
|
862
|
+
}
|
|
863
|
+
return { ...metadata, items };
|
|
864
|
+
}
|
|
865
|
+
// --- Single request ---
|
|
778
866
|
const body = prepareBody(substituteUnknown(args.body, placeholders), headers);
|
|
779
867
|
const response = await fetchWithTimeout(url.href, {
|
|
780
868
|
method,
|
|
781
869
|
headers,
|
|
782
870
|
body,
|
|
783
|
-
maxBytes:
|
|
871
|
+
maxBytes: effectiveMaxBytes,
|
|
784
872
|
timeoutMs: clampTimeout(args.timeoutMs),
|
|
785
873
|
secretValues: auth.secretValues,
|
|
786
874
|
});
|
|
875
|
+
// saveToFile: write full body to workspace file and return compact summary.
|
|
876
|
+
if (args.saveToFile) {
|
|
877
|
+
const rawText = response.text ??
|
|
878
|
+
(response.json !== undefined ? JSON.stringify(response.json) : "");
|
|
879
|
+
const saved = (await handleSaveToFile(args.saveToFile, rawText, response.contentType, response.status));
|
|
880
|
+
return {
|
|
881
|
+
provider: { id: config.id, label: config.label },
|
|
882
|
+
request: {
|
|
883
|
+
method,
|
|
884
|
+
url: redactString(url.href, auth.secretValues),
|
|
885
|
+
path: redactString(`${url.pathname}${url.search}`, auth.secretValues),
|
|
886
|
+
},
|
|
887
|
+
...saved,
|
|
888
|
+
};
|
|
889
|
+
}
|
|
787
890
|
return {
|
|
788
891
|
provider: {
|
|
789
892
|
id: config.id,
|
|
@@ -808,6 +911,342 @@ export async function executeProviderApiRequest(args, runtime) {
|
|
|
808
911
|
guidance: "This was a raw provider API request. Use provider docs/spec URLs to choose endpoints and include method/path/status plus relevant filters in the methodology. Prefer this escape hatch whenever canned actions are too narrow.",
|
|
809
912
|
};
|
|
810
913
|
}
|
|
914
|
+
// ---------------------------------------------------------------------------
|
|
915
|
+
// Custom provider execution
|
|
916
|
+
// ---------------------------------------------------------------------------
|
|
917
|
+
async function executeCustomProviderApiRequest(args, customConfig, runtime) {
|
|
918
|
+
const ctx = requireRuntimeCredentialContext(runtime, customConfig.id);
|
|
919
|
+
const method = normalizeMethod(args.method);
|
|
920
|
+
const baseUrl = customConfig.baseUrl;
|
|
921
|
+
// Build a lightweight ProviderApiConfig-like object so we can reuse
|
|
922
|
+
// buildProviderUrl (which validates allowed hosts).
|
|
923
|
+
const syntheticConfig = {
|
|
924
|
+
id: customConfig.id,
|
|
925
|
+
label: customConfig.label,
|
|
926
|
+
defaultBaseUrl: baseUrl,
|
|
927
|
+
auth: { type: "none" },
|
|
928
|
+
credentialKeys: [],
|
|
929
|
+
docsUrls: customConfig.docsUrls,
|
|
930
|
+
allowedHostSuffixes: customConfig.allowedHostSuffixes,
|
|
931
|
+
defaultHeaders: customConfig.defaultHeaders,
|
|
932
|
+
};
|
|
933
|
+
const url = buildProviderUrl({
|
|
934
|
+
config: syntheticConfig,
|
|
935
|
+
baseUrl,
|
|
936
|
+
rawPath: args.path,
|
|
937
|
+
query: args.query,
|
|
938
|
+
});
|
|
939
|
+
if (await isBlockedExtensionUrlWithDns(url.href)) {
|
|
940
|
+
throw new Error(`Blocked private/internal provider URL: ${url.href}`);
|
|
941
|
+
}
|
|
942
|
+
const auth = args.auth === "none"
|
|
943
|
+
? emptyAuth()
|
|
944
|
+
: await resolveCustomAuth(customConfig, runtime, ctx, args);
|
|
945
|
+
const extraHeaders = args.headers ?? {};
|
|
946
|
+
const headers = sanitizeOutboundHeaders({
|
|
947
|
+
...(customConfig.defaultHeaders ?? {}),
|
|
948
|
+
...(isPlainRecord(extraHeaders) ? extraHeaders : {}),
|
|
949
|
+
...auth.headers,
|
|
950
|
+
});
|
|
951
|
+
const body = prepareBody(args.body, headers);
|
|
952
|
+
const effectiveMaxBytes = args.saveToFile
|
|
953
|
+
? SAVE_TO_FILE_MAX_BYTES
|
|
954
|
+
: clampMaxBytes(args.maxBytes);
|
|
955
|
+
// --- fetchAllPages mode (same cursor pagination as built-in providers) ---
|
|
956
|
+
if (args.fetchAllPages) {
|
|
957
|
+
const pageCfg = args.fetchAllPages;
|
|
958
|
+
const { items, pageCount, lastStatus, lastContentType } = await fetchAllPages(pageCfg, async (extraQuery) => {
|
|
959
|
+
const queryWithCursor = extraQuery
|
|
960
|
+
? mergeQueryObjects(args.query, extraQuery)
|
|
961
|
+
: args.query;
|
|
962
|
+
const pageUrl = buildProviderUrl({
|
|
963
|
+
config: syntheticConfig,
|
|
964
|
+
baseUrl,
|
|
965
|
+
rawPath: args.path,
|
|
966
|
+
query: queryWithCursor,
|
|
967
|
+
});
|
|
968
|
+
const pageBody = prepareBody(args.body, { ...headers });
|
|
969
|
+
const resp = await fetchWithTimeout(pageUrl.href, {
|
|
970
|
+
method,
|
|
971
|
+
headers,
|
|
972
|
+
body: pageBody,
|
|
973
|
+
maxBytes: effectiveMaxBytes,
|
|
974
|
+
timeoutMs: clampTimeout(args.timeoutMs),
|
|
975
|
+
secretValues: auth.secretValues,
|
|
976
|
+
});
|
|
977
|
+
return {
|
|
978
|
+
text: resp.text ??
|
|
979
|
+
(resp.json !== undefined ? JSON.stringify(resp.json) : ""),
|
|
980
|
+
contentType: resp.contentType,
|
|
981
|
+
status: resp.status,
|
|
982
|
+
ok: resp.ok,
|
|
983
|
+
};
|
|
984
|
+
});
|
|
985
|
+
const allItemsJson = JSON.stringify(items, null, 2);
|
|
986
|
+
const metadata = {
|
|
987
|
+
provider: {
|
|
988
|
+
id: customConfig.id,
|
|
989
|
+
label: customConfig.label,
|
|
990
|
+
custom: true,
|
|
991
|
+
},
|
|
992
|
+
pagesRead: pageCount,
|
|
993
|
+
totalItems: Array.isArray(items) ? items.length : 0,
|
|
994
|
+
lastStatus,
|
|
995
|
+
};
|
|
996
|
+
if (args.saveToFile) {
|
|
997
|
+
const saved = (await handleSaveToFile(args.saveToFile, allItemsJson, lastContentType ?? "application/json", lastStatus));
|
|
998
|
+
return { ...metadata, ...saved };
|
|
999
|
+
}
|
|
1000
|
+
return { ...metadata, items };
|
|
1001
|
+
}
|
|
1002
|
+
const response = await fetchWithTimeout(url.href, {
|
|
1003
|
+
method,
|
|
1004
|
+
headers,
|
|
1005
|
+
body,
|
|
1006
|
+
maxBytes: effectiveMaxBytes,
|
|
1007
|
+
timeoutMs: clampTimeout(args.timeoutMs),
|
|
1008
|
+
secretValues: auth.secretValues,
|
|
1009
|
+
});
|
|
1010
|
+
if (args.saveToFile) {
|
|
1011
|
+
const rawText = response.text ??
|
|
1012
|
+
(response.json !== undefined ? JSON.stringify(response.json) : "");
|
|
1013
|
+
const saved = (await handleSaveToFile(args.saveToFile, rawText, response.contentType, response.status));
|
|
1014
|
+
return {
|
|
1015
|
+
provider: {
|
|
1016
|
+
id: customConfig.id,
|
|
1017
|
+
label: customConfig.label,
|
|
1018
|
+
custom: true,
|
|
1019
|
+
},
|
|
1020
|
+
request: {
|
|
1021
|
+
method,
|
|
1022
|
+
url: redactString(url.href, auth.secretValues),
|
|
1023
|
+
path: redactString(`${url.pathname}${url.search}`, auth.secretValues),
|
|
1024
|
+
},
|
|
1025
|
+
...saved,
|
|
1026
|
+
};
|
|
1027
|
+
}
|
|
1028
|
+
return {
|
|
1029
|
+
provider: {
|
|
1030
|
+
id: customConfig.id,
|
|
1031
|
+
label: customConfig.label,
|
|
1032
|
+
docsUrls: customConfig.docsUrls,
|
|
1033
|
+
specUrls: [],
|
|
1034
|
+
custom: true,
|
|
1035
|
+
},
|
|
1036
|
+
request: {
|
|
1037
|
+
method,
|
|
1038
|
+
url: redactString(url.href, auth.secretValues),
|
|
1039
|
+
path: redactString(`${url.pathname}${url.search}`, auth.secretValues),
|
|
1040
|
+
auth: args.auth === "none" ? "none" : describeCustomAuth(customConfig.auth),
|
|
1041
|
+
credentialSources: auth.credentialSources.map((source) => ({
|
|
1042
|
+
...source,
|
|
1043
|
+
fingerprint: fingerprint(source.key),
|
|
1044
|
+
})),
|
|
1045
|
+
headerNames: Object.keys(headers).filter((name) => name.toLowerCase() !== "authorization"),
|
|
1046
|
+
},
|
|
1047
|
+
response,
|
|
1048
|
+
guidance: "This was a raw provider API request to a custom provider. Use provider docs URLs to choose endpoints.",
|
|
1049
|
+
};
|
|
1050
|
+
}
|
|
1051
|
+
async function resolveCustomAuth(customConfig, runtime, ctx, args) {
|
|
1052
|
+
const auth = customConfig.auth;
|
|
1053
|
+
if (auth.type === "none")
|
|
1054
|
+
return emptyAuth();
|
|
1055
|
+
if (auth.type === "bearer") {
|
|
1056
|
+
const credential = await resolveRequiredCredentialByKey({
|
|
1057
|
+
provider: customConfig.id,
|
|
1058
|
+
key: auth.credentialKey,
|
|
1059
|
+
ctx,
|
|
1060
|
+
runtime,
|
|
1061
|
+
connectionId: args.connectionId,
|
|
1062
|
+
});
|
|
1063
|
+
return {
|
|
1064
|
+
headers: { Authorization: `Bearer ${credential.value}` },
|
|
1065
|
+
credentialSources: [omitCredentialValue(credential)],
|
|
1066
|
+
secretValues: [credential.value],
|
|
1067
|
+
};
|
|
1068
|
+
}
|
|
1069
|
+
if (auth.type === "basic") {
|
|
1070
|
+
const username = await resolveRequiredCredentialByKey({
|
|
1071
|
+
provider: customConfig.id,
|
|
1072
|
+
key: auth.usernameKey,
|
|
1073
|
+
ctx,
|
|
1074
|
+
runtime,
|
|
1075
|
+
connectionId: args.connectionId,
|
|
1076
|
+
});
|
|
1077
|
+
const password = auth.passwordKey === auth.usernameKey
|
|
1078
|
+
? username
|
|
1079
|
+
: await resolveRequiredCredentialByKey({
|
|
1080
|
+
provider: customConfig.id,
|
|
1081
|
+
key: auth.passwordKey,
|
|
1082
|
+
ctx,
|
|
1083
|
+
runtime,
|
|
1084
|
+
connectionId: args.connectionId,
|
|
1085
|
+
});
|
|
1086
|
+
const encoded = Buffer.from(`${username.value}:${password.value}`).toString("base64");
|
|
1087
|
+
return {
|
|
1088
|
+
headers: { Authorization: `Basic ${encoded}` },
|
|
1089
|
+
credentialSources: [
|
|
1090
|
+
omitCredentialValue(username),
|
|
1091
|
+
...(password.key === username.key
|
|
1092
|
+
? []
|
|
1093
|
+
: [omitCredentialValue(password)]),
|
|
1094
|
+
],
|
|
1095
|
+
secretValues: [username.value, password.value, encoded],
|
|
1096
|
+
};
|
|
1097
|
+
}
|
|
1098
|
+
if (auth.type === "api-key-header") {
|
|
1099
|
+
const credential = await resolveRequiredCredentialByKey({
|
|
1100
|
+
provider: customConfig.id,
|
|
1101
|
+
key: auth.credentialKey,
|
|
1102
|
+
ctx,
|
|
1103
|
+
runtime,
|
|
1104
|
+
connectionId: args.connectionId,
|
|
1105
|
+
});
|
|
1106
|
+
return {
|
|
1107
|
+
headers: { [auth.headerName]: credential.value },
|
|
1108
|
+
credentialSources: [omitCredentialValue(credential)],
|
|
1109
|
+
secretValues: [credential.value],
|
|
1110
|
+
};
|
|
1111
|
+
}
|
|
1112
|
+
return emptyAuth();
|
|
1113
|
+
}
|
|
1114
|
+
/** Resolve a credential by key name (no workspace-provider lookup for custom). */
|
|
1115
|
+
async function resolveRequiredCredentialByKey(options) {
|
|
1116
|
+
const localCredentialSource = options.runtime.localCredentialSource ?? "app_local";
|
|
1117
|
+
const lookup = {
|
|
1118
|
+
appId: options.runtime.appId,
|
|
1119
|
+
provider: options.provider,
|
|
1120
|
+
key: options.key,
|
|
1121
|
+
ctx: options.ctx,
|
|
1122
|
+
workspaceProvider: undefined,
|
|
1123
|
+
connectionId: options.connectionId,
|
|
1124
|
+
localCredentialSource,
|
|
1125
|
+
};
|
|
1126
|
+
const resolver = options.runtime.resolveCredential ?? defaultProviderApiCredentialResolver;
|
|
1127
|
+
const credential = await resolver(lookup);
|
|
1128
|
+
if (!credential?.value) {
|
|
1129
|
+
throw new Error(`Credential "${options.key}" not configured for custom provider "${options.provider}".`);
|
|
1130
|
+
}
|
|
1131
|
+
return credential;
|
|
1132
|
+
}
|
|
1133
|
+
function describeCustomAuth(auth) {
|
|
1134
|
+
if (auth.type === "none")
|
|
1135
|
+
return "none";
|
|
1136
|
+
if (auth.type === "bearer")
|
|
1137
|
+
return "bearer";
|
|
1138
|
+
if (auth.type === "basic")
|
|
1139
|
+
return "basic";
|
|
1140
|
+
if (auth.type === "api-key-header")
|
|
1141
|
+
return `api-key-header:${auth.headerName}`;
|
|
1142
|
+
return "unknown";
|
|
1143
|
+
}
|
|
1144
|
+
// ---------------------------------------------------------------------------
|
|
1145
|
+
// Catalog helpers with custom provider support
|
|
1146
|
+
// ---------------------------------------------------------------------------
|
|
1147
|
+
/**
|
|
1148
|
+
* Convert a custom provider to the same catalog shape as built-in providers.
|
|
1149
|
+
*/
|
|
1150
|
+
function customProviderToCatalogEntry(config) {
|
|
1151
|
+
return {
|
|
1152
|
+
id: config.id,
|
|
1153
|
+
label: config.label,
|
|
1154
|
+
defaultBaseUrl: config.baseUrl,
|
|
1155
|
+
baseUrlCredentialKey: null,
|
|
1156
|
+
auth: describeCustomAuth(config.auth),
|
|
1157
|
+
credentialKeys: extractCredentialKeysFromCustomAuth(config.auth),
|
|
1158
|
+
docsUrls: config.docsUrls,
|
|
1159
|
+
specUrls: [],
|
|
1160
|
+
allowedHostSuffixes: config.allowedHostSuffixes,
|
|
1161
|
+
placeholders: [],
|
|
1162
|
+
defaultHeaders: config.defaultHeaders,
|
|
1163
|
+
examples: [],
|
|
1164
|
+
notes: config.notes ? [config.notes] : [],
|
|
1165
|
+
templateUses: [],
|
|
1166
|
+
custom: true,
|
|
1167
|
+
};
|
|
1168
|
+
}
|
|
1169
|
+
function extractCredentialKeysFromCustomAuth(auth) {
|
|
1170
|
+
if (auth.type === "bearer")
|
|
1171
|
+
return [auth.credentialKey];
|
|
1172
|
+
if (auth.type === "basic") {
|
|
1173
|
+
return auth.usernameKey === auth.passwordKey
|
|
1174
|
+
? [auth.usernameKey]
|
|
1175
|
+
: [auth.usernameKey, auth.passwordKey];
|
|
1176
|
+
}
|
|
1177
|
+
if (auth.type === "api-key-header")
|
|
1178
|
+
return [auth.credentialKey];
|
|
1179
|
+
return [];
|
|
1180
|
+
}
|
|
1181
|
+
/**
|
|
1182
|
+
* List catalog entries including custom providers (merged after built-ins).
|
|
1183
|
+
*/
|
|
1184
|
+
async function listProviderApiCatalogWithCustom(provider, options, runtime) {
|
|
1185
|
+
const customConfigs = runtime.getCustomProviders
|
|
1186
|
+
? await runtime.getCustomProviders()
|
|
1187
|
+
: [];
|
|
1188
|
+
if (provider) {
|
|
1189
|
+
// Check built-ins first
|
|
1190
|
+
if (isProviderApiId(provider)) {
|
|
1191
|
+
return listProviderApiCatalog(provider, options);
|
|
1192
|
+
}
|
|
1193
|
+
// Check custom
|
|
1194
|
+
const custom = customConfigs.find((c) => c.id === provider);
|
|
1195
|
+
if (custom)
|
|
1196
|
+
return [customProviderToCatalogEntry(custom)];
|
|
1197
|
+
const known = [
|
|
1198
|
+
...normalizeProviderIds(options.providerIds),
|
|
1199
|
+
...customConfigs.map((c) => c.id),
|
|
1200
|
+
];
|
|
1201
|
+
throw new Error(`Unknown provider "${provider}". Known providers: ${known.join(", ")}`);
|
|
1202
|
+
}
|
|
1203
|
+
const builtInEntries = listProviderApiCatalog(undefined, options);
|
|
1204
|
+
const builtInIds = new Set((options.providerIds ?? PROVIDER_API_IDS).map(String));
|
|
1205
|
+
const customEntries = customConfigs
|
|
1206
|
+
.filter((c) => !builtInIds.has(c.id))
|
|
1207
|
+
.map(customProviderToCatalogEntry);
|
|
1208
|
+
return [...builtInEntries, ...customEntries];
|
|
1209
|
+
}
|
|
1210
|
+
/**
|
|
1211
|
+
* Look up a custom provider by id from the runtime loader.
|
|
1212
|
+
*/
|
|
1213
|
+
async function resolveCustomProvider(id, runtime) {
|
|
1214
|
+
if (!runtime.getCustomProviders)
|
|
1215
|
+
return null;
|
|
1216
|
+
const configs = await runtime.getCustomProviders();
|
|
1217
|
+
return configs.find((c) => c.id === id) ?? null;
|
|
1218
|
+
}
|
|
1219
|
+
/**
|
|
1220
|
+
* List all provider ids (built-in + custom) visible to this runtime.
|
|
1221
|
+
*/
|
|
1222
|
+
async function listAllProviderIds(runtime) {
|
|
1223
|
+
const builtIn = normalizeProviderIds(runtime.providerIds).map(String);
|
|
1224
|
+
if (!runtime.getCustomProviders)
|
|
1225
|
+
return builtIn;
|
|
1226
|
+
const custom = await runtime.getCustomProviders();
|
|
1227
|
+
return [...builtIn, ...custom.map((c) => c.id)];
|
|
1228
|
+
}
|
|
1229
|
+
/**
|
|
1230
|
+
* Assert that a provider is either a known built-in or a registered custom
|
|
1231
|
+
* provider. Throws with a descriptive message listing known providers.
|
|
1232
|
+
*/
|
|
1233
|
+
async function assertProviderAllowedAsync(provider, runtime) {
|
|
1234
|
+
// Built-in check (fast path)
|
|
1235
|
+
if (isProviderApiId(provider)) {
|
|
1236
|
+
// Still check the providerIds whitelist if set
|
|
1237
|
+
const allowed = normalizeProviderIds(runtime.providerIds);
|
|
1238
|
+
if (!allowed.includes(provider)) {
|
|
1239
|
+
throw new Error(`Provider API ${provider} is not enabled for this app.`);
|
|
1240
|
+
}
|
|
1241
|
+
return;
|
|
1242
|
+
}
|
|
1243
|
+
// Custom provider check
|
|
1244
|
+
const custom = await resolveCustomProvider(provider, runtime);
|
|
1245
|
+
if (custom)
|
|
1246
|
+
return;
|
|
1247
|
+
const known = await listAllProviderIds(runtime);
|
|
1248
|
+
throw new Error(`Unknown provider "${provider}". Known providers: ${known.join(", ")}`);
|
|
1249
|
+
}
|
|
811
1250
|
export async function defaultProviderApiCredentialResolver(options) {
|
|
812
1251
|
if (options.workspaceProvider) {
|
|
813
1252
|
const result = await resolveWorkspaceConnectionCredentialForApp({
|
|
@@ -975,11 +1414,6 @@ function isAllowedProviderUrl(url, base, config) {
|
|
|
975
1414
|
return host === normalized || host.endsWith(`.${normalized}`);
|
|
976
1415
|
});
|
|
977
1416
|
}
|
|
978
|
-
function sameOriginOrChild(candidate, allowed) {
|
|
979
|
-
return (candidate.origin === allowed.origin &&
|
|
980
|
-
(candidate.pathname === allowed.pathname ||
|
|
981
|
-
candidate.pathname.startsWith(allowed.pathname.replace(/\/?$/, "/"))));
|
|
982
|
-
}
|
|
983
1417
|
function queryEntries(value) {
|
|
984
1418
|
if (!value)
|
|
985
1419
|
return [];
|
|
@@ -1479,6 +1913,21 @@ function redactString(text, secretValues) {
|
|
|
1479
1913
|
}
|
|
1480
1914
|
return output;
|
|
1481
1915
|
}
|
|
1916
|
+
function mergeQueryObjects(base, extra) {
|
|
1917
|
+
if (!base)
|
|
1918
|
+
return extra;
|
|
1919
|
+
if (typeof base === "string") {
|
|
1920
|
+
const params = new URLSearchParams(base.replace(/^\?/, ""));
|
|
1921
|
+
for (const [key, value] of Object.entries(extra)) {
|
|
1922
|
+
params.set(key, value);
|
|
1923
|
+
}
|
|
1924
|
+
return params.toString();
|
|
1925
|
+
}
|
|
1926
|
+
if (typeof base === "object" && !Array.isArray(base)) {
|
|
1927
|
+
return { ...base, ...extra };
|
|
1928
|
+
}
|
|
1929
|
+
return extra;
|
|
1930
|
+
}
|
|
1482
1931
|
function clampTimeout(timeoutMs) {
|
|
1483
1932
|
if (!Number.isFinite(timeoutMs))
|
|
1484
1933
|
return DEFAULT_TIMEOUT_MS;
|
|
@@ -1489,6 +1938,103 @@ function clampMaxBytes(maxBytes) {
|
|
|
1489
1938
|
return DEFAULT_MAX_BYTES;
|
|
1490
1939
|
return Math.max(1_000, Math.min(MAX_MAX_BYTES, Math.floor(maxBytes)));
|
|
1491
1940
|
}
|
|
1941
|
+
/** Resolve a dot-path from a parsed JSON object, e.g. "meta.next_cursor". */
|
|
1942
|
+
function dotGet(obj, path) {
|
|
1943
|
+
if (!path)
|
|
1944
|
+
return obj;
|
|
1945
|
+
let current = obj;
|
|
1946
|
+
for (const key of path.split(".")) {
|
|
1947
|
+
if (current === null || typeof current !== "object")
|
|
1948
|
+
return undefined;
|
|
1949
|
+
current = current[key];
|
|
1950
|
+
}
|
|
1951
|
+
return current;
|
|
1952
|
+
}
|
|
1953
|
+
/**
|
|
1954
|
+
* Handle saveToFile: write the full provider-api response body to a workspace
|
|
1955
|
+
* file and return a compact summary.
|
|
1956
|
+
*/
|
|
1957
|
+
async function handleSaveToFile(filePath, responseText, contentType, status) {
|
|
1958
|
+
const { writeWorkspaceFile, SAVE_TO_FILE_MAX_BYTES: maxSaveBytes } = await import("../workspace-files/store.js");
|
|
1959
|
+
const { getRequestOrgId, getRequestUserEmail } = await import("../server/request-context.js");
|
|
1960
|
+
const orgId = getRequestOrgId();
|
|
1961
|
+
const email = getRequestUserEmail();
|
|
1962
|
+
const scope = orgId
|
|
1963
|
+
? { scope: "org", scopeId: orgId }
|
|
1964
|
+
: email
|
|
1965
|
+
? { scope: "user", scopeId: email }
|
|
1966
|
+
: null;
|
|
1967
|
+
if (!scope) {
|
|
1968
|
+
throw new Error("saveToFile requires an authenticated request context (no user email or orgId found).");
|
|
1969
|
+
}
|
|
1970
|
+
const mimeType = contentType?.split(";")[0].trim() ?? "text/plain";
|
|
1971
|
+
await writeWorkspaceFile(scope, filePath, responseText, mimeType, {
|
|
1972
|
+
maxFileBytes: maxSaveBytes,
|
|
1973
|
+
});
|
|
1974
|
+
const bytes = Buffer.byteLength(responseText, "utf8");
|
|
1975
|
+
const preview = responseText.slice(0, 2000);
|
|
1976
|
+
return {
|
|
1977
|
+
savedToFile: true,
|
|
1978
|
+
savedTo: filePath,
|
|
1979
|
+
status,
|
|
1980
|
+
bytes,
|
|
1981
|
+
contentType: mimeType,
|
|
1982
|
+
preview: preview.length < responseText.length ? `${preview}…` : preview,
|
|
1983
|
+
};
|
|
1984
|
+
}
|
|
1985
|
+
/**
|
|
1986
|
+
* Execute paginated requests, accumulating items across pages.
|
|
1987
|
+
* Returns the accumulated items array and the last response for metadata.
|
|
1988
|
+
*/
|
|
1989
|
+
async function fetchAllPages(config, executeOnePage) {
|
|
1990
|
+
const maxPages = Math.min(Number.isFinite(config.maxPages) && config.maxPages > 0
|
|
1991
|
+
? config.maxPages
|
|
1992
|
+
: 10, FETCH_ALL_PAGES_MAX);
|
|
1993
|
+
const items = [];
|
|
1994
|
+
let cursor;
|
|
1995
|
+
let pageCount = 0;
|
|
1996
|
+
let lastStatus = 0;
|
|
1997
|
+
let lastContentType = null;
|
|
1998
|
+
while (pageCount < maxPages) {
|
|
1999
|
+
const extraQuery = {};
|
|
2000
|
+
if (cursor)
|
|
2001
|
+
extraQuery[config.cursorParam] = cursor;
|
|
2002
|
+
const page = await executeOnePage(pageCount > 0 ? extraQuery : undefined);
|
|
2003
|
+
lastStatus = page.status;
|
|
2004
|
+
lastContentType = page.contentType;
|
|
2005
|
+
pageCount++;
|
|
2006
|
+
let body;
|
|
2007
|
+
try {
|
|
2008
|
+
body = JSON.parse(page.text);
|
|
2009
|
+
}
|
|
2010
|
+
catch {
|
|
2011
|
+
body = page.text;
|
|
2012
|
+
}
|
|
2013
|
+
// Extract items
|
|
2014
|
+
if (config.itemsPath) {
|
|
2015
|
+
const extracted = dotGet(body, config.itemsPath);
|
|
2016
|
+
if (Array.isArray(extracted)) {
|
|
2017
|
+
items.push(...extracted);
|
|
2018
|
+
}
|
|
2019
|
+
else if (extracted !== undefined) {
|
|
2020
|
+
items.push(extracted);
|
|
2021
|
+
}
|
|
2022
|
+
}
|
|
2023
|
+
else {
|
|
2024
|
+
items.push(body);
|
|
2025
|
+
}
|
|
2026
|
+
// Extract next cursor
|
|
2027
|
+
const nextCursor = dotGet(body, config.cursorPath);
|
|
2028
|
+
if (!nextCursor ||
|
|
2029
|
+
nextCursor === "" ||
|
|
2030
|
+
nextCursor === null ||
|
|
2031
|
+
nextCursor === cursor) {
|
|
2032
|
+
break;
|
|
2033
|
+
}
|
|
2034
|
+
cursor = String(nextCursor);
|
|
2035
|
+
}
|
|
2036
|
+
return { items, pageCount, lastStatus, lastContentType };
|
|
2037
|
+
}
|
|
1492
2038
|
function fingerprint(value) {
|
|
1493
2039
|
return createHash("sha256").update(value).digest("hex").slice(0, 12);
|
|
1494
2040
|
}
|