@agent-native/core 0.175.4-nightly-20260826190205 → 0.175.4
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/templates/analytics/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +2 -2
- package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/analytics/CHANGELOG.md +4 -4
- package/corpus/templates/analytics/actions/navigate.ts +1 -1
- package/corpus/templates/analytics/actions/search-analytics-query-catalog.ts +1 -1
- package/corpus/templates/analytics/app/i18n-data.ts +10 -10
- package/corpus/templates/analytics/app/pages/DataSources.tsx +1 -1
- package/corpus/templates/analytics/app/pages/monitoring/errors/IssueList.tsx +1 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +1 -1
- 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 +1 -1
- package/corpus/templates/analytics/changelog/2026-07-11-inferred-message-sentiment-dashboard.md +1 -1
- package/corpus/templates/analytics/changelog/2026-08-07-template-activity-charts-now-show-only-core-agent-native-app.md +1 -1
- package/corpus/templates/analytics/changelog/2026-08-22-fixed-the-agent-native-templates-first-party-dashboard-panel.md +1 -1
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +1 -1
- package/corpus/templates/analytics/scripts/seed-session-replay.ts +1 -1
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +1 -1
- package/corpus/templates/analytics/server/lib/analytics-alerts.ts +2 -2
- package/corpus/templates/assets/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/assets/CHANGELOG.md +1 -1
- package/corpus/templates/assets/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +1 -1
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/brain/RUNBOOK.md +3 -3
- package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/brain/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/brain/CHANGELOG.md +1 -1
- package/corpus/templates/brain/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +1 -1
- package/corpus/templates/brain/evals/slack-pilot-corpus.ts +6 -6
- package/corpus/templates/brain/server/lib/brain-response-guard.ts +1 -1
- package/corpus/templates/calendar/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/calendar/CHANGELOG.md +2 -2
- package/corpus/templates/calendar/changelog/2026-07-06-google-calendar-now-finishes-connecting-correctly-after-sign.md +1 -1
- package/corpus/templates/calendar/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +1 -1
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/chat/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/chat/CHANGELOG.md +1 -1
- package/corpus/templates/chat/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +1 -1
- package/corpus/templates/clips/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/clips/.agents/skills/dictate/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +2 -2
- package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/clips/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/clips/CHANGELOG.md +3 -3
- package/corpus/templates/clips/actions/set-mobile-capture-state.ts +1 -1
- package/corpus/templates/clips/app/lib/capture-permissions.ts +1 -1
- package/corpus/templates/clips/changelog/2026-07-07-the-clips-desktop-download-page-now-uses-the-agent-native-ap.md +1 -1
- package/corpus/templates/clips/changelog/2026-07-17-capture-dictation-background-meeting-audio-and-camera-videos.md +1 -1
- package/corpus/templates/clips/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +1 -1
- package/corpus/templates/clips/desktop/src/lib/rewind-agent-prompt.ts +1 -1
- package/corpus/templates/clips/desktop/src/styles.css +1 -1
- package/corpus/templates/clips/desktop/src-tauri/src/rewind_chapters.rs +1 -1
- package/corpus/templates/clips/server/db/index.ts +1 -1
- package/corpus/templates/content/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/content/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/content/references/local-file-mode.md +2 -2
- package/corpus/templates/content/.agents/skills/content-product-development/SKILL.md +2 -2
- package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/content/CHANGELOG.md +2 -2
- package/corpus/templates/content/actions/_builder-cms-read-client.ts +33 -24
- package/corpus/templates/content/agent-native.app-skill.json +1 -1
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/settings.tsx +3 -3
- package/corpus/templates/content/app/i18n-data.ts +49 -49
- package/corpus/templates/content/app/lib/local-content-source-files.ts +2 -2
- package/corpus/templates/content/changelog/2026-07-18-local-folder-selection-no-longer-invokes-the-unsafe-native-p.md +1 -1
- package/corpus/templates/content/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +1 -1
- package/corpus/templates/content/docs/product/README.md +1 -1
- package/corpus/templates/content/docs/product/architecture.md +2 -2
- package/corpus/templates/content/docs/product/capabilities/content.author.mermaid.md +2 -2
- package/corpus/templates/content/docs/product/capabilities/content.form.shared-engine.md +2 -2
- package/corpus/templates/content/docs/product/encyclopedia.md +2 -2
- package/corpus/templates/content/docs/product/features/content.feature.collect-structured-input.md +2 -2
- package/corpus/templates/content/docs/product/features/content.feature.connect-your-sources.md +1 -1
- package/corpus/templates/content/docs/product/features/content.feature.put-your-organizations-know-how-to-work.md +1 -1
- package/corpus/templates/content/docs/product/features/content.feature.read-and-annotate-anything.md +1 -1
- package/corpus/templates/content/docs/product/features/content.feature.understand-what-your-data-says.md +2 -2
- package/corpus/templates/content/docs/product/features/content.feature.work-on-content-inside-another-application.md +3 -3
- package/corpus/templates/content/docs/product/roadmap.md +12 -12
- package/corpus/templates/content/docs/solutions/2026-08-12-toggle-summary-focus-persistence-shape.md +3 -3
- package/corpus/templates/content/shared/nfm.ts +25 -1
- package/corpus/templates/crm/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/crm/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/crm/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/crm/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/crm/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/crm/DEVELOPING.md +1 -1
- package/corpus/templates/design/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/design/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/design/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +3 -3
- package/corpus/templates/design/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/design/CHANGELOG.md +3 -3
- package/corpus/templates/design/changelog/2026-06-28-editor-app-menus-now-use-an-outline-agent-native-mark-with-b.md +1 -1
- package/corpus/templates/design/changelog/2026-07-27-collapsed-sidebar-keeps-the-agent-native-logo.md +1 -1
- package/corpus/templates/design/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +1 -1
- package/corpus/templates/design/public/manifest.json +1 -1
- package/corpus/templates/dispatch/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/dispatch/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/dispatch/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/dispatch/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/dispatch/AGENTS.md +1 -1
- package/corpus/templates/dispatch/CHANGELOG.md +1 -1
- package/corpus/templates/dispatch/changelog/2026-07-27-thread-debug-accepts-request-run-ids.md +1 -1
- package/corpus/templates/dispatch/shared/feature-flags.ts +1 -1
- package/corpus/templates/factory/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/factory/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/factory/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/factory/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/factory/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/factory/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/factory/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/factory/CHANGELOG.md +1 -1
- package/corpus/templates/factory/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +1 -1
- package/corpus/templates/factory/changelog/2026-08-24-slack-polling-accepts-the-agentnative-bot-handle.md +1 -1
- package/corpus/templates/forms/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/forms/.agents/skills/form-publishing/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/forms/CHANGELOG.md +2 -2
- package/corpus/templates/forms/changelog/2026-06-27-anonymous-feedback-no-longer-shows-internal-agent-native-ano.md +1 -1
- package/corpus/templates/forms/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +1 -1
- package/corpus/templates/forms/server/lib/public-form-ssr.ts +1 -1
- package/corpus/templates/macros/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/macros/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/macros/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/macros/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/plan-source-sync/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/plan/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/plan/CHANGELOG.md +1 -1
- package/corpus/templates/plan/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +1 -1
- package/corpus/templates/slides/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/slides/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/slides/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/slides/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/slides/CHANGELOG.md +1 -1
- package/corpus/templates/slides/actions/export-pptx.ts +1 -1
- package/corpus/templates/slides/changelog/2026-07-31-the-agent-native-logo-stays-visible-when-the-sidebar-is-coll.md +1 -1
- package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/corpus/templates/tasks/.agents/skills/storing-data/SKILL.md +1 -1
- package/corpus/templates/tasks/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/corpus/templates/tasks/CHANGELOG.md +1 -1
- package/corpus/templates/tasks/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +1 -1
- package/corpus/templates/videos/.agents/skills/upgrade-agent-native/SKILL.md +3 -3
- package/dist/a2a/client.d.ts +1 -1
- package/dist/a2a/client.js +1 -1
- package/dist/agent/engine/builder-engine.js +2 -2
- package/dist/agent/harness/hosted.js +1 -1
- package/dist/agent/harness/types.d.ts +3 -3
- package/dist/agent/production-agent.js +2 -2
- package/dist/cli/agent.js +2 -2
- package/dist/cli/app-skill.js +1 -1
- package/dist/cli/clean.js +7 -7
- package/dist/cli/code-agent-connector.js +1 -1
- package/dist/cli/codex-cli-participant.d.ts +1 -1
- package/dist/cli/connect.js +6 -6
- package/dist/cli/create.js +5 -5
- package/dist/cli/design-connect.js +1 -1
- package/dist/cli/portal-workspace.js +1 -1
- package/dist/cli/skills-content/content-skill.d.ts +1 -1
- package/dist/cli/skills-content/content-skill.js +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.js +3 -3
- package/dist/cli/skills-content/help.js +1 -1
- package/dist/cli/skills.d.ts +1 -1
- package/dist/cli/skills.js +8 -8
- package/dist/cli/telemetry.js +1 -1
- package/dist/cli/template-sync.js +1 -1
- package/dist/cli/templates-meta.js +7 -7
- package/dist/cli/upgrade.d.ts +1 -1
- package/dist/cli/upgrade.js +5 -5
- package/dist/client/AboutAgentNativeDialog.js +1 -1
- package/dist/client/AgentNativeFrame.js +1 -1
- package/dist/client/CommandMenu.d.ts +1 -1
- package/dist/client/CommandMenu.js +2 -2
- package/dist/client/EnvironmentBadge.js +2 -2
- package/dist/client/ErrorBoundary.js +1 -1
- package/dist/client/FeedbackButton.d.ts +1 -1
- package/dist/client/PoweredByBadge.d.ts +1 -1
- package/dist/client/PoweredByBadge.js +2 -2
- package/dist/client/agent-chat.d.ts +1 -1
- package/dist/client/analytics.d.ts +1 -1
- package/dist/client/analytics.js +1 -1
- package/dist/client/app-providers.js +3 -3
- package/dist/client/chat/run-recovery.js +1 -1
- package/dist/client/chat/runtime.js +1 -1
- package/dist/client/client-surface.d.ts +1 -1
- package/dist/client/components/CodeRequiredDialog.d.ts +1 -1
- package/dist/client/components/CodeRequiredDialog.js +1 -1
- package/dist/client/error-capture.js +1 -1
- package/dist/client/error-reporting.js +1 -1
- package/dist/client/extensions/portable-extension.js +1 -1
- package/dist/client/i18n.js +2 -2
- package/dist/client/mcp-app-host.js +1 -1
- package/dist/client/mcp-apps/McpAppRenderer.js +1 -1
- package/dist/client/settings/useBuilderStatus.js +1 -1
- package/dist/client/track.d.ts +1 -1
- package/dist/client/track.js +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/connections/catalog.d.ts +1 -1
- package/dist/connections/catalog.js +1 -1
- package/dist/integrations/catalog.d.ts +1 -1
- package/dist/integrations/catalog.js +4 -4
- package/dist/integrations/identity-links-store.d.ts +1 -1
- package/dist/integrations/identity-links-store.js +3 -3
- package/dist/integrations/identity.d.ts +1 -1
- package/dist/integrations/identity.js +2 -2
- package/dist/integrations/installations-store.d.ts +1 -1
- package/dist/integrations/installations-store.js +1 -1
- package/dist/integrations/plugin.js +4 -4
- package/dist/integrations/remote-browser-actions.js +3 -3
- package/dist/integrations/remote-push-delivery.js +1 -1
- package/dist/integrations/slack-manifest.d.ts +4 -4
- package/dist/integrations/slack-manifest.js +4 -4
- package/dist/integrations/slack-oauth.d.ts +2 -2
- package/dist/integrations/slack-oauth.js +2 -2
- package/dist/integrations/webhook-handler.js +1 -1
- package/dist/localization/core-messages/ar-SA.js +2 -2
- package/dist/localization/core-messages/de-DE.js +2 -2
- package/dist/localization/core-messages/en-US.d.ts +2 -2
- package/dist/localization/core-messages/en-US.js +2 -2
- package/dist/localization/core-messages/es-ES.js +2 -2
- package/dist/localization/core-messages/fr-FR.js +2 -2
- package/dist/localization/core-messages/hi-IN.js +2 -2
- package/dist/localization/core-messages/ja-JP.js +2 -2
- package/dist/localization/core-messages/ko-KR.js +2 -2
- package/dist/localization/core-messages/pt-BR.js +2 -2
- package/dist/localization/core-messages/zh-CN.js +2 -2
- package/dist/localization/core-messages/zh-TW.js +2 -2
- package/dist/localization/core-messages.d.ts +2 -2
- package/dist/localization/default-messages.js +6 -6
- package/dist/mcp/builtin-tools.js +3 -2
- package/dist/mcp/embed-app.js +4 -4
- package/dist/mcp/oauth-route.js +2 -2
- package/dist/mcp/stdio.js +1 -1
- package/dist/mcp-client/config.js +1 -1
- package/dist/mcp-client/manager.d.ts +9 -0
- package/dist/mcp-client/manager.js +7 -2
- package/dist/mcp-client/oauth-client.js +1 -1
- package/dist/observability/posthog-ai.d.ts +1 -1
- package/dist/observability/posthog-ai.js +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/onboarding/default-steps.js +3 -3
- package/dist/provider-api/index.js +1 -1
- package/dist/scripts/call-agent.js +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-chat/mcp-options.d.ts +1 -1
- package/dist/server/agent-chat/script-entries.js +1 -1
- package/dist/server/agent-chat-plugin.js +4 -4
- package/dist/server/auth.d.ts +1 -1
- package/dist/server/auth.js +1 -1
- package/dist/server/beta-opt-out-html.js +1 -1
- package/dist/server/builder-browser.js +1 -1
- package/dist/server/core-routes-plugin.js +4 -4
- package/dist/server/credential-provider.js +3 -0
- package/dist/server/deep-link.d.ts +1 -1
- package/dist/server/deep-link.js +1 -1
- package/dist/server/email-template.d.ts +1 -1
- package/dist/server/email-template.js +1 -1
- package/dist/server/email-templates.js +7 -7
- package/dist/server/email.js +1 -1
- package/dist/server/google-auth-mode.d.ts +1 -1
- package/dist/server/google-oauth.d.ts +2 -2
- package/dist/server/google-oauth.js +10 -8
- package/dist/server/onboarding-html.d.ts +1 -1
- package/dist/server/onboarding-html.js +2 -2
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/realtime-voice.js +1 -1
- package/dist/server/security-headers.d.ts +1 -1
- package/dist/server/security-headers.js +1 -1
- package/dist/shared/document-title.js +1 -1
- package/dist/sharing/actions/share-resource.js +1 -1
- package/dist/sharing/registry.d.ts +1 -1
- package/dist/styles/agent-native.css +1 -1
- package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/dist/templates/chat/.agents/skills/storing-data/SKILL.md +1 -1
- package/dist/templates/chat/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/dist/templates/chat/CHANGELOG.md +1 -1
- package/dist/templates/chat/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +1 -1
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/dist/templates/default/.agents/skills/storing-data/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/dist/templates/default/app/i18n/ar-SA.ts +2 -2
- package/dist/templates/default/app/i18n/de-DE.ts +2 -2
- package/dist/templates/default/app/i18n/en-US.ts +2 -2
- package/dist/templates/default/app/i18n/es-ES.ts +2 -2
- package/dist/templates/default/app/i18n/fr-FR.ts +2 -2
- package/dist/templates/default/app/i18n/hi-IN.ts +2 -2
- package/dist/templates/default/app/i18n/ja-JP.ts +2 -2
- package/dist/templates/default/app/i18n/ko-KR.ts +2 -2
- package/dist/templates/default/app/i18n/pt-BR.ts +2 -2
- package/dist/templates/default/app/i18n/zh-CN.ts +2 -2
- package/dist/templates/default/app/i18n/zh-TW.ts +2 -2
- package/dist/templates/default/public/manifest.json +1 -1
- package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/dist/templates/headless/.agents/skills/storing-data/SKILL.md +1 -1
- package/dist/templates/headless/AGENTS.md +6 -6
- package/dist/templates/headless/actions/run.ts +1 -1
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/dist/templates/workspace-core/AGENTS.md +1 -1
- package/dist/templates/workspace-root/AGENTS.md +1 -1
- package/dist/tracking/providers.d.ts +2 -2
- package/dist/tracking/providers.js +5 -5
- package/dist/vite/client.d.ts +1 -1
- package/dist/vite/client.js +1 -1
- package/docs/AGENTS.md +3 -3
- package/docs/SKILL.md +3 -3
- package/docs/content/a2a-protocol.mdx +2 -2
- package/docs/content/actions-overview.mdx +3 -3
- package/docs/content/agent-resources.mdx +4 -2
- package/docs/content/authentication.mdx +4 -2
- package/docs/content/automation-connectors.mdx +5 -5
- package/docs/content/client-data.mdx +1 -1
- package/docs/content/client-overview.mdx +2 -2
- package/docs/content/client-routing.mdx +3 -1
- package/docs/content/cloneable-saas.mdx +5 -5
- package/docs/content/creating-templates.mdx +4 -2
- package/docs/content/cross-app-sso.mdx +4 -2
- package/docs/content/custom-design-system.mdx +9 -9
- package/docs/content/docs-components.mdx +1 -1
- package/docs/content/external-agents-catalog.mdx +2 -2
- package/docs/content/external-agents.mdx +1 -1
- package/docs/content/frames.mdx +3 -3
- package/docs/content/integrations.mdx +1 -1
- package/docs/content/internationalization.mdx +2 -2
- package/docs/content/mcp-clients.mdx +4 -2
- package/docs/content/messaging.mdx +5 -3
- package/docs/content/multi-app-workspace.mdx +3 -1
- package/docs/content/organizations-teams-permissions.mdx +2 -2
- package/docs/content/package-lifecycle.mdx +4 -2
- package/docs/content/plan-plugin.mdx +1 -1
- package/docs/content/pr-visual-recap.mdx +1 -1
- package/docs/content/security.mdx +3 -1
- package/docs/content/server-database.mdx +3 -1
- package/docs/content/server-overview.mdx +6 -4
- package/docs/content/skills-guide.mdx +3 -3
- package/docs/content/template-assets-integrations.mdx +1 -1
- package/docs/content/template-brain-agent.mdx +1 -1
- package/docs/content/template-brain-developers.mdx +1 -1
- package/docs/content/template-calendar-integrations.mdx +1 -1
- package/docs/content/template-clips-ai-and-editing.mdx +1 -1
- package/docs/content/template-clips-capture-everywhere.mdx +1 -1
- package/docs/content/template-content-local-files.mdx +1 -1
- package/docs/content/template-content-sync.mdx +2 -2
- package/docs/content/template-design-collaboration-and-full-apps.mdx +1 -1
- package/docs/content/template-dispatch.mdx +1 -1
- package/docs/content/template-forms-building-publishing.mdx +2 -2
- package/docs/content/template-forms.mdx +3 -1
- package/docs/content/template-plan-local-and-desktop.mdx +3 -3
- package/docs/content/template-plan.mdx +1 -1
- package/docs/content/tracking.mdx +5 -5
- package/docs/content/voice-input.mdx +3 -1
- package/docs/content/webmcp.mdx +2 -0
- package/docs/content/workspace-management.mdx +3 -1
- package/package.json +3 -3
- package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/src/templates/chat/.agents/skills/storing-data/SKILL.md +1 -1
- package/src/templates/chat/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/src/templates/chat/CHANGELOG.md +1 -1
- package/src/templates/chat/changelog/2026-07-31-clicking-the-agent-native-logo-now-toggles-the-app-sidebar.md +1 -1
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/src/templates/default/.agents/skills/storing-data/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +2 -2
- package/src/templates/default/app/i18n/de-DE.ts +2 -2
- package/src/templates/default/app/i18n/en-US.ts +2 -2
- package/src/templates/default/app/i18n/es-ES.ts +2 -2
- package/src/templates/default/app/i18n/fr-FR.ts +2 -2
- package/src/templates/default/app/i18n/hi-IN.ts +2 -2
- package/src/templates/default/app/i18n/ja-JP.ts +2 -2
- package/src/templates/default/app/i18n/ko-KR.ts +2 -2
- package/src/templates/default/app/i18n/pt-BR.ts +2 -2
- package/src/templates/default/app/i18n/zh-CN.ts +2 -2
- package/src/templates/default/app/i18n/zh-TW.ts +2 -2
- package/src/templates/default/public/manifest.json +1 -1
- package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/src/templates/headless/.agents/skills/storing-data/SKILL.md +1 -1
- package/src/templates/headless/AGENTS.md +6 -6
- package/src/templates/headless/actions/run.ts +1 -1
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +3 -3
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +3 -3
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +3 -3
- package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +1 -1
- package/src/templates/workspace-core/AGENTS.md +1 -1
- package/src/templates/workspace-root/AGENTS.md +1 -1
|
@@ -63,7 +63,7 @@ export async function runCodeAgentConnector(options = {}) {
|
|
|
63
63
|
"Agent-Native Code remote connector is not paired.",
|
|
64
64
|
"",
|
|
65
65
|
`Expected device config: ${configPath}`,
|
|
66
|
-
"Pair this device from Agent
|
|
66
|
+
"Pair this device from Agent-Native, or set AGENT_NATIVE_REMOTE_DEVICE_PATH to a JSON file containing a device token.",
|
|
67
67
|
"Then run: agent-native code serve --relay-url <relay-url>",
|
|
68
68
|
"",
|
|
69
69
|
].join("\n"));
|
|
@@ -7,7 +7,7 @@ export interface CodexCliSubscriptionStatus {
|
|
|
7
7
|
authMode?: "ChatGPT" | "API key" | "unknown";
|
|
8
8
|
}
|
|
9
9
|
export interface CodexCliParticipantSession {
|
|
10
|
-
/** Codex owns and interprets this value; Agent
|
|
10
|
+
/** Codex owns and interprets this value; Agent-Native only persists it. */
|
|
11
11
|
resumeSessionId?: string;
|
|
12
12
|
}
|
|
13
13
|
export interface CodexCliParticipantEvent {
|
package/dist/cli/connect.js
CHANGED
|
@@ -316,7 +316,7 @@ function normalizeHostedAppNames(values, apps) {
|
|
|
316
316
|
async function promptForHostedApps(context) {
|
|
317
317
|
const clack = await import("@clack/prompts");
|
|
318
318
|
const result = await clack.multiselect({
|
|
319
|
-
message: "Which Agent
|
|
319
|
+
message: "Which Agent-Native apps do you want to connect?\n" +
|
|
320
320
|
" (all are selected by default; space toggles, enter confirms)",
|
|
321
321
|
options: context.apps.map((app) => ({
|
|
322
322
|
value: app.name,
|
|
@@ -413,7 +413,7 @@ function clientsNotIn(requestedClients, effectiveClients) {
|
|
|
413
413
|
}
|
|
414
414
|
function displayMcpServerName(serverName) {
|
|
415
415
|
if (!serverName)
|
|
416
|
-
return "Agent
|
|
416
|
+
return "Agent-Native MCP";
|
|
417
417
|
if (serverName === "plan")
|
|
418
418
|
return "Plan MCP";
|
|
419
419
|
return `"${serverName}" MCP`;
|
|
@@ -1411,7 +1411,7 @@ async function resolveReconnectTarget(parsed, clients, deps) {
|
|
|
1411
1411
|
const mcpUrl = mcpUrlForBaseUrl(normalizedUrl);
|
|
1412
1412
|
const matches = distinctReconnectEntries(entries.filter((entry) => sameMcpUrl(entry.url, mcpUrl)));
|
|
1413
1413
|
if (matches.length === 0) {
|
|
1414
|
-
logErr(` No existing Agent
|
|
1414
|
+
logErr(` No existing Agent-Native MCP entry found for ${mcpUrl}.`);
|
|
1415
1415
|
logErr(" First-time setup still uses: npx @agent-native/core@latest connect <url> --client <client>");
|
|
1416
1416
|
return null;
|
|
1417
1417
|
}
|
|
@@ -1470,7 +1470,7 @@ async function resolveReconnectTarget(parsed, clients, deps) {
|
|
|
1470
1470
|
byUrl.set(key, bucket);
|
|
1471
1471
|
}
|
|
1472
1472
|
if (byUrl.size === 0) {
|
|
1473
|
-
logErr(" No existing Agent
|
|
1473
|
+
logErr(" No existing Agent-Native MCP entry found to reconnect.");
|
|
1474
1474
|
logErr(" Pass a URL, or use --name <serverName> if the entry has a custom name.");
|
|
1475
1475
|
logErr(" First-time setup still uses: npx @agent-native/core@latest connect <url> --client <client>");
|
|
1476
1476
|
return null;
|
|
@@ -1494,7 +1494,7 @@ async function resolveReconnectTarget(parsed, clients, deps) {
|
|
|
1494
1494
|
if (shouldPrompt(deps)) {
|
|
1495
1495
|
const clack = await import("@clack/prompts");
|
|
1496
1496
|
const result = await clack.select({
|
|
1497
|
-
message: "Multiple Agent
|
|
1497
|
+
message: "Multiple Agent-Native apps found. Which one do you want to reconnect?",
|
|
1498
1498
|
options: urlList.map((u) => {
|
|
1499
1499
|
const representativeEntry = byUrl.get(u)[0];
|
|
1500
1500
|
return {
|
|
@@ -1521,7 +1521,7 @@ async function resolveReconnectTarget(parsed, clients, deps) {
|
|
|
1521
1521
|
clients: uniqueClients(bucket),
|
|
1522
1522
|
};
|
|
1523
1523
|
}
|
|
1524
|
-
logErr(" Found multiple Agent
|
|
1524
|
+
logErr(" Found multiple Agent-Native MCP entries:");
|
|
1525
1525
|
for (const [u, bucket] of byUrl) {
|
|
1526
1526
|
logErr(` ${bucket[0].serverName} → ${u}`);
|
|
1527
1527
|
}
|
package/dist/cli/create.js
CHANGED
|
@@ -132,7 +132,7 @@ const HEADLESS_OPTION = {
|
|
|
132
132
|
const COMMUNITY_OPTION = {
|
|
133
133
|
name: "community",
|
|
134
134
|
label: "Community template",
|
|
135
|
-
hint: "Install a third-party Agent
|
|
135
|
+
hint: "Install a third-party Agent-Native app from a public GitHub repository",
|
|
136
136
|
};
|
|
137
137
|
/**
|
|
138
138
|
* Main entry for `agent-native create [name]`.
|
|
@@ -1170,7 +1170,7 @@ function communityTemplateTrustMessage(selection) {
|
|
|
1170
1170
|
if (!community)
|
|
1171
1171
|
return undefined;
|
|
1172
1172
|
return [
|
|
1173
|
-
`${community.repo} is third-party code and is not reviewed or maintained by Agent
|
|
1173
|
+
`${community.repo} is third-party code and is not reviewed or maintained by Agent-Native.`,
|
|
1174
1174
|
"The CLI downloads source only; it does not install dependencies or run template scripts.",
|
|
1175
1175
|
"Review the generated files before running pnpm install.",
|
|
1176
1176
|
community.ref
|
|
@@ -1958,7 +1958,7 @@ function assertSafeCommunityArchiveListing(listing) {
|
|
|
1958
1958
|
return !isCanonicalAgentSymlinkListing(line);
|
|
1959
1959
|
});
|
|
1960
1960
|
if (unsafeEntry) {
|
|
1961
|
-
throw new ValidationError("Community template archives may only contain Agent
|
|
1961
|
+
throw new ValidationError("Community template archives may only contain Agent-Native's canonical internal symlinks (CLAUDE.md and .claude/skills). Remove other symbolic or hard links and try again.");
|
|
1962
1962
|
}
|
|
1963
1963
|
}
|
|
1964
1964
|
function isCanonicalAgentSymlinkListing(line) {
|
|
@@ -2031,7 +2031,7 @@ function communityTemplateTarballUrl(repo, ref) {
|
|
|
2031
2031
|
function assertCommunityTemplateRoot(targetDir, repo) {
|
|
2032
2032
|
const packagePath = path.join(targetDir, "package.json");
|
|
2033
2033
|
if (!fs.existsSync(packagePath)) {
|
|
2034
|
-
throw new ValidationError(`Community template ${repo} is not an Agent
|
|
2034
|
+
throw new ValidationError(`Community template ${repo} is not an Agent-Native app at the repository root: package.json was not found. Point to a repository whose root is the app.`);
|
|
2035
2035
|
}
|
|
2036
2036
|
let pkg;
|
|
2037
2037
|
try {
|
|
@@ -2051,7 +2051,7 @@ function assertCommunityTemplateRoot(targetDir, repo) {
|
|
|
2051
2051
|
typeof group["@agent-native/core"] ===
|
|
2052
2052
|
"string");
|
|
2053
2053
|
if (!usesAgentNativeCore) {
|
|
2054
|
-
throw new ValidationError(`Community template ${repo} is not an Agent
|
|
2054
|
+
throw new ValidationError(`Community template ${repo} is not an Agent-Native app at the repository root. Its package.json must directly depend on @agent-native/core in dependencies, devDependencies, or peerDependencies.`);
|
|
2055
2055
|
}
|
|
2056
2056
|
}
|
|
2057
2057
|
async function resolveCommunityTemplateSource(stagingDir, selection, options = {}) {
|
|
@@ -1883,7 +1883,7 @@ export async function startDesignConnectBridge(manifest, seedOrOptions) {
|
|
|
1883
1883
|
if (!installsSupportedDesignBridge) {
|
|
1884
1884
|
sendJson(res, 400, {
|
|
1885
1885
|
ok: false,
|
|
1886
|
-
error: "script must install an approved Agent
|
|
1886
|
+
error: "script must install an approved Agent-Native editor or canvas-pan bridge",
|
|
1887
1887
|
});
|
|
1888
1888
|
return;
|
|
1889
1889
|
}
|
|
@@ -83,7 +83,7 @@ export async function createPortalHandoff(input) {
|
|
|
83
83
|
throw gitFailure(added, "Portal could not snapshot local code.");
|
|
84
84
|
}
|
|
85
85
|
const tree = await requiredGitOutput(executeGit, ["write-tree"], repositoryPath, "Portal could not write the local code snapshot.", indexEnv);
|
|
86
|
-
const authorName = (await optionalGitOutput(executeGit, ["config", "--get", "user.name"], repositoryPath)) ?? "Agent
|
|
86
|
+
const authorName = (await optionalGitOutput(executeGit, ["config", "--get", "user.name"], repositoryPath)) ?? "Agent-Native Portal";
|
|
87
87
|
const authorEmail = (await optionalGitOutput(executeGit, ["config", "--get", "user.email"], repositoryPath)) ?? "portal@agent-native.local";
|
|
88
88
|
const committed = await requiredGitOutput(executeGit, ["commit-tree", tree, "-p", head, "-m", `Portal handoff ${handoffId}`], repositoryPath, "Portal could not create the local code snapshot.", {
|
|
89
89
|
...indexEnv,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const CONTENT_SKILL_MD = "---\nname: content\ndescription: >-\n Use Content for repo-backed Markdown/MDX docs, blogs, resources, rich\n document editing, local components, shareable copies, and database-backed\n local-folder sources. Prefer Content actions over raw filesystem writes when\n available.\nmetadata:\n visibility: exported\n---\n\n# Content\n\nUse the Content app when a workflow is about authoring, editing, reviewing, or\npublishing Markdown/MDX documents: docs sites, blogs, resource libraries,\nmarketing pages, internal notes, and local MDX components. Content gives the\nagent a document tree, a rich editor, normal document actions, and optional\nlocal-folder synchronization.\n\n## Choose The Path\n\n- Use Content actions when the Content MCP/action tools are available:\n `list-documents`, `search-documents`, `get-document`,\n `pull-document`, `create-document`, `edit-document`,\n `update-document`, `delete-document`,\n `sync-manifest-local-folder-source`, `sync-local-folder-source`,\n `list-local-component-files`, and `write-local-component-file`.\n- Use `pull-document` or `get-document` before editing a page. Use\n `edit-document` for precise find/replace changes and `update-document`\n for full rewrites or new content.\n- Local folders declared in `agent-native.json` are sources for ordinary\n SQL-backed Content pages. Use the trusted bridge's pull/check/push workflows to\n synchronize them; normal document actions always operate on the database.\n- If Content tools are not visible and no local Content app or Desktop bridge is\n running, treat this skill as repo-editing guidance. Edit configured\n `.md`/`.mdx` files directly, preserve frontmatter and MDX imports, and tell\n the user the Content action surface was not available.\n\n## Action Examples\n\nPrefer JSON input for action calls:\n\n```bash\npnpm action list-documents\npnpm action get-document '{\"id\":\"document-id\"}'\npnpm action edit-document '{\"id\":\"document-id\",\"find\":\"old copy\",\"replace\":\"new copy\"}'\npnpm action update-document '{\"id\":\"document-id\",\"content\":\"# Updated\\n\\nBody\"}'\n```\n\nRun `refresh-list` after create/update/delete operations when you need the\nopen Content UI sidebar to repaint immediately.\n\n## Local Folder Sources\n\nInstall into an existing repo with:\n\n```bash\nnpx @agent-native/core@latest skills add content --mode local-files --scope project\n```\n\nThe installer copies this skill and writes or updates `agent-native.json` with\ndatabase-backed local-folder sources for `docs/`, `blog/`, `content/`, and\n`resources/`, plus a `components/` folder for local MDX components. A trusted\nlocal bridge imports these files into the workspace's canonical Files database.\nRun `sync-manifest-local-folder-source` with a root's generated\n`source.connectionId`, or launch `agent-native content local-files <target>`,\nto connect and pull it. A typical root looks like:\n\n```json\n{\n \"version\": 1,\n \"apps\": {\n \"content\": {\n \"roots\": [\n {\n \"name\": \"Docs\",\n \"path\": \"docs\",\n \"kind\": \"docs\",\n \"extensions\": [\".md\", \".mdx\"],\n \"source\": {\n \"type\": \"local-folder\",\n \"connectionId\": \"local-folder:<opaque-id>\",\n \"truthPolicy\": \"source_primary\"\n }\n }\n ],\n \"components\": \"components\",\n \"extensions\": \"extensions\",\n \"hide\": [\"**/_*.md\", \"**/_*.mdx\"]\n }\n }\n}\n```\n\nLocal-folder synchronization does not make the host language model local, and\nthe hosted Content app cannot read private repo files by itself. File access\nrequires a local Content app, Agent
|
|
1
|
+
export declare const CONTENT_SKILL_MD = "---\nname: content\ndescription: >-\n Use Content for repo-backed Markdown/MDX docs, blogs, resources, rich\n document editing, local components, shareable copies, and database-backed\n local-folder sources. Prefer Content actions over raw filesystem writes when\n available.\nmetadata:\n visibility: exported\n---\n\n# Content\n\nUse the Content app when a workflow is about authoring, editing, reviewing, or\npublishing Markdown/MDX documents: docs sites, blogs, resource libraries,\nmarketing pages, internal notes, and local MDX components. Content gives the\nagent a document tree, a rich editor, normal document actions, and optional\nlocal-folder synchronization.\n\n## Choose The Path\n\n- Use Content actions when the Content MCP/action tools are available:\n `list-documents`, `search-documents`, `get-document`,\n `pull-document`, `create-document`, `edit-document`,\n `update-document`, `delete-document`,\n `sync-manifest-local-folder-source`, `sync-local-folder-source`,\n `list-local-component-files`, and `write-local-component-file`.\n- Use `pull-document` or `get-document` before editing a page. Use\n `edit-document` for precise find/replace changes and `update-document`\n for full rewrites or new content.\n- Local folders declared in `agent-native.json` are sources for ordinary\n SQL-backed Content pages. Use the trusted bridge's pull/check/push workflows to\n synchronize them; normal document actions always operate on the database.\n- If Content tools are not visible and no local Content app or Desktop bridge is\n running, treat this skill as repo-editing guidance. Edit configured\n `.md`/`.mdx` files directly, preserve frontmatter and MDX imports, and tell\n the user the Content action surface was not available.\n\n## Action Examples\n\nPrefer JSON input for action calls:\n\n```bash\npnpm action list-documents\npnpm action get-document '{\"id\":\"document-id\"}'\npnpm action edit-document '{\"id\":\"document-id\",\"find\":\"old copy\",\"replace\":\"new copy\"}'\npnpm action update-document '{\"id\":\"document-id\",\"content\":\"# Updated\\n\\nBody\"}'\n```\n\nRun `refresh-list` after create/update/delete operations when you need the\nopen Content UI sidebar to repaint immediately.\n\n## Local Folder Sources\n\nInstall into an existing repo with:\n\n```bash\nnpx @agent-native/core@latest skills add content --mode local-files --scope project\n```\n\nThe installer copies this skill and writes or updates `agent-native.json` with\ndatabase-backed local-folder sources for `docs/`, `blog/`, `content/`, and\n`resources/`, plus a `components/` folder for local MDX components. A trusted\nlocal bridge imports these files into the workspace's canonical Files database.\nRun `sync-manifest-local-folder-source` with a root's generated\n`source.connectionId`, or launch `agent-native content local-files <target>`,\nto connect and pull it. A typical root looks like:\n\n```json\n{\n \"version\": 1,\n \"apps\": {\n \"content\": {\n \"roots\": [\n {\n \"name\": \"Docs\",\n \"path\": \"docs\",\n \"kind\": \"docs\",\n \"extensions\": [\".md\", \".mdx\"],\n \"source\": {\n \"type\": \"local-folder\",\n \"connectionId\": \"local-folder:<opaque-id>\",\n \"truthPolicy\": \"source_primary\"\n }\n }\n ],\n \"components\": \"components\",\n \"extensions\": \"extensions\",\n \"hide\": [\"**/_*.md\", \"**/_*.mdx\"]\n }\n }\n}\n```\n\nLocal-folder synchronization does not make the host language model local, and\nthe hosted Content app cannot read private repo files by itself. File access\nrequires a local Content app, Agent-Native Desktop, or another trusted bridge.\n\n## MDX And Components\n\n- Preserve frontmatter keys you do not understand. Preserve MDX imports,\n exports, JSX, and expression props unless the user explicitly asks to change\n them.\n- Use local components from the configured `components` folder. Components\n should be PascalCase exports from `.tsx` files; simple editable input metadata\n can live next to them as `ComponentNameInputs`.\n- Use `list-local-component-files` and `write-local-component-file` for\n component source changes when Content tools are available. Otherwise edit the\n component files directly like normal repo source.\n\n## Boundaries\n\n- A database page and its source file can change independently. Use folder\n check/pull/push and resolve reported conflicts rather than silently overwriting\n either revision.\n- Do not push/pull Notion, Builder.io, or other provider-backed content unless\n the user explicitly asks for provider sync.\n- Do not paste secrets, private provider data, or credential-looking values into\n docs, generated pages, frontmatter, examples, or local components.\n";
|
|
@@ -94,7 +94,7 @@ to connect and pull it. A typical root looks like:
|
|
|
94
94
|
|
|
95
95
|
Local-folder synchronization does not make the host language model local, and
|
|
96
96
|
the hosted Content app cannot read private repo files by itself. File access
|
|
97
|
-
requires a local Content app, Agent
|
|
97
|
+
requires a local Content app, Agent-Native Desktop, or another trusted bridge.
|
|
98
98
|
|
|
99
99
|
## MDX And Components
|
|
100
100
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const DESIGN_VISUAL_EDIT_SKILL_MD = "---\nname: visual-edit\ndescription: >-\n Open a running local app in Design overview mode as URL-backed iframe screens\n for visual editing, flow review, duplication, and route-state exploration.\n Use when the user asks to inspect, compare, or edit a real local app visually\n in Design.\nmetadata:\n visibility: exported\n---\n\n# Visual Edit\n\nUse `/visual-edit` when the user wants to inspect or edit a real local app\nvisually instead of generating standalone Alpine HTML. The source of truth is\nthe running localhost app plus its route URLs. Design shows those routes as\niframe-backed screens on the infinite canvas.\n\n## Installing this skill for an external MCP host\n\nThe hosted install path\n(`npx @agent-native/core@latest skills add visual-edit`, or `design` for the\nfull Design bundle) installs the exported instructions and registers the\nhosted Design MCP connector together. The open Skills CLI path\n(`npx skills@latest add BuilderIO/agent-native --skill visual-edit`) installs\nexported instructions only, with no MCP connector registration.\n\n## Put Design Beside The Chat\n\nPrefer the interactive MCP App returned by `open-visual-edit` when the coding\nhost renders it. The user gets the Design canvas beside the conversation, and\n**Apply design updates** can submit the bounded source-edit handoff back to the\ncurrent host conversation through the standard MCP Apps message bridge. The\nhost may ask the user to confirm the current conversation or choose a new one.\n\nOtherwise, `openUrl` is a credential-free, read-only fallback that is safe to\nshow in model text or retain in logs. Do not claim that fallback is editable:\nthe edit capability is intentionally available only to the host-managed MCP App\nlauncher, where it is hidden from the model and redeemed once.\n\n- In Codex Desktop, prefer the rendered MCP App. Use the in-app Browser for the\n credential-free `openUrl` only when a read-only fallback is acceptable.\n- In Claude Code Desktop's Code tab, prefer the rendered MCP App. Preview\n `openUrl` in the Browser pane only as the read-only fallback.\n- In VS Code, use the Agent Native Design webview/deep link described below.\n- Inline browser availability is host-dependent. CLI, remote, or restricted\n sessions may not expose one. If the inline surface is unavailable or disabled,\n return the normal **Open design** link instead of claiming it opened.\n\nPrefer the MCP App surface for a connected Design plugin, then the host's\nbrowser/preview tool as the universal fallback. Keep the canvas beside chat\nwhen the host supports rearrangeable panes.\n\nInside Design, use **Show/Hide UI** from the `Cmd K` menu or press Figma's\n`Shift \\` shortcut to toggle all editing chrome so only the canvas remains.\nThe same action is available from Design's empty-canvas context menu.\n\n## Core Model\n\n- Each screen is a URL-backed iframe, not copied HTML.\n- Each screen keeps URL metadata: `connectionId`, `routeId`, `path`,\n `url`, `bridgeUrl`, title, and viewport size.\n- Localhost Edit mode renders the running app through the local bridge as a live\n iframe with the same editor bridge used by HTML designs. It is never a frozen\n static DOM snapshot. Editing is direct DOM manipulation against that live\n document; the parallel `/snapshot` fetch feeds the editable source model only\n and must never be rendered in the frame.\n- **The `/visual-edit` skill needs no Design account sign-in.**\n `open-visual-edit` mints a five-minute, single-use capability for the exact\n `/visual-edit/:designId` local-editor route. The MCP host redeems it outside\n model-visible text, then opens the existing editor with localhost edit access.\n This capability is not an account session: `/_agent-native/session` remains\n signed out, and account-backed save/share/generate actions remain denied.\n- The skill enters through local `pnpm action open-visual-edit`. When that CLI\n has no account session, the action uses a stable, workspace-scoped local\n principal to register the bridge, create/reuse the local design, and place\n screens. That principal exists only inside the in-process CLI call; it is not\n a browser login and cannot be selected by an HTTP, MCP, or tunneled caller.\n- Public links are always read-only, including on loopback. Loopback peer\n identity is not an authentication boundary because a tunnel or reverse proxy\n can make a remote request appear local. A bare `/visual-edit/:designId` or\n `/design/:designId` URL carries no capability and must never release the\n connection's `previewToken`.\n- The live editor is same-origin through the local bridge proxy. This boots\n CSR apps and root-relative assets, but it is still a localhost editing proxy:\n app-origin cookies, WebSockets/HMR, SSE, and non-GET app API calls may need a\n future dev-server/plugin integration for perfect parity with the app's own\n origin.\n- **There are exactly two views.** The infinite canvas is where all editing\n happens, and the responsive interactive view (Interact) is where the app runs\n for real. There is no third \"full view\"/focused-edit state \u2014 clicking a screen\n in the Screens list, or the view toggle, opens the responsive view, and\n closing it returns to the canvas.\n- Interact keeps the left and right rails and adds a device bar above the canvas\n (device preset, editable width/height, zoom, close). It renders the app's\n normal URL so navigation, scrolling, links, and form controls behave as they\n would in the browser, and the wheel scrolls the app rather than panning the\n canvas. The canvas view is the opposite: the wheel pans and zooms it, and\n native interaction inside the frame is suppressed.\n- While a localhost screen has pending live visual edits, do not switch back to\n Interact until the user either applies the edits to source or explicitly\n aborts/discards the preview.\n- Alt-drag duplicates a screen. For localhost screens, duplication copies the\n iframe frame and URL metadata; change the copy's path/query for a new state.\n- Flow visualization is multiple URL states: `/checkout?step=shipping`,\n `/checkout?step=payment`, `/checkout?step=done`, etc.\n- When the user gives a named flow or numbered screen list, preserve that order\n and create one screen per URL/path. Shorthand like\n `localhost:1234/onboarding/1` means\n `http://localhost:1234/onboarding/1`.\n\n## Useful Canvas Sets\n\nTranslate the user's requested review into the smallest useful set of frames:\n\n- **Multi-step flow:** one ordered frame per route or query state, such as cart,\n shipping, payment, and confirmation.\n- **Multiple pages:** one frame per meaningful route, such as home, pricing,\n docs, and account settings.\n- **Responsive comparison:** repeat the same route at the requested desktop,\n tablet, and mobile viewports so they align in one row.\n- **State review:** repeat a route for meaningful URL-addressable states such as\n empty, loading, error, modal-open, or selected-item views.\n\nDo not expand every discovered route or every viewport unless the user asks for\nan exhaustive audit. Preserve the user's labels and sequence so the canvas reads\nlike the workflow they described.\n\n## Select And Reprompt\n\nWhen a chat message begins with `[Reprompt selection]`, the selected subtree is\na hard write boundary. The only mutation path is `propose-node-rewrite` with\nthe exact `repromptId`, target, and `baseVersionHash` captured in\n`design-reprompt-pending:<designId>:<fileId>`. Never use `apply-visual-edit`,\n`apply-source-edit`, `write-source`, `write-local-file`, `edit-design`, or any\nother content-writing action for that request. Clarifying questions are allowed,\nbut a requested change must remain a proposal.\n\nProduce one variant by default. Produce two or three only when the instruction\nasks for options. A retry includes `priorProposalId`; keep the same target and\nbase version, incorporate the feedback, and call `propose-node-rewrite` again.\nThe UI previews the returned subtree without persisting it.\n\nUse `resolve-node-rewrite` for the accept/reject lifecycle. Accept applies the\nchosen variant as one version-checked inline/Yjs content transaction so one\nundo restores the prior structure; reject clears the proposal without changing\ncontent. For conversational resolution such as \"apply the second one,\" call\n`view-screen`, read the active `design.reprompt.proposal`, and pass its\n`proposalId` plus the zero-based `variantIndex` to `resolve-node-rewrite`.\n\n## Review Quality\n\n- Treat the running app as the truth. Preserve its component language, tokens,\n route state, and real content unless the user explicitly asks for a new visual\n direction.\n- Use multiple URL states to reveal meaningful UX moments: empty/loading/error\n states, focused panels, modals, responsive breakpoints, and completed flow\n steps when those matter to the review.\n- For visual edits, compare before/after at the relevant viewport sizes and\n check key hover/focus/scroll states when the app exposes them.\n\n## Account And Sharing Model\n\n- `/visual-edit/:id` is the dedicated local-editor surface. The one-time\n handoff returned by `open-visual-edit` opens it with edit access without a\n Design login. A copied or bare `/visual-edit/:id` URL is read-only because it\n does not carry the capability.\n- The capability permits live iframe inspection and session-local edits,\n undo/redo, **Apply design updates** through the connected host/local agent,\n and **Copy prompt**. Those flows hand bounded source instructions back to the\n coding agent; they do not silently persist account-owned Design data.\n- Public `/design/:id` links stay read-only without a signed-in owner/editor\n session. Never use the local capability to upgrade that ordinary sharing\n surface.\n- Prefer links returned by Design actions or `/_agent-native/open` deep links.\n Do not surface URLs with `_session=` tokens or hand-build capability URLs.\n- Do not attempt account-backed write actions with the browser capability. The\n trusted local `open-visual-edit` CLI call may register its bridge, create or\n reuse its workspace-owned local design, and place screens without an account.\n Direct source-file action writes, generation, saving into an account, and\n sharing still require an authenticated action caller. If a signed-out visitor\n wants those durable account operations, send them through the framework\n sign-in return flow first.\n\n## Required Local Bridge\n\nThe live-edit bridge is unlocked by a shared secret (the \"bridge token\") that\nmust match on two sides: the local bridge process, and the user's connection row\nin Design (which the browser reads to authorize `/live-edit-bridge`,\n`/read-file`, `/write-file`). Get them to match by letting the\n`open-visual-edit` action mint the token, then starting the\nbridge with it. This is the only ordering that works for the remote-MCP flow \u2014\nthe bridge cannot push its own token to the server without a CLI auth token, so\nthe server mints instead and the bridge adopts.\n\nFrom the target app repo, make sure its dev server is running, then:\n\n**1. Discover routes without starting a durable bridge** (one-shot, exits):\n\n```bash\nnpx @agent-native/core@latest design connect --url http://localhost:5173 --root . --json\n```\n\nThis prints the manifest (routes + capabilities). Parse it to build\n`routeManifest` for the next step. (Skip this if the user already gave explicit\npaths/URLs to place.)\n\nInside the agent-native monorepo itself, use the workspace CLI instead of\n`npx` \u2014 `npx` installs the last published `@agent-native/core`, which will not\ncontain local changes and costs a slow install on every call:\n\n```bash\npnpm dev:cli design connect --url http://localhost:5173 --root templates/<app> --json\n```\n\n**2. Call `open-visual-edit`** (see Action Flow below) with NO `bridgeToken`.\nThe server mints one, stores it on the user's connection row, copies it into the\nplaced screens' metadata, and returns it to you as `bridgeToken`. Capture it.\n\n**3. Start the persistent bridge adopting that token** (single line; prefer the\nenv var so the secret does not appear in `ps`):\n\n```bash\nAGENT_NATIVE_BRIDGE_TOKEN=\"<bridgeToken from step 2>\" npx @agent-native/core@latest design connect --url http://localhost:5173 --root . --daemon\n```\n\n(Equivalently, pass `--bridge-token <token>`.) This starts a detached bridge on\n`http://127.0.0.1:7331`, adopts the server-minted token \u2014 so bridge and row\nagree and live-edit authorizes with no self-registration \u2014 and stays alive after\nthe command exits.\n\nFor a manual health/manifest check on the running bridge:\n\n```bash\ncurl http://127.0.0.1:7331/health\n```\n\n`/health` needs no token. The full manifest at `/manifest.json` is\npreview-token protected, so an unauthenticated `curl` of it returns\n`{\"ok\":false,\"error\":\"invalid or missing preview token\"}` \u2014 that response means\nthe bridge is up, not that it is broken.\n\nOnly use `--json` for the step-1 route probe. Never use `--json`, `--once`,\nor `--dry-run` for the durable step-3 bridge: they print the manifest and exit,\nso Design falls back to a non-editable live iframe.\n\nThe bridge listens on a single fixed port (7331) and refuses to start for a\nsecond, different app. It is detached with no log file, so if `--daemon` reports\na timeout, check for a stale process (`lsof -ti:7331`) before retrying.\n\n## Action Flow\n\nPrefer the single `open-visual-edit` action. It registers or\nrefreshes the localhost bridge connection, mints and stores the bridge token,\ncreates or reuses a Design project, places URL-backed screens, stores the active\nvisual-edit context, and navigates to overview mode in one call. This avoids\ncreating a private design under a synthetic CLI user and then handing the browser\na tokenized URL that may be shadowed by an existing session.\n\nCall it BEFORE starting the durable bridge (step 3 above): it does not contact\nthe bridge, so the bridge need not be running yet, and you need its returned\n`bridgeToken` to start the bridge with a matching secret. Omit `bridgeToken`\non the call so the server mints one.\n\n```bash\npnpm action open-visual-edit '{\n \"title\": \"Docs homepage visual edit\",\n \"devServerUrl\": \"http://localhost:5173\",\n \"bridgeUrl\": \"http://127.0.0.1:7331\",\n \"rootPath\": \"/absolute/path/to/app\",\n \"routeManifest\": { \"...\": \"from /manifest.json\" },\n \"paths\": [\"/\", \"/pricing\", \"/checkout?step=payment\"]\n}'\n```\n\nThe action returns `designId`, `connectionId`, `bridgeToken`, `screens`,\n`urlPath`, and a credential-free `openUrl`. Its MCP App metadata separately\ncarries the one-time editor launcher so the host can redeem it without showing\nthe capability to the model or retaining it in the action link. Keep\n`designId`/`connectionId` in the chat context for follow-ups, and pass\n`bridgeToken` to `design connect` (step 3) to start the bridge. On follow-up\ncalls reusing an existing `connectionId`, the same token is returned (it is\nminted once and reused), so the running bridge stays valid.\n\n### Desktop and mobile side by side\n\nPass `viewports` to place every requested route once per viewport. Frames lay\nout as a grid: one row per route, one column per viewport. Presets are\n`desktop` (1280x900), `laptop` (1440x900), `tablet` (834x1112), and `mobile`\n(390x844); an explicit `{ \"label\": \"...\", \"width\": N, \"height\": N }` also works.\n\n```bash\npnpm action open-visual-edit '{\n \"title\": \"Tasks responsive visual edit\",\n \"devServerUrl\": \"http://localhost:5173\",\n \"bridgeUrl\": \"http://127.0.0.1:7331\",\n \"rootPath\": \"/absolute/path/to/app\",\n \"paths\": [\"/tasks\", \"/inbox\"],\n \"viewports\": [\"desktop\", \"mobile\"]\n}'\n```\n\nPrefer this over two separate calls with `defaultWidth`/`defaultHeight`: it\nkeeps each route's viewports aligned in a row and titles them\n`Tasks \u2014 Desktop` / `Tasks \u2014 Mobile` so the canvas reads clearly. `viewports`\noverrides `defaultWidth`/`defaultHeight`. With no `routes`/`paths`, it expands\nevery route in the localhost manifest, which is usually far more frames than\nthe user wants \u2014 name the paths.\n\n### Adding more page frames later\n\nCall `open-visual-edit` again with the same `designId` and `connectionId` and\nonly the new paths. Existing frames for the same route and viewport are\nrefreshed in place rather than duplicated, and a frame the user has dragged or\nresized keeps its position unless you explicitly pass `x`/`y`/`width`/`height`.\n\n```bash\npnpm action open-visual-edit '{\n \"designId\": \"<existing-design-id>\",\n \"connectionId\": \"<existing-connection-id>\",\n \"devServerUrl\": \"http://localhost:5173\",\n \"paths\": [\"/settings\", \"/team\"],\n \"startY\": 2200\n}'\n```\n\nDo NOT add `defaultWidth`/`defaultHeight` just to restate the default size:\nsupplying either one marks the viewport as explicitly requested, which\noverwrites frame sizes the user has already adjusted on the canvas.\n\nFor a numbered flow the user describes in chat, keep the labels and order:\n\n```bash\npnpm action open-visual-edit '{\n \"designId\": \"<existing-design-id>\",\n \"connectionId\": \"<existing-connection-id>\",\n \"devServerUrl\": \"http://localhost:1234\",\n \"routes\": [\n { \"url\": \"localhost:1234/onboarding/1\", \"title\": \"Screen 1\" },\n { \"url\": \"localhost:1234/onboarding/2\", \"title\": \"Screen 2\" },\n { \"url\": \"localhost:1234/onboarding/3\", \"title\": \"Screen 3\" }\n ]\n}'\n```\n\nIf no `routes` or `paths` are supplied, `open-visual-edit` uses every route\nfrom the localhost manifest.\n\nFallback, only when `open-visual-edit` is unavailable:\n\n1. Register or refresh the bridge with `connect-localhost`, passing the\n `/manifest.json` result as `routeManifest` and `capabilities`.\n2. Create or reuse a Design project with `create-design`.\n3. Place URL-backed screens with `add-localhost-screens`.\n4. Navigate to overview mode with `navigate`.\n\n## Open The Design Surface\n\n- Use the `link`, `deepLink`, or MCP App embed returned by Design actions so\n the user sees the canvas. Follow **Put Design Beside The Chat**: prefer the\n MCP App; otherwise surface the credential-free **Open design** link.\n- Return or open the MCP App first. Its host-managed launcher carries the\n one-time local-editor capability. The credential-free `openUrl` / action link\n is the safe read-only fallback; never build a capability URL yourself.\n- Never return or open a hand-built `/design/:id?_session=...` URL.\n- If the user is working in VS Code, the Agent Native extension can open the\n same URL via\n `vscode://builder.agent-native/open?url=<encoded-design-url>`. Its\n `Agent Native: Open Design Canvas` command also starts the local bridge and\n opens hosted Design in the VS Code side panel.\n- After `open-visual-edit`, confirm the Design editor is in overview mode\n with the requested URL-backed frames visible, and that they render the app\n rather than a spinner. Do not stop at \"screens added\" when the user asked to\n inspect or edit visually.\n\n## Applying Visual Edits Back To Source\n\nCanvas edits on a localhost screen do not write source as you make them. They\naccumulate as pending edits and the editor shows an **Apply design updates**\nbutton on the canvas. In an MCP App, clicking it hands the bounded structured\nprompt to the current host coding conversation. In an ordinary browser or\nstandalone Design page, it falls back to the local Design agent. The dropdown's\n**Copy prompt to your agent** action is the universal manual fallback.\n\n- Style, text, and drag/drop structure edits all collect into the same pending\n batch, so the user can make several changes and apply once.\n- After the write lands, the target app's own dev-server HMR refreshes the\n frames \u2014 no manual reload. If frames do not refresh, the write did not land;\n say so rather than assuming.\n- The separate disk-icon \"Apply to source\" button is the deterministic\n whole-file HTML/CSS writer. It is intentionally disabled for compiled\n `.jsx`/`.tsx` routes \u2014 those must go through the agent path above.\n\n## Editing URLs\n\nKeep localhost screens as URL files plus `screenMetadata[fileId]`. Do not\nreplace them with copied `srcdoc` HTML unless the user explicitly asks for a\nfrozen snapshot. To change a state, rerun `open-visual-edit` with the new\npath/query or duplicate the screen and update the copy's URL metadata.\n\n## Local Files in the Code Tab\n\nOnce a connection is registered, the design editor's Code panel (left rail \u2192\nCode, or `navigate --view editor --designId <id> --leftPanel code`) shows a\nlocal-files workspace root for that connection next to the design's own files.\nTreat that root like VS Code opened at the connected project directory: file\ntree, search, open/edit, and save are backed by the real local files. It lists\nthe connected app's text/code files through the bridge\n(`list-local-files` / `read-local-file`); build output, `node_modules`,\n`.git`, and secret-looking paths (`.env*`, key files) are always excluded.\n\n- Browsing and reading need only editor access on the design plus the running\n bridge.\n- Saving goes through `write-local-file`: the first save opens the\n write-consent dialog (an 8-hour, folder-scoped grant) and retries\n automatically once granted. Only text/code files are writable; secret paths\n are always blocked.\n- If the agent calls `write-local-file` directly (not through a UI save) and it\n fails with \"no write-consent grant\", call `request-localhost-write-consent`.\n It opens the write-consent dialog in the editor, or reports `alreadyGranted`\n if one already exists. Granting is human-only \u2014\n `grant-localhost-write-consent` is hidden from agents, so you cannot approve\n it yourself. Tell the user to click \"Allow writes\", then retry\n `write-local-file` once. Do not keep retrying blindly: the write stays\n blocked until the user approves.\n- Saves are conflict-checked against the file's on-disk version \u2014 a file that\n changed since it was read fails with a version conflict instead of being\n overwritten.\n\n## React Source Writeback\n\n- Use compiler/debug provenance (project-relative file, line, column,\n component, and runtime multiplicity) to locate React/TSX source. Treat it as\n evidence, not as permission for a generic AST structural transform.\n- Read `positionPrecision` on every anchor before you trust `line`/`column`.\n `authored` means those are the real JSX coordinates. `transformed` means they\n are the dev server's own output coordinates \u2014 React 19 removed `_debugSource`\n and exposes only an owner stack, so this is the normal case on a Vite/Next\n dev server, and the line will not match the file. `unknown` means no tier was\n reported. On anything but `authored`, use the file and component to find the\n element by its JSX shape and re-derive the line from the file you read; never\n edit at the reported line.\n- A single-instance leaf text edit, literal `className`/`class` edit, or flat\n literal `style={{ ... }}` property may use `apply-visual-edit` with a\n `local-file` source and a complete `target.sourceAnchor`. Forward the\n anchor's `positionPrecision` with it \u2014 the action refuses a `transformed`\n anchor with `status: \"needsAgent\"` instead of seeking to a line that means\n something else in the authored file. Preview first (omit `persist`), inspect\n `proposedDiff`, then call with `persist: true`.\n- Reparenting, grouping/ungrouping, wrappers, dynamic expressions, repeated\n `.map()` instances, shared components, breakpoint-scoped edits, and\n cross-file changes go through the coding agent with complete subject/target\n anchors and their runtime relationship. `apply-visual-edit` refuses these\n with `status: \"needsAgent\"` rather than guessing.\n- Before each write, read the file and pass its exact `versionHash` to\n `write-local-file` with `requireExpectedVersionHash: true`; on conflict,\n re-read and re-plan. Keep the optimistic preview until HMR/runtime confirms\n the result. Human write consent remains mandatory and agents cannot grant it.\n\n## Verification\n\n- `list-localhost-connections` returns the expected connection and routes.\n- The Design editor opens in overview mode.\n- Every requested screen renders the intended localhost URL, showing real app\n content rather than an endless loading spinner.\n- The screen iframe carries a `src`, not a `srcdoc`. A localhost screen with a\n `srcdoc` is a bug, not a slow load \u2014 check it in the browser devtools before\n reporting the canvas as working.\n- Alt-dragging a screen copies the URL-backed frame, not an inline HTML clone.\n- A query/path edit changes only the target screen's URL metadata and iframe.\n- The Code tab shows a local-files root for the connection and opens its files.\n";
|
|
1
|
+
export declare const DESIGN_VISUAL_EDIT_SKILL_MD = "---\nname: visual-edit\ndescription: >-\n Open a running local app in Design overview mode as URL-backed iframe screens\n for visual editing, flow review, duplication, and route-state exploration.\n Use when the user asks to inspect, compare, or edit a real local app visually\n in Design.\nmetadata:\n visibility: exported\n---\n\n# Visual Edit\n\nUse `/visual-edit` when the user wants to inspect or edit a real local app\nvisually instead of generating standalone Alpine HTML. The source of truth is\nthe running localhost app plus its route URLs. Design shows those routes as\niframe-backed screens on the infinite canvas.\n\n## Installing this skill for an external MCP host\n\nThe hosted install path\n(`npx @agent-native/core@latest skills add visual-edit`, or `design` for the\nfull Design bundle) installs the exported instructions and registers the\nhosted Design MCP connector together. The open Skills CLI path\n(`npx skills@latest add BuilderIO/agent-native --skill visual-edit`) installs\nexported instructions only, with no MCP connector registration.\n\n## Put Design Beside The Chat\n\nPrefer the interactive MCP App returned by `open-visual-edit` when the coding\nhost renders it. The user gets the Design canvas beside the conversation, and\n**Apply design updates** can submit the bounded source-edit handoff back to the\ncurrent host conversation through the standard MCP Apps message bridge. The\nhost may ask the user to confirm the current conversation or choose a new one.\n\nOtherwise, `openUrl` is a credential-free, read-only fallback that is safe to\nshow in model text or retain in logs. Do not claim that fallback is editable:\nthe edit capability is intentionally available only to the host-managed MCP App\nlauncher, where it is hidden from the model and redeemed once.\n\n- In Codex Desktop, prefer the rendered MCP App. Use the in-app Browser for the\n credential-free `openUrl` only when a read-only fallback is acceptable.\n- In Claude Code Desktop's Code tab, prefer the rendered MCP App. Preview\n `openUrl` in the Browser pane only as the read-only fallback.\n- In VS Code, use the Agent-Native Design webview/deep link described below.\n- Inline browser availability is host-dependent. CLI, remote, or restricted\n sessions may not expose one. If the inline surface is unavailable or disabled,\n return the normal **Open design** link instead of claiming it opened.\n\nPrefer the MCP App surface for a connected Design plugin, then the host's\nbrowser/preview tool as the universal fallback. Keep the canvas beside chat\nwhen the host supports rearrangeable panes.\n\nInside Design, use **Show/Hide UI** from the `Cmd K` menu or press Figma's\n`Shift \\` shortcut to toggle all editing chrome so only the canvas remains.\nThe same action is available from Design's empty-canvas context menu.\n\n## Core Model\n\n- Each screen is a URL-backed iframe, not copied HTML.\n- Each screen keeps URL metadata: `connectionId`, `routeId`, `path`,\n `url`, `bridgeUrl`, title, and viewport size.\n- Localhost Edit mode renders the running app through the local bridge as a live\n iframe with the same editor bridge used by HTML designs. It is never a frozen\n static DOM snapshot. Editing is direct DOM manipulation against that live\n document; the parallel `/snapshot` fetch feeds the editable source model only\n and must never be rendered in the frame.\n- **The `/visual-edit` skill needs no Design account sign-in.**\n `open-visual-edit` mints a five-minute, single-use capability for the exact\n `/visual-edit/:designId` local-editor route. The MCP host redeems it outside\n model-visible text, then opens the existing editor with localhost edit access.\n This capability is not an account session: `/_agent-native/session` remains\n signed out, and account-backed save/share/generate actions remain denied.\n- The skill enters through local `pnpm action open-visual-edit`. When that CLI\n has no account session, the action uses a stable, workspace-scoped local\n principal to register the bridge, create/reuse the local design, and place\n screens. That principal exists only inside the in-process CLI call; it is not\n a browser login and cannot be selected by an HTTP, MCP, or tunneled caller.\n- Public links are always read-only, including on loopback. Loopback peer\n identity is not an authentication boundary because a tunnel or reverse proxy\n can make a remote request appear local. A bare `/visual-edit/:designId` or\n `/design/:designId` URL carries no capability and must never release the\n connection's `previewToken`.\n- The live editor is same-origin through the local bridge proxy. This boots\n CSR apps and root-relative assets, but it is still a localhost editing proxy:\n app-origin cookies, WebSockets/HMR, SSE, and non-GET app API calls may need a\n future dev-server/plugin integration for perfect parity with the app's own\n origin.\n- **There are exactly two views.** The infinite canvas is where all editing\n happens, and the responsive interactive view (Interact) is where the app runs\n for real. There is no third \"full view\"/focused-edit state \u2014 clicking a screen\n in the Screens list, or the view toggle, opens the responsive view, and\n closing it returns to the canvas.\n- Interact keeps the left and right rails and adds a device bar above the canvas\n (device preset, editable width/height, zoom, close). It renders the app's\n normal URL so navigation, scrolling, links, and form controls behave as they\n would in the browser, and the wheel scrolls the app rather than panning the\n canvas. The canvas view is the opposite: the wheel pans and zooms it, and\n native interaction inside the frame is suppressed.\n- While a localhost screen has pending live visual edits, do not switch back to\n Interact until the user either applies the edits to source or explicitly\n aborts/discards the preview.\n- Alt-drag duplicates a screen. For localhost screens, duplication copies the\n iframe frame and URL metadata; change the copy's path/query for a new state.\n- Flow visualization is multiple URL states: `/checkout?step=shipping`,\n `/checkout?step=payment`, `/checkout?step=done`, etc.\n- When the user gives a named flow or numbered screen list, preserve that order\n and create one screen per URL/path. Shorthand like\n `localhost:1234/onboarding/1` means\n `http://localhost:1234/onboarding/1`.\n\n## Useful Canvas Sets\n\nTranslate the user's requested review into the smallest useful set of frames:\n\n- **Multi-step flow:** one ordered frame per route or query state, such as cart,\n shipping, payment, and confirmation.\n- **Multiple pages:** one frame per meaningful route, such as home, pricing,\n docs, and account settings.\n- **Responsive comparison:** repeat the same route at the requested desktop,\n tablet, and mobile viewports so they align in one row.\n- **State review:** repeat a route for meaningful URL-addressable states such as\n empty, loading, error, modal-open, or selected-item views.\n\nDo not expand every discovered route or every viewport unless the user asks for\nan exhaustive audit. Preserve the user's labels and sequence so the canvas reads\nlike the workflow they described.\n\n## Select And Reprompt\n\nWhen a chat message begins with `[Reprompt selection]`, the selected subtree is\na hard write boundary. The only mutation path is `propose-node-rewrite` with\nthe exact `repromptId`, target, and `baseVersionHash` captured in\n`design-reprompt-pending:<designId>:<fileId>`. Never use `apply-visual-edit`,\n`apply-source-edit`, `write-source`, `write-local-file`, `edit-design`, or any\nother content-writing action for that request. Clarifying questions are allowed,\nbut a requested change must remain a proposal.\n\nProduce one variant by default. Produce two or three only when the instruction\nasks for options. A retry includes `priorProposalId`; keep the same target and\nbase version, incorporate the feedback, and call `propose-node-rewrite` again.\nThe UI previews the returned subtree without persisting it.\n\nUse `resolve-node-rewrite` for the accept/reject lifecycle. Accept applies the\nchosen variant as one version-checked inline/Yjs content transaction so one\nundo restores the prior structure; reject clears the proposal without changing\ncontent. For conversational resolution such as \"apply the second one,\" call\n`view-screen`, read the active `design.reprompt.proposal`, and pass its\n`proposalId` plus the zero-based `variantIndex` to `resolve-node-rewrite`.\n\n## Review Quality\n\n- Treat the running app as the truth. Preserve its component language, tokens,\n route state, and real content unless the user explicitly asks for a new visual\n direction.\n- Use multiple URL states to reveal meaningful UX moments: empty/loading/error\n states, focused panels, modals, responsive breakpoints, and completed flow\n steps when those matter to the review.\n- For visual edits, compare before/after at the relevant viewport sizes and\n check key hover/focus/scroll states when the app exposes them.\n\n## Account And Sharing Model\n\n- `/visual-edit/:id` is the dedicated local-editor surface. The one-time\n handoff returned by `open-visual-edit` opens it with edit access without a\n Design login. A copied or bare `/visual-edit/:id` URL is read-only because it\n does not carry the capability.\n- The capability permits live iframe inspection and session-local edits,\n undo/redo, **Apply design updates** through the connected host/local agent,\n and **Copy prompt**. Those flows hand bounded source instructions back to the\n coding agent; they do not silently persist account-owned Design data.\n- Public `/design/:id` links stay read-only without a signed-in owner/editor\n session. Never use the local capability to upgrade that ordinary sharing\n surface.\n- Prefer links returned by Design actions or `/_agent-native/open` deep links.\n Do not surface URLs with `_session=` tokens or hand-build capability URLs.\n- Do not attempt account-backed write actions with the browser capability. The\n trusted local `open-visual-edit` CLI call may register its bridge, create or\n reuse its workspace-owned local design, and place screens without an account.\n Direct source-file action writes, generation, saving into an account, and\n sharing still require an authenticated action caller. If a signed-out visitor\n wants those durable account operations, send them through the framework\n sign-in return flow first.\n\n## Required Local Bridge\n\nThe live-edit bridge is unlocked by a shared secret (the \"bridge token\") that\nmust match on two sides: the local bridge process, and the user's connection row\nin Design (which the browser reads to authorize `/live-edit-bridge`,\n`/read-file`, `/write-file`). Get them to match by letting the\n`open-visual-edit` action mint the token, then starting the\nbridge with it. This is the only ordering that works for the remote-MCP flow \u2014\nthe bridge cannot push its own token to the server without a CLI auth token, so\nthe server mints instead and the bridge adopts.\n\nFrom the target app repo, make sure its dev server is running, then:\n\n**1. Discover routes without starting a durable bridge** (one-shot, exits):\n\n```bash\nnpx @agent-native/core@latest design connect --url http://localhost:5173 --root . --json\n```\n\nThis prints the manifest (routes + capabilities). Parse it to build\n`routeManifest` for the next step. (Skip this if the user already gave explicit\npaths/URLs to place.)\n\nInside the agent-native monorepo itself, use the workspace CLI instead of\n`npx` \u2014 `npx` installs the last published `@agent-native/core`, which will not\ncontain local changes and costs a slow install on every call:\n\n```bash\npnpm dev:cli design connect --url http://localhost:5173 --root templates/<app> --json\n```\n\n**2. Call `open-visual-edit`** (see Action Flow below) with NO `bridgeToken`.\nThe server mints one, stores it on the user's connection row, copies it into the\nplaced screens' metadata, and returns it to you as `bridgeToken`. Capture it.\n\n**3. Start the persistent bridge adopting that token** (single line; prefer the\nenv var so the secret does not appear in `ps`):\n\n```bash\nAGENT_NATIVE_BRIDGE_TOKEN=\"<bridgeToken from step 2>\" npx @agent-native/core@latest design connect --url http://localhost:5173 --root . --daemon\n```\n\n(Equivalently, pass `--bridge-token <token>`.) This starts a detached bridge on\n`http://127.0.0.1:7331`, adopts the server-minted token \u2014 so bridge and row\nagree and live-edit authorizes with no self-registration \u2014 and stays alive after\nthe command exits.\n\nFor a manual health/manifest check on the running bridge:\n\n```bash\ncurl http://127.0.0.1:7331/health\n```\n\n`/health` needs no token. The full manifest at `/manifest.json` is\npreview-token protected, so an unauthenticated `curl` of it returns\n`{\"ok\":false,\"error\":\"invalid or missing preview token\"}` \u2014 that response means\nthe bridge is up, not that it is broken.\n\nOnly use `--json` for the step-1 route probe. Never use `--json`, `--once`,\nor `--dry-run` for the durable step-3 bridge: they print the manifest and exit,\nso Design falls back to a non-editable live iframe.\n\nThe bridge listens on a single fixed port (7331) and refuses to start for a\nsecond, different app. It is detached with no log file, so if `--daemon` reports\na timeout, check for a stale process (`lsof -ti:7331`) before retrying.\n\n## Action Flow\n\nPrefer the single `open-visual-edit` action. It registers or\nrefreshes the localhost bridge connection, mints and stores the bridge token,\ncreates or reuses a Design project, places URL-backed screens, stores the active\nvisual-edit context, and navigates to overview mode in one call. This avoids\ncreating a private design under a synthetic CLI user and then handing the browser\na tokenized URL that may be shadowed by an existing session.\n\nCall it BEFORE starting the durable bridge (step 3 above): it does not contact\nthe bridge, so the bridge need not be running yet, and you need its returned\n`bridgeToken` to start the bridge with a matching secret. Omit `bridgeToken`\non the call so the server mints one.\n\n```bash\npnpm action open-visual-edit '{\n \"title\": \"Docs homepage visual edit\",\n \"devServerUrl\": \"http://localhost:5173\",\n \"bridgeUrl\": \"http://127.0.0.1:7331\",\n \"rootPath\": \"/absolute/path/to/app\",\n \"routeManifest\": { \"...\": \"from /manifest.json\" },\n \"paths\": [\"/\", \"/pricing\", \"/checkout?step=payment\"]\n}'\n```\n\nThe action returns `designId`, `connectionId`, `bridgeToken`, `screens`,\n`urlPath`, and a credential-free `openUrl`. Its MCP App metadata separately\ncarries the one-time editor launcher so the host can redeem it without showing\nthe capability to the model or retaining it in the action link. Keep\n`designId`/`connectionId` in the chat context for follow-ups, and pass\n`bridgeToken` to `design connect` (step 3) to start the bridge. On follow-up\ncalls reusing an existing `connectionId`, the same token is returned (it is\nminted once and reused), so the running bridge stays valid.\n\n### Desktop and mobile side by side\n\nPass `viewports` to place every requested route once per viewport. Frames lay\nout as a grid: one row per route, one column per viewport. Presets are\n`desktop` (1280x900), `laptop` (1440x900), `tablet` (834x1112), and `mobile`\n(390x844); an explicit `{ \"label\": \"...\", \"width\": N, \"height\": N }` also works.\n\n```bash\npnpm action open-visual-edit '{\n \"title\": \"Tasks responsive visual edit\",\n \"devServerUrl\": \"http://localhost:5173\",\n \"bridgeUrl\": \"http://127.0.0.1:7331\",\n \"rootPath\": \"/absolute/path/to/app\",\n \"paths\": [\"/tasks\", \"/inbox\"],\n \"viewports\": [\"desktop\", \"mobile\"]\n}'\n```\n\nPrefer this over two separate calls with `defaultWidth`/`defaultHeight`: it\nkeeps each route's viewports aligned in a row and titles them\n`Tasks \u2014 Desktop` / `Tasks \u2014 Mobile` so the canvas reads clearly. `viewports`\noverrides `defaultWidth`/`defaultHeight`. With no `routes`/`paths`, it expands\nevery route in the localhost manifest, which is usually far more frames than\nthe user wants \u2014 name the paths.\n\n### Adding more page frames later\n\nCall `open-visual-edit` again with the same `designId` and `connectionId` and\nonly the new paths. Existing frames for the same route and viewport are\nrefreshed in place rather than duplicated, and a frame the user has dragged or\nresized keeps its position unless you explicitly pass `x`/`y`/`width`/`height`.\n\n```bash\npnpm action open-visual-edit '{\n \"designId\": \"<existing-design-id>\",\n \"connectionId\": \"<existing-connection-id>\",\n \"devServerUrl\": \"http://localhost:5173\",\n \"paths\": [\"/settings\", \"/team\"],\n \"startY\": 2200\n}'\n```\n\nDo NOT add `defaultWidth`/`defaultHeight` just to restate the default size:\nsupplying either one marks the viewport as explicitly requested, which\noverwrites frame sizes the user has already adjusted on the canvas.\n\nFor a numbered flow the user describes in chat, keep the labels and order:\n\n```bash\npnpm action open-visual-edit '{\n \"designId\": \"<existing-design-id>\",\n \"connectionId\": \"<existing-connection-id>\",\n \"devServerUrl\": \"http://localhost:1234\",\n \"routes\": [\n { \"url\": \"localhost:1234/onboarding/1\", \"title\": \"Screen 1\" },\n { \"url\": \"localhost:1234/onboarding/2\", \"title\": \"Screen 2\" },\n { \"url\": \"localhost:1234/onboarding/3\", \"title\": \"Screen 3\" }\n ]\n}'\n```\n\nIf no `routes` or `paths` are supplied, `open-visual-edit` uses every route\nfrom the localhost manifest.\n\nFallback, only when `open-visual-edit` is unavailable:\n\n1. Register or refresh the bridge with `connect-localhost`, passing the\n `/manifest.json` result as `routeManifest` and `capabilities`.\n2. Create or reuse a Design project with `create-design`.\n3. Place URL-backed screens with `add-localhost-screens`.\n4. Navigate to overview mode with `navigate`.\n\n## Open The Design Surface\n\n- Use the `link`, `deepLink`, or MCP App embed returned by Design actions so\n the user sees the canvas. Follow **Put Design Beside The Chat**: prefer the\n MCP App; otherwise surface the credential-free **Open design** link.\n- Return or open the MCP App first. Its host-managed launcher carries the\n one-time local-editor capability. The credential-free `openUrl` / action link\n is the safe read-only fallback; never build a capability URL yourself.\n- Never return or open a hand-built `/design/:id?_session=...` URL.\n- If the user is working in VS Code, the Agent-Native extension can open the\n same URL via\n `vscode://builder.agent-native/open?url=<encoded-design-url>`. Its\n `Agent-Native: Open Design Canvas` command also starts the local bridge and\n opens hosted Design in the VS Code side panel.\n- After `open-visual-edit`, confirm the Design editor is in overview mode\n with the requested URL-backed frames visible, and that they render the app\n rather than a spinner. Do not stop at \"screens added\" when the user asked to\n inspect or edit visually.\n\n## Applying Visual Edits Back To Source\n\nCanvas edits on a localhost screen do not write source as you make them. They\naccumulate as pending edits and the editor shows an **Apply design updates**\nbutton on the canvas. In an MCP App, clicking it hands the bounded structured\nprompt to the current host coding conversation. In an ordinary browser or\nstandalone Design page, it falls back to the local Design agent. The dropdown's\n**Copy prompt to your agent** action is the universal manual fallback.\n\n- Style, text, and drag/drop structure edits all collect into the same pending\n batch, so the user can make several changes and apply once.\n- After the write lands, the target app's own dev-server HMR refreshes the\n frames \u2014 no manual reload. If frames do not refresh, the write did not land;\n say so rather than assuming.\n- The separate disk-icon \"Apply to source\" button is the deterministic\n whole-file HTML/CSS writer. It is intentionally disabled for compiled\n `.jsx`/`.tsx` routes \u2014 those must go through the agent path above.\n\n## Editing URLs\n\nKeep localhost screens as URL files plus `screenMetadata[fileId]`. Do not\nreplace them with copied `srcdoc` HTML unless the user explicitly asks for a\nfrozen snapshot. To change a state, rerun `open-visual-edit` with the new\npath/query or duplicate the screen and update the copy's URL metadata.\n\n## Local Files in the Code Tab\n\nOnce a connection is registered, the design editor's Code panel (left rail \u2192\nCode, or `navigate --view editor --designId <id> --leftPanel code`) shows a\nlocal-files workspace root for that connection next to the design's own files.\nTreat that root like VS Code opened at the connected project directory: file\ntree, search, open/edit, and save are backed by the real local files. It lists\nthe connected app's text/code files through the bridge\n(`list-local-files` / `read-local-file`); build output, `node_modules`,\n`.git`, and secret-looking paths (`.env*`, key files) are always excluded.\n\n- Browsing and reading need only editor access on the design plus the running\n bridge.\n- Saving goes through `write-local-file`: the first save opens the\n write-consent dialog (an 8-hour, folder-scoped grant) and retries\n automatically once granted. Only text/code files are writable; secret paths\n are always blocked.\n- If the agent calls `write-local-file` directly (not through a UI save) and it\n fails with \"no write-consent grant\", call `request-localhost-write-consent`.\n It opens the write-consent dialog in the editor, or reports `alreadyGranted`\n if one already exists. Granting is human-only \u2014\n `grant-localhost-write-consent` is hidden from agents, so you cannot approve\n it yourself. Tell the user to click \"Allow writes\", then retry\n `write-local-file` once. Do not keep retrying blindly: the write stays\n blocked until the user approves.\n- Saves are conflict-checked against the file's on-disk version \u2014 a file that\n changed since it was read fails with a version conflict instead of being\n overwritten.\n\n## React Source Writeback\n\n- Use compiler/debug provenance (project-relative file, line, column,\n component, and runtime multiplicity) to locate React/TSX source. Treat it as\n evidence, not as permission for a generic AST structural transform.\n- Read `positionPrecision` on every anchor before you trust `line`/`column`.\n `authored` means those are the real JSX coordinates. `transformed` means they\n are the dev server's own output coordinates \u2014 React 19 removed `_debugSource`\n and exposes only an owner stack, so this is the normal case on a Vite/Next\n dev server, and the line will not match the file. `unknown` means no tier was\n reported. On anything but `authored`, use the file and component to find the\n element by its JSX shape and re-derive the line from the file you read; never\n edit at the reported line.\n- A single-instance leaf text edit, literal `className`/`class` edit, or flat\n literal `style={{ ... }}` property may use `apply-visual-edit` with a\n `local-file` source and a complete `target.sourceAnchor`. Forward the\n anchor's `positionPrecision` with it \u2014 the action refuses a `transformed`\n anchor with `status: \"needsAgent\"` instead of seeking to a line that means\n something else in the authored file. Preview first (omit `persist`), inspect\n `proposedDiff`, then call with `persist: true`.\n- Reparenting, grouping/ungrouping, wrappers, dynamic expressions, repeated\n `.map()` instances, shared components, breakpoint-scoped edits, and\n cross-file changes go through the coding agent with complete subject/target\n anchors and their runtime relationship. `apply-visual-edit` refuses these\n with `status: \"needsAgent\"` rather than guessing.\n- Before each write, read the file and pass its exact `versionHash` to\n `write-local-file` with `requireExpectedVersionHash: true`; on conflict,\n re-read and re-plan. Keep the optimistic preview until HMR/runtime confirms\n the result. Human write consent remains mandatory and agents cannot grant it.\n\n## Verification\n\n- `list-localhost-connections` returns the expected connection and routes.\n- The Design editor opens in overview mode.\n- Every requested screen renders the intended localhost URL, showing real app\n content rather than an endless loading spinner.\n- The screen iframe carries a `src`, not a `srcdoc`. A localhost screen with a\n `srcdoc` is a bug, not a slow load \u2014 check it in the browser devtools before\n reporting the canvas as working.\n- Alt-dragging a screen copies the URL-backed frame, not an inline HTML clone.\n- A query/path edit changes only the target screen's URL metadata and iframe.\n- The Code tab shows a local-files root for the connection and opens its files.\n";
|
|
@@ -42,7 +42,7 @@ launcher, where it is hidden from the model and redeemed once.
|
|
|
42
42
|
credential-free \`openUrl\` only when a read-only fallback is acceptable.
|
|
43
43
|
- In Claude Code Desktop's Code tab, prefer the rendered MCP App. Preview
|
|
44
44
|
\`openUrl\` in the Browser pane only as the read-only fallback.
|
|
45
|
-
- In VS Code, use the Agent
|
|
45
|
+
- In VS Code, use the Agent-Native Design webview/deep link described below.
|
|
46
46
|
- Inline browser availability is host-dependent. CLI, remote, or restricted
|
|
47
47
|
sessions may not expose one. If the inline surface is unavailable or disabled,
|
|
48
48
|
return the normal **Open design** link instead of claiming it opened.
|
|
@@ -363,10 +363,10 @@ Fallback, only when \`open-visual-edit\` is unavailable:
|
|
|
363
363
|
one-time local-editor capability. The credential-free \`openUrl\` / action link
|
|
364
364
|
is the safe read-only fallback; never build a capability URL yourself.
|
|
365
365
|
- Never return or open a hand-built \`/design/:id?_session=...\` URL.
|
|
366
|
-
- If the user is working in VS Code, the Agent
|
|
366
|
+
- If the user is working in VS Code, the Agent-Native extension can open the
|
|
367
367
|
same URL via
|
|
368
368
|
\`vscode://builder.agent-native/open?url=<encoded-design-url>\`. Its
|
|
369
|
-
\`Agent
|
|
369
|
+
\`Agent-Native: Open Design Canvas\` command also starts the local bridge and
|
|
370
370
|
opens hosted Design in the VS Code side panel.
|
|
371
371
|
- After \`open-visual-edit\`, confirm the Design editor is in overview mode
|
|
372
372
|
with the requested URL-backed frames visible, and that they render the app
|
|
@@ -72,7 +72,7 @@ Visual Recap GitHub Action. Pass --with-github-action to write it directly, then
|
|
|
72
72
|
run "npx @agent-native/core@latest recap setup" / "npx @agent-native/core@latest recap doctor" to configure and
|
|
73
73
|
verify GitHub Actions. Docs: ${docsUrl("pr-visual-recap")}.
|
|
74
74
|
|
|
75
|
-
The status/update commands inspect copied Agent
|
|
75
|
+
The status/update commands inspect copied Agent-Native skill folders and refresh
|
|
76
76
|
their instruction files from the current @agent-native/core package. In a
|
|
77
77
|
standalone generated app, "skills update scaffold --project" refreshes the
|
|
78
78
|
framework skill copies. In a generated workspace, it refreshes workspace-core,
|
package/dist/cli/skills.d.ts
CHANGED
|
@@ -195,7 +195,7 @@ export interface RunSkillsOptions {
|
|
|
195
195
|
*/
|
|
196
196
|
publicSkillEntries?: PublicSkillCatalogEntry[];
|
|
197
197
|
/**
|
|
198
|
-
* Built-in Agent
|
|
198
|
+
* Built-in Agent-Native skill prompt/list entries to hide for wrapper CLIs.
|
|
199
199
|
* Direct installs by explicit name still work; this only controls discovery.
|
|
200
200
|
*/
|
|
201
201
|
hiddenBuiltInSkillTargets?: string[];
|
package/dist/cli/skills.js
CHANGED
|
@@ -81,7 +81,7 @@ export const BUILT_IN_APP_SKILLS = {
|
|
|
81
81
|
mcp: { serverName: "agent-native-content" },
|
|
82
82
|
auth: {
|
|
83
83
|
mode: "oauth",
|
|
84
|
-
setup: "Authenticate with the Content MCP connector in the host app. Local-folder synchronization requires a local Content app, Agent
|
|
84
|
+
setup: "Authenticate with the Content MCP connector in the host app. Local-folder synchronization requires a local Content app, Agent-Native Desktop, or trusted local bridge for filesystem access.",
|
|
85
85
|
},
|
|
86
86
|
surfaces: [
|
|
87
87
|
{
|
|
@@ -607,7 +607,7 @@ function contentModeInstructionBlock(input) {
|
|
|
607
607
|
Default storage for this installation is Content's SQL database. This repo's
|
|
608
608
|
\`agent-native.json\` declares \`docs/\`, \`blog/\`, \`content/\`, and
|
|
609
609
|
\`resources/\` as local-folder sources with opaque connection ids; it does not
|
|
610
|
-
select a separate application mode. A trusted local Content app or Agent
|
|
610
|
+
select a separate application mode. A trusted local Content app or Agent-Native
|
|
611
611
|
Desktop bridge imports those files into their workspace's canonical Files
|
|
612
612
|
database, after which normal Content document actions read and edit the SQL-backed
|
|
613
613
|
pages. Use \`sync-manifest-local-folder-source\` with each root's generated
|
|
@@ -720,7 +720,7 @@ function writeSkillFolder(dir, bundle, installedAt = new Date().toISOString()) {
|
|
|
720
720
|
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
721
721
|
}
|
|
722
722
|
catch { }
|
|
723
|
-
throw new Error(`Cannot write Agent
|
|
723
|
+
throw new Error(`Cannot write Agent-Native skill folder ${dir}: ${error?.message ?? error}`, { cause: error });
|
|
724
724
|
}
|
|
725
725
|
}
|
|
726
726
|
function assertSkillFolderIsNotSymlink(dir) {
|
|
@@ -734,7 +734,7 @@ function assertSkillFolderIsNotSymlink(dir) {
|
|
|
734
734
|
throw error;
|
|
735
735
|
}
|
|
736
736
|
if (stat.isSymbolicLink()) {
|
|
737
|
-
throw new Error(`Refusing to replace symlinked Agent
|
|
737
|
+
throw new Error(`Refusing to replace symlinked Agent-Native skill folder ${dir}. Update the linked source or remove the symlink before installing.`);
|
|
738
738
|
}
|
|
739
739
|
}
|
|
740
740
|
function isJsonRecord(value) {
|
|
@@ -1876,7 +1876,7 @@ async function promptForUpdateInstructions() {
|
|
|
1876
1876
|
async function promptForSkills(context) {
|
|
1877
1877
|
const clack = await import("@clack/prompts");
|
|
1878
1878
|
const result = await clack.multiselect({
|
|
1879
|
-
message: "Which Agent
|
|
1879
|
+
message: "Which Agent-Native skills do you want to install?\n" +
|
|
1880
1880
|
" (space toggles, enter confirms)",
|
|
1881
1881
|
options: context.options,
|
|
1882
1882
|
initialValues: context.initialTargets,
|
|
@@ -2452,7 +2452,7 @@ async function addPlainSkillRepo(parsed, options) {
|
|
|
2452
2452
|
throw new Error("Plain skill repositories only install skill instructions. Run without --mcp-only.");
|
|
2453
2453
|
}
|
|
2454
2454
|
if (parsed.mcpUrl && !installModeSkillNamesSelected(parsed.plainSkillNames)) {
|
|
2455
|
-
throw new Error("--mcp-url only applies to app-backed Agent
|
|
2455
|
+
throw new Error("--mcp-url only applies to app-backed Agent-Native skills.");
|
|
2456
2456
|
}
|
|
2457
2457
|
const clients = parsed.clients ?? resolveSkillsClientArg(parsed.client);
|
|
2458
2458
|
const skillsAgents = skillsAgentsForClients(clients);
|
|
@@ -3216,11 +3216,11 @@ function runSkillsStatusOrUpdate(parsed, options, update) {
|
|
|
3216
3216
|
if (beforeCount === 0) {
|
|
3217
3217
|
const target = parsed.target ? ` for ${parsed.target}` : "";
|
|
3218
3218
|
const hint = isScaffoldGuidanceTarget(parsed.target)
|
|
3219
|
-
? `Run this from a generated Agent
|
|
3219
|
+
? `Run this from a generated Agent-Native app or workspace root.\n`
|
|
3220
3220
|
: update
|
|
3221
3221
|
? `The update command only refreshes skill folders that already exist; it does not do first-time install, MCP registration, or auth. Run "npx @agent-native/core@latest skills add ${parsed.target ?? "visual-plan"}" for one-step setup.\n`
|
|
3222
3222
|
: `Run "npx @agent-native/core@latest skills add ${parsed.target ?? "visual-plan"}" to install one.\n`;
|
|
3223
|
-
process.stdout.write(`No installed Agent
|
|
3223
|
+
process.stdout.write(`No installed Agent-Native skill copies found${target}.\n${hint}`);
|
|
3224
3224
|
return;
|
|
3225
3225
|
}
|
|
3226
3226
|
if (update) {
|
package/dist/cli/telemetry.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Best-effort install-funnel telemetry for the core CLI.
|
|
3
3
|
*
|
|
4
|
-
* Events are POSTed to the first-party Agent
|
|
4
|
+
* Events are POSTed to the first-party Agent-Native Analytics endpoint
|
|
5
5
|
* (analytics.agent-native.com/track) using a PUBLIC, write-only key — the same
|
|
6
6
|
* mechanism every agent-native app uses to report client-side events. Nothing
|
|
7
7
|
* here ever blocks or throws into the install flow: sends are fire-and-forget
|
|
@@ -281,7 +281,7 @@ export function resolveTargets(cwd, appArg) {
|
|
|
281
281
|
return targets;
|
|
282
282
|
}
|
|
283
283
|
}
|
|
284
|
-
throw new Error("No Agent
|
|
284
|
+
throw new Error("No Agent-Native app found. Run from an app directory, or pass an app name from a workspace root.");
|
|
285
285
|
}
|
|
286
286
|
function toTarget(appDir) {
|
|
287
287
|
const resolved = path.resolve(appDir);
|
|
@@ -18,7 +18,7 @@ export const TEMPLATES = [
|
|
|
18
18
|
{
|
|
19
19
|
name: "calendar",
|
|
20
20
|
label: "Calendar",
|
|
21
|
-
hint: "Agent-
|
|
21
|
+
hint: "Agent-Native Google Calendar — manage events, sync, and public booking",
|
|
22
22
|
icon: "CalendarDays",
|
|
23
23
|
color: "#00B5FF",
|
|
24
24
|
colorRgb: "0 181 255",
|
|
@@ -56,7 +56,7 @@ export const TEMPLATES = [
|
|
|
56
56
|
{
|
|
57
57
|
name: "slides",
|
|
58
58
|
label: "Slides",
|
|
59
|
-
hint: "Agent-
|
|
59
|
+
hint: "Agent-Native Google Slides — generate and edit React presentations",
|
|
60
60
|
icon: "GalleryHorizontal",
|
|
61
61
|
color: "#EC4899",
|
|
62
62
|
colorRgb: "236 72 153",
|
|
@@ -69,7 +69,7 @@ export const TEMPLATES = [
|
|
|
69
69
|
{
|
|
70
70
|
name: "analytics",
|
|
71
71
|
label: "Analytics",
|
|
72
|
-
hint: "Agent-
|
|
72
|
+
hint: "Agent-Native provider analytics - connect data sources, prompt for charts and deep dives",
|
|
73
73
|
icon: "BarChart2",
|
|
74
74
|
color: "#F59E0B",
|
|
75
75
|
colorRgb: "245 158 11",
|
|
@@ -82,7 +82,7 @@ export const TEMPLATES = [
|
|
|
82
82
|
{
|
|
83
83
|
name: "mail",
|
|
84
84
|
label: "Mail",
|
|
85
|
-
hint: "Agent-
|
|
85
|
+
hint: "Agent-Native Superhuman — email client with keyboard shortcuts and AI triage",
|
|
86
86
|
icon: "Mail",
|
|
87
87
|
color: "#3B82F6",
|
|
88
88
|
colorRgb: "59 130 246",
|
|
@@ -106,7 +106,7 @@ export const TEMPLATES = [
|
|
|
106
106
|
{
|
|
107
107
|
name: "forms",
|
|
108
108
|
label: "Forms",
|
|
109
|
-
hint: "Agent-
|
|
109
|
+
hint: "Agent-Native form builder — create, edit, and manage forms",
|
|
110
110
|
icon: "ClipboardList",
|
|
111
111
|
color: "#06B6D4",
|
|
112
112
|
colorRgb: "6 182 212",
|
|
@@ -156,7 +156,7 @@ export const TEMPLATES = [
|
|
|
156
156
|
{
|
|
157
157
|
name: "design",
|
|
158
158
|
label: "Design",
|
|
159
|
-
hint: "Agent-
|
|
159
|
+
hint: "Agent-Native design tool — create and edit visual designs with agent assistance",
|
|
160
160
|
icon: "Brush",
|
|
161
161
|
color: "#F472B6",
|
|
162
162
|
colorRgb: "244 114 182",
|
|
@@ -196,7 +196,7 @@ export const TEMPLATES = [
|
|
|
196
196
|
{
|
|
197
197
|
name: "crm",
|
|
198
198
|
label: "CRM",
|
|
199
|
-
hint: "Agent-
|
|
199
|
+
hint: "Agent-Native CRM over native SQL, HubSpot, or Salesforce — typed attributes, lists, pipelines, and evidence-grounded signals",
|
|
200
200
|
icon: "Users",
|
|
201
201
|
color: "#2563EB",
|
|
202
202
|
colorRgb: "37 99 235",
|
package/dist/cli/upgrade.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `agent-native upgrade` — bring an existing Agent
|
|
2
|
+
* `agent-native upgrade` — bring an existing Agent-Native app/workspace current.
|
|
3
3
|
*
|
|
4
4
|
* Older branches often break after a core bump. Agents then invent
|
|
5
5
|
* `pnpm.overrides` / patches against `@agent-native/*` (especially dispatch),
|
package/dist/cli/upgrade.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `agent-native upgrade` — bring an existing Agent
|
|
2
|
+
* `agent-native upgrade` — bring an existing Agent-Native app/workspace current.
|
|
3
3
|
*
|
|
4
4
|
* Older branches often break after a core bump. Agents then invent
|
|
5
5
|
* `pnpm.overrides` / patches against `@agent-native/*` (especially dispatch),
|
|
@@ -104,7 +104,7 @@ export function printUpgradeHelp(io = defaultIo) {
|
|
|
104
104
|
"",
|
|
105
105
|
"Options:",
|
|
106
106
|
" --skip-install Bump package.json only; do not run the package manager",
|
|
107
|
-
" --codemods Rewrite moved Agent
|
|
107
|
+
" --codemods Rewrite moved Agent-Native imports and exports (preview by default)",
|
|
108
108
|
" --yes Apply codemods; without this flag --codemods is a dry run",
|
|
109
109
|
" --skip-skills Skip `skills update scaffold --project`",
|
|
110
110
|
" --skip-verify Skip typecheck after upgrade",
|
|
@@ -285,7 +285,7 @@ export function detectUpgradeProject(cwd) {
|
|
|
285
285
|
const isWorkspace = hasWorkspaceYaml || workspacePatterns.length > 0;
|
|
286
286
|
// A manifest we cannot parse cannot be ruled out as the project root:
|
|
287
287
|
// stop here so the doctor reports the parse error instead of walking past
|
|
288
|
-
// it and claiming no Agent
|
|
288
|
+
// it and claiming no Agent-Native project exists.
|
|
289
289
|
const unreadable = !read.ok && read.reason === "unreadable";
|
|
290
290
|
if (hasCore || isWorkspace || unreadable) {
|
|
291
291
|
const packageFiles = [pkgPath];
|
|
@@ -502,7 +502,7 @@ function detectPackageManager(projectRoot) {
|
|
|
502
502
|
return "yarn";
|
|
503
503
|
if (fs.existsSync(path.join(projectRoot, "package-lock.json")))
|
|
504
504
|
return "npm";
|
|
505
|
-
// Prefer pnpm for Agent
|
|
505
|
+
// Prefer pnpm for Agent-Native scaffolds.
|
|
506
506
|
return "pnpm";
|
|
507
507
|
}
|
|
508
508
|
function installArgs(pm) {
|
|
@@ -612,7 +612,7 @@ export async function runUpgrade(argv, io = defaultIo) {
|
|
|
612
612
|
const cwd = path.resolve(opts.cwd ?? process.cwd());
|
|
613
613
|
const project = detectUpgradeProject(cwd);
|
|
614
614
|
if (!project) {
|
|
615
|
-
const message = "No Agent
|
|
615
|
+
const message = "No Agent-Native app/workspace found. Run from an app or workspace root that depends on @agent-native/core.";
|
|
616
616
|
if (opts.json) {
|
|
617
617
|
io.err(JSON.stringify({ ok: false, message }, null, 2));
|
|
618
618
|
}
|
|
@@ -35,7 +35,7 @@ export function AboutAgentNativeDialog({ open, onOpenChange, }) {
|
|
|
35
35
|
}, 1600);
|
|
36
36
|
};
|
|
37
37
|
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { "aria-describedby": undefined, className: "max-w-md gap-5", children: [_jsxs(DialogTitle, { className: "flex items-center gap-2 text-base", children: [_jsx(IconCode, { className: "size-4 text-muted-foreground" }), t("agentChat.aboutAgentNative.title", {
|
|
38
|
-
defaultValue: "About Agent
|
|
38
|
+
defaultValue: "About Agent-Native",
|
|
39
39
|
})] }), _jsx("div", { className: "overflow-hidden rounded-md border border-border", children: packageVersions.length > 0 ? (packageVersions.map(({ name, version }) => (_jsxs("div", { className: "flex items-center justify-between gap-4 border-b border-border px-3 py-2 last:border-b-0", children: [_jsx("span", { className: "min-w-0 truncate font-mono text-xs text-foreground", children: name }), _jsxs("span", { className: "shrink-0 font-mono text-xs text-muted-foreground", children: [_jsx("span", { className: "sr-only", children: t("agentChat.aboutAgentNative.version", {
|
|
40
40
|
defaultValue: "Version",
|
|
41
41
|
}) }), version] })] }, name)))) : (_jsxs("div", { className: "px-3 py-2 font-mono text-xs text-muted-foreground", children: ["@agent-native/core -", " ", t("agentChat.aboutAgentNative.unknown", {
|
|
@@ -23,7 +23,7 @@ const defaultStyle = {
|
|
|
23
23
|
width: "100%",
|
|
24
24
|
height: "100%",
|
|
25
25
|
};
|
|
26
|
-
export const AgentNativeFrame = forwardRef(function AgentNativeFrame({ agentUrl, agentOrigin, session, getContext, commands, actions, webmcp, auth, onBridgeEvent, onBridgeReady, title = "Agent
|
|
26
|
+
export const AgentNativeFrame = forwardRef(function AgentNativeFrame({ agentUrl, agentOrigin, session, getContext, commands, actions, webmcp, auth, onBridgeEvent, onBridgeReady, title = "Agent-Native assistant", sandbox = "allow-scripts allow-same-origin allow-forms allow-popups allow-downloads", allow = "clipboard-read; clipboard-write; microphone; fullscreen", referrerPolicy = "strict-origin-when-cross-origin", style, onLoad, ...iframeProps }, forwardedRef) {
|
|
27
27
|
const iframeRef = useRef(null);
|
|
28
28
|
const bridgeRef = useRef(null);
|
|
29
29
|
const resolvedOrigin = useMemo(() => agentOrigin ?? originFromUrl(agentUrl), [agentOrigin, agentUrl]);
|
|
@@ -90,7 +90,7 @@ export interface CommandMenuProps {
|
|
|
90
90
|
*/
|
|
91
91
|
changelogKey?: string;
|
|
92
92
|
/**
|
|
93
|
-
* Whether to show the built-in "About Agent
|
|
93
|
+
* Whether to show the built-in "About Agent-Native" entry. Defaults to true
|
|
94
94
|
* for app-shell menus that provide a changelog; set false for local menus.
|
|
95
95
|
*/
|
|
96
96
|
showAbout?: boolean;
|
|
@@ -189,7 +189,7 @@ export function CommandMenu({ open, onOpenChange, children, renderResults, place
|
|
|
189
189
|
.includes(search.toLowerCase());
|
|
190
190
|
const showChangelogRow = hasChangelog && changelogRowMatches;
|
|
191
191
|
const aboutLabel = t("agentChat.aboutAgentNative.title", {
|
|
192
|
-
defaultValue: "About Agent
|
|
192
|
+
defaultValue: "About Agent-Native",
|
|
193
193
|
});
|
|
194
194
|
const aboutVersionLabel = t("agentChat.aboutAgentNative.version", {
|
|
195
195
|
defaultValue: "Version",
|
|
@@ -206,7 +206,7 @@ export function CommandMenu({ open, onOpenChange, children, renderResults, place
|
|
|
206
206
|
const aboutRowMatches = !search ||
|
|
207
207
|
[
|
|
208
208
|
aboutLabel,
|
|
209
|
-
"agent
|
|
209
|
+
"agent-native",
|
|
210
210
|
aboutVersionLabel,
|
|
211
211
|
"versions",
|
|
212
212
|
"package",
|
|
@@ -116,8 +116,8 @@ function EnvironmentBadgeContent({ environment, targets, }) {
|
|
|
116
116
|
return null;
|
|
117
117
|
const label = environment === "beta" ? "beta" : "prod";
|
|
118
118
|
const title = environment === "beta"
|
|
119
|
-
? "You're on Agent
|
|
120
|
-
: "You're on Agent
|
|
119
|
+
? "You're on Agent-Native Beta"
|
|
120
|
+
: "You're on Agent-Native Production";
|
|
121
121
|
return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { "aria-label": `Open ${title.toLowerCase()} switcher`, className: cn(environmentBadgePlacementClasses, environment === "beta"
|
|
122
122
|
? "border-primary/80"
|
|
123
123
|
: "border-border/80 bg-background/95 text-foreground"), size: "sm", variant: environment === "beta" ? "default" : "outline", children: label }) }), _jsxs(PopoverContent, { align: "start", className: "w-[280px] p-5", side: "top", sideOffset: 8, children: [_jsx("div", { className: "mb-1 text-sm font-semibold leading-5", children: title }), _jsx("div", { className: "mb-4 text-sm text-muted-foreground", children: "Choose where you want to continue." }), _jsxs("div", { className: "grid gap-2", children: [environment === "beta" ? (_jsx(EnvironmentLink, { href: productionHref, label: "Switch to production" })) : (_jsx(EnvironmentLink, { href: betaHref, label: "Go to beta" })), _jsx(Button, { className: "mt-2 -mb-2 w-full justify-center text-muted-foreground", onClick: () => setIsHidden(true), size: "sm", type: "button", variant: "ghost", children: "Hide badge" })] })] })] }));
|