@agent-native/core 0.97.0 → 0.98.0
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 +32 -0
- package/corpus/core/docs/content/authentication.mdx +3 -3
- package/corpus/core/docs/content/doctor.mdx +170 -0
- package/corpus/core/docs/content/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ar-SA/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/security.mdx +2 -0
- package/corpus/core/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/security.mdx +2 -0
- package/corpus/core/docs/content/locales/es-ES/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/security.mdx +2 -0
- package/corpus/core/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/hi-IN/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/security.mdx +2 -0
- package/corpus/core/docs/content/locales/ja-JP/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/security.mdx +2 -0
- package/corpus/core/docs/content/locales/ko-KR/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/pt-BR/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-CN/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/security.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-TW/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/security.mdx +2 -0
- package/corpus/core/docs/content/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/security.mdx +2 -0
- package/corpus/core/package.json +5 -1
- package/corpus/core/scripts/finalize-build.mjs +63 -3
- package/corpus/core/scripts/materialize-source-corpus.mjs +101 -15
- package/corpus/core/src/action.ts +42 -0
- package/corpus/core/src/agent/engine/builder-engine.ts +3 -0
- package/corpus/core/src/agent/engine/context-directives-transform.ts +69 -0
- package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +168 -0
- package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +85 -0
- package/corpus/core/src/agent/production-agent.ts +129 -244
- package/corpus/core/src/cli/doctor.ts +9 -3
- package/corpus/core/src/cli/plan-local.ts +10 -2
- package/corpus/core/src/cli/skills-content/assets-skill.ts +83 -0
- package/corpus/core/src/cli/skills-content/canvas.ts +153 -0
- package/corpus/core/src/cli/skills-content/connection.ts +52 -0
- package/corpus/core/src/cli/skills-content/content-skill.ts +109 -0
- package/corpus/core/src/cli/skills-content/design-exploration-skill.ts +118 -0
- package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
- package/corpus/core/src/cli/skills-content/document-quality.ts +196 -0
- package/corpus/core/src/cli/skills-content/exemplar.ts +69 -0
- package/corpus/core/src/cli/skills-content/help.ts +77 -0
- package/corpus/core/src/cli/skills-content/index.ts +22 -0
- package/corpus/core/src/cli/skills-content/local-files.ts +95 -0
- package/corpus/core/src/cli/skills-content/plan-setup-auth.ts +80 -0
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +470 -0
- package/corpus/core/src/cli/skills-content/visual-recap-skill.ts +547 -0
- package/corpus/core/src/cli/skills-content/visualize-repo-skill.ts +93 -0
- package/corpus/core/src/cli/skills-content/wireframe.ts +349 -0
- package/corpus/core/src/cli/skills.ts +27 -2733
- package/corpus/core/src/client/AgentPanel.tsx +6 -5
- package/corpus/core/src/client/CommandMenu.tsx +16 -5
- package/corpus/core/src/client/FeedbackButton.tsx +2 -2
- package/corpus/core/src/client/app-providers.tsx +18 -5
- package/corpus/core/src/client/chat/tool-call-display.tsx +3 -3
- package/corpus/core/src/client/composer/PastedTextChip.tsx +1 -1
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +143 -45
- package/corpus/core/src/client/composer/TiptapComposer.tsx +1 -1
- package/corpus/core/src/client/composer/VoiceButton.tsx +21 -5
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +107 -10
- package/corpus/core/src/client/context-xray/ContextXRayPanel.tsx +5 -2
- package/corpus/core/src/client/extensions/ExtensionEditor.tsx +37 -4
- package/corpus/core/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +39 -10
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +44 -6
- package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +12 -3
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +49 -11
- package/corpus/core/src/client/index.ts +0 -13
- package/corpus/core/src/client/progress/RunsTray.tsx +10 -3
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +7 -0
- package/corpus/core/src/client/settings/useBuilderStatus.ts +6 -0
- package/corpus/core/src/client/tool-cells/EditCell.tsx +19 -16
- package/corpus/core/src/client/tool-cells/FilesChangedSummary.tsx +26 -23
- package/corpus/core/src/client/tool-cells/WriteCell.tsx +19 -16
- package/corpus/core/src/client/visual-style-controls.tsx +1 -1
- package/corpus/core/src/deploy/build.ts +36 -14
- package/corpus/core/src/integrations/google-docs-poller.ts +23 -2
- package/corpus/core/src/integrations/plugin.ts +10 -0
- package/corpus/core/src/integrations/webhook-handler.ts +27 -2
- package/corpus/core/src/jobs/scheduler.ts +28 -2
- package/corpus/core/src/localization/default-messages.ts +8 -1
- package/corpus/core/src/mcp/oauth-token.ts +6 -1
- package/corpus/core/src/observability/routes.ts +36 -0
- package/corpus/core/src/observability/sentiment.ts +261 -0
- package/corpus/core/src/observability/store.ts +23 -0
- package/corpus/core/src/observability/traces.ts +49 -63
- package/corpus/core/src/observability/tracking-identity.ts +55 -0
- package/corpus/core/src/observability/types.ts +13 -0
- package/corpus/core/src/secrets/storage.ts +67 -3
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +199 -0
- package/corpus/core/src/server/agent-chat/browser-team-tools.ts +510 -0
- package/corpus/core/src/server/agent-chat/context-tools.ts +595 -0
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +470 -0
- package/corpus/core/src/server/agent-chat/lazy-fs.ts +11 -0
- package/corpus/core/src/server/agent-chat/mcp-glue.ts +91 -0
- package/corpus/core/src/server/agent-chat/plugin-options.ts +350 -0
- package/corpus/core/src/server/agent-chat/process-run-failure.ts +62 -0
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +688 -0
- package/corpus/core/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
- package/corpus/core/src/server/agent-chat/request-surface.ts +71 -0
- package/corpus/core/src/server/agent-chat/run-code-tools.ts +67 -0
- package/corpus/core/src/server/agent-chat/script-entries.ts +779 -0
- package/corpus/core/src/server/agent-chat/shared-thread.ts +301 -0
- package/corpus/core/src/server/agent-chat/skill-frontmatter.ts +41 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +364 -4182
- package/corpus/core/src/server/agent-teams.ts +26 -3
- package/corpus/core/src/server/auth.ts +55 -57
- package/corpus/core/src/server/credential-provider.ts +22 -25
- package/corpus/core/src/server/edge.ts +1 -0
- package/corpus/core/src/server/onboarding-html.ts +1 -16
- package/corpus/core/src/server/realtime-voice.ts +40 -5
- package/corpus/core/src/server/request-origin.ts +6 -2
- package/corpus/core/src/server/ssr-handler.ts +55 -2
- package/corpus/core/src/sharing/access.ts +155 -11
- package/corpus/core/src/sharing/registry.ts +7 -0
- package/corpus/core/src/styles/agent-native.css +15 -14
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/corpus/core/src/templates/workspace-core/src/server/index.ts +4 -2
- package/corpus/core/src/testing.ts +26 -0
- package/corpus/core/src/triggers/dispatcher.ts +23 -2
- package/corpus/core/src/vite/client.ts +126 -2
- package/corpus/core/tsconfig.cli.json +1 -1
- package/corpus/core/tsconfig.json +5 -1
- package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +2 -2
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/analytics/AGENTS.md +19 -6
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +79 -43
- package/corpus/templates/analytics/actions/list-explorer-dashboards.ts +3 -3
- package/corpus/templates/analytics/actions/list-sql-dashboards.ts +8 -3
- package/corpus/templates/analytics/actions/rename-analysis.ts +8 -2
- package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -7
- package/corpus/templates/analytics/actions/view-screen.ts +4 -23
- package/corpus/templates/analytics/app/components/ResourceLoadError.tsx +42 -0
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +85 -70
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +107 -89
- package/corpus/templates/analytics/app/components/layout/SidebarLoadError.tsx +24 -0
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +15 -5
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/analytics/app/i18n-data.ts +40 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +6 -2
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +36 -20
- package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +34 -20
- package/corpus/templates/analytics/app/pages/adhoc/explorer/use-explorer-config.ts +42 -41
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +43 -36
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +11 -2
- package/corpus/templates/analytics/app/root.tsx +13 -1
- package/corpus/templates/analytics/app/routes/_index.tsx +14 -2
- package/corpus/templates/analytics/changelog/2026-07-03-agent-llm-observability-dashboard.md +1 -1
- package/corpus/templates/analytics/changelog/2026-07-11-agent-feedback-sentiment-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-analytics-chats-now-start-faster-by-loading-metric-definitio.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-command-and-sql-previews-now-respond-without-lag.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-command-search-now-reports-loading-failures-and-lets-you-ret.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-dashboard-navigation-now-loads-faster-and-reports-request-fa.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-inferred-message-sentiment-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-microphone-settings-from-realtime-voice-mode-now-open-the-vo.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-more-dashboard-edit-paths-are-now-safe-against-simultaneous-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-renaming-a-dashboard-is-now-safe-against-simultaneous-agent-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-renaming-an-analysis-is-now-safe-against-simultaneous-edits.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-workspace-mounted-analytics-now-opens-ask-reliably-and-route.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +37 -3
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +339 -1
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -24
- package/corpus/templates/analytics/server/lib/dashboard-seeds.ts +0 -5
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +289 -20
- package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +106 -34
- package/corpus/templates/analytics/server/lib/demo-dashboards.ts +4 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -39
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +30 -4
- package/corpus/templates/assets/app/routes/library.tsx +49 -5
- package/corpus/templates/assets/changelog/2026-07-11-library-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.env.example +5 -0
- package/corpus/templates/calendar/app/components/calendar/EventCard.tsx +2 -2
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +37 -1
- package/corpus/templates/calendar/app/pages/BookingsList.tsx +20 -3
- package/corpus/templates/calendar/changelog/2026-07-11-booking-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-11-event-cards-give-subtle-press-feedback-and-smoother-hover.md +6 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/clips/actions/decline-invite.ts +8 -0
- package/corpus/templates/clips/app/components/library/folder-tree.tsx +209 -187
- package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +2 -2
- package/corpus/templates/clips/app/components/player/reactions-tray.tsx +17 -5
- package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -3
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +2 -2
- package/corpus/templates/clips/app/components/workspace/insights-hub.tsx +119 -95
- package/corpus/templates/clips/app/global.css +45 -0
- package/corpus/templates/clips/app/root.tsx +4 -0
- package/corpus/templates/clips/app/routes/_app.notifications.tsx +23 -2
- package/corpus/templates/clips/app/routes/_app.trash.tsx +24 -2
- package/corpus/templates/clips/changelog/2026-07-11-controls-and-folders-now-move-more-smoothly.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-declining-an-invitation-now-requires-being-its-recipient.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-recording-overlays-are-lighter-weight-and-no-longer-cause-pa.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-workspace-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.css +34 -5
- package/corpus/templates/clips/chrome-extension/src/styles.css +2 -2
- package/corpus/templates/clips/desktop/src/styles.css +71 -26
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/content/actions/move-document.ts +34 -18
- package/corpus/templates/content/app/components/QueryErrorState.tsx +39 -0
- package/corpus/templates/content/app/components/editor/LinkHoverPreview.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +225 -1435
- package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +368 -0
- package/corpus/templates/content/app/components/editor/database/ListView.tsx +353 -0
- package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +580 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -2
- package/corpus/templates/content/app/global.css +19 -19
- package/corpus/templates/content/app/root.tsx +2 -2
- package/corpus/templates/content/app/routes/_app._index.tsx +11 -1
- package/corpus/templates/content/changelog/2026-07-11-document-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-editor-toggle-feedback-now-feels-more-responsive.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-moving-documents-at-the-same-time-no-longer-scrambles-their-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-public-document-chats-now-start-faster-while-keeping-full-do.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-reopening-a-comment-now-uses-consistent-permissions-everywhe.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-sidebar-resizing-now-tracks-your-cursor-instantly-instead-of.md +6 -0
- package/corpus/templates/content/server/lib/public-documents.ts +47 -10
- package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +24 -24
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/design/app/components/QueryErrorState.tsx +24 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +5 -2
- package/corpus/templates/design/app/components/design/EditPanel.tsx +326 -319
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +198 -193
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +11 -4
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +1 -1
- package/corpus/templates/design/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -1
- package/corpus/templates/design/app/pages/Index.tsx +14 -2
- package/corpus/templates/design/app/pages/Present.tsx +16 -3
- package/corpus/templates/design/app/pages/Templates.tsx +10 -4
- package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +484 -0
- package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +378 -0
- package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +138 -0
- package/corpus/templates/design/app/pages/design-editor/dom-utils.ts +15 -0
- package/corpus/templates/design/app/pages/design-editor/generation-prompt-directives.ts +180 -0
- package/corpus/templates/design/app/pages/design-editor/html-layer-positioning.ts +226 -0
- package/corpus/templates/design/app/pages/design-editor/png-export-render.ts +348 -0
- package/corpus/templates/design/app/pages/design-editor/screen-command-utils.ts +160 -0
- package/corpus/templates/design/app/pages/design-editor/text-edit-utils.ts +238 -0
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +23 -1
- package/corpus/templates/design/app/pages/design-editor/types.ts +25 -0
- package/corpus/templates/design/app/root.tsx +10 -1
- package/corpus/templates/design/changelog/2026-07-11-canvas-context-menus-now-open-without-motion-jitter.md +6 -0
- package/corpus/templates/design/changelog/2026-07-11-design-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/design/changelog/2026-07-11-inspector-tooltips-appear-instantly-as-you-sweep-across-icon.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +10 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +123 -0
- package/corpus/templates/dispatch/app/routes/integrations.tsx +163 -144
- package/corpus/templates/dispatch/changelog/2026-07-11-dispatch-mcp-connections-now-start-with-safer-app-access-and.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-11-overview-and-chat-now-share-a-cleaner-more-stable-flow.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-11-query-errors-now-show-a-retry-option.md +6 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
- package/corpus/templates/forms/app/root.tsx +34 -8
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/macros/app/components/DailyProgress.tsx +25 -5
- package/corpus/templates/macros/app/components/QueryErrorState.tsx +31 -0
- package/corpus/templates/macros/app/components/WeightTracker.tsx +5 -1
- package/corpus/templates/macros/app/components/ui/button.tsx +1 -1
- package/corpus/templates/macros/app/components/ui/progress.tsx +1 -1
- package/corpus/templates/macros/app/components/ui/tabs.tsx +1 -1
- package/corpus/templates/macros/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/macros/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/macros/app/i18n/en-US.ts +2 -0
- package/corpus/templates/macros/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/macros/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/macros/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/macros/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/macros/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/macros/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/macros/app/routes/_index.tsx +22 -12
- package/corpus/templates/macros/app/routes/analytics.tsx +31 -10
- package/corpus/templates/macros/changelog/2026-07-11-daily-tracking-now-loads-and-updates-more-quickly.md +6 -0
- package/corpus/templates/macros/changelog/2026-07-11-data-load-failures-now-show-a-clear-error-with-a-retry-actio.md +6 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/mail/.env.example +16 -11
- package/corpus/templates/mail/actions/list-emails.ts +39 -35
- package/corpus/templates/mail/app/components/email/ComposeModal.tsx +58 -6
- package/corpus/templates/mail/app/components/email/EmailListItem.tsx +35 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +113 -104
- package/corpus/templates/mail/app/root.tsx +8 -10
- package/corpus/templates/mail/changelog/2026-07-11-compose-and-navigation-motion-now-feel-faster-and-smoother.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-11-swipe-to-archive-or-snooze-now-responds-to-quick-flicks-not-.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-11-the-assistant-now-sees-the-same-inbox-you-do-snoozed-mail-st.md +6 -0
- package/corpus/templates/mail/server/handlers/emails.ts +25 -69
- package/corpus/templates/mail/server/lib/list-inbox-emails.ts +169 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/plan/.env.example +4 -0
- package/corpus/templates/plan/actions/create-plan-design.ts +89 -81
- package/corpus/templates/plan/actions/create-prototype-plan.ts +72 -59
- package/corpus/templates/plan/actions/create-ui-plan.ts +70 -55
- package/corpus/templates/plan/actions/create-visual-plan.ts +65 -51
- package/corpus/templates/plan/actions/update-local-plan-folder.ts +43 -30
- package/corpus/templates/plan/actions/update-visual-plan.ts +81 -64
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +17 -0
- package/corpus/templates/plan/app/components/ui/tabs.tsx +1 -1
- package/corpus/templates/plan/app/i18n/ar-SA.ts +10 -0
- package/corpus/templates/plan/app/i18n/de-DE.ts +10 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +10 -0
- package/corpus/templates/plan/app/i18n/es-ES.ts +10 -0
- package/corpus/templates/plan/app/i18n/fr-FR.ts +10 -0
- package/corpus/templates/plan/app/i18n/hi-IN.ts +10 -0
- package/corpus/templates/plan/app/i18n/ja-JP.ts +10 -0
- package/corpus/templates/plan/app/i18n/ko-KR.ts +10 -0
- package/corpus/templates/plan/app/i18n/pt-BR.ts +10 -0
- package/corpus/templates/plan/app/i18n/zh-CN.ts +10 -0
- package/corpus/templates/plan/app/i18n/zh-TW.ts +10 -0
- package/corpus/templates/plan/app/lib/plan-local-bridge.ts +80 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +152 -4
- package/corpus/templates/plan/app/root.tsx +11 -0
- package/corpus/templates/plan/changelog/2026-07-11-local-plans-now-explain-and-recover-from-browser-permission-.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-edits-now-save-atomically-and-can-no-longer-partially-a.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-lists-now-show-a-clear-error-with-a-retry-action-when-t.md +6 -0
- package/corpus/templates/plan/shared/plan-content.ts +546 -260
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/slides/actions/delete-slide-comment.ts +49 -0
- package/corpus/templates/slides/actions/update-slide-comment.ts +93 -0
- package/corpus/templates/slides/actions/view-screen.ts +14 -6
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +33 -10
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +2 -2
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +4 -2
- package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +4 -3
- package/corpus/templates/slides/app/context/DeckContext.tsx +9 -0
- package/corpus/templates/slides/app/i18n/ar-SA.ts +6 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +6 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +6 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +6 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +6 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +6 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +6 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +6 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +6 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +5 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +5 -0
- package/corpus/templates/slides/app/pages/DesignSystems.tsx +23 -2
- package/corpus/templates/slides/app/pages/Index.tsx +29 -1
- package/corpus/templates/slides/changelog/2026-07-11-comment-load-failures-now-show-a-retry-action-instead-of-say.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-comment-pins-now-clear-with-a-faster-smoother-confirmation.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-deck-and-design-system-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-editor-toggles-and-toolbar-menus-now-animate-smoothly.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-the-assistant-can-now-resolve-reopen-and-delete-slide-commen.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-viewing-slides-no-longer-loads-every-deck-s-full-contents-in.md +6 -0
- package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +29 -48
- package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +29 -65
- package/dist/action.d.ts +23 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +13 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +3 -0
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/context-directives-transform.d.ts +25 -0
- package/dist/agent/engine/context-directives-transform.d.ts.map +1 -0
- package/dist/agent/engine/context-directives-transform.js +53 -0
- package/dist/agent/engine/context-directives-transform.js.map +1 -0
- package/dist/agent/engine/continuation-dispatch-retry.d.ts +40 -0
- package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -0
- package/dist/agent/engine/continuation-dispatch-retry.js +109 -0
- package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -0
- package/dist/agent/engine/tool-call-journal-seed.d.ts +46 -0
- package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -0
- package/dist/agent/engine/tool-call-journal-seed.js +60 -0
- package/dist/agent/engine/tool-call-journal-seed.js.map +1 -0
- package/dist/agent/production-agent.d.ts +7 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +102 -222
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -3
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/plan-local.d.ts.map +1 -1
- package/dist/cli/plan-local.js +8 -2
- package/dist/cli/plan-local.js.map +1 -1
- package/dist/cli/skills-content/assets-skill.d.ts +2 -0
- package/dist/cli/skills-content/assets-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/assets-skill.js +84 -0
- package/dist/cli/skills-content/assets-skill.js.map +1 -0
- package/dist/cli/skills-content/canvas.d.ts +4 -0
- package/dist/cli/skills-content/canvas.d.ts.map +1 -0
- package/dist/cli/skills-content/canvas.js +152 -0
- package/dist/cli/skills-content/canvas.js.map +1 -0
- package/dist/cli/skills-content/connection.d.ts +2 -0
- package/dist/cli/skills-content/connection.d.ts.map +1 -0
- package/dist/cli/skills-content/connection.js +53 -0
- package/dist/cli/skills-content/connection.js.map +1 -0
- package/dist/cli/skills-content/content-skill.d.ts +2 -0
- package/dist/cli/skills-content/content-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/content-skill.js +110 -0
- package/dist/cli/skills-content/content-skill.js.map +1 -0
- package/dist/cli/skills-content/design-exploration-skill.d.ts +2 -0
- package/dist/cli/skills-content/design-exploration-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/design-exploration-skill.js +119 -0
- package/dist/cli/skills-content/design-exploration-skill.js.map +1 -0
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts +2 -0
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/design-visual-edit-skill.js +229 -0
- package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -0
- package/dist/cli/skills-content/document-quality.d.ts +4 -0
- package/dist/cli/skills-content/document-quality.d.ts.map +1 -0
- package/dist/cli/skills-content/document-quality.js +195 -0
- package/dist/cli/skills-content/document-quality.js.map +1 -0
- package/dist/cli/skills-content/exemplar.d.ts +4 -0
- package/dist/cli/skills-content/exemplar.d.ts.map +1 -0
- package/dist/cli/skills-content/exemplar.js +68 -0
- package/dist/cli/skills-content/exemplar.js.map +1 -0
- package/dist/cli/skills-content/help.d.ts +2 -0
- package/dist/cli/skills-content/help.d.ts.map +1 -0
- package/dist/cli/skills-content/help.js +78 -0
- package/dist/cli/skills-content/help.js.map +1 -0
- package/dist/cli/skills-content/index.d.ts +23 -0
- package/dist/cli/skills-content/index.d.ts.map +1 -0
- package/dist/cli/skills-content/index.js +23 -0
- package/dist/cli/skills-content/index.js.map +1 -0
- package/dist/cli/skills-content/local-files.d.ts +2 -0
- package/dist/cli/skills-content/local-files.d.ts.map +1 -0
- package/dist/cli/skills-content/local-files.js +96 -0
- package/dist/cli/skills-content/local-files.js.map +1 -0
- package/dist/cli/skills-content/plan-setup-auth.d.ts +9 -0
- package/dist/cli/skills-content/plan-setup-auth.d.ts.map +1 -0
- package/dist/cli/skills-content/plan-setup-auth.js +81 -0
- package/dist/cli/skills-content/plan-setup-auth.js.map +1 -0
- package/dist/cli/skills-content/visual-plan-skill.d.ts +2 -0
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visual-plan-skill.js +471 -0
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -0
- package/dist/cli/skills-content/visual-recap-skill.d.ts +2 -0
- package/dist/cli/skills-content/visual-recap-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visual-recap-skill.js +548 -0
- package/dist/cli/skills-content/visual-recap-skill.js.map +1 -0
- package/dist/cli/skills-content/visualize-repo-skill.d.ts +2 -0
- package/dist/cli/skills-content/visualize-repo-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visualize-repo-skill.js +94 -0
- package/dist/cli/skills-content/visualize-repo-skill.js.map +1 -0
- package/dist/cli/skills-content/wireframe.d.ts +4 -0
- package/dist/cli/skills-content/wireframe.d.ts.map +1 -0
- package/dist/cli/skills-content/wireframe.js +347 -0
- package/dist/cli/skills-content/wireframe.js.map +1 -0
- package/dist/cli/skills.d.ts +2 -10
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +2 -2710
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +4 -2
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +15 -3
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/FeedbackButton.js +2 -2
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/app-providers.d.ts +13 -5
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +9 -6
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +4 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +3 -3
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/composer/PastedTextChip.js +1 -1
- package/dist/client/composer/PastedTextChip.js.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts +3 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.js +35 -14
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/client/composer/TiptapComposer.js +1 -1
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts +2 -0
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +9 -3
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.d.ts +5 -0
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.js +91 -12
- package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +4 -1
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionEditor.js +15 -5
- package/dist/client/extensions/ExtensionEditor.js.map +1 -1
- package/dist/client/extensions/ExtensionQueryErrorState.d.ts +8 -0
- package/dist/client/extensions/ExtensionQueryErrorState.d.ts.map +1 -0
- package/dist/client/extensions/ExtensionQueryErrorState.js +11 -0
- package/dist/client/extensions/ExtensionQueryErrorState.js.map +1 -0
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +17 -7
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +17 -7
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.js +5 -3
- package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +21 -8
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/index.d.ts +0 -2
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +0 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +7 -3
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +4 -0
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +2 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +4 -0
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/tool-cells/EditCell.d.ts.map +1 -1
- package/dist/client/tool-cells/EditCell.js +2 -1
- package/dist/client/tool-cells/EditCell.js.map +1 -1
- package/dist/client/tool-cells/FilesChangedSummary.d.ts.map +1 -1
- package/dist/client/tool-cells/FilesChangedSummary.js +2 -1
- package/dist/client/tool-cells/FilesChangedSummary.js.map +1 -1
- package/dist/client/tool-cells/WriteCell.d.ts.map +1 -1
- package/dist/client/tool-cells/WriteCell.js +2 -1
- package/dist/client/tool-cells/WriteCell.js.map +1 -1
- package/dist/client/visual-style-controls.js +1 -1
- package/dist/client/visual-style-controls.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +36 -14
- package/dist/deploy/build.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts +7 -0
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +13 -3
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +10 -0
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts +11 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +16 -4
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +12 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +13 -3
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +7 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +8 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/oauth-token.d.ts +1 -1
- package/dist/mcp/oauth-token.d.ts.map +1 -1
- package/dist/mcp/oauth-token.js +6 -1
- package/dist/mcp/oauth-token.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +32 -0
- package/dist/observability/routes.js.map +1 -1
- package/dist/observability/sentiment.d.ts +42 -0
- package/dist/observability/sentiment.d.ts.map +1 -0
- package/dist/observability/sentiment.js +196 -0
- package/dist/observability/sentiment.js.map +1 -0
- package/dist/observability/store.d.ts +5 -0
- package/dist/observability/store.d.ts.map +1 -1
- package/dist/observability/store.js +17 -0
- package/dist/observability/store.js.map +1 -1
- package/dist/observability/traces.d.ts +2 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +42 -57
- package/dist/observability/traces.js.map +1 -1
- package/dist/observability/tracking-identity.d.ts +3 -0
- package/dist/observability/tracking-identity.d.ts.map +1 -0
- package/dist/observability/tracking-identity.js +51 -0
- package/dist/observability/tracking-identity.js.map +1 -0
- package/dist/observability/types.d.ts +10 -0
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js +3 -0
- package/dist/observability/types.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/storage.d.ts +6 -0
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +61 -3
- package/dist/secrets/storage.js.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.d.ts +50 -0
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -0
- package/dist/server/agent-chat/action-filters-a2a.js +127 -0
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -0
- package/dist/server/agent-chat/browser-team-tools.d.ts +21 -0
- package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/browser-team-tools.js +417 -0
- package/dist/server/agent-chat/browser-team-tools.js.map +1 -0
- package/dist/server/agent-chat/context-tools.d.ts +33 -0
- package/dist/server/agent-chat/context-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/context-tools.js +520 -0
- package/dist/server/agent-chat/context-tools.js.map +1 -0
- package/dist/server/agent-chat/framework-prompts.d.ts +65 -0
- package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -0
- package/dist/server/agent-chat/framework-prompts.js +403 -0
- package/dist/server/agent-chat/framework-prompts.js.map +1 -0
- package/dist/server/agent-chat/lazy-fs.d.ts +2 -0
- package/dist/server/agent-chat/lazy-fs.d.ts.map +1 -0
- package/dist/server/agent-chat/lazy-fs.js +11 -0
- package/dist/server/agent-chat/lazy-fs.js.map +1 -0
- package/dist/server/agent-chat/mcp-glue.d.ts +9 -0
- package/dist/server/agent-chat/mcp-glue.d.ts.map +1 -0
- package/dist/server/agent-chat/mcp-glue.js +63 -0
- package/dist/server/agent-chat/mcp-glue.js.map +1 -0
- package/dist/server/agent-chat/plugin-options.d.ts +322 -0
- package/dist/server/agent-chat/plugin-options.d.ts.map +1 -0
- package/dist/server/agent-chat/plugin-options.js +2 -0
- package/dist/server/agent-chat/plugin-options.js.map +1 -0
- package/dist/server/agent-chat/process-run-failure.d.ts +12 -0
- package/dist/server/agent-chat/process-run-failure.d.ts.map +1 -0
- package/dist/server/agent-chat/process-run-failure.js +24 -0
- package/dist/server/agent-chat/process-run-failure.js.map +1 -0
- package/dist/server/agent-chat/prompt-resources.d.ts +28 -0
- package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -0
- package/dist/server/agent-chat/prompt-resources.js +514 -0
- package/dist/server/agent-chat/prompt-resources.js.map +1 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts +5 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts.map +1 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.js +53 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.js.map +1 -0
- package/dist/server/agent-chat/request-surface.d.ts +8 -0
- package/dist/server/agent-chat/request-surface.d.ts.map +1 -0
- package/dist/server/agent-chat/request-surface.js +56 -0
- package/dist/server/agent-chat/request-surface.js.map +1 -0
- package/dist/server/agent-chat/run-code-tools.d.ts +17 -0
- package/dist/server/agent-chat/run-code-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/run-code-tools.js +55 -0
- package/dist/server/agent-chat/run-code-tools.js.map +1 -0
- package/dist/server/agent-chat/script-entries.d.ts +47 -0
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -0
- package/dist/server/agent-chat/script-entries.js +633 -0
- package/dist/server/agent-chat/script-entries.js.map +1 -0
- package/dist/server/agent-chat/shared-thread.d.ts +33 -0
- package/dist/server/agent-chat/shared-thread.d.ts.map +1 -0
- package/dist/server/agent-chat/shared-thread.js +242 -0
- package/dist/server/agent-chat/shared-thread.js.map +1 -0
- package/dist/server/agent-chat/skill-frontmatter.d.ts +7 -0
- package/dist/server/agent-chat/skill-frontmatter.d.ts.map +1 -0
- package/dist/server/agent-chat/skill-frontmatter.js +26 -0
- package/dist/server/agent-chat/skill-frontmatter.js.map +1 -0
- package/dist/server/agent-chat-plugin.d.ts +45 -486
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +173 -3005
- 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 +10 -0
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +13 -3
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +50 -52
- package/dist/server/auth.js.map +1 -1
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +22 -21
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/edge.d.ts +1 -0
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +1 -0
- package/dist/server/edge.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +1 -16
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/realtime-voice.d.ts +3 -0
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +29 -5
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/request-origin.d.ts.map +1 -1
- package/dist/server/request-origin.js +6 -3
- package/dist/server/request-origin.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +47 -2
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/sharing/access.d.ts +63 -3
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +53 -15
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/registry.d.ts +7 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/styles/agent-native.css +15 -14
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/default/app/i18n/ar-SA.ts +6 -0
- package/dist/templates/default/app/i18n/de-DE.ts +6 -0
- package/dist/templates/default/app/i18n/en-US.ts +6 -0
- package/dist/templates/default/app/i18n/es-ES.ts +6 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +6 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +6 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +6 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +6 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +6 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +6 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +6 -0
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/dist/templates/workspace-core/src/server/index.ts +4 -2
- package/dist/testing.d.ts +16 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +16 -0
- package/dist/testing.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +7 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +13 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts +16 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +105 -2
- package/dist/vite/client.js.map +1 -1
- package/docs/content/authentication.mdx +3 -3
- package/docs/content/doctor.mdx +170 -0
- package/docs/content/external-agents.mdx +8 -7
- package/docs/content/locales/ar-SA/authentication.mdx +2 -2
- package/docs/content/locales/ar-SA/external-agents.mdx +8 -7
- package/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ar-SA/security.mdx +2 -0
- package/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/docs/content/locales/de-DE/external-agents.mdx +8 -7
- package/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
- package/docs/content/locales/de-DE/security.mdx +2 -0
- package/docs/content/locales/es-ES/authentication.mdx +2 -2
- package/docs/content/locales/es-ES/external-agents.mdx +8 -7
- package/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
- package/docs/content/locales/es-ES/security.mdx +2 -0
- package/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/docs/content/locales/fr-FR/external-agents.mdx +8 -7
- package/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/fr-FR/security.mdx +2 -0
- package/docs/content/locales/hi-IN/authentication.mdx +2 -2
- package/docs/content/locales/hi-IN/external-agents.mdx +8 -7
- package/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
- package/docs/content/locales/hi-IN/security.mdx +2 -0
- package/docs/content/locales/ja-JP/authentication.mdx +2 -2
- package/docs/content/locales/ja-JP/external-agents.mdx +8 -7
- package/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ja-JP/security.mdx +2 -0
- package/docs/content/locales/ko-KR/authentication.mdx +2 -2
- package/docs/content/locales/ko-KR/external-agents.mdx +8 -7
- package/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ko-KR/security.mdx +2 -0
- package/docs/content/locales/pt-BR/authentication.mdx +2 -2
- package/docs/content/locales/pt-BR/external-agents.mdx +8 -7
- package/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/pt-BR/security.mdx +2 -0
- package/docs/content/locales/zh-CN/authentication.mdx +2 -2
- package/docs/content/locales/zh-CN/external-agents.mdx +8 -7
- package/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
- package/docs/content/locales/zh-CN/security.mdx +2 -0
- package/docs/content/locales/zh-TW/authentication.mdx +2 -2
- package/docs/content/locales/zh-TW/external-agents.mdx +8 -7
- package/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
- package/docs/content/locales/zh-TW/security.mdx +2 -0
- package/docs/content/mcp-protocol.mdx +1 -1
- package/docs/content/security.mdx +2 -0
- package/package.json +6 -2
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/src/templates/default/app/i18n/en-US.ts +6 -0
- package/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/src/templates/workspace-core/src/server/index.ts +4 -2
- package/corpus/core/src/client/ProductionAgentPanel.tsx +0 -9
- package/corpus/core/src/client/auth-redirect-url.ts +0 -23
- package/corpus/core/src/client/useProductionAgent.ts +0 -253
- package/corpus/core/src/shared/auth-redirect-url.ts +0 -1
- package/corpus/templates/analytics/app/pages/Index.tsx +0 -16
- package/corpus/templates/analytics/seeds/dashboards/agent-observability-llm.json +0 -173
- package/dist/client/ProductionAgentPanel.d.ts +0 -6
- package/dist/client/ProductionAgentPanel.d.ts.map +0 -1
- package/dist/client/ProductionAgentPanel.js +0 -6
- package/dist/client/ProductionAgentPanel.js.map +0 -1
- package/dist/client/auth-redirect-url.d.ts +0 -2
- package/dist/client/auth-redirect-url.d.ts.map +0 -1
- package/dist/client/auth-redirect-url.js +0 -19
- package/dist/client/auth-redirect-url.js.map +0 -1
- package/dist/client/useProductionAgent.d.ts +0 -24
- package/dist/client/useProductionAgent.d.ts.map +0 -1
- package/dist/client/useProductionAgent.js +0 -179
- package/dist/client/useProductionAgent.js.map +0 -1
- package/dist/shared/auth-redirect-url.d.ts +0 -2
- package/dist/shared/auth-redirect-url.d.ts.map +0 -1
- package/dist/shared/auth-redirect-url.js +0 -2
- package/dist/shared/auth-redirect-url.js.map +0 -1
|
@@ -285,7 +285,7 @@ Unauthenticated MCP requests return a `WWW-Authenticate` challenge pointing at `
|
|
|
285
285
|
|
|
286
286
|
</Diagram>
|
|
287
287
|
|
|
288
|
-
Access tokens are signed with `A2A_SECRET` when set, otherwise `BETTER_AUTH_SECRET`. They carry the signed user/org identity and the `mcp:read`, `mcp:write`, and/or `
|
|
288
|
+
Access tokens are signed with `A2A_SECRET` when set, otherwise `BETTER_AUTH_SECRET`. They carry the signed user/org identity and the `mcp:read`, `mcp:write`, `mcp:apps`, and/or `offline_access` scopes, and are audience-bound to the exact MCP resource URL. `offline_access` is advertised for hosts such as ChatGPT that require it before retaining refresh access. Refresh tokens are stored only as hashes and rotate on every refresh. Tool calls and MCP Apps resource reads run inside the same request context as the signed-in user; the embedded MCP App iframe never receives raw OAuth tokens.
|
|
289
289
|
|
|
290
290
|
`npx @agent-native/core@latest connect <url> --client claude-code` writes the URL-only MCP entry for this standard flow. For clients that cannot perform remote MCP OAuth, use the Connect page or `npx @agent-native/core@latest connect --token <token>` fallback to write an explicit bearer-token entry.
|
|
291
291
|
|
|
@@ -380,7 +380,7 @@ Templates with **public pages** (share links, embeds, marketing pages) often nee
|
|
|
380
380
|
/_agent-native/sign-in?return=<same-origin-path>
|
|
381
381
|
```
|
|
382
382
|
|
|
383
|
-
When an anonymous viewer hits this URL, the framework's login page is served. After a successful sign-in (any flow — token, email/password, or Google OAuth), the
|
|
383
|
+
When an anonymous viewer hits this URL, the framework's login page is served. After a successful sign-in (any flow — token, email/password, or Google OAuth), the browser returns to `return`.
|
|
384
384
|
|
|
385
385
|
The `return` parameter is validated as a **same-origin path**. Network-path references (`//evil.com/...`), absolute URLs, `data:` / `javascript:` schemes, and embedded control characters all fall back to `/`. The validated path is reconstructed from the URL parser, not echoed back from the input.
|
|
386
386
|
|
|
@@ -401,7 +401,7 @@ function SignInCta() {
|
|
|
401
401
|
|
|
402
402
|
### Bookmarked private paths
|
|
403
403
|
|
|
404
|
-
|
|
404
|
+
Normal app pages use one impersonal, public-cacheable SSR shell for every visitor. `AppProviders` checks the session on the client; on a private path such as `/dashboard`, it redirects an anonymous visitor to `/_agent-native/sign-in?return=%2Fdashboard` before mounting private app UI. After sign-in, the visitor returns to `/dashboard`. Pass `isPublicPath` for public/SEO routes, or `sessionBypass` for a surface that authenticates through another scoped mechanism such as an MCP embed token.
|
|
405
405
|
|
|
406
406
|
### Behind the scenes: Google OAuth
|
|
407
407
|
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Doctor (Code Checks)"
|
|
3
|
+
description: "agent-native doctor scans a generated app's source for the framework's security and architecture invariants — the same code-safety guards this monorepo enforces on itself, ported to run against a single app root."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Doctor (Code Checks)
|
|
7
|
+
|
|
8
|
+
The agent can write this app's own source code. `agent-native doctor` is the automated check for that: it scans app source for the framework's security-critical code-safety invariants — the same class of check that lives in this framework's own CI as `scripts/guard-*.mjs` — ported to run against a single generated app instead of the framework's multi-template monorepo layout. It's read-only: doctor never edits your code, it only reports.
|
|
9
|
+
|
|
10
|
+
## Quick start {#quick-start}
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
agent-native doctor
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Every scaffolded app also gets a `pnpm doctor` script that runs the same command:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pnpm doctor
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
A clean run:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
agent-native doctor: /path/to/app
|
|
26
|
+
Guards run: no-drizzle-push, no-unscoped-credentials, no-unscoped-queries, no-env-credentials, db-tool-scoping, no-env-mutation, no-localhost-fallback
|
|
27
|
+
Clean — no findings.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
A run with findings prints one line per finding and exits `1`:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
2 finding(s):
|
|
34
|
+
[no-env-credentials] server/routes/webhook.ts:14 — process.env.STRIPE_KEY read — not a deploy-level allowlisted key. User credentials must be read via resolveCredential(key, { userEmail, orgId }), never process.env.
|
|
35
|
+
[no-unscoped-queries] actions/list-notes.ts:9 — unscoped select on "notes" (drizzle) — add accessFilter/resolveAccess/assertAccess or an explicit ownerEmail/userEmail/orgId filter.
|
|
36
|
+
|
|
37
|
+
agent-native doctor found issues above. Fix them, or add a `// guard:allow-<check> — reason` opt-out with reviewer approval.
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## The seven guards {#guards}
|
|
41
|
+
|
|
42
|
+
v1 ships 7 guards. Each is a pure scan over the app's source tree — `node_modules`, `.git`, `dist`, `build`, and other build-output directories are always skipped.
|
|
43
|
+
|
|
44
|
+
| Guard | What it catches | Why it matters |
|
|
45
|
+
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
46
|
+
| `no-drizzle-push` | `drizzle-kit push` / `drizzle push` wired into a build/deploy script hook (`build`, `install`, `deploy`, `start`, `ci`, `release`, and their `pre`/`post` variants) or a `netlify.toml` build command | `drizzle-kit push` can apply destructive schema changes on every deploy with no review step. Standalone `db:push` scripts are **not** flagged — those are explicit, human-invoked commands, not build hooks. |
|
|
47
|
+
| `no-unscoped-credentials` | `resolveCredential` / `hasCredential` / `saveCredential` / `deleteCredential` called with only one argument | The one-arg form skips the required `{ userEmail, orgId }` context object, so a per-user credential lookup can read (or delete) another tenant's credential. |
|
|
48
|
+
| `no-unscoped-queries` | A query in `actions/` or `server/` against a table built with `...ownableColumns()`, with no `accessFilter` / `resolveAccess` / `assertAccess` and no explicit `ownerEmail` / `userEmail` / `orgId` filter anywhere in the enclosing block | An unscoped `select`/`update`/`delete`/`insert` on a shared table returns or mutates another user's rows. Also flags a `mentionProviders` search closure that queries an ownable table without access control — every user who types `@` in chat would otherwise see rows owned by others. |
|
|
49
|
+
| `no-env-credentials` | Any `process.env.<KEY>` read whose key isn't on the fixed deploy-var allowlist (`DATABASE_URL`, `BETTER_AUTH_SECRET`, `NODE_ENV`, …), plus any dynamic `process.env[key]` read | `process.env` is one shared value per deployment, read on every signed-in user's request — reading a per-user credential from it pools every tenant onto the same secret. A dynamic key can never be safely allowlisted. |
|
|
50
|
+
| `db-tool-scoping` | A table in `server/db/schema.ts` with no `owner_email` / `org_id` column and no matching entry in `agent-native.json`'s `doctor.dbToolScopingDenylist` | The agent's raw `db-query` / `db-exec` / `db-patch` tools can only safely expose tenant-scoped tables; an unscoped table needs an explicit, reviewed exception. |
|
|
51
|
+
| `no-env-mutation` | Production code assigning to, or `delete`-ing, `process.env.KEY` | `process.env` is process-scoped, not request-scoped. A warm serverless container handles many concurrent requests in one process, so mutating `process.env` in a request handler leaks state across users. Use `runWithRequestContext` instead. |
|
|
52
|
+
| `no-localhost-fallback` | The literal `"local@localhost"`, or `?? DEV_MODE_USER_EMAIL` / `\|\| DEV_MODE_USER_EMAIL`, used as a fallback identity | Falling back to a sentinel identity when there's no session pools every unauthenticated request onto one shared tenant. Throw or return 401 instead. |
|
|
53
|
+
|
|
54
|
+
Guard names are stable identifiers — the same strings work in `--only`, `agent-native.json`'s `doctor.disabledGuards`, and every finding's `guard` field.
|
|
55
|
+
|
|
56
|
+
## Flags and exit codes {#flags}
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
agent-native doctor Scan app source for security-critical guard violations
|
|
60
|
+
agent-native doctor --json Machine-readable report: { ok, findings, guardsRun, strict }
|
|
61
|
+
agent-native doctor --only <guard,guard> Run only the named guard(s)
|
|
62
|
+
agent-native doctor --strict Escalate findings to a hard failure when used by `agent-native build --strict`
|
|
63
|
+
agent-native doctor --cwd <dir> Run against a project root other than the current directory
|
|
64
|
+
agent-native doctor --fix Not implemented in this version
|
|
65
|
+
agent-native doctor --help Show this help
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- `--only` takes a comma-separated list of guard names from the table above, e.g. `--only no-env-credentials,no-env-mutation`. An unknown name exits `2` with a usage error before any scan runs.
|
|
69
|
+
- `--strict`, on the standalone `agent-native doctor` command, only tags the `--json` output's `strict` field — the command already exits `1` on any finding whether or not `--strict` is passed. It matters when `agent-native build --strict` runs doctor as a pre-step; see [The build hook](#build-hook).
|
|
70
|
+
- `--fix` is reserved for a future version. Passing it today prints an error and exits `2` instead of silently doing nothing, so a script that already passes `--fix` fails loudly rather than getting a false "clean."
|
|
71
|
+
|
|
72
|
+
Exit codes: **`0`** clean, **`1`** findings present, **`2`** usage or execution error (a bad `--cwd`, an unknown `--only` guard, or `--fix`).
|
|
73
|
+
|
|
74
|
+
## The build hook {#build-hook}
|
|
75
|
+
|
|
76
|
+
`agent-native build` always runs doctor as a pre-step before the real build. It's **warn-only by default**: findings print to stderr prefixed `[doctor]`, and the build continues. It only turns findings into a hard failure — `process.exit(1)` before the build runs — when:
|
|
77
|
+
|
|
78
|
+
- `agent-native build --strict` was passed, or
|
|
79
|
+
- `agent-native.json` sets `{ "doctor": { "failOnBuild": true } }`.
|
|
80
|
+
|
|
81
|
+
If the doctor pre-step itself throws — an unreadable file, a bug in a guard — the build step catches it, logs a warning, and continues. A doctor bug never blocks a deploy on its own.
|
|
82
|
+
|
|
83
|
+
## Per-app configuration {#config}
|
|
84
|
+
|
|
85
|
+
`agent-native.json`'s optional `"doctor"` key. Every field is optional with an empty/false default, so a fresh app runs every v1 guard with zero config:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"doctor": {
|
|
90
|
+
"disabledGuards": ["no-drizzle-push"],
|
|
91
|
+
"dbToolScopingDenylist": {
|
|
92
|
+
"legacy_import_log": "Write-only ingestion table, no per-user reads — reviewed 2026-06-01."
|
|
93
|
+
},
|
|
94
|
+
"failOnBuild": true
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
| Key | Type | Effect |
|
|
100
|
+
| ----------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
101
|
+
| `disabledGuards` | `string[]` | Guard names (from the table above) to skip — excluded from the default run and from the build hook. An explicit `--only` list overrides this and runs even a disabled guard. |
|
|
102
|
+
| `dbToolScopingDenylist` | `Record<table, reason>` | Bare table name (the SQL name, not template-prefixed) → reviewer-readable reason. Used only by `db-tool-scoping`. A denylist entry with no matching table in `server/db/schema.ts` itself becomes a finding — "stale … entry — remove it." |
|
|
103
|
+
| `failOnBuild` | `boolean` | See [The build hook](#build-hook). Default `false`. |
|
|
104
|
+
|
|
105
|
+
## Opt-out markers {#opt-out}
|
|
106
|
+
|
|
107
|
+
Five of the seven guards support a per-line comment marker with a required short reason after an em dash or hyphen:
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
// guard:allow-unscoped-credential — support tool reads any user's key by design, gated on admin role
|
|
111
|
+
const key = resolveCredential("stripe_secret");
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
| Guard | Marker | Placement |
|
|
115
|
+
| ------------------------- | --------------------------------------------- | ----------------------------------------------------------------------------------------- |
|
|
116
|
+
| `no-unscoped-credentials` | `// guard:allow-unscoped-credential — reason` | Same line as the call |
|
|
117
|
+
| `no-unscoped-queries` | `// guard:allow-unscoped — reason` | Anywhere in the enclosing block, or in the file's first 30 lines for a whole-file opt-out |
|
|
118
|
+
| `no-env-credentials` | `// guard:allow-env-credential — reason` | Same line, or the line immediately above |
|
|
119
|
+
| `no-env-mutation` | `// guard:allow-env-mutation — reason` | Same line, or the line immediately above |
|
|
120
|
+
| `no-localhost-fallback` | `// guard:allow-localhost-fallback — reason` | Same line, or the line immediately above |
|
|
121
|
+
|
|
122
|
+
`no-drizzle-push` has no opt-out marker — remove the forbidden script instead. `db-tool-scoping` doesn't use a code comment at all; add the table to `agent-native.json`'s `doctor.dbToolScopingDenylist` with a reason (above).
|
|
123
|
+
|
|
124
|
+
A reason is required: `no-unscoped-credentials`, `no-env-credentials`, `no-env-mutation`, and `no-localhost-fallback` all reject a marker with no text after the dash — for `no-env-credentials` specifically, a reasonless marker still reports as an "opt-out invalid" finding rather than being silently accepted. `no-unscoped-queries`'s marker doesn't syntactically enforce a reason, but every opt-out should still carry one for the next reviewer.
|
|
125
|
+
|
|
126
|
+
## JSON output for CI {#json-output}
|
|
127
|
+
|
|
128
|
+
The actual `--json` payload also carries a `strict` field reflecting whether `--strict` was passed (the `--help` summary line above omits it for brevity):
|
|
129
|
+
|
|
130
|
+
```json
|
|
131
|
+
{
|
|
132
|
+
"ok": false,
|
|
133
|
+
"findings": [
|
|
134
|
+
{
|
|
135
|
+
"guard": "no-env-mutation",
|
|
136
|
+
"file": "server/middleware/auth.ts",
|
|
137
|
+
"line": 22,
|
|
138
|
+
"message": "process.env mutated in production code: process.env.AGENT_USER_EMAIL = userEmail. process.env is process-scoped, not request-scoped — use runWithRequestContext instead."
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
"guardsRun": [
|
|
142
|
+
"no-drizzle-push",
|
|
143
|
+
"no-unscoped-credentials",
|
|
144
|
+
"no-unscoped-queries",
|
|
145
|
+
"no-env-credentials",
|
|
146
|
+
"db-tool-scoping",
|
|
147
|
+
"no-env-mutation",
|
|
148
|
+
"no-localhost-fallback"
|
|
149
|
+
],
|
|
150
|
+
"strict": false
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
`ok` is `true` only when `findings` is empty. `guardsRun` lists every guard that actually ran (after `--only` / `disabledGuards` filtering) — useful for confirming a guard wasn't silently skipped.
|
|
155
|
+
|
|
156
|
+
The JSON report always writes to **stdout**, whether the run is clean or has findings — the exit code (`0` clean, `1` findings present) is the signal for pass/fail, not which stream the report landed on. A plain `agent-native doctor --json > report.json` captures the full report in every case, including a non-clean run; no stream redirection tricks needed. (Usage/execution errors — a bad `--cwd`, an unknown `--only` guard — still print their own JSON error payload to stderr and exit `2`; those aren't the report.)
|
|
157
|
+
|
|
158
|
+
## Doctor vs. upgrade check vs. recap doctor {#relationship}
|
|
159
|
+
|
|
160
|
+
`agent-native doctor` is one of three "doctor"-shaped commands in the CLI, each diagnosing a different domain — none are folded into a shared mega-doctor:
|
|
161
|
+
|
|
162
|
+
- **`agent-native doctor`** (this page) — source-code safety invariants: data scoping, credential handling, environment-variable usage.
|
|
163
|
+
- **`agent-native upgrade check`** — dependency-pin health: stale `@agent-native/*` pins, framework overrides/patches.
|
|
164
|
+
- **`agent-native recap doctor`** — PR Visual Recap configuration health.
|
|
165
|
+
|
|
166
|
+
## What's next
|
|
167
|
+
|
|
168
|
+
- [**Security & Data Scoping**](/docs/security) — the `ownableColumns()` / access-guard model that `no-unscoped-queries` and `db-tool-scoping` enforce
|
|
169
|
+
- [**Audit Log**](/docs/audit-log) — the durable record of who changed what, for after a mutation lands
|
|
170
|
+
- [**Deployment**](/docs/deployment) — where `agent-native build` and `agent-native.json` fit into shipping
|
|
@@ -137,7 +137,7 @@ snapshot until you refresh/review it again, so rescan the connector after MCP
|
|
|
137
137
|
tool or MCP App metadata changes. If you still have old per-app connectors
|
|
138
138
|
enabled alongside Dispatch, refresh or reconnect each stale connector; updating
|
|
139
139
|
Dispatch does not rewrite ChatGPT or Claude's cached Calendar/Mail/etc.
|
|
140
|
-
snapshots. The `mcp:read` / `mcp:write` / `mcp:apps` scopes are the same ones
|
|
140
|
+
snapshots. The `mcp:read` / `mcp:write` / `mcp:apps` / `offline_access` scopes are the same ones
|
|
141
141
|
covered in [Standard remote MCP OAuth](#standard-oauth) below.
|
|
142
142
|
|
|
143
143
|
Cursor, Goose, Postman, MCPJam, and VS Code GitHub Copilot use the same remote
|
|
@@ -284,13 +284,14 @@ The OAuth flow is authorization-code + PKCE with refresh-token rotation. Access
|
|
|
284
284
|
|
|
285
285
|
Current scopes are:
|
|
286
286
|
|
|
287
|
-
| Scope
|
|
288
|
-
|
|
|
289
|
-
| `mcp:read`
|
|
290
|
-
| `mcp:write`
|
|
291
|
-
| `mcp:apps`
|
|
287
|
+
| Scope | Allows |
|
|
288
|
+
| ---------------- | ------------------------------------------------------------------------- |
|
|
289
|
+
| `mcp:read` | read-only MCP actions and ordinary tool/resource discovery |
|
|
290
|
+
| `mcp:write` | mutating actions and the `ask-agent` meta-tool |
|
|
291
|
+
| `mcp:apps` | MCP Apps resource listing/reading and inline UI rendering where supported |
|
|
292
|
+
| `offline_access` | refresh-token access so compatible hosts can stay connected |
|
|
292
293
|
|
|
293
|
-
When the client requests no explicit scope, the app grants all
|
|
294
|
+
When the client requests no explicit scope, the app grants all four so the connector behaves like the browser-authorized Connect flow and can refresh access without another sign-in. Keep the bearer-token Connect page and `npx @agent-native/core@latest connect --token <token>` fallback around for local dev, fallback hosts, and clients where you need a ready-to-paste config block.
|
|
294
295
|
|
|
295
296
|
## Catalog tiers {#catalog-tiers}
|
|
296
297
|
|
|
@@ -283,7 +283,7 @@ https://mail.agent-native.com/_agent-native/mcp
|
|
|
283
283
|
|
|
284
284
|
</Diagram>
|
|
285
285
|
|
|
286
|
-
يتم توقيع رموز الوصول باستخدام `A2A_SECRET` عند تعيينها، وإلا مع `BETTER_AUTH_SECRET`. وهي تحمل هوية المستخدم/المؤسسة الموقعة ونطاقات `mcp:read` و/أو `mcp:write` و/أو `mcp:apps`، وهي مرتبطة بالجمهور بمورد MCP الدقيق URL. يتم تخزين رموز التحديث فقط كتجزئة ويتم تدويرها عند كل تحديث. يتم تشغيل استدعاءات الأدوات وقراءات موارد تطبيقات MCP داخل نفس سياق الطلب مثل المستخدم الذي قام بتسجيل الدخول؛ لا يتلقى إطار iframe لتطبيق MCP المضمن رموز OAuth الأولية أبدًا.
|
|
286
|
+
يتم توقيع رموز الوصول باستخدام `A2A_SECRET` عند تعيينها، وإلا مع `BETTER_AUTH_SECRET`. وهي تحمل هوية المستخدم/المؤسسة الموقعة ونطاقات `mcp:read` و/أو `mcp:write` و/أو `mcp:apps` and `offline_access`، وهي مرتبطة بالجمهور بمورد MCP الدقيق URL. يتم تخزين رموز التحديث فقط كتجزئة ويتم تدويرها عند كل تحديث. يتم تشغيل استدعاءات الأدوات وقراءات موارد تطبيقات MCP داخل نفس سياق الطلب مثل المستخدم الذي قام بتسجيل الدخول؛ لا يتلقى إطار iframe لتطبيق MCP المضمن رموز OAuth الأولية أبدًا.
|
|
287
287
|
|
|
288
288
|
يكتب `npx @agent-native/core@latest connect <url> --client claude-code` إدخال URL فقط MCP لهذا التدفق القياسي. بالنسبة للعملاء الذين لا يمكنهم تنفيذ MCP OAuth عن بعد، استخدم صفحة الاتصال أو البديل `npx @agent-native/core@latest connect --token <token>` لكتابة إدخال صريح للرمز المميز للحامل.
|
|
289
289
|
|
|
@@ -400,7 +400,7 @@ function SignInCta() {
|
|
|
400
400
|
|
|
401
401
|
### المسارات الخاصة ذات الإشارات المرجعية
|
|
402
402
|
|
|
403
|
-
|
|
403
|
+
تستخدم صفحات التطبيق العادية غلاف SSR واحدًا عامًا وقابلاً للتخزين المؤقت لجميع الزوار. يتحقق `AppProviders` من الجلسة على العميل؛ وفي مسار خاص مثل `/dashboard` يعيد توجيه الزائر المجهول إلى `/_agent-native/sign-in?return=%2Fdashboard` قبل عرض واجهة التطبيق الخاصة. بعد تسجيل الدخول يعود الزائر إلى `/dashboard`. استخدم `isPublicPath` للمسارات العامة أو مسارات SEO، أو `sessionBypass` لسطح تتم مصادقته بآلية محددة أخرى مثل رمز تضمين MCP.
|
|
404
404
|
|
|
405
405
|
### خلف الكواليس: Google OAuth
|
|
406
406
|
|
|
@@ -136,7 +136,7 @@ ChatGPT: استخدم مساحة عمل حيث توجد موصلات MCP الم
|
|
|
136
136
|
تغييرات البيانات التعريفية لتطبيق MCP. إذا كان لا يزال لديك موصلات قديمة لكل تطبيق
|
|
137
137
|
ممكّن جنبًا إلى جنب مع Dispatch أو تحديث أو إعادة توصيل كل موصل قديم؛ التحديث
|
|
138
138
|
لا يقوم Dispatch بإعادة كتابة تقويم/بريد ChatGPT أو Claude المخزن مؤقتًا/البريد/إلخ.
|
|
139
|
-
لقطات. نطاقات `mcp:read` / `mcp:write` / `mcp:apps` هي نفسها الموضحة في
|
|
139
|
+
لقطات. نطاقات `mcp:read` / `mcp:write` / `mcp:apps` / `offline_access` هي نفسها الموضحة في
|
|
140
140
|
[OAuth القياسي لـ MCP البعيد](#standard-oauth) أدناه.
|
|
141
141
|
|
|
142
142
|
يستخدم كل من Cursor وGoose وPostman وMCPJam وVS Code GitHub Copilot نفس جهاز التحكم عن بعد
|
|
@@ -283,13 +283,14 @@ https://dispatch.agent-native.com/_agent-native/mcp
|
|
|
283
283
|
|
|
284
284
|
النطاقات الحالية هي:
|
|
285
285
|
|
|
286
|
-
| النطاق
|
|
287
|
-
|
|
|
288
|
-
| `mcp:read`
|
|
289
|
-
| `mcp:write`
|
|
290
|
-
| `mcp:apps`
|
|
286
|
+
| النطاق | يسمح |
|
|
287
|
+
| ---------------- | ------------------------------------------------------------------ |
|
|
288
|
+
| `mcp:read` | MCP actions للقراءة فقط واكتشاف الأدوات/الموارد العادية |
|
|
289
|
+
| `mcp:write` | تعديل actions والأداة الوصفية `ask-agent` |
|
|
290
|
+
| `mcp:apps` | قائمة/قراءة موارد تطبيقات MCP وعرض UI المضمن حيثما يكون ذلك متاحًا |
|
|
291
|
+
| `offline_access` | الوصول إلى رمز التحديث حتى يظل المضيف متصلاً |
|
|
291
292
|
|
|
292
|
-
عندما لا يطلب العميل نطاقًا صريحًا، يمنح التطبيق
|
|
293
|
+
عندما لا يطلب العميل نطاقًا صريحًا، يمنح التطبيق النطاقات الأربعة جميعًا بحيث يتصرف الموصل مثل تدفق الاتصال المعتمد من المتصفح ويمكنه تحديث الوصول دون تسجيل دخول آخر. احتفظ بصفحة Connect-token Connect و`npx @agent-native/core@latest connect --token <token>` الاحتياطية للمطورين المحليين والمضيفين الاحتياطيين والعملاء حيث تحتاج إلى كتلة تكوين جاهزة لللصق.
|
|
293
294
|
|
|
294
295
|
## طبقات الكتالوج {#catalog-tiers}
|
|
295
296
|
|
|
@@ -240,7 +240,7 @@ claude mcp add --transport http agent-native https://dispatch.agent-native.com/_
|
|
|
240
240
|
|
|
241
241
|
```http
|
|
242
242
|
HTTP/1.1 401 Unauthorized
|
|
243
|
-
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps"
|
|
243
|
+
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps offline_access"
|
|
244
244
|
```
|
|
245
245
|
|
|
246
246
|
اكتشاف نقاط النهاية:
|
|
@@ -388,6 +388,8 @@ A2A_SECRET=your-shared-secret-at-least-32-chars
|
|
|
388
388
|
- [ ] \*\*لم يتم تعيين `AGENT_NATIVE_KEYS_WORKSPACE_FALLBACK` ما لم تشارك مؤسستك مفاتيح مساحة العمل فعليًا - راجع [Cross-User Tooling Secrets](#tooling-secrets)
|
|
389
389
|
- [ ] في عمليات النشر متعددة المستأجرين، **يحضر المستخدمون `ANTHROPIC_API_KEY`** — يرفض إطار العمل الرجوع إلى env على مستوى النشر var
|
|
390
390
|
|
|
391
|
+
شغّل `agent-native doctor` (أو `pnpm doctor` في تطبيق تم إنشاؤه بالقالب) للتحقق تلقائيًا من عناصر المخطط وبيانات الاعتماد ومتغيرات البيئة في هذه القائمة — يذكر كل اكتشاف اسم الحارس (guard) والملف والسطر. راجع وثائق [Doctor](/docs/doctor).
|
|
392
|
+
|
|
391
393
|
---
|
|
392
394
|
|
|
393
395
|
تغطي الأقسام أدناه علامات البيئة المتخصصة التي تصل إليها فقط في عمليات نشر محددة. معظم التطبيقات لا تلمسها أبدًا.
|
|
@@ -402,7 +402,7 @@ function SignInCta() {
|
|
|
402
402
|
|
|
403
403
|
### Private Pfade mit Lesezeichen versehen
|
|
404
404
|
|
|
405
|
-
|
|
405
|
+
Normale App-Seiten verwenden für alle Besucher dieselbe unpersönliche, öffentlich cachebare SSR-Shell. `AppProviders` prüft die Sitzung im Client und leitet anonyme Besucher auf privaten Pfaden wie `/dashboard` zu `/_agent-native/sign-in?return=%2Fdashboard` weiter, bevor private App-UI gerendert wird. Nach der Anmeldung kehren sie zu `/dashboard` zurück. Verwenden Sie `isPublicPath` für öffentliche/SEO-Routen oder `sessionBypass` für Oberflächen mit einem anderen begrenzten Authentifizierungsmechanismus, etwa einem MCP-Embed-Token.
|
|
406
406
|
|
|
407
407
|
### Hinter den Kulissen: Google OAuth
|
|
408
408
|
|
|
@@ -136,7 +136,7 @@ Snapshot, bis Sie ihn erneut aktualisieren/überprüfen, also scannen Sie den Co
|
|
|
136
136
|
Tool- oder MCP-App-Metadatenänderungen. Wenn Sie noch alte Pro-App-Konnektoren haben
|
|
137
137
|
neben Dispatch aktiviert, jeden veralteten Connector aktualisieren oder erneut verbinden; Aktualisierung
|
|
138
138
|
Dispatch schreibt den zwischengespeicherten Kalender/Mail/usw. von ChatGPT oder Claude nicht neu.
|
|
139
|
-
Schnappschüsse. Die Bereiche `mcp:read` / `mcp:write` / `mcp:apps` sind
|
|
139
|
+
Schnappschüsse. Die Bereiche `mcp:read` / `mcp:write` / `mcp:apps` / `offline_access` sind
|
|
140
140
|
dieselben, die unten unter [Standard-OAuth für Remote-MCP](#standard-oauth)
|
|
141
141
|
beschrieben werden.
|
|
142
142
|
|
|
@@ -284,13 +284,14 @@ Der OAuth-Fluss besteht aus Autorisierungscode + PKCE mit Aktualisierungstokenro
|
|
|
284
284
|
|
|
285
285
|
Aktuelle Bereiche sind:
|
|
286
286
|
|
|
287
|
-
| Geltungsbereich
|
|
288
|
-
|
|
|
289
|
-
| `mcp:read`
|
|
290
|
-
| `mcp:write`
|
|
291
|
-
| `mcp:apps`
|
|
287
|
+
| Geltungsbereich | Erlaubt |
|
|
288
|
+
| ---------------- | ----------------------------------------------------------------------------------- |
|
|
289
|
+
| `mcp:read` | schreibgeschützt MCP actions und normale Tool-/Ressourcenerkennung |
|
|
290
|
+
| `mcp:write` | Mutation von actions und dem Meta-Tool `ask-agent` |
|
|
291
|
+
| `mcp:apps` | MCP Auflisten/Lesen von Apps-Ressourcen und Inline-UI-Rendering, sofern unterstützt |
|
|
292
|
+
| `offline_access` | Aktualisierungstokenzugriff, damit der Host verbunden bleibt |
|
|
292
293
|
|
|
293
|
-
Wenn der Client keinen expliziten Bereich anfordert, gewährt die App alle
|
|
294
|
+
Wenn der Client keinen expliziten Bereich anfordert, gewährt die App alle vier, sodass sich der Connector wie der vom Browser autorisierte Connect-Flow verhält und den Zugriff ohne erneute Anmeldung aktualisieren kann. Behalten Sie die Bearer-Token-Connect-Seite und den `npx @agent-native/core@latest connect --token <token>`-Fallback für lokale Entwickler, Fallback-Hosts und Clients bei, bei denen Sie einen sofort einfügbaren Konfigurationsblock benötigen.
|
|
294
295
|
|
|
295
296
|
## Katalogstufen {#catalog-tiers}
|
|
296
297
|
|
|
@@ -240,7 +240,7 @@ Die erste nicht authentifizierte MCP-Anfrage erhält:
|
|
|
240
240
|
|
|
241
241
|
```http
|
|
242
242
|
HTTP/1.1 401 Unauthorized
|
|
243
|
-
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps"
|
|
243
|
+
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps offline_access"
|
|
244
244
|
```
|
|
245
245
|
|
|
246
246
|
Erkennungsendpunkte:
|
|
@@ -390,6 +390,8 @@ Dies war zuvor eine „Warnen und Akzeptieren“-Haltung – legen Sie das Gehei
|
|
|
390
390
|
- [ ] `AGENT_NATIVE_KEYS_WORKSPACE_FALLBACK` ist **nicht** festgelegt, es sei denn, Ihre Organisation teilt tatsächlich Arbeitsbereichsschlüssel – siehe [Cross-User Tooling Secrets](#tooling-secrets)
|
|
391
391
|
- [ ] In mandantenfähigen Bereitstellungen **bringen Benutzer ihr eigenes `ANTHROPIC_API_KEY` mit** – das Framework weigert sich, auf die Umgebungsvariable auf Bereitstellungsebene zurückzugreifen
|
|
392
392
|
|
|
393
|
+
Führen Sie `agent-native doctor` aus (`pnpm doctor` in einer gescaffoldeten App), um die Schema-, Credential- und Umgebungsvariablen-Punkte dieser Checkliste automatisch zu prüfen – jeder Befund nennt Guard, Datei und Zeile. Siehe die [Doctor](/docs/doctor)-Dokumentation.
|
|
394
|
+
|
|
393
395
|
---
|
|
394
396
|
|
|
395
397
|
In den folgenden Abschnitten werden Nischenumgebungsflags behandelt, die Sie nur in bestimmten Bereitstellungen erreichen. Die meisten Apps berühren sie nie.
|
|
@@ -381,7 +381,7 @@ Las plantillas con **páginas públicas** (enlaces compartidos, incrustaciones,
|
|
|
381
381
|
/_agent-native/sign-in?return=<same-origin-path>
|
|
382
382
|
```
|
|
383
383
|
|
|
384
|
-
Cuando un espectador anónimo accede a este URL, se muestra la página de inicio de sesión del marco. Después de un inicio de sesión exitoso (cualquier flujo: token, correo electrónico/contraseña o Google OAuth), el
|
|
384
|
+
Cuando un espectador anónimo accede a este URL, se muestra la página de inicio de sesión del marco. Después de un inicio de sesión exitoso (cualquier flujo: token, correo electrónico/contraseña o Google OAuth), el navegador vuelve a `return`.
|
|
385
385
|
|
|
386
386
|
El parámetro `return` se valida como **ruta del mismo origen**. Las referencias de ruta de red (`//evil.com/...`), los esquemas URL absolutos, `data:`/`javascript:` y los caracteres de control integrados recurren a `/`. La ruta validada se reconstruye a partir del analizador URL, no se repite desde la entrada.
|
|
387
387
|
|
|
@@ -402,7 +402,7 @@ function SignInCta() {
|
|
|
402
402
|
|
|
403
403
|
### Rutas privadas marcadas
|
|
404
404
|
|
|
405
|
-
|
|
405
|
+
Las páginas normales de la aplicación usan una única shell SSR impersonal y almacenable en caché pública para todos los visitantes. `AppProviders` comprueba la sesión en el cliente; en una ruta privada como `/dashboard`, redirige al visitante anónimo a `/_agent-native/sign-in?return=%2Fdashboard` antes de montar la interfaz privada. Tras iniciar sesión, vuelve a `/dashboard`. Usa `isPublicPath` para rutas públicas o de SEO, o `sessionBypass` para una superficie autenticada mediante otro mecanismo limitado, como un token de inserción MCP.
|
|
406
406
|
|
|
407
407
|
### Detrás de escena: Google OAuth
|
|
408
408
|
|
|
@@ -136,7 +136,7 @@ instantánea hasta que la actualices/revises nuevamente, así que vuelve a escan
|
|
|
136
136
|
o de la aplicación MCP. Si todavía tienes conectores antiguos por aplicación
|
|
137
137
|
habilitado junto con Dispatch, actualiza o vuelve a conectar cada conector obsoleto; actualizando
|
|
138
138
|
Dispatch no reescribe el calendario/correo/etc. almacenados en caché de ChatGPT o Claude.
|
|
139
|
-
instantáneas. Los ámbitos `mcp:read` / `mcp:write` / `mcp:apps` son los mismos
|
|
139
|
+
instantáneas. Los ámbitos `mcp:read` / `mcp:write` / `mcp:apps` / `offline_access` son los mismos
|
|
140
140
|
que se explican más abajo en
|
|
141
141
|
[OAuth remoto estándar de MCP](#standard-oauth).
|
|
142
142
|
|
|
@@ -284,13 +284,14 @@ El flujo OAuth es código de autorización + PKCE con rotación de token de actu
|
|
|
284
284
|
|
|
285
285
|
Los alcances actuales son:
|
|
286
286
|
|
|
287
|
-
| Alcance
|
|
288
|
-
|
|
|
289
|
-
| `mcp:read`
|
|
290
|
-
| `mcp:write`
|
|
291
|
-
| `mcp:apps`
|
|
287
|
+
| Alcance | Permite |
|
|
288
|
+
| ---------------- | -------------------------------------------------------------------------------------------------- |
|
|
289
|
+
| `mcp:read` | MCP actions de solo lectura y descubrimiento de herramientas/recursos ordinarios |
|
|
290
|
+
| `mcp:write` | mutando actions y la metaherramienta `ask-agent` |
|
|
291
|
+
| `mcp:apps` | Lista/lectura de recursos de aplicaciones MCP y representación en línea de UI donde sea compatible |
|
|
292
|
+
| `offline_access` | Acceso al token de actualización para que el host permanezca conectado |
|
|
292
293
|
|
|
293
|
-
Cuando el cliente no solicita ningún alcance explícito, la aplicación concede los
|
|
294
|
+
Cuando el cliente no solicita ningún alcance explícito, la aplicación concede los cuatro para que el conector se comporte como el flujo de Connect autorizado por el navegador y pueda actualizar el acceso sin otro inicio de sesión. Mantenga la página de conexión del token de portador y el respaldo `npx @agent-native/core@latest connect --token <token>` para desarrolladores locales, hosts de respaldo y clientes donde necesite un bloque de configuración listo para pegar.
|
|
294
295
|
|
|
295
296
|
## Niveles del catálogo {#catalog-tiers}
|
|
296
297
|
|
|
@@ -240,7 +240,7 @@ La primera solicitud MCP no autenticada recibe:
|
|
|
240
240
|
|
|
241
241
|
```http
|
|
242
242
|
HTTP/1.1 401 Unauthorized
|
|
243
|
-
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps"
|
|
243
|
+
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps offline_access"
|
|
244
244
|
```
|
|
245
245
|
|
|
246
246
|
Puntos finales de descubrimiento:
|
|
@@ -390,6 +390,8 @@ Esta era anteriormente una postura de "advertir y aceptar": establezca el secret
|
|
|
390
390
|
- [ ] `AGENT_NATIVE_KEYS_WORKSPACE_FALLBACK` **no** está configurado a menos que su organización realmente comparta claves de espacio de trabajo; consulte [Cross-User Tooling Secrets](#tooling-secrets)
|
|
391
391
|
- [ ] En implementaciones multiinquilino, **los usuarios traen su propio `ANTHROPIC_API_KEY`**: el marco se niega a recurrir a la var de entorno de nivel de implementación
|
|
392
392
|
|
|
393
|
+
Ejecuta `agent-native doctor` (`pnpm doctor` en una app generada con el scaffold) para comprobar automáticamente los elementos de esquema, credenciales y variables de entorno de esta lista de verificación — cada hallazgo indica el guard, el archivo y la línea. Consulta la documentación de [Doctor](/docs/doctor).
|
|
394
|
+
|
|
393
395
|
---
|
|
394
396
|
|
|
395
397
|
Las secciones siguientes cubren indicadores de entornos especializados que solo utiliza en implementaciones específicas. La mayoría de las aplicaciones nunca los tocan.
|
|
@@ -402,7 +402,7 @@ function SignInCta() {
|
|
|
402
402
|
|
|
403
403
|
### Chemins privés marqués
|
|
404
404
|
|
|
405
|
-
|
|
405
|
+
Les pages normales de l’application utilisent une seule coque SSR impersonnelle et mise en cache publiquement pour tous les visiteurs. `AppProviders` vérifie la session côté client ; sur un chemin privé tel que `/dashboard`, il redirige un visiteur anonyme vers `/_agent-native/sign-in?return=%2Fdashboard` avant de monter l’interface privée. Après connexion, le visiteur revient sur `/dashboard`. Utilisez `isPublicPath` pour les routes publiques/SEO, ou `sessionBypass` pour une surface authentifiée par un autre mécanisme limité, tel qu’un jeton d’intégration MCP.
|
|
406
406
|
|
|
407
407
|
### Dans les coulisses : Google OAuth
|
|
408
408
|
|
|
@@ -136,7 +136,7 @@ instantané jusqu'à ce que vous l'actualisiez/le révisiez à nouveau, donc ana
|
|
|
136
136
|
ou de l'application MCP. Si vous disposez encore d'anciens connecteurs par application
|
|
137
137
|
activé avec Dispatch, actualisez ou reconnectez chaque connecteur obsolète ; mise à jour
|
|
138
138
|
Dispatch ne réécrit pas le calendrier/courrier/etc mis en cache de ChatGPT ou Claude.
|
|
139
|
-
instantanés. Les portées `mcp:read` / `mcp:write` / `mcp:apps` sont les mêmes
|
|
139
|
+
instantanés. Les portées `mcp:read` / `mcp:write` / `mcp:apps` / `offline_access` sont les mêmes
|
|
140
140
|
que celles décrites plus bas dans
|
|
141
141
|
[OAuth MCP distant standard](#standard-oauth).
|
|
142
142
|
|
|
@@ -284,13 +284,14 @@ Le flux OAuth est le code d'autorisation + PKCE avec rotation du jeton d'actuali
|
|
|
284
284
|
|
|
285
285
|
Les champs d'application actuels sont les suivants :
|
|
286
286
|
|
|
287
|
-
| Portée
|
|
288
|
-
|
|
|
289
|
-
| `mcp:read`
|
|
290
|
-
| `mcp:write`
|
|
291
|
-
| `mcp:apps`
|
|
287
|
+
| Portée | Autorise |
|
|
288
|
+
| ---------------- | --------------------------------------------------------------------------------------------- |
|
|
289
|
+
| `mcp:read` | MCP actions en lecture seule et découverte d'outils/ressources ordinaires |
|
|
290
|
+
| `mcp:write` | mutation de actions et du méta-outil `ask-agent` |
|
|
291
|
+
| `mcp:apps` | Liste/lecture des ressources des applications MCP et rendu UI en ligne lorsque pris en charge |
|
|
292
|
+
| `offline_access` | Accès au jeton d'actualisation afin que l'hôte reste connecté |
|
|
292
293
|
|
|
293
|
-
Lorsque le client ne demande aucune portée explicite, l'application accorde les
|
|
294
|
+
Lorsque le client ne demande aucune portée explicite, l'application accorde les quatre afin que le connecteur se comporte comme le flux Connect autorisé par le navigateur et puisse actualiser l'accès sans nouvelle connexion. Conservez la page de connexion du jeton de porteur et la solution de secours `npx @agent-native/core@latest connect --token <token>` pour les développeurs locaux, les hôtes de secours et les clients pour lesquels vous avez besoin d'un bloc de configuration prêt à coller.
|
|
294
295
|
|
|
295
296
|
## Niveaux du catalogue {#catalog-tiers}
|
|
296
297
|
|
|
@@ -240,7 +240,7 @@ La première requête MCP non authentifiée reçoit :
|
|
|
240
240
|
|
|
241
241
|
```http
|
|
242
242
|
HTTP/1.1 401 Unauthorized
|
|
243
|
-
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps"
|
|
243
|
+
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps offline_access"
|
|
244
244
|
```
|
|
245
245
|
|
|
246
246
|
Points de terminaison de découverte :
|
|
@@ -390,6 +390,8 @@ Il s'agissait auparavant d'une position « avertir et accepter » : définiss
|
|
|
390
390
|
- [ ] `AGENT_NATIVE_KEYS_WORKSPACE_FALLBACK` n'est **pas** défini, sauf si votre organisation partage réellement des clés d'espace de travail – voir [Cross-User Tooling Secrets](#tooling-secrets)
|
|
391
391
|
- [ ] Dans les déploiements multi-locataires, **les utilisateurs apportent leur propre `ANTHROPIC_API_KEY`** — le framework refuse de recourir à la variable d'environnement au niveau du déploiement
|
|
392
392
|
|
|
393
|
+
Exécutez `agent-native doctor` (`pnpm doctor` dans une application générée) pour vérifier automatiquement les éléments de schéma, d'identifiants et de variables d'environnement de cette liste de contrôle — chaque résultat indique le guard, le fichier et la ligne. Consultez la documentation [Doctor](/docs/doctor).
|
|
394
|
+
|
|
393
395
|
---
|
|
394
396
|
|
|
395
397
|
Les sections ci-dessous couvrent les indicateurs d'environnement de niche que vous n'utilisez que dans des déploiements spécifiques. La plupart des applications n'y touchent jamais.
|
|
@@ -381,7 +381,7 @@ function MyComponent() {
|
|
|
381
381
|
/_agent-native/sign-in?return=<same-origin-path>
|
|
382
382
|
```
|
|
383
383
|
|
|
384
|
-
जब कोई गुमनाम दर्शक इस URL पर क्लिक करता है, तो फ्रेमवर्क का लॉगिन पेज प्रस्तुत किया जाता है। सफल साइन-इन (कोई भी प्रवाह - टोकन, ईमेल/पासवर्ड, या Google OAuth) के बाद,
|
|
384
|
+
जब कोई गुमनाम दर्शक इस URL पर क्लिक करता है, तो फ्रेमवर्क का लॉगिन पेज प्रस्तुत किया जाता है। सफल साइन-इन (कोई भी प्रवाह - टोकन, ईमेल/पासवर्ड, या Google OAuth) के बाद, ब्राउज़र `return` पर वापस जाता है।
|
|
385
385
|
|
|
386
386
|
`return` पैरामीटर को **समान मूल पथ** के रूप में मान्य किया गया है। नेटवर्क-पथ संदर्भ (`//evil.com/...`), निरपेक्ष URLs, `data:` / `javascript:` योजनाएं, और एम्बेडेड नियंत्रण वर्ण सभी `/` पर वापस आते हैं। मान्य पथ को URL पार्सर से पुनर्निर्मित किया गया है, इनपुट से वापस प्रतिध्वनित नहीं किया गया है।
|
|
387
387
|
|
|
@@ -402,7 +402,7 @@ function SignInCta() {
|
|
|
402
402
|
|
|
403
403
|
### निजी पथ बुकमार्क किए गए
|
|
404
404
|
|
|
405
|
-
|
|
405
|
+
सामान्य ऐप पेज हर विज़िटर के लिए एक ही गैर-व्यक्तिगत, सार्वजनिक रूप से कैश होने वाला SSR शेल उपयोग करते हैं। `AppProviders` क्लाइंट पर सेशन जाँचता है; `/dashboard` जैसे निजी पथ पर यह निजी ऐप UI माउंट करने से पहले अनाम विज़िटर को `/_agent-native/sign-in?return=%2Fdashboard` पर रीडायरेक्ट करता है। साइन-इन के बाद विज़िटर `/dashboard` पर लौटता है। सार्वजनिक/SEO रूट के लिए `isPublicPath`, या MCP एम्बेड टोकन जैसी किसी अन्य सीमित प्रमाणीकरण विधि वाले सतह के लिए `sessionBypass` उपयोग करें।
|
|
406
406
|
|
|
407
407
|
### पर्दे के पीछे: Google OAuth
|
|
408
408
|
|
|
@@ -136,7 +136,7 @@ OAuth टोकन। ChatGPT एक समीक्षा की गई या
|
|
|
136
136
|
टूल या MCP ऐप मेटाडेटा बदलता है। यदि आपके पास अभी भी पुराने प्रति-ऐप कनेक्टर हैं
|
|
137
137
|
प्रत्येक पुराने कनेक्टर को डिस्पैच, रिफ्रेश या पुनः कनेक्ट करने के साथ सक्षम; अपडेट किया जा रहा है
|
|
138
138
|
डिस्पैच ChatGPT या Claude के कैश्ड कैलेंडर/मेल/आदि को दोबारा नहीं लिखता है।
|
|
139
|
-
स्नैपशॉट. `mcp:read` / `mcp:write` / `mcp:apps` स्कोप वही हैं जिनका वर्णन
|
|
139
|
+
स्नैपशॉट. `mcp:read` / `mcp:write` / `mcp:apps` / `offline_access` स्कोप वही हैं जिनका वर्णन
|
|
140
140
|
नीचे [मानक रिमोट MCP OAuth](#standard-oauth) में किया गया है।
|
|
141
141
|
|
|
142
142
|
कर्सर, गूज़, पोस्टमैन, MCPJam, और VS कोड GitHub कोपायलट एक ही रिमोट का उपयोग करते हैं
|
|
@@ -283,13 +283,14 @@ OAuth प्रवाह ताज़ा-टोकन रोटेशन के
|
|
|
283
283
|
|
|
284
284
|
वर्तमान दायरे हैं:
|
|
285
285
|
|
|
286
|
-
| दायरा
|
|
287
|
-
|
|
|
288
|
-
| `mcp:read`
|
|
289
|
-
| `mcp:write`
|
|
290
|
-
| `mcp:apps`
|
|
286
|
+
| दायरा | अनुमति देता है |
|
|
287
|
+
| ---------------- | ----------------------------------------------------------------- |
|
|
288
|
+
| `mcp:read` | केवल पढ़ने योग्य MCP actions और सामान्य उपकरण/संसाधन खोज |
|
|
289
|
+
| `mcp:write` | actions और `ask-agent` मेटा-टूल को परिवर्तित करना |
|
|
290
|
+
| `mcp:apps` | MCP ऐप्स संसाधन सूची/रीडिंग और इनलाइन UI रेंडरिंग जहां समर्थित है |
|
|
291
|
+
| `offline_access` | रीफ़्रेश टोकन एक्सेस ताकि होस्ट कनेक्टेड रहे |
|
|
291
292
|
|
|
292
|
-
जब क्लाइंट किसी स्पष्ट दायरे का अनुरोध नहीं करता है, तो ऐप
|
|
293
|
+
जब क्लाइंट किसी स्पष्ट दायरे का अनुरोध नहीं करता है, तो ऐप चारों को अनुदान देता है ताकि कनेक्टर ब्राउज़र-अधिकृत कनेक्ट प्रवाह की तरह व्यवहार करे और दोबारा साइन इन किए बिना एक्सेस रीफ़्रेश कर सके। स्थानीय डेव, फ़ॉलबैक होस्ट और क्लाइंट के लिए बियरर-टोकन कनेक्ट पेज और `npx @agent-native/core@latest connect --token <token>` फ़ॉलबैक रखें, जहां आपको रेडी-टू-पेस्ट कॉन्फ़िगरेशन ब्लॉक की आवश्यकता है।
|
|
293
294
|
|
|
294
295
|
## कैटलॉग स्तर {#catalog-tiers}
|
|
295
296
|
|
|
@@ -240,7 +240,7 @@ claude mcp add --transport http agent-native https://dispatch.agent-native.com/_
|
|
|
240
240
|
|
|
241
241
|
```http
|
|
242
242
|
HTTP/1.1 401 Unauthorized
|
|
243
|
-
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps"
|
|
243
|
+
WWW-Authenticate: Bearer resource_metadata="https://dispatch.agent-native.com/.well-known/oauth-protected-resource", scope="mcp:read mcp:write mcp:apps offline_access"
|
|
244
244
|
```
|
|
245
245
|
|
|
246
246
|
खोज समापन बिंदु:
|