@agent-native/core 0.98.17 → 0.99.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/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +25 -0
- package/corpus/core/docs/content/actions.mdx +1 -1
- package/corpus/core/docs/content/authentication.mdx +1 -1
- package/corpus/core/docs/content/dispatch.mdx +3 -3
- package/corpus/core/docs/content/external-agents.mdx +30 -19
- package/corpus/core/docs/content/locales/ar-SA/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +23 -19
- package/corpus/core/docs/content/locales/ar-SA/mcp-clients.mdx +31 -3
- package/corpus/core/docs/content/locales/ar-SA/mcp-protocol.mdx +29 -15
- package/corpus/core/docs/content/locales/ar-SA/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/ar-SA/server.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/de-DE/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +23 -19
- package/corpus/core/docs/content/locales/de-DE/mcp-clients.mdx +37 -3
- package/corpus/core/docs/content/locales/de-DE/mcp-protocol.mdx +29 -15
- package/corpus/core/docs/content/locales/de-DE/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/de-DE/server.mdx +2 -2
- package/corpus/core/docs/content/locales/de-DE/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/de-DE/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/es-ES/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +32 -19
- package/corpus/core/docs/content/locales/es-ES/mcp-clients.mdx +17 -3
- package/corpus/core/docs/content/locales/es-ES/mcp-protocol.mdx +38 -15
- package/corpus/core/docs/content/locales/es-ES/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/es-ES/server.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/fr-FR/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +23 -19
- package/corpus/core/docs/content/locales/fr-FR/mcp-clients.mdx +17 -3
- package/corpus/core/docs/content/locales/fr-FR/mcp-protocol.mdx +29 -15
- package/corpus/core/docs/content/locales/fr-FR/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/fr-FR/server.mdx +2 -2
- package/corpus/core/docs/content/locales/fr-FR/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/fr-FR/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/hi-IN/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +31 -19
- package/corpus/core/docs/content/locales/hi-IN/mcp-clients.mdx +17 -3
- package/corpus/core/docs/content/locales/hi-IN/mcp-protocol.mdx +36 -15
- package/corpus/core/docs/content/locales/hi-IN/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/hi-IN/server.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/ja-JP/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +23 -19
- package/corpus/core/docs/content/locales/ja-JP/mcp-clients.mdx +34 -3
- package/corpus/core/docs/content/locales/ja-JP/mcp-protocol.mdx +29 -15
- package/corpus/core/docs/content/locales/ja-JP/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/ja-JP/server.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/ko-KR/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +30 -19
- package/corpus/core/docs/content/locales/ko-KR/mcp-clients.mdx +33 -3
- package/corpus/core/docs/content/locales/ko-KR/mcp-protocol.mdx +36 -15
- package/corpus/core/docs/content/locales/ko-KR/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/ko-KR/server.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/pt-BR/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +32 -19
- package/corpus/core/docs/content/locales/pt-BR/mcp-clients.mdx +34 -3
- package/corpus/core/docs/content/locales/pt-BR/mcp-protocol.mdx +32 -15
- package/corpus/core/docs/content/locales/pt-BR/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/pt-BR/server.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/zh-CN/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +23 -19
- package/corpus/core/docs/content/locales/zh-CN/mcp-clients.mdx +28 -3
- package/corpus/core/docs/content/locales/zh-CN/mcp-protocol.mdx +29 -15
- package/corpus/core/docs/content/locales/zh-CN/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/zh-CN/server.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/template-plan.mdx +3 -3
- package/corpus/core/docs/content/locales/zh-TW/actions.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/dispatch.mdx +3 -3
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +23 -19
- package/corpus/core/docs/content/locales/zh-TW/mcp-clients.mdx +28 -3
- package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.mdx +30 -15
- package/corpus/core/docs/content/locales/zh-TW/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/locales/zh-TW/server.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/template-assets.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/template-plan.mdx +3 -3
- package/corpus/core/docs/content/mcp-clients.mdx +31 -4
- package/corpus/core/docs/content/mcp-protocol.mdx +35 -15
- package/corpus/core/docs/content/plan-plugin.mdx +3 -3
- package/corpus/core/docs/content/server.mdx +2 -2
- package/corpus/core/docs/content/skills-guide.mdx +1 -1
- package/corpus/core/docs/content/template-assets.mdx +1 -1
- package/corpus/core/docs/content/template-dispatch.mdx +2 -2
- package/corpus/core/docs/content/template-plan.mdx +3 -3
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/client.ts +3 -0
- package/corpus/core/src/a2a/handlers.ts +95 -7
- package/corpus/core/src/agent/production-agent.ts +21 -0
- package/corpus/core/src/cli/connect.ts +50 -24
- package/corpus/core/src/cli/mcp-config-writers.ts +10 -0
- package/corpus/core/src/cli/mcp.ts +5 -5
- package/corpus/core/src/cli/pr-visual-recap-workflow.ts +1 -1
- package/corpus/core/src/cli/skills-content/assets-skill.ts +1 -1
- package/corpus/core/src/cli/skills-content/design-exploration-skill.ts +1 -1
- package/corpus/core/src/cli/skills-content/help.ts +1 -1
- package/corpus/core/src/cli/skills-content/plan-setup-auth.ts +1 -1
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +1 -1
- package/corpus/core/src/cli/skills-content/visual-recap-skill.ts +2 -2
- package/corpus/core/src/cli/skills.ts +23 -12
- package/corpus/core/src/client/analytics.ts +13 -0
- package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +5 -0
- package/corpus/core/src/client/resources/mcp-integration-catalog.ts +17 -0
- package/corpus/core/src/embedding/agent.ts +8 -6
- package/corpus/core/src/localization/default-messages.ts +7 -0
- package/corpus/core/src/mcp/ask-app-inline-tasks.ts +125 -0
- package/corpus/core/src/mcp/build-server.ts +65 -3
- package/corpus/core/src/mcp/builtin-tools.ts +186 -22
- package/corpus/core/src/mcp/connect-route.ts +17 -14
- package/corpus/core/src/mcp/oauth-route.ts +38 -13
- package/corpus/core/src/mcp/route-paths.ts +34 -0
- package/corpus/core/src/mcp/server.ts +21 -10
- package/corpus/core/src/mcp/stdio.ts +34 -16
- package/corpus/core/src/mcp/workspace-resolve.ts +2 -1
- package/corpus/core/src/mcp-client/manager.ts +5 -3
- package/corpus/core/src/mcp-client/remote-store.ts +10 -10
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +13 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +42 -9
- package/corpus/core/src/server/agent-teams.ts +17 -0
- package/corpus/core/src/server/auth.ts +22 -6
- package/corpus/core/src/server/core-routes-plugin.ts +30 -24
- package/corpus/core/src/server/csrf.ts +17 -0
- package/corpus/core/src/server/framework-request-handler.ts +8 -2
- package/corpus/core/src/server/google-oauth.ts +12 -2
- package/corpus/core/src/server/http-response-telemetry.ts +6 -1
- package/corpus/core/src/server/recap-image-route.ts +3 -3
- package/corpus/core/src/server/security-headers.ts +7 -1
- package/corpus/core/src/server/ssr-handler.ts +2 -0
- package/corpus/core/src/shared/cache-control.ts +6 -4
- package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +10 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +15 -6
- package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +16 -10
- package/corpus/core/src/templates/workspace-core/.agents/skills/performance/SKILL.md +20 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/analytics/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/analytics/app/assets/replay-cursor.svg +17 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +4 -3
- package/corpus/templates/analytics/app/global.css +71 -4
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +32 -4
- package/corpus/templates/analytics/app/pages/monitoring/errors/IssueDetail.tsx +1 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +49 -11
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +4 -6
- package/corpus/templates/analytics/changelog/2026-07-13-all-time-dashboard-filters-no-longer-send-invalid-dates-to-b.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-13-daily-dashboard-emails-recover-more-reliably-from-serverless.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-13-error-issue-titles-wrap-instead-of-overflowing.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-13-saving-a-new-dashboard-view-no-longer-fails-with-a-server-er.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-13-session-replay-cursors-stay-hidden-until-their-first-recorde.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-13-session-replay-links-now-support-cmd-click-and-middle-click-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-13-session-replays-keep-a-visible-mac-style-cursor-over-the-vis.md +6 -0
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +21 -2
- package/corpus/templates/analytics/server/lib/dashboard-report-subscriptions.ts +57 -1
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +266 -28
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +43 -4
- package/corpus/templates/analytics/server/lib/error-capture.ts +24 -5
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +5 -0
- package/corpus/templates/analytics/server/routes/[...page].get.ts +0 -2
- package/corpus/templates/assets/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/assets/agent-native.app-skill.json +1 -1
- package/corpus/templates/brain/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/calendar/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/calendar/AGENTS.md +2 -1
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +0 -19
- package/corpus/templates/calendar/app/lib/attendee-local-time.ts +14 -5
- package/corpus/templates/calendar/changelog/2026-07-13-your-local-time-now-follows-your-browser-timezone-and-event-.md +6 -0
- package/corpus/templates/chat/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +7 -2
- package/corpus/templates/clips/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/clips/AGENTS.md +7 -0
- package/corpus/templates/clips/actions/list-meetings.ts +19 -4
- package/corpus/templates/clips/actions/start-meeting-recording.ts +7 -1
- package/corpus/templates/clips/app/components/library/recording-card.tsx +27 -26
- package/corpus/templates/clips/app/components/library/space-card.tsx +4 -6
- package/corpus/templates/clips/app/components/meetings/transcript-bubbles.tsx +75 -78
- package/corpus/templates/clips/app/components/recorder/confetti-canvas.tsx +18 -1
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +6 -12
- package/corpus/templates/clips/app/components/recorder/recording-toolbar.tsx +19 -2
- package/corpus/templates/clips/app/lib/camera-composite.ts +70 -10
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +1 -1
- package/corpus/templates/clips/app/routes/record.tsx +5 -25
- package/corpus/templates/clips/changelog/2026-07-13-clips-desktop-now-requires-macos-13-for-native-capture.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-13-clips-hide-solo-meeting-reminders.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-13-clips-now-removes-duplicate-mic-and-system-transcript-turns-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-13-desktop-recordings-run-cooler-and-quieter-live-transcription.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-13-meeting-recordings-now-stop-after-a-calendar-meeting-ends-an.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-13-meeting-transcripts-now-use-a-clean-agent-chat-style-reading.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-13-screen-recordings-use-less-processing-power-during-longer-ca.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/background.ts +5 -3
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +17 -14
- package/corpus/templates/clips/chrome-extension/src/overlay.ts +8 -2
- package/corpus/templates/clips/desktop/README.md +3 -0
- package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +9 -0
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +8 -2
- package/corpus/templates/clips/desktop/src/lib/silence-events.ts +1 -0
- package/corpus/templates/clips/desktop/src/lib/transcription-capture.ts +5 -0
- package/corpus/templates/clips/desktop/src/lib/transcription-engine.ts +134 -5
- package/corpus/templates/clips/desktop/src/lib/upload-video-stream.ts +28 -0
- package/corpus/templates/clips/desktop/src/overlays/flow-bar.tsx +10 -3
- package/corpus/templates/clips/desktop/src/overlays/meeting-notification.tsx +42 -9
- package/corpus/templates/clips/desktop/src/overlays/recording-pill.tsx +10 -2
- package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +6 -1
- package/corpus/templates/clips/desktop/src-tauri/src/notifications.rs +77 -1
- package/corpus/templates/clips/desktop/src-tauri/src/silence_detector.rs +104 -25
- package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +4 -0
- package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +287 -32
- package/corpus/templates/clips/desktop/src-tauri/tauri.conf.json +1 -1
- package/corpus/templates/clips/server/lib/calendar-event-classification.ts +28 -0
- package/corpus/templates/clips/server/routes/[...page].get.ts +1 -59
- package/corpus/templates/clips/shared/recording-capture.ts +37 -0
- package/corpus/templates/content/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/content/agent-native.app-skill.json +1 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +18 -16
- package/corpus/templates/content/server/routes/[...page].get.ts +1 -15
- package/corpus/templates/design/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/design/actions/connect-assets-mcp.ts +1 -1
- package/corpus/templates/design/agent-native.app-skill.json +1 -1
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +88 -12
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1 -0
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +4 -1
- package/corpus/templates/design/changelog/2026-07-13-adding-shapes-preserves-canvas-background.md +6 -0
- package/corpus/templates/design/changelog/2026-07-13-clicking-quickly-between-overlapping-elements-no-longer-bounc.md +6 -0
- package/corpus/templates/design/server/plugins/assets-mcp.ts +1 -1
- package/corpus/templates/design/server/routes/[...page].get.ts +0 -2
- package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/forms/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/macros/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/mail/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/plan/.agents/skills/security/SKILL.md +10 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/visual-recap/SKILL.md +2 -2
- package/corpus/templates/plan/agent-native.app-skill.json +1 -1
- package/corpus/templates/plan/app/lib/plan-local-bridge.ts +6 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +15 -6
- package/corpus/templates/plan/changelog/2026-07-13-fixed-local-plan-previews-continuously-flickering-while-revi.md +6 -0
- package/corpus/templates/plan/server/routes/[...page].get.ts +0 -2
- package/corpus/templates/slides/.agents/skills/security/SKILL.md +10 -0
- package/dist/a2a/client.d.ts +2 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +2 -0
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +84 -7
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/agent/production-agent.d.ts +9 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +12 -0
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/connect.d.ts +2 -2
- package/dist/cli/connect.d.ts.map +1 -1
- package/dist/cli/connect.js +45 -23
- package/dist/cli/connect.js.map +1 -1
- package/dist/cli/mcp-config-writers.d.ts.map +1 -1
- package/dist/cli/mcp-config-writers.js +7 -0
- package/dist/cli/mcp-config-writers.js.map +1 -1
- package/dist/cli/mcp.js +5 -3
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts +1 -1
- package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
- package/dist/cli/pr-visual-recap-workflow.js +1 -1
- package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
- package/dist/cli/skills-content/assets-skill.d.ts +1 -1
- package/dist/cli/skills-content/assets-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/assets-skill.js +1 -1
- package/dist/cli/skills-content/assets-skill.js.map +1 -1
- package/dist/cli/skills-content/design-exploration-skill.d.ts +1 -1
- package/dist/cli/skills-content/design-exploration-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/design-exploration-skill.js +1 -1
- package/dist/cli/skills-content/design-exploration-skill.js.map +1 -1
- package/dist/cli/skills-content/help.d.ts +1 -1
- package/dist/cli/skills-content/help.d.ts.map +1 -1
- package/dist/cli/skills-content/help.js +1 -1
- package/dist/cli/skills-content/help.js.map +1 -1
- package/dist/cli/skills-content/plan-setup-auth.d.ts +1 -1
- package/dist/cli/skills-content/plan-setup-auth.d.ts.map +1 -1
- package/dist/cli/skills-content/plan-setup-auth.js +1 -1
- package/dist/cli/skills-content/plan-setup-auth.js.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts +1 -1
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/visual-plan-skill.js +1 -1
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -1
- package/dist/cli/skills-content/visual-recap-skill.d.ts +1 -1
- package/dist/cli/skills-content/visual-recap-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/visual-recap-skill.js +2 -2
- package/dist/cli/skills-content/visual-recap-skill.js.map +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +16 -12
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +11 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.js +1 -1
- package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
- package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
- package/dist/client/resources/mcp-integration-catalog.js +14 -0
- package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/embedding/agent.d.ts.map +1 -1
- package/dist/embedding/agent.js +6 -7
- package/dist/embedding/agent.js.map +1 -1
- package/dist/localization/default-messages.d.ts +5 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +5 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/ask-app-inline-tasks.d.ts +47 -0
- package/dist/mcp/ask-app-inline-tasks.d.ts.map +1 -0
- package/dist/mcp/ask-app-inline-tasks.js +87 -0
- package/dist/mcp/ask-app-inline-tasks.js.map +1 -0
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +56 -3
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/builtin-tools.d.ts.map +1 -1
- package/dist/mcp/builtin-tools.js +141 -21
- package/dist/mcp/builtin-tools.js.map +1 -1
- package/dist/mcp/connect-route.d.ts +12 -10
- package/dist/mcp/connect-route.d.ts.map +1 -1
- package/dist/mcp/connect-route.js +17 -14
- package/dist/mcp/connect-route.js.map +1 -1
- package/dist/mcp/oauth-route.d.ts +1 -1
- package/dist/mcp/oauth-route.d.ts.map +1 -1
- package/dist/mcp/oauth-route.js +30 -13
- package/dist/mcp/oauth-route.js.map +1 -1
- package/dist/mcp/route-paths.d.ts +13 -0
- package/dist/mcp/route-paths.d.ts.map +1 -0
- package/dist/mcp/route-paths.js +27 -0
- package/dist/mcp/route-paths.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +14 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/stdio.d.ts +7 -6
- package/dist/mcp/stdio.d.ts.map +1 -1
- package/dist/mcp/stdio.js +27 -15
- package/dist/mcp/stdio.js.map +1 -1
- package/dist/mcp/workspace-resolve.d.ts +2 -1
- package/dist/mcp/workspace-resolve.d.ts.map +1 -1
- package/dist/mcp/workspace-resolve.js +2 -1
- package/dist/mcp/workspace-resolve.js.map +1 -1
- package/dist/mcp-client/manager.js +6 -3
- package/dist/mcp-client/manager.js.map +1 -1
- package/dist/mcp-client/remote-store.js +5 -7
- package/dist/mcp-client/remote-store.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +2 -2
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.js +11 -1
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +43 -11
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +15 -1
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +16 -6
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +4 -3
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +20 -15
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/csrf.d.ts.map +1 -1
- package/dist/server/csrf.js +11 -0
- package/dist/server/csrf.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +8 -2
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-oauth.d.ts +2 -0
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +11 -2
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/http-response-telemetry.d.ts.map +1 -1
- package/dist/server/http-response-telemetry.js +4 -1
- package/dist/server/http-response-telemetry.js.map +1 -1
- package/dist/server/recap-image-route.js +3 -3
- package/dist/server/recap-image-route.js.map +1 -1
- package/dist/server/security-headers.d.ts.map +1 -1
- package/dist/server/security-headers.js +4 -1
- 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 +3 -1
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/shared/cache-control.d.ts +7 -6
- package/dist/shared/cache-control.d.ts.map +1 -1
- package/dist/shared/cache-control.js +4 -3
- package/dist/shared/cache-control.js.map +1 -1
- package/dist/templates/default/.agents/skills/security/SKILL.md +10 -0
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +15 -6
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +16 -10
- package/dist/templates/workspace-core/.agents/skills/performance/SKILL.md +20 -1
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +10 -0
- package/docs/content/actions.mdx +1 -1
- package/docs/content/authentication.mdx +1 -1
- package/docs/content/dispatch.mdx +3 -3
- package/docs/content/external-agents.mdx +30 -19
- package/docs/content/locales/ar-SA/actions.mdx +1 -1
- package/docs/content/locales/ar-SA/authentication.mdx +1 -1
- package/docs/content/locales/ar-SA/dispatch.mdx +3 -3
- package/docs/content/locales/ar-SA/external-agents.mdx +23 -19
- package/docs/content/locales/ar-SA/mcp-clients.mdx +31 -3
- package/docs/content/locales/ar-SA/mcp-protocol.mdx +29 -15
- package/docs/content/locales/ar-SA/plan-plugin.mdx +3 -3
- package/docs/content/locales/ar-SA/server.mdx +2 -2
- package/docs/content/locales/ar-SA/skills-guide.mdx +1 -1
- package/docs/content/locales/ar-SA/template-assets.mdx +1 -1
- package/docs/content/locales/ar-SA/template-dispatch.mdx +2 -2
- package/docs/content/locales/ar-SA/template-plan.mdx +3 -3
- package/docs/content/locales/de-DE/actions.mdx +1 -1
- package/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/docs/content/locales/de-DE/dispatch.mdx +3 -3
- package/docs/content/locales/de-DE/external-agents.mdx +23 -19
- package/docs/content/locales/de-DE/mcp-clients.mdx +37 -3
- package/docs/content/locales/de-DE/mcp-protocol.mdx +29 -15
- package/docs/content/locales/de-DE/plan-plugin.mdx +3 -3
- package/docs/content/locales/de-DE/server.mdx +2 -2
- package/docs/content/locales/de-DE/skills-guide.mdx +1 -1
- package/docs/content/locales/de-DE/template-assets.mdx +1 -1
- package/docs/content/locales/de-DE/template-dispatch.mdx +2 -2
- package/docs/content/locales/de-DE/template-plan.mdx +3 -3
- package/docs/content/locales/es-ES/actions.mdx +1 -1
- package/docs/content/locales/es-ES/authentication.mdx +1 -1
- package/docs/content/locales/es-ES/dispatch.mdx +3 -3
- package/docs/content/locales/es-ES/external-agents.mdx +32 -19
- package/docs/content/locales/es-ES/mcp-clients.mdx +17 -3
- package/docs/content/locales/es-ES/mcp-protocol.mdx +38 -15
- package/docs/content/locales/es-ES/plan-plugin.mdx +3 -3
- package/docs/content/locales/es-ES/server.mdx +2 -2
- package/docs/content/locales/es-ES/skills-guide.mdx +1 -1
- package/docs/content/locales/es-ES/template-assets.mdx +1 -1
- package/docs/content/locales/es-ES/template-dispatch.mdx +2 -2
- package/docs/content/locales/es-ES/template-plan.mdx +3 -3
- package/docs/content/locales/fr-FR/actions.mdx +1 -1
- package/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/docs/content/locales/fr-FR/dispatch.mdx +3 -3
- package/docs/content/locales/fr-FR/external-agents.mdx +23 -19
- package/docs/content/locales/fr-FR/mcp-clients.mdx +17 -3
- package/docs/content/locales/fr-FR/mcp-protocol.mdx +29 -15
- package/docs/content/locales/fr-FR/plan-plugin.mdx +3 -3
- package/docs/content/locales/fr-FR/server.mdx +2 -2
- package/docs/content/locales/fr-FR/skills-guide.mdx +1 -1
- package/docs/content/locales/fr-FR/template-assets.mdx +1 -1
- package/docs/content/locales/fr-FR/template-dispatch.mdx +2 -2
- package/docs/content/locales/fr-FR/template-plan.mdx +3 -3
- package/docs/content/locales/hi-IN/actions.mdx +1 -1
- package/docs/content/locales/hi-IN/authentication.mdx +1 -1
- package/docs/content/locales/hi-IN/dispatch.mdx +3 -3
- package/docs/content/locales/hi-IN/external-agents.mdx +31 -19
- package/docs/content/locales/hi-IN/mcp-clients.mdx +17 -3
- package/docs/content/locales/hi-IN/mcp-protocol.mdx +36 -15
- package/docs/content/locales/hi-IN/plan-plugin.mdx +3 -3
- package/docs/content/locales/hi-IN/server.mdx +2 -2
- package/docs/content/locales/hi-IN/skills-guide.mdx +1 -1
- package/docs/content/locales/hi-IN/template-assets.mdx +1 -1
- package/docs/content/locales/hi-IN/template-dispatch.mdx +2 -2
- package/docs/content/locales/hi-IN/template-plan.mdx +3 -3
- package/docs/content/locales/ja-JP/actions.mdx +1 -1
- package/docs/content/locales/ja-JP/authentication.mdx +1 -1
- package/docs/content/locales/ja-JP/dispatch.mdx +3 -3
- package/docs/content/locales/ja-JP/external-agents.mdx +23 -19
- package/docs/content/locales/ja-JP/mcp-clients.mdx +34 -3
- package/docs/content/locales/ja-JP/mcp-protocol.mdx +29 -15
- package/docs/content/locales/ja-JP/plan-plugin.mdx +3 -3
- package/docs/content/locales/ja-JP/server.mdx +2 -2
- package/docs/content/locales/ja-JP/skills-guide.mdx +1 -1
- package/docs/content/locales/ja-JP/template-assets.mdx +1 -1
- package/docs/content/locales/ja-JP/template-dispatch.mdx +2 -2
- package/docs/content/locales/ja-JP/template-plan.mdx +3 -3
- package/docs/content/locales/ko-KR/actions.mdx +1 -1
- package/docs/content/locales/ko-KR/authentication.mdx +1 -1
- package/docs/content/locales/ko-KR/dispatch.mdx +3 -3
- package/docs/content/locales/ko-KR/external-agents.mdx +30 -19
- package/docs/content/locales/ko-KR/mcp-clients.mdx +33 -3
- package/docs/content/locales/ko-KR/mcp-protocol.mdx +36 -15
- package/docs/content/locales/ko-KR/plan-plugin.mdx +3 -3
- package/docs/content/locales/ko-KR/server.mdx +2 -2
- package/docs/content/locales/ko-KR/skills-guide.mdx +1 -1
- package/docs/content/locales/ko-KR/template-assets.mdx +1 -1
- package/docs/content/locales/ko-KR/template-dispatch.mdx +2 -2
- package/docs/content/locales/ko-KR/template-plan.mdx +3 -3
- package/docs/content/locales/pt-BR/actions.mdx +1 -1
- package/docs/content/locales/pt-BR/authentication.mdx +1 -1
- package/docs/content/locales/pt-BR/dispatch.mdx +3 -3
- package/docs/content/locales/pt-BR/external-agents.mdx +32 -19
- package/docs/content/locales/pt-BR/mcp-clients.mdx +34 -3
- package/docs/content/locales/pt-BR/mcp-protocol.mdx +32 -15
- package/docs/content/locales/pt-BR/plan-plugin.mdx +3 -3
- package/docs/content/locales/pt-BR/server.mdx +2 -2
- package/docs/content/locales/pt-BR/skills-guide.mdx +1 -1
- package/docs/content/locales/pt-BR/template-assets.mdx +1 -1
- package/docs/content/locales/pt-BR/template-dispatch.mdx +2 -2
- package/docs/content/locales/pt-BR/template-plan.mdx +3 -3
- package/docs/content/locales/zh-CN/actions.mdx +1 -1
- package/docs/content/locales/zh-CN/authentication.mdx +1 -1
- package/docs/content/locales/zh-CN/dispatch.mdx +3 -3
- package/docs/content/locales/zh-CN/external-agents.mdx +23 -19
- package/docs/content/locales/zh-CN/mcp-clients.mdx +28 -3
- package/docs/content/locales/zh-CN/mcp-protocol.mdx +29 -15
- package/docs/content/locales/zh-CN/plan-plugin.mdx +3 -3
- package/docs/content/locales/zh-CN/server.mdx +2 -2
- package/docs/content/locales/zh-CN/skills-guide.mdx +1 -1
- package/docs/content/locales/zh-CN/template-assets.mdx +1 -1
- package/docs/content/locales/zh-CN/template-dispatch.mdx +2 -2
- package/docs/content/locales/zh-CN/template-plan.mdx +3 -3
- package/docs/content/locales/zh-TW/actions.mdx +1 -1
- package/docs/content/locales/zh-TW/authentication.mdx +1 -1
- package/docs/content/locales/zh-TW/dispatch.mdx +3 -3
- package/docs/content/locales/zh-TW/external-agents.mdx +23 -19
- package/docs/content/locales/zh-TW/mcp-clients.mdx +28 -3
- package/docs/content/locales/zh-TW/mcp-protocol.mdx +30 -15
- package/docs/content/locales/zh-TW/plan-plugin.mdx +3 -3
- package/docs/content/locales/zh-TW/server.mdx +2 -2
- package/docs/content/locales/zh-TW/skills-guide.mdx +1 -1
- package/docs/content/locales/zh-TW/template-assets.mdx +1 -1
- package/docs/content/locales/zh-TW/template-dispatch.mdx +2 -2
- package/docs/content/locales/zh-TW/template-plan.mdx +3 -3
- package/docs/content/mcp-clients.mdx +31 -4
- package/docs/content/mcp-protocol.mdx +35 -15
- package/docs/content/plan-plugin.mdx +3 -3
- package/docs/content/server.mdx +2 -2
- package/docs/content/skills-guide.mdx +1 -1
- package/docs/content/template-assets.mdx +1 -1
- package/docs/content/template-dispatch.mdx +2 -2
- package/docs/content/template-plan.mdx +3 -3
- package/package.json +2 -2
- package/src/templates/default/.agents/skills/security/SKILL.md +10 -0
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +15 -6
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +16 -10
- package/src/templates/workspace-core/.agents/skills/performance/SKILL.md +20 -1
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +10 -0
|
@@ -272,7 +272,32 @@ export default {
|
|
|
272
272
|
```
|
|
273
273
|
|
|
274
274
|
Preset ids are `context7`, `sentry`, `notion`, `semgrep`, `linear`,
|
|
275
|
-
`supabase`, `neon`, and `stripe`.
|
|
275
|
+
`atlassian`, `supabase`, `neon`, and `stripe`.
|
|
276
|
+
|
|
277
|
+
### Atlassian / Jira
|
|
278
|
+
|
|
279
|
+
The Atlassian preset uses Atlassian Rovo MCP's OAuth 2.1 endpoint,
|
|
280
|
+
`https://mcp.atlassian.com/v1/mcp/authv2`, and exposes Jira and Confluence
|
|
281
|
+
tools. Creating Jira tickets requires the Atlassian permissions that cover
|
|
282
|
+
Jira writes; the user still only sees the projects and content allowed by
|
|
283
|
+
their Atlassian account.
|
|
284
|
+
|
|
285
|
+
Atlassian organization admins can control whether an OAuth client is allowed
|
|
286
|
+
to connect. Before connecting, an admin may need to add the app's actual HTTPS
|
|
287
|
+
origin to the trusted-domain list under **Atlassian Administration → Rovo →
|
|
288
|
+
Rovo MCP server → Domains**, and enable the required **Read**, **Write**, and
|
|
289
|
+
**Search** permissions under **Permissions**. The domain must be the host where
|
|
290
|
+
the agent-native app runs; do not copy `https://builder.io/**` to another
|
|
291
|
+
deployment unless that is its actual origin. See Atlassian's [Rovo MCP setup
|
|
292
|
+
guide](https://developer.atlassian.com/cloud/rovo-mcp/guides/getting-started/)
|
|
293
|
+
and [admin controls](https://support.atlassian.com/security-and-access-policies/docs/control-atlassian-rovo-mcp-server-settings/).
|
|
294
|
+
|
|
295
|
+
The catalog supplies the endpoint and setup guidance. The generic settings
|
|
296
|
+
form stores the endpoint and optional encrypted headers; it does not replace
|
|
297
|
+
Atlassian's interactive OAuth consent flow. Use an OAuth-capable MCP client or
|
|
298
|
+
runtime when Atlassian requires interactive OAuth. If the provider or runtime
|
|
299
|
+
supports a static bearer token, follow its approved secret-management path and
|
|
300
|
+
never paste tokens into prompts or committed config.
|
|
276
301
|
|
|
277
302
|
### How to connect a remote MCP server
|
|
278
303
|
|
|
@@ -292,7 +317,7 @@ Two scopes are supported:
|
|
|
292
317
|
|
|
293
318
|
Adds and removes hot-reload into the running MCP manager — no process restart, and no server restart. The new `mcp__<scope>-<name>__*` tools appear to the agent on the next message and are searchable via `tool-search`.
|
|
294
319
|
|
|
295
|
-
HTTPS URLs are accepted everywhere; plain `http://` is only allowed for `localhost` during development. Optional auth goes in as a Bearer token that's sent via `Authorization: Bearer …` on every request.
|
|
320
|
+
HTTPS URLs are accepted everywhere; plain `http://` is only allowed for `localhost` during development. Optional auth goes in as a Bearer token that's sent via `Authorization: Bearer …` on every request. OAuth-only providers, including Atlassian Rovo MCP, require the provider's OAuth flow instead of a static header.
|
|
296
321
|
|
|
297
322
|
Under the hood these servers are persisted in the framework's `settings` table under the key `u:<email>:mcp-servers-remote` (Personal) or `o:<orgId>:mcp-servers-remote` (Team) and merged with `mcp.config.json` on startup.
|
|
298
323
|
|
|
@@ -355,7 +380,9 @@ pull its org-scope MCP servers automatically. Dispatch is the conventional hub
|
|
|
355
380
|
<div class="diagram-panel center" data-rough>
|
|
356
381
|
<span class="diagram-pill accent">Dispatch hub</span
|
|
357
382
|
><small class="diagram-muted">org-scope MCP servers</small
|
|
358
|
-
><small class="diagram-muted"
|
|
383
|
+
><small class="diagram-muted"
|
|
384
|
+
><code>GET /_agent-native/mcp/hub/servers</code></small
|
|
385
|
+
>
|
|
359
386
|
</div>
|
|
360
387
|
<div class="diagram-col arrows">
|
|
361
388
|
<div class="diagram-arrow diagram-muted" aria-hidden="true">→</div>
|
|
@@ -469,7 +496,7 @@ Reports which configured servers connected, the total live tool count, the merge
|
|
|
469
496
|
|
|
470
497
|
Individual MCP server failures never take down the agent:
|
|
471
498
|
|
|
472
|
-
- A misconfigured `command` → the server is skipped, its error appears in `/mcp/status` under `errors.<server-id>`, and every other server continues to work.
|
|
499
|
+
- A misconfigured `command` → the server is skipped, its error appears in `/_agent-native/mcp/status` under `errors.<server-id>`, and every other server continues to work.
|
|
473
500
|
- The MCP SDK is missing from `node_modules` → all MCP functionality is skipped with a warning; agent chat keeps working with zero MCP tools.
|
|
474
501
|
- Running in an edge runtime → MCP client is a no-op.
|
|
475
502
|
|
|
@@ -23,7 +23,7 @@ MCP is the standard protocol for connecting AI tools to external capabilities. W
|
|
|
23
23
|
|
|
24
24
|
Key concepts:
|
|
25
25
|
|
|
26
|
-
- **Auto-mounted** — every app gets `/
|
|
26
|
+
- **Auto-mounted** — every app gets `/mcp` for free, no setup required
|
|
27
27
|
- **Streamable HTTP** — uses the modern MCP transport over standard HTTP (POST + SSE)
|
|
28
28
|
- **Same actions** — the exact same action registry that powers agent chat and A2A
|
|
29
29
|
- **`ask-agent` tool** — a meta-tool that delegates to the full agent loop for complex tasks
|
|
@@ -42,7 +42,7 @@ Key concepts:
|
|
|
42
42
|
</div>
|
|
43
43
|
<div class="diagram-arrow diagram-muted" aria-hidden="true">→</div>
|
|
44
44
|
<div class="diagram-panel">
|
|
45
|
-
<span class="diagram-pill accent">POST /
|
|
45
|
+
<span class="diagram-pill accent">POST /mcp</span
|
|
46
46
|
><small class="diagram-muted">Streamable HTTP</small
|
|
47
47
|
><small class="diagram-muted"
|
|
48
48
|
>initialize → tools/list → tools/call</small
|
|
@@ -95,7 +95,7 @@ Both protocols are auto-mounted. Use whichever fits your use case:
|
|
|
95
95
|
| **Best for** | External tools calling your app | Agent-to-agent communication |
|
|
96
96
|
| **Protocol** | MCP Streamable HTTP | JSON-RPC 2.0 |
|
|
97
97
|
| **Tool discovery** | `tools/list` | Agent card at `/.well-known/agent-card.json` |
|
|
98
|
-
| **Endpoint** | `/
|
|
98
|
+
| **Endpoint** | `/mcp` | `/_agent-native/a2a` |
|
|
99
99
|
| **Supported by** | Claude, ChatGPT, Claude Code, Cursor, Codex, Cowork, and other MCP hosts | Other agent-native apps |
|
|
100
100
|
| **Execution** | Direct tool calls (no extra LLM) | Full agent loop (LLM reasoning) |
|
|
101
101
|
|
|
@@ -106,7 +106,7 @@ You can also use the `ask-agent` MCP tool to get the best of both worlds — cal
|
|
|
106
106
|
For the recommended one-command setup, use [External Agents](/docs/external-agents). If you are hand-writing MCP config for an OAuth-capable host, add your app as a remote MCP server with no static headers:
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
|
-
claude mcp add --transport http mail https://mail.example.com/
|
|
109
|
+
claude mcp add --transport http mail https://mail.example.com/mcp
|
|
110
110
|
```
|
|
111
111
|
|
|
112
112
|
Or write the entry by hand in `.mcp.json` (project scope) or `~/.claude.json` (user scope):
|
|
@@ -117,7 +117,7 @@ Or write the entry by hand in `.mcp.json` (project scope) or `~/.claude.json` (u
|
|
|
117
117
|
"mcpServers": {
|
|
118
118
|
"mail": {
|
|
119
119
|
"type": "http",
|
|
120
|
-
"url": "https://mail.example.com/
|
|
120
|
+
"url": "https://mail.example.com/mcp",
|
|
121
121
|
},
|
|
122
122
|
},
|
|
123
123
|
}
|
|
@@ -136,12 +136,12 @@ Claude Code calls: draft-email(to: "john@example.com", subject: "Q3 Report", bod
|
|
|
136
136
|
Any MCP host that supports Streamable HTTP transport can connect. The endpoint is:
|
|
137
137
|
|
|
138
138
|
```
|
|
139
|
-
POST https://your-app.example.com/
|
|
139
|
+
POST https://your-app.example.com/mcp
|
|
140
140
|
```
|
|
141
141
|
|
|
142
142
|
The server supports the standard MCP handshake: `initialize` → `initialized` → `tools/list` → `tools/call`.
|
|
143
143
|
|
|
144
|
-
<Endpoint id="doc-block-86ic5g" title="MCP endpoint" summary="The auto-mounted Streamable HTTP endpoint every agent-native app exposes." method="POST" path="/
|
|
144
|
+
<Endpoint id="doc-block-86ic5g" title="MCP endpoint" summary="The auto-mounted Streamable HTTP endpoint every agent-native app exposes." method="POST" path="/mcp" auth="Standard remote MCP OAuth (Bearer access token), connect-minted JWT, or static ACCESS_TOKEN/ACCESS_TOKENS" params={[
|
|
145
145
|
{
|
|
146
146
|
"name": "Authorization",
|
|
147
147
|
"in": "header",
|
|
@@ -211,18 +211,38 @@ When `mcpApp` is present, the tool entry also includes `_meta.ui.resourceUri`, `
|
|
|
211
211
|
|
|
212
212
|
In addition to individual action tools, every MCP server includes an `ask-agent` meta-tool. This sends a natural-language message to the app's AI agent and returns the response.
|
|
213
213
|
|
|
214
|
+
Hosted MCP requests use a bounded inline wait so a long agent loop does not
|
|
215
|
+
keep one `tools/call` open until a client or gateway timeout. The optional
|
|
216
|
+
`async` argument starts the durable task and returns immediately; without it,
|
|
217
|
+
the server waits briefly for a fast completion and then returns a task handle
|
|
218
|
+
when more work remains. The hosted wait is capped at 25 seconds.
|
|
219
|
+
|
|
214
220
|
Use `ask-agent` for complex tasks that benefit from the agent's reasoning and context:
|
|
215
221
|
|
|
216
222
|
```json
|
|
217
223
|
{
|
|
218
224
|
"name": "ask-agent",
|
|
219
225
|
"arguments": {
|
|
220
|
-
"message": "Draft a follow-up email to the Q3 planning thread with John, summarizing the action items we discussed"
|
|
226
|
+
"message": "Draft a follow-up email to the Q3 planning thread with John, summarizing the action items we discussed",
|
|
227
|
+
"async": true
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
The agent runs the same loop as the interactive chat — it can call multiple tools, reason about context, and produce a thoughtful response. A task that is not finished returns JSON containing `taskId`, `status`, `pollAfterMs`, and:
|
|
233
|
+
|
|
234
|
+
```json
|
|
235
|
+
{
|
|
236
|
+
"poll": {
|
|
237
|
+
"tool": "ask_app_status",
|
|
238
|
+
"arguments": { "app": "mail", "taskId": "task_123" }
|
|
221
239
|
}
|
|
222
240
|
}
|
|
223
241
|
```
|
|
224
242
|
|
|
225
|
-
|
|
243
|
+
Call `ask_app_status` with those arguments until the task reaches a terminal
|
|
244
|
+
state. Dispatch's app-owned `ask_app` uses the same durable task and status
|
|
245
|
+
contract, with the selected-app grant checked on both submission and polling.
|
|
226
246
|
|
|
227
247
|
## Authentication {#authentication}
|
|
228
248
|
|
|
@@ -240,7 +260,7 @@ The MCP endpoint supports standard remote MCP OAuth plus the existing bearer-tok
|
|
|
240
260
|
For OAuth-capable MCP hosts, configure the remote server URL with no static headers:
|
|
241
261
|
|
|
242
262
|
```bash
|
|
243
|
-
claude mcp add --transport http agent-native https://dispatch.agent-native.com/
|
|
263
|
+
claude mcp add --transport http agent-native https://dispatch.agent-native.com/mcp
|
|
244
264
|
```
|
|
245
265
|
|
|
246
266
|
The first unauthenticated MCP request receives:
|
|
@@ -256,9 +276,9 @@ Discovery endpoints:
|
|
|
256
276
|
| ----------------------------------------- | ------------------------------------------- |
|
|
257
277
|
| `/.well-known/oauth-protected-resource` | RFC 9728 protected-resource metadata |
|
|
258
278
|
| `/.well-known/oauth-authorization-server` | OAuth authorization server metadata |
|
|
259
|
-
| `/
|
|
260
|
-
| `/
|
|
261
|
-
| `/
|
|
279
|
+
| `/mcp/oauth/register` | Dynamic public-client registration |
|
|
280
|
+
| `/mcp/oauth/authorize` | Browser authorization + consent |
|
|
281
|
+
| `/mcp/oauth/token` | Authorization-code and refresh-token grants |
|
|
262
282
|
|
|
263
283
|
<Diagram id="doc-block-79kjly" title="OAuth discovery flow" summary={"A 401 kicks off discovery, registration, and a PKCE authorize → token exchange. The Bearer token is audience-bound and scoped."}>
|
|
264
284
|
|
|
@@ -358,7 +378,7 @@ export default defineNitroPlugin(async (nitro) => {
|
|
|
358
378
|
You have a deployed analytics app at `analytics.example.com`. From Claude Code:
|
|
359
379
|
|
|
360
380
|
```bash
|
|
361
|
-
claude mcp add --transport http analytics https://analytics.example.com/
|
|
381
|
+
claude mcp add --transport http analytics https://analytics.example.com/mcp
|
|
362
382
|
```
|
|
363
383
|
|
|
364
384
|
Or add it by hand in `.mcp.json`:
|
|
@@ -369,7 +389,7 @@ Or add it by hand in `.mcp.json`:
|
|
|
369
389
|
"mcpServers": {
|
|
370
390
|
"analytics": {
|
|
371
391
|
"type": "http",
|
|
372
|
-
"url": "https://analytics.example.com/
|
|
392
|
+
"url": "https://analytics.example.com/mcp",
|
|
373
393
|
},
|
|
374
394
|
},
|
|
375
395
|
}
|
|
@@ -12,7 +12,7 @@ The Agent-Native **Plan** app ships as one installable bundle. A single install
|
|
|
12
12
|
One install gives you:
|
|
13
13
|
|
|
14
14
|
- **Three skills** — `/visual-plan` (the canonical entry point), `/visual-recap`, and `/visualize-repo`.
|
|
15
|
-
- **The Plan MCP connector** — registered against the hosted app at `https://plan.agent-native.com` (MCP endpoint `https://plan.agent-native.com/
|
|
15
|
+
- **The Plan MCP connector** — registered against the hosted app at `https://plan.agent-native.com` (MCP endpoint `https://plan.agent-native.com/mcp`, server name `plan`).
|
|
16
16
|
|
|
17
17
|
<Diagram id="doc-block-i1sn3n" title="Three routes, one bundle" summary="The universal CLI, Claude Code plugin, and Codex plugin all install the same Plan skills plus the hosted Plan connector.">
|
|
18
18
|
|
|
@@ -43,7 +43,7 @@ One install gives you:
|
|
|
43
43
|
<div class="diagram-arrow diagram-muted" aria-hidden="true">→</div>
|
|
44
44
|
<div class="diagram-box">
|
|
45
45
|
Plan MCP connector<br /><small class="diagram-muted"
|
|
46
|
-
>plan.agent-native.com/
|
|
46
|
+
>plan.agent-native.com/mcp</small
|
|
47
47
|
>
|
|
48
48
|
</div>
|
|
49
49
|
</div>
|
|
@@ -251,7 +251,7 @@ codex plugin add agent-native-visual-plans@agent-native-apps
|
|
|
251
251
|
codex mcp login plan # OAuth in the browser
|
|
252
252
|
```
|
|
253
253
|
|
|
254
|
-
After install, **start a new Codex thread** so the skills and MCP tools load into the session. The plugin ships a URL-only connector (`[mcp_servers.plan]` → `https://plan.agent-native.com/
|
|
254
|
+
After install, **start a new Codex thread** so the skills and MCP tools load into the session. The plugin ships a URL-only connector (`[mcp_servers.plan]` → `https://plan.agent-native.com/mcp`); `codex mcp login plan` runs the OAuth flow. The universal CLI route above also works for Codex (`npx @agent-native/core@latest skills add visual-plan --client codex`) if you prefer one command that installs and authenticates together, or when you want local-files or self-hosted mode.
|
|
255
255
|
|
|
256
256
|
<Callout tone="info">
|
|
257
257
|
|
|
@@ -269,7 +269,7 @@ The framework mounts its own routes under `/_agent-native/`. Treat that namespac
|
|
|
269
269
|
| `/_agent-native/extensions/*` | Runtime extensions and extension proxy (legacy alias: `/_agent-native/tools/*`) |
|
|
270
270
|
| `/_agent-native/integrations/*` | Messaging/webhook integrations |
|
|
271
271
|
| `/_agent-native/a2a` | Agent-to-agent JSON-RPC |
|
|
272
|
-
| `/
|
|
272
|
+
| `/mcp` | MCP endpoint |
|
|
273
273
|
| `/_agent-native/onboarding/*` | Setup checklist |
|
|
274
274
|
| `/_agent-native/observability/*` | Traces, feedback, evals, experiments |
|
|
275
275
|
| `/_agent-native/file-upload` | File upload provider endpoint |
|
|
@@ -465,4 +465,4 @@ const handler = createProductionAgentHandler({
|
|
|
465
465
|
- [**Database**](/docs/database) — the `getDb()`/`schema` pattern custom routes and actions both import
|
|
466
466
|
- [**Security**](/docs/security#access-guards) — `accessFilter`/`assertAccess` and the full data-scoping model
|
|
467
467
|
- [**Messaging**](/docs/messaging) — the canonical inbound-webhook integration queue pattern
|
|
468
|
-
- [**MCP Protocol**](/docs/mcp-protocol) — the `/
|
|
468
|
+
- [**MCP Protocol**](/docs/mcp-protocol) — the `/mcp` endpoint this server mounts automatically
|
|
@@ -317,7 +317,7 @@ Each app-backed skill starts with `agent-native.app-skill.json` at the app root:
|
|
|
317
317
|
"id": "assets",
|
|
318
318
|
"hosted": {
|
|
319
319
|
"url": "https://assets.agent-native.com",
|
|
320
|
-
"mcpUrl": "https://assets.agent-native.com/
|
|
320
|
+
"mcpUrl": "https://assets.agent-native.com/mcp"
|
|
321
321
|
},
|
|
322
322
|
"mcp": { "serverName": "agent-native-assets" },
|
|
323
323
|
"skills": [
|
|
@@ -628,7 +628,7 @@ human picker UI.
|
|
|
628
628
|
### Developer: distribute the app skill
|
|
629
629
|
|
|
630
630
|
The Assets app skill has app id `assets` and hosted MCP URL
|
|
631
|
-
`https://assets.agent-native.com/
|
|
631
|
+
`https://assets.agent-native.com/mcp`.
|
|
632
632
|
|
|
633
633
|
```bash
|
|
634
634
|
# Easiest hosted install: exported skill instructions plus MCP connector.
|
|
@@ -123,7 +123,7 @@ Day-to-day, Dispatch is the place admins and ops folks open to keep the workspac
|
|
|
123
123
|
Dispatch access without copying raw secrets. App-specific source
|
|
124
124
|
configuration stays in the app that uses the provider.
|
|
125
125
|
- **Expose one MCP connector.** Add
|
|
126
|
-
`https://dispatch.agent-native.com/
|
|
126
|
+
`https://dispatch.agent-native.com/mcp` in Claude, ChatGPT,
|
|
127
127
|
Codex, Cursor, or another MCP host, then choose which workspace apps the
|
|
128
128
|
connector can reach from Dispatch's **Agents** page. Use a direct app URL
|
|
129
129
|
only when that host should be isolated to one app.
|
|
@@ -304,7 +304,7 @@ _How it works under the hood (for developers)._
|
|
|
304
304
|
]}
|
|
305
305
|
/>
|
|
306
306
|
|
|
307
|
-
- **MCP hub mode.** Dispatch can still act as the workspace's [MCP hub](/docs/mcp-clients#hub) so every other app in the workspace pulls the same org-scope MCP server list. Separately, Dispatch's own `/
|
|
307
|
+
- **MCP hub mode.** Dispatch can still act as the workspace's [MCP hub](/docs/mcp-clients#hub) so every other app in the workspace pulls the same org-scope MCP server list. Separately, Dispatch's own `/mcp` endpoint is the recommended external MCP connector for Claude, ChatGPT, and other hosts that should reach multiple workspace apps.
|
|
308
308
|
|
|
309
309
|
## Dreams {#dreams}
|
|
310
310
|
|
|
@@ -124,7 +124,7 @@ The command installs three commands: `/visual-plan`, `/visual-recap`, and
|
|
|
124
124
|
|
|
125
125
|
If you are using a chat-based host that accepts MCP connector URLs directly
|
|
126
126
|
(rather than a CLI-configured client), connect the hosted Plans connector at
|
|
127
|
-
`https://plan.agent-native.com/
|
|
127
|
+
`https://plan.agent-native.com/mcp` — see [MCP Clients](/docs/mcp-clients) for client-specific setup.
|
|
128
128
|
|
|
129
129
|
Authentication is a one-time browser sign-in at setup — this is intended, and it
|
|
130
130
|
is what lets the agent persist and share the plans it generates. What the auth
|
|
@@ -267,7 +267,7 @@ Sharing and commenting are the workflows that need an account:
|
|
|
267
267
|
cross-device or team review) requires signing in. Google sign-in appears when
|
|
268
268
|
the standard Google OAuth env vars are configured.
|
|
269
269
|
|
|
270
|
-
The hosted Plans connector lives at `https://plan.agent-native.com/
|
|
270
|
+
The hosted Plans connector lives at `https://plan.agent-native.com/mcp`.
|
|
271
271
|
Never put shared secrets in skill files.
|
|
272
272
|
|
|
273
273
|
## Local-files privacy mode {#local-files}
|
|
@@ -475,7 +475,7 @@ pnpm dev
|
|
|
475
475
|
The hosted app-backed skill uses:
|
|
476
476
|
|
|
477
477
|
- App: `https://plan.agent-native.com`
|
|
478
|
-
- MCP: `https://plan.agent-native.com/
|
|
478
|
+
- MCP: `https://plan.agent-native.com/mcp`
|
|
479
479
|
|
|
480
480
|
The local template is useful when you are developing Plans itself, testing local persistence, or running a fully self-hosted review surface.
|
|
481
481
|
|
package/corpus/core/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.99.1",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -540,6 +540,8 @@ export async function callAgent(
|
|
|
540
540
|
userEmail?: string;
|
|
541
541
|
orgDomain?: string;
|
|
542
542
|
orgSecret?: string;
|
|
543
|
+
/** Origin used to build links back to the receiving app. */
|
|
544
|
+
requestOrigin?: string;
|
|
543
545
|
/**
|
|
544
546
|
* Use async/poll instead of a single blocking POST. Recommended for
|
|
545
547
|
* cross-app calls that may exceed a synchronous serverless request budget.
|
|
@@ -571,6 +573,7 @@ export async function callAgent(
|
|
|
571
573
|
const metadata: Record<string, unknown> = {};
|
|
572
574
|
if (opts?.userEmail) metadata.userEmail = opts.userEmail;
|
|
573
575
|
if (opts?.orgDomain) metadata.orgDomain = opts.orgDomain;
|
|
576
|
+
if (opts?.requestOrigin) metadata.requestOrigin = opts.requestOrigin;
|
|
574
577
|
|
|
575
578
|
// Default to async + poll. The receiving A2A server's `_process-task` route
|
|
576
579
|
// runs the handler in a fresh function execution (cross-platform queue
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
resolveAgentChatProcessRunDispatchPath,
|
|
9
9
|
} from "../agent/durable-background.js";
|
|
10
10
|
import { withConfiguredAppBasePath } from "../server/app-base-path.js";
|
|
11
|
+
import { getOrigin, isConfiguredAppOrigin } from "../server/google-oauth.js";
|
|
11
12
|
import { fireInternalDispatch } from "../server/self-dispatch.js";
|
|
12
13
|
import { agentChat } from "../shared/agent-chat.js";
|
|
13
14
|
import {
|
|
@@ -46,6 +47,70 @@ const A2A_QUEUED_DISPATCH_STUCK_AFTER_MS = 10_000;
|
|
|
46
47
|
const A2A_PROCESSING_STUCK_AFTER_MS = 5 * 60 * 1000;
|
|
47
48
|
const A2A_PROCESSING_HEARTBEAT_MS = 30_000;
|
|
48
49
|
|
|
50
|
+
/**
|
|
51
|
+
* Request origin is routing/link context, not an identity signal. Accept only
|
|
52
|
+
* an absolute HTTP(S) origin from caller metadata so queued runs can preserve
|
|
53
|
+
* custom-domain/workspace links without allowing arbitrary values to leak
|
|
54
|
+
* into browser or artifact URLs.
|
|
55
|
+
*/
|
|
56
|
+
function requestOriginFromMetadata(
|
|
57
|
+
metadata: Record<string, unknown> | undefined,
|
|
58
|
+
): string | undefined {
|
|
59
|
+
const raw = metadata?.requestOrigin;
|
|
60
|
+
if (typeof raw !== "string" || !raw.trim()) return undefined;
|
|
61
|
+
try {
|
|
62
|
+
const url = new URL(raw);
|
|
63
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") return undefined;
|
|
64
|
+
return url.origin;
|
|
65
|
+
} catch {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function requestOriginFromEvent(event: any | undefined): string | undefined {
|
|
71
|
+
if (!event) return undefined;
|
|
72
|
+
try {
|
|
73
|
+
return requestOriginFromMetadata({
|
|
74
|
+
requestOrigin: getOrigin(event as any),
|
|
75
|
+
});
|
|
76
|
+
} catch {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Prefer the origin resolved from the receiving request. A distinct public
|
|
83
|
+
* browser origin is allowed only when the receiver configured it explicitly;
|
|
84
|
+
* arbitrary caller metadata must not steer links or service-token URLs.
|
|
85
|
+
*/
|
|
86
|
+
function requestOriginForContext(
|
|
87
|
+
metadata: Record<string, unknown> | undefined,
|
|
88
|
+
event: any | undefined,
|
|
89
|
+
): string | undefined {
|
|
90
|
+
if (!event) return undefined;
|
|
91
|
+
const receiverOrigin = requestOriginFromEvent(event);
|
|
92
|
+
const metadataOrigin = requestOriginFromMetadata(metadata);
|
|
93
|
+
if (
|
|
94
|
+
metadataOrigin &&
|
|
95
|
+
(metadataOrigin === receiverOrigin || isConfiguredAppOrigin(metadataOrigin))
|
|
96
|
+
) {
|
|
97
|
+
return metadataOrigin;
|
|
98
|
+
}
|
|
99
|
+
return receiverOrigin;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function trustedA2AMetadata(
|
|
103
|
+
metadata: Record<string, unknown> | undefined,
|
|
104
|
+
event: any | undefined,
|
|
105
|
+
): Record<string, unknown> | undefined {
|
|
106
|
+
if (!metadata) return undefined;
|
|
107
|
+
const trusted = { ...metadata };
|
|
108
|
+
const requestOrigin = requestOriginForContext(metadata, event);
|
|
109
|
+
if (requestOrigin) trusted.requestOrigin = requestOrigin;
|
|
110
|
+
else delete trusted.requestOrigin;
|
|
111
|
+
return trusted;
|
|
112
|
+
}
|
|
113
|
+
|
|
49
114
|
/**
|
|
50
115
|
* Hard cap on how long a task may sit in submitted/working (never reaching
|
|
51
116
|
* `processing`) before the dispatch-retry loop in
|
|
@@ -172,6 +237,12 @@ export async function processA2ATaskFromQueue(
|
|
|
172
237
|
const processorMeta = (meta.__a2a_processor ?? {}) as Record<string, unknown>;
|
|
173
238
|
const verifiedEmail = processorMeta.verifiedEmail as string | undefined;
|
|
174
239
|
const orgDomainHint = processorMeta.orgDomainHint as string | undefined;
|
|
240
|
+
// The processor metadata was created by the authenticated inbound handler
|
|
241
|
+
// from that request's resolved origin. Prefer it over the processor event,
|
|
242
|
+
// whose host may be an internal worker/dispatch origin. Legacy tasks that
|
|
243
|
+
// predate this metadata fall back to the processor event.
|
|
244
|
+
const requestOrigin =
|
|
245
|
+
requestOriginFromMetadata(processorMeta) ?? requestOriginFromEvent(event);
|
|
175
246
|
const contextId =
|
|
176
247
|
(processorMeta.contextId as string | null | undefined) ?? undefined;
|
|
177
248
|
const callerMetadata =
|
|
@@ -197,7 +268,11 @@ export async function processA2ATaskFromQueue(
|
|
|
197
268
|
).unref?.();
|
|
198
269
|
try {
|
|
199
270
|
await runWithRequestContext(
|
|
200
|
-
{
|
|
271
|
+
{
|
|
272
|
+
userEmail: verifiedEmail,
|
|
273
|
+
orgId: resolvedOrgId,
|
|
274
|
+
...(requestOrigin ? { requestOrigin } : {}),
|
|
275
|
+
},
|
|
201
276
|
() =>
|
|
202
277
|
runHandlerAndPersist(
|
|
203
278
|
taskId,
|
|
@@ -349,7 +424,7 @@ function makeHandlerContext(
|
|
|
349
424
|
* inside `runWithRequestContext` so downstream actions see the org.
|
|
350
425
|
*/
|
|
351
426
|
async function withA2ARequestContext<T>(
|
|
352
|
-
|
|
427
|
+
metadata: Record<string, unknown> | undefined,
|
|
353
428
|
event: any | undefined,
|
|
354
429
|
fn: () => Promise<T>,
|
|
355
430
|
): Promise<T> {
|
|
@@ -366,9 +441,14 @@ async function withA2ARequestContext<T>(
|
|
|
366
441
|
(event?.context?.__a2aOrgDomain as string | undefined) ?? undefined;
|
|
367
442
|
|
|
368
443
|
const resolvedOrgId = await resolveVerifiedA2AOrgId(verifiedEmail, orgDomain);
|
|
444
|
+
const requestOrigin = requestOriginForContext(metadata, event);
|
|
369
445
|
|
|
370
446
|
return runWithRequestContext(
|
|
371
|
-
{
|
|
447
|
+
{
|
|
448
|
+
userEmail: verifiedEmail,
|
|
449
|
+
orgId: resolvedOrgId,
|
|
450
|
+
...(requestOrigin ? { requestOrigin } : {}),
|
|
451
|
+
},
|
|
372
452
|
fn,
|
|
373
453
|
) as Promise<T>;
|
|
374
454
|
}
|
|
@@ -528,14 +608,17 @@ async function handleSend(
|
|
|
528
608
|
// to metadata.orgDomain which is caller-supplied and unverified.
|
|
529
609
|
const orgDomainHint =
|
|
530
610
|
(event?.context?.__a2aOrgDomain as string | undefined) ?? undefined;
|
|
611
|
+
const requestOrigin = requestOriginForContext(metadata, event);
|
|
612
|
+
const safeMetadata = trustedA2AMetadata(metadata, event);
|
|
531
613
|
|
|
532
614
|
const taskMetadata: Record<string, unknown> = {
|
|
533
|
-
...(
|
|
615
|
+
...(safeMetadata ?? {}),
|
|
534
616
|
__a2a_processor: {
|
|
535
617
|
verifiedEmail,
|
|
536
618
|
orgDomainHint,
|
|
619
|
+
...(requestOrigin ? { requestOrigin } : {}),
|
|
537
620
|
contextId: contextId ?? null,
|
|
538
|
-
callerMetadata:
|
|
621
|
+
callerMetadata: safeMetadata ?? null,
|
|
539
622
|
},
|
|
540
623
|
};
|
|
541
624
|
const task = await createTask(
|
|
@@ -571,7 +654,12 @@ async function handleSend(
|
|
|
571
654
|
);
|
|
572
655
|
await updateTask(task.id, { state: "working" });
|
|
573
656
|
|
|
574
|
-
const ctx = makeHandlerContext(
|
|
657
|
+
const ctx = makeHandlerContext(
|
|
658
|
+
task.id,
|
|
659
|
+
contextId,
|
|
660
|
+
trustedA2AMetadata(metadata, event),
|
|
661
|
+
event,
|
|
662
|
+
);
|
|
575
663
|
|
|
576
664
|
try {
|
|
577
665
|
const result = getHandler(config)(message, ctx.context);
|
|
@@ -653,7 +741,7 @@ async function handleStream(
|
|
|
653
741
|
const { context, artifacts } = makeHandlerContext(
|
|
654
742
|
task.id,
|
|
655
743
|
contextId,
|
|
656
|
-
metadata,
|
|
744
|
+
trustedA2AMetadata(metadata, event),
|
|
657
745
|
event,
|
|
658
746
|
);
|
|
659
747
|
|
|
@@ -1820,6 +1820,15 @@ export type AgentLoopFinalResponseGuardResult =
|
|
|
1820
1820
|
* guard/model combination from looping indefinitely.
|
|
1821
1821
|
*/
|
|
1822
1822
|
maxRetries?: number;
|
|
1823
|
+
/**
|
|
1824
|
+
* A rejected final answer is a recovery path, not a normal compact
|
|
1825
|
+
* first request. When true, expose the complete active registry before
|
|
1826
|
+
* the corrective retry so the model can reach the tool the guard is
|
|
1827
|
+
* asking for without depending on a second, model-specific tool-search
|
|
1828
|
+
* round trip. The registry is still limited to tools already exposed to
|
|
1829
|
+
* this run; hidden/agentTool=false actions are never added.
|
|
1830
|
+
*/
|
|
1831
|
+
expandToolSurface?: boolean;
|
|
1823
1832
|
};
|
|
1824
1833
|
|
|
1825
1834
|
export type AgentLoopFinalResponseGuard = (
|
|
@@ -3701,6 +3710,18 @@ export async function runAgentLoop(opts: {
|
|
|
3701
3710
|
? 1
|
|
3702
3711
|
: Math.max(0, Math.min(3, Math.trunc(guard.maxRetries ?? 1)));
|
|
3703
3712
|
if (finalGuardRetries < maxGuardRetries) {
|
|
3713
|
+
// Compact starter catalogs are an optimization for the first model
|
|
3714
|
+
// request. Once a guard rejects a final answer, preserving that
|
|
3715
|
+
// compact surface can make the corrective instruction impossible to
|
|
3716
|
+
// satisfy: the requested data action may still be behind
|
|
3717
|
+
// tool-search, and some models spend the entire retry narrating the
|
|
3718
|
+
// discovery step instead of calling it. Let guards opt into the
|
|
3719
|
+
// full *already-authorized* run registry for the retry. This is
|
|
3720
|
+
// intentionally handled in the shared loop so A2A/MCP and every
|
|
3721
|
+
// model family get the same recovery behavior.
|
|
3722
|
+
if (typeof guard !== "string" && guard.expandToolSurface) {
|
|
3723
|
+
expandActiveTools([...availableToolMap.keys()]);
|
|
3724
|
+
}
|
|
3704
3725
|
finalGuardRetries += 1;
|
|
3705
3726
|
send({ type: "clear" });
|
|
3706
3727
|
messages.push({
|