@agent-native/core 0.97.0 → 0.98.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +56 -0
- package/corpus/core/docs/content/authentication.mdx +3 -3
- package/corpus/core/docs/content/doctor.mdx +170 -0
- package/corpus/core/docs/content/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ar-SA/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/security.mdx +2 -0
- package/corpus/core/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/security.mdx +2 -0
- package/corpus/core/docs/content/locales/es-ES/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/security.mdx +2 -0
- package/corpus/core/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/hi-IN/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/security.mdx +2 -0
- package/corpus/core/docs/content/locales/ja-JP/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/security.mdx +2 -0
- package/corpus/core/docs/content/locales/ko-KR/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/pt-BR/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/security.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-CN/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/security.mdx +2 -0
- package/corpus/core/docs/content/locales/zh-TW/authentication.mdx +2 -2
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +8 -7
- package/corpus/core/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/security.mdx +2 -0
- package/corpus/core/docs/content/mcp-protocol.mdx +1 -1
- package/corpus/core/docs/content/security.mdx +2 -0
- package/corpus/core/package.json +6 -2
- package/corpus/core/scripts/finalize-build.mjs +63 -3
- package/corpus/core/scripts/materialize-source-corpus.mjs +101 -15
- package/corpus/core/src/action-change-marker.ts +8 -1
- package/corpus/core/src/action.ts +42 -0
- package/corpus/core/src/agent/engine/builder-engine.ts +3 -0
- package/corpus/core/src/agent/engine/context-directives-transform.ts +69 -0
- package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +168 -0
- package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +85 -0
- package/corpus/core/src/agent/production-agent.ts +129 -244
- package/corpus/core/src/changelog/parse.ts +8 -3
- package/corpus/core/src/cli/doctor.ts +9 -3
- package/corpus/core/src/cli/plan-local.ts +10 -2
- package/corpus/core/src/cli/skills-content/assets-skill.ts +83 -0
- package/corpus/core/src/cli/skills-content/canvas.ts +153 -0
- package/corpus/core/src/cli/skills-content/connection.ts +52 -0
- package/corpus/core/src/cli/skills-content/content-skill.ts +109 -0
- package/corpus/core/src/cli/skills-content/design-exploration-skill.ts +118 -0
- package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +228 -0
- package/corpus/core/src/cli/skills-content/document-quality.ts +196 -0
- package/corpus/core/src/cli/skills-content/exemplar.ts +69 -0
- package/corpus/core/src/cli/skills-content/help.ts +77 -0
- package/corpus/core/src/cli/skills-content/index.ts +22 -0
- package/corpus/core/src/cli/skills-content/local-files.ts +95 -0
- package/corpus/core/src/cli/skills-content/plan-setup-auth.ts +80 -0
- package/corpus/core/src/cli/skills-content/visual-plan-skill.ts +470 -0
- package/corpus/core/src/cli/skills-content/visual-recap-skill.ts +547 -0
- package/corpus/core/src/cli/skills-content/visualize-repo-skill.ts +93 -0
- package/corpus/core/src/cli/skills-content/wireframe.ts +349 -0
- package/corpus/core/src/cli/skills.ts +27 -2733
- package/corpus/core/src/client/AgentPanel.tsx +8 -8
- package/corpus/core/src/client/AssistantChat.tsx +83 -39
- package/corpus/core/src/client/CommandMenu.tsx +16 -5
- package/corpus/core/src/client/FeedbackButton.tsx +2 -2
- package/corpus/core/src/client/analytics.ts +29 -0
- package/corpus/core/src/client/app-providers.tsx +18 -5
- package/corpus/core/src/client/blocks/library/wireframe-kit.tsx +16 -2
- package/corpus/core/src/client/chat/tool-call-display.tsx +3 -3
- package/corpus/core/src/client/chat-model-groups.ts +28 -0
- package/corpus/core/src/client/composer/PastedTextChip.tsx +1 -1
- package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +523 -68
- package/corpus/core/src/client/composer/TiptapComposer.tsx +47 -30
- package/corpus/core/src/client/composer/VoiceButton.tsx +22 -5
- package/corpus/core/src/client/composer/index.ts +5 -0
- package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +1271 -35
- package/corpus/core/src/client/context-xray/ContextXRayPanel.tsx +5 -2
- package/corpus/core/src/client/extensions/ExtensionEditor.tsx +37 -4
- package/corpus/core/src/client/extensions/ExtensionQueryErrorState.tsx +47 -0
- package/corpus/core/src/client/extensions/ExtensionSlot.tsx +39 -10
- package/corpus/core/src/client/extensions/ExtensionViewer.tsx +44 -6
- package/corpus/core/src/client/extensions/ExtensionsListPage.tsx +12 -3
- package/corpus/core/src/client/extensions/ExtensionsSidebarSection.tsx +49 -11
- package/corpus/core/src/client/index.ts +5 -13
- package/corpus/core/src/client/progress/RunsTray.tsx +23 -4
- package/corpus/core/src/client/settings/SecretsSection.tsx +387 -266
- package/corpus/core/src/client/settings/SettingsPanel.tsx +117 -38
- package/corpus/core/src/client/settings/SettingsTabsPage.tsx +7 -0
- package/corpus/core/src/client/settings/useBuilderStatus.ts +6 -0
- package/corpus/core/src/client/tool-cells/EditCell.tsx +19 -16
- package/corpus/core/src/client/tool-cells/FilesChangedSummary.tsx +26 -23
- package/corpus/core/src/client/tool-cells/WriteCell.tsx +19 -16
- package/corpus/core/src/client/use-action.ts +12 -0
- package/corpus/core/src/client/use-agent-chat-home-handoff.ts +8 -1
- package/corpus/core/src/client/use-agent-engine-configured.ts +17 -3
- package/corpus/core/src/client/use-db-sync.ts +84 -34
- package/corpus/core/src/client/use-pausing-interval.ts +14 -4
- package/corpus/core/src/client/visual-style-controls.tsx +1 -1
- package/corpus/core/src/deploy/build.ts +36 -14
- package/corpus/core/src/integrations/google-docs-poller.ts +23 -2
- package/corpus/core/src/integrations/plugin.ts +10 -0
- package/corpus/core/src/integrations/scope-store.ts +1 -1
- package/corpus/core/src/integrations/usage-budget-store.ts +1 -1
- package/corpus/core/src/integrations/webhook-handler.ts +27 -2
- package/corpus/core/src/jobs/scheduler.ts +28 -2
- package/corpus/core/src/localization/default-messages.ts +51 -1
- package/corpus/core/src/mcp/oauth-token.ts +6 -1
- package/corpus/core/src/mcp-client/workspace-servers.ts +4 -4
- package/corpus/core/src/observability/routes.ts +36 -0
- package/corpus/core/src/observability/sentiment.ts +261 -0
- package/corpus/core/src/observability/store.ts +23 -0
- package/corpus/core/src/observability/traces.ts +49 -63
- package/corpus/core/src/observability/tracking-identity.ts +55 -0
- package/corpus/core/src/observability/types.ts +13 -0
- package/corpus/core/src/secrets/crypto.ts +28 -8
- package/corpus/core/src/secrets/storage.ts +67 -3
- package/corpus/core/src/server/action-change.ts +5 -1
- package/corpus/core/src/server/action-routes.ts +8 -0
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +199 -0
- package/corpus/core/src/server/agent-chat/browser-team-tools.ts +510 -0
- package/corpus/core/src/server/agent-chat/context-tools.ts +595 -0
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +470 -0
- package/corpus/core/src/server/agent-chat/lazy-fs.ts +11 -0
- package/corpus/core/src/server/agent-chat/mcp-glue.ts +91 -0
- package/corpus/core/src/server/agent-chat/plugin-options.ts +350 -0
- package/corpus/core/src/server/agent-chat/process-run-failure.ts +62 -0
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +688 -0
- package/corpus/core/src/server/agent-chat/recurring-jobs-runtime.ts +80 -0
- package/corpus/core/src/server/agent-chat/request-surface.ts +71 -0
- package/corpus/core/src/server/agent-chat/run-code-tools.ts +67 -0
- package/corpus/core/src/server/agent-chat/script-entries.ts +779 -0
- package/corpus/core/src/server/agent-chat/shared-thread.ts +301 -0
- package/corpus/core/src/server/agent-chat/skill-frontmatter.ts +41 -0
- package/corpus/core/src/server/agent-chat-plugin.ts +364 -4182
- package/corpus/core/src/server/agent-teams.ts +26 -3
- package/corpus/core/src/server/auth.ts +55 -57
- package/corpus/core/src/server/credential-provider.ts +22 -25
- package/corpus/core/src/server/edge.ts +1 -0
- package/corpus/core/src/server/onboarding-html.ts +1 -16
- package/corpus/core/src/server/poll.ts +1 -0
- package/corpus/core/src/server/realtime-voice.ts +335 -14
- package/corpus/core/src/server/request-origin.ts +6 -2
- package/corpus/core/src/server/ssr-handler.ts +55 -2
- package/corpus/core/src/sharing/access.ts +155 -11
- package/corpus/core/src/sharing/registry.ts +7 -0
- package/corpus/core/src/styles/agent-native.css +17 -16
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +7 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -9
- package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/corpus/core/src/templates/workspace-core/src/server/index.ts +4 -2
- package/corpus/core/src/testing.ts +26 -0
- package/corpus/core/src/triggers/dispatcher.ts +23 -2
- package/corpus/core/src/vite/client.ts +135 -3
- package/corpus/core/tsconfig.cli.json +1 -1
- package/corpus/core/tsconfig.json +5 -1
- package/corpus/templates/analytics/.agents/skills/bigquery/SKILL.md +2 -2
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +10 -5
- package/corpus/templates/analytics/AGENTS.md +15 -6
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +79 -43
- package/corpus/templates/analytics/actions/list-explorer-dashboards.ts +3 -3
- package/corpus/templates/analytics/actions/list-sql-dashboards.ts +8 -3
- package/corpus/templates/analytics/actions/navigate.ts +59 -5
- package/corpus/templates/analytics/actions/rename-analysis.ts +8 -2
- package/corpus/templates/analytics/actions/rename-dashboard.ts +8 -7
- package/corpus/templates/analytics/actions/view-screen.ts +7 -29
- package/corpus/templates/analytics/app/components/ProviderCorpusJobNotifier.tsx +20 -3
- package/corpus/templates/analytics/app/components/ResourceLoadError.tsx +42 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +2 -1
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +85 -70
- package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +128 -95
- package/corpus/templates/analytics/app/components/layout/SidebarLoadError.tsx +24 -0
- package/corpus/templates/analytics/app/global.css +19 -20
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +15 -5
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +4 -0
- package/corpus/templates/analytics/app/i18n-data.ts +40 -0
- package/corpus/templates/analytics/app/lib/provider-corpus-job-sync.ts +26 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +41 -343
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +36 -20
- package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +34 -20
- package/corpus/templates/analytics/app/pages/adhoc/explorer/use-explorer-config.ts +42 -41
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +43 -36
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +11 -2
- package/corpus/templates/analytics/app/pages/monitoring/ErrorsPanel.tsx +38 -7
- package/corpus/templates/analytics/app/pages/monitoring/MonitoringPage.tsx +1 -1
- package/corpus/templates/analytics/app/pages/monitoring/errors/i18n.ts +3 -0
- package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +333 -272
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +72 -17
- package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +297 -108
- package/corpus/templates/analytics/app/root.tsx +40 -8
- package/corpus/templates/analytics/app/routes/_index.tsx +14 -2
- package/corpus/templates/analytics/changelog/2026-06-24-first-party-signup-and-pageview-panels-now-honor-dashboard-filters.md +2 -1
- package/corpus/templates/analytics/changelog/2026-06-25-referrer-dashboard-panels-show-external-domains.md +2 -1
- package/corpus/templates/analytics/changelog/2026-07-03-agent-llm-observability-dashboard.md +1 -1
- package/corpus/templates/analytics/changelog/2026-07-06-mobile-chat-header-is-more-compact-and-the-menu-button-opens-navigation.md +1 -0
- package/corpus/templates/analytics/changelog/2026-07-08-dashboard-history-and-chat-context.md +1 -0
- package/corpus/templates/analytics/changelog/2026-07-08-settings-are-cleaner-searchable-and-alerts-have-their-own-tab.md +1 -0
- package/corpus/templates/analytics/changelog/2026-07-08-sidebar-sections-stay-collapsed-until-opened.md +1 -0
- package/corpus/templates/analytics/changelog/2026-07-11-agent-feedback-sentiment-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-analytics-chats-now-start-faster-by-loading-metric-definitio.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-analytics-no-longer-repeatedly-restarts-background-requests-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-analytics-only-asks-for-replay-storage-when-you-enable-sessi.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-charts-now-show-their-loading-skeleton-while-refreshing.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-command-and-sql-previews-now-respond-without-lag.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-command-search-now-reports-loading-failures-and-lets-you-ret.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-dashboard-navigation-now-loads-faster-and-reports-request-fa.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-inferred-message-sentiment-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-microphone-settings-from-realtime-voice-mode-now-open-the-vo.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-more-dashboard-edit-paths-are-now-safe-against-simultaneous-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-realtime-voice-now-shows-a-clear-connection-indicator-comple.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-renaming-a-dashboard-is-now-safe-against-simultaneous-agent-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-renaming-an-analysis-is-now-safe-against-simultaneous-edits.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-replay-event-counts-stay-hidden-until-recordings-finish-load.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-replay-storage-key-mismatches-show-actionable-setup-guidance.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-replay-timelines-group-continuous-scrolling-and-dev-tools-co.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-filters-now-stay-compact-in-a-settings-menu-at-mediu.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-replay-console-errors-now-link-to-matching-issues-or.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-replays-load-large-recordings-faster-and-surface-fai.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-replays-preserve-recorded-styles-and-viewport-layout.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-session-replays-stay-centered-instead-of-clipping-wide-recor.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-11-workspace-mounted-analytics-now-opens-ask-reliably-and-route.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +37 -3
- package/corpus/templates/analytics/package.json +1 -1
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +37 -1
- package/corpus/templates/analytics/server/handlers/session-replay.ts +57 -0
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +1 -24
- package/corpus/templates/analytics/server/lib/dashboard-seeds.ts +0 -5
- package/corpus/templates/analytics/server/lib/dashboards-store.ts +289 -20
- package/corpus/templates/analytics/server/lib/data-dictionary-context.ts +106 -34
- package/corpus/templates/analytics/server/lib/demo-dashboards.ts +20 -4
- package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +12 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +208 -2
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +11 -39
- package/corpus/templates/analytics/server/plugins/onboarding.ts +7 -79
- package/corpus/templates/analytics/server/routes/api/session-replay/recordings/[recordingId]/chunks.get.ts +1 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/assets/app/components/create/RecentDraftsSection.tsx +30 -4
- package/corpus/templates/assets/app/global.css +4 -4
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +0 -1
- package/corpus/templates/assets/app/routes/library.tsx +49 -6
- package/corpus/templates/assets/changelog/2026-07-11-library-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/brain/app/global.css +5 -5
- package/corpus/templates/brain/app/root.tsx +0 -3
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/calendar/.env.example +5 -0
- package/corpus/templates/calendar/app/components/calendar/EventCard.tsx +2 -2
- package/corpus/templates/calendar/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/calendar/app/i18n-data.ts +20 -0
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +37 -1
- package/corpus/templates/calendar/app/pages/BookingsList.tsx +20 -3
- package/corpus/templates/calendar/app/root.tsx +1 -0
- package/corpus/templates/calendar/changelog/2026-07-11-booking-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/calendar/changelog/2026-07-11-event-cards-give-subtle-press-feedback-and-smoother-hover.md +6 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/clips/actions/decline-invite.ts +8 -0
- package/corpus/templates/clips/app/components/library/folder-tree.tsx +209 -187
- package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +2 -2
- package/corpus/templates/clips/app/components/player/reactions-tray.tsx +17 -5
- package/corpus/templates/clips/app/components/player/scrubber.tsx +5 -3
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +2 -2
- package/corpus/templates/clips/app/components/workspace/insights-hub.tsx +119 -95
- package/corpus/templates/clips/app/global.css +45 -0
- package/corpus/templates/clips/app/hooks/use-auto-title.ts +74 -8
- package/corpus/templates/clips/app/hooks/use-library.ts +12 -25
- package/corpus/templates/clips/app/root.tsx +4 -0
- package/corpus/templates/clips/app/routes/_app.notifications.tsx +23 -2
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +20 -22
- package/corpus/templates/clips/app/routes/_app.trash.tsx +24 -2
- package/corpus/templates/clips/changelog/2026-07-11-controls-and-folders-now-move-more-smoothly.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-declining-an-invitation-now-requires-being-its-recipient.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-generated-titles-no-longer-cause-continuous-background-refreshes.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-recording-overlays-are-lighter-weight-and-no-longer-cause-pa.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-s3-storage-setup-stays-collapsed-until-you-choose-it-as-the-.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-11-workspace-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.css +34 -5
- package/corpus/templates/clips/chrome-extension/src/styles.css +2 -2
- package/corpus/templates/clips/desktop/src/styles.css +71 -26
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/content/actions/move-document.ts +34 -18
- package/corpus/templates/content/app/components/QueryErrorState.tsx +39 -0
- package/corpus/templates/content/app/components/editor/LinkHoverPreview.tsx +1 -1
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +225 -1435
- package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +368 -0
- package/corpus/templates/content/app/components/editor/database/ListView.tsx +353 -0
- package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +580 -0
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +11 -2
- package/corpus/templates/content/app/global.css +19 -19
- package/corpus/templates/content/app/hooks/use-comments.ts +0 -1
- package/corpus/templates/content/app/root.tsx +2 -2
- package/corpus/templates/content/app/routes/_app._index.tsx +11 -1
- package/corpus/templates/content/changelog/2026-07-11-comments-now-update-from-live-collaboration-events-without-c.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-document-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-editor-toggle-feedback-now-feels-more-responsive.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-moving-documents-at-the-same-time-no-longer-scrambles-their-.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-public-document-chats-now-start-faster-while-keeping-full-do.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-reopening-a-comment-now-uses-consistent-permissions-everywhe.md +6 -0
- package/corpus/templates/content/changelog/2026-07-11-sidebar-resizing-now-tracks-your-cursor-instantly-instead-of.md +6 -0
- package/corpus/templates/content/server/lib/public-documents.ts +47 -10
- package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +24 -24
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/design/app/components/QueryErrorState.tsx +24 -0
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +1 -1
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +5 -2
- package/corpus/templates/design/app/components/design/EditPanel.tsx +326 -319
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +198 -193
- package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +11 -4
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +1 -1
- package/corpus/templates/design/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/design/app/components/layout/Layout.tsx +1 -1
- package/corpus/templates/design/app/pages/DesignSystems.tsx +7 -1
- package/corpus/templates/design/app/pages/Index.tsx +14 -2
- package/corpus/templates/design/app/pages/Present.tsx +16 -3
- package/corpus/templates/design/app/pages/Templates.tsx +10 -4
- package/corpus/templates/design/app/pages/design-editor/canvas-primitive-insert.ts +484 -0
- package/corpus/templates/design/app/pages/design-editor/clone-and-pen-edit.ts +378 -0
- package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +138 -0
- package/corpus/templates/design/app/pages/design-editor/dom-utils.ts +15 -0
- package/corpus/templates/design/app/pages/design-editor/generation-prompt-directives.ts +180 -0
- package/corpus/templates/design/app/pages/design-editor/html-layer-positioning.ts +226 -0
- package/corpus/templates/design/app/pages/design-editor/png-export-render.ts +348 -0
- package/corpus/templates/design/app/pages/design-editor/screen-command-utils.ts +160 -0
- package/corpus/templates/design/app/pages/design-editor/text-edit-utils.ts +238 -0
- package/corpus/templates/design/app/pages/design-editor/tool-state.ts +23 -1
- package/corpus/templates/design/app/pages/design-editor/types.ts +25 -0
- package/corpus/templates/design/app/root.tsx +10 -1
- package/corpus/templates/design/changelog/2026-07-11-canvas-context-menus-now-open-without-motion-jitter.md +6 -0
- package/corpus/templates/design/changelog/2026-07-11-design-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/design/changelog/2026-07-11-inspector-tooltips-appear-instantly-as-you-sweep-across-icon.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/dispatch/app/i18n/zh-TW.ts +10 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +123 -0
- package/corpus/templates/dispatch/app/routes/integrations.tsx +163 -144
- package/corpus/templates/dispatch/changelog/2026-07-11-dispatch-mcp-connections-now-start-with-safer-app-access-and.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-11-overview-and-chat-now-share-a-cleaner-more-stable-flow.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-11-query-errors-now-show-a-retry-option.md +6 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +3 -3
- package/corpus/templates/forms/app/root.tsx +34 -8
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/macros/app/components/DailyProgress.tsx +25 -5
- package/corpus/templates/macros/app/components/QueryErrorState.tsx +31 -0
- package/corpus/templates/macros/app/components/WeightTracker.tsx +5 -1
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +1 -2
- package/corpus/templates/macros/app/components/ui/button.tsx +1 -1
- package/corpus/templates/macros/app/components/ui/progress.tsx +1 -1
- package/corpus/templates/macros/app/components/ui/tabs.tsx +1 -1
- package/corpus/templates/macros/app/i18n/ar-SA.ts +2 -0
- package/corpus/templates/macros/app/i18n/de-DE.ts +2 -0
- package/corpus/templates/macros/app/i18n/en-US.ts +2 -0
- package/corpus/templates/macros/app/i18n/es-ES.ts +2 -0
- package/corpus/templates/macros/app/i18n/fr-FR.ts +2 -0
- package/corpus/templates/macros/app/i18n/hi-IN.ts +2 -0
- package/corpus/templates/macros/app/i18n/ja-JP.ts +2 -0
- package/corpus/templates/macros/app/i18n/ko-KR.ts +2 -0
- package/corpus/templates/macros/app/i18n/pt-BR.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-CN.ts +2 -0
- package/corpus/templates/macros/app/i18n/zh-TW.ts +2 -0
- package/corpus/templates/macros/app/root.tsx +0 -3
- package/corpus/templates/macros/app/routes/_index.tsx +22 -12
- package/corpus/templates/macros/app/routes/analytics.tsx +31 -10
- package/corpus/templates/macros/changelog/2026-07-11-daily-tracking-now-loads-and-updates-more-quickly.md +6 -0
- package/corpus/templates/macros/changelog/2026-07-11-data-load-failures-now-show-a-clear-error-with-a-retry-actio.md +6 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/mail/.env.example +16 -11
- package/corpus/templates/mail/actions/list-emails.ts +39 -35
- package/corpus/templates/mail/app/components/email/ComposeModal.tsx +58 -6
- package/corpus/templates/mail/app/components/email/EmailListItem.tsx +35 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +113 -104
- package/corpus/templates/mail/app/hooks/use-compose-state.ts +1 -0
- package/corpus/templates/mail/app/root.tsx +9 -22
- package/corpus/templates/mail/changelog/2026-07-11-compose-and-navigation-motion-now-feel-faster-and-smoother.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-11-swipe-to-archive-or-snooze-now-responds-to-quick-flicks-not-.md +6 -0
- package/corpus/templates/mail/changelog/2026-07-11-the-assistant-now-sees-the-same-inbox-you-do-snoozed-mail-st.md +6 -0
- package/corpus/templates/mail/server/handlers/emails.ts +25 -69
- package/corpus/templates/mail/server/lib/list-inbox-emails.ts +169 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/corpus/templates/plan/.env.example +4 -0
- package/corpus/templates/plan/actions/create-plan-design.ts +89 -81
- package/corpus/templates/plan/actions/create-prototype-plan.ts +72 -59
- package/corpus/templates/plan/actions/create-ui-plan.ts +70 -55
- package/corpus/templates/plan/actions/create-visual-plan.ts +65 -51
- package/corpus/templates/plan/actions/update-local-plan-folder.ts +43 -30
- package/corpus/templates/plan/actions/update-visual-plan.ts +81 -64
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +17 -0
- package/corpus/templates/plan/app/components/ui/tabs.tsx +1 -1
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +5 -2
- package/corpus/templates/plan/app/hooks/use-plans.ts +6 -13
- package/corpus/templates/plan/app/i18n/ar-SA.ts +10 -0
- package/corpus/templates/plan/app/i18n/de-DE.ts +10 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +10 -0
- package/corpus/templates/plan/app/i18n/es-ES.ts +10 -0
- package/corpus/templates/plan/app/i18n/fr-FR.ts +10 -0
- package/corpus/templates/plan/app/i18n/hi-IN.ts +10 -0
- package/corpus/templates/plan/app/i18n/ja-JP.ts +10 -0
- package/corpus/templates/plan/app/i18n/ko-KR.ts +10 -0
- package/corpus/templates/plan/app/i18n/pt-BR.ts +10 -0
- package/corpus/templates/plan/app/i18n/zh-CN.ts +10 -0
- package/corpus/templates/plan/app/i18n/zh-TW.ts +10 -0
- package/corpus/templates/plan/app/lib/plan-local-bridge.ts +80 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +157 -31
- package/corpus/templates/plan/app/root.tsx +11 -0
- package/corpus/templates/plan/changelog/2026-07-11-local-plans-now-explain-and-recover-from-browser-permission-.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-edits-now-save-atomically-and-can-no-longer-partially-a.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-lists-now-show-a-clear-error-with-a-retry-action-when-t.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-11-plan-refreshes-only-when-content-changes.md +6 -0
- package/corpus/templates/plan/shared/plan-content.ts +546 -260
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +1 -1
- package/corpus/templates/slides/actions/delete-slide-comment.ts +49 -0
- package/corpus/templates/slides/actions/update-slide-comment.ts +93 -0
- package/corpus/templates/slides/actions/view-screen.ts +14 -6
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +37 -11
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +1 -1
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +2 -2
- package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +2 -2
- package/corpus/templates/slides/app/components/layout/Header.tsx +1 -1
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +4 -2
- package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +4 -3
- package/corpus/templates/slides/app/context/DeckContext.tsx +10 -0
- package/corpus/templates/slides/app/hooks/use-slide-comments.ts +7 -31
- package/corpus/templates/slides/app/i18n/ar-SA.ts +6 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +6 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +6 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +6 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +6 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +6 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +6 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +6 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +6 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +5 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +5 -0
- package/corpus/templates/slides/app/pages/DesignSystems.tsx +23 -2
- package/corpus/templates/slides/app/pages/Index.tsx +29 -1
- package/corpus/templates/slides/changelog/2026-07-11-comment-load-failures-now-show-a-retry-action-instead-of-say.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-comment-pins-now-clear-with-a-faster-smoother-confirmation.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-comments-now-update-from-live-collaboration-events-without-c.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-deck-and-design-system-load-failures-now-show-a-retry-action.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-editor-toggles-and-toolbar-menus-now-animate-smoothly.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-the-assistant-can-now-resolve-reopen-and-delete-slide-commen.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-11-viewing-slides-no-longer-loads-every-deck-s-full-contents-in.md +6 -0
- package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +29 -48
- package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +29 -65
- package/dist/action-change-marker.d.ts +1 -0
- package/dist/action-change-marker.d.ts.map +1 -1
- package/dist/action-change-marker.js +7 -1
- package/dist/action-change-marker.js.map +1 -1
- package/dist/action.d.ts +23 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +13 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +3 -0
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/context-directives-transform.d.ts +25 -0
- package/dist/agent/engine/context-directives-transform.d.ts.map +1 -0
- package/dist/agent/engine/context-directives-transform.js +53 -0
- package/dist/agent/engine/context-directives-transform.js.map +1 -0
- package/dist/agent/engine/continuation-dispatch-retry.d.ts +40 -0
- package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -0
- package/dist/agent/engine/continuation-dispatch-retry.js +109 -0
- package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -0
- package/dist/agent/engine/tool-call-journal-seed.d.ts +46 -0
- package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -0
- package/dist/agent/engine/tool-call-journal-seed.js +60 -0
- package/dist/agent/engine/tool-call-journal-seed.js.map +1 -0
- package/dist/agent/production-agent.d.ts +7 -0
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +102 -222
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/changelog/parse.d.ts +4 -2
- package/dist/changelog/parse.d.ts.map +1 -1
- package/dist/changelog/parse.js +5 -3
- package/dist/changelog/parse.js.map +1 -1
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +7 -3
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/plan-local.d.ts.map +1 -1
- package/dist/cli/plan-local.js +8 -2
- package/dist/cli/plan-local.js.map +1 -1
- package/dist/cli/skills-content/assets-skill.d.ts +2 -0
- package/dist/cli/skills-content/assets-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/assets-skill.js +84 -0
- package/dist/cli/skills-content/assets-skill.js.map +1 -0
- package/dist/cli/skills-content/canvas.d.ts +4 -0
- package/dist/cli/skills-content/canvas.d.ts.map +1 -0
- package/dist/cli/skills-content/canvas.js +152 -0
- package/dist/cli/skills-content/canvas.js.map +1 -0
- package/dist/cli/skills-content/connection.d.ts +2 -0
- package/dist/cli/skills-content/connection.d.ts.map +1 -0
- package/dist/cli/skills-content/connection.js +53 -0
- package/dist/cli/skills-content/connection.js.map +1 -0
- package/dist/cli/skills-content/content-skill.d.ts +2 -0
- package/dist/cli/skills-content/content-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/content-skill.js +110 -0
- package/dist/cli/skills-content/content-skill.js.map +1 -0
- package/dist/cli/skills-content/design-exploration-skill.d.ts +2 -0
- package/dist/cli/skills-content/design-exploration-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/design-exploration-skill.js +119 -0
- package/dist/cli/skills-content/design-exploration-skill.js.map +1 -0
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts +2 -0
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/design-visual-edit-skill.js +229 -0
- package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -0
- package/dist/cli/skills-content/document-quality.d.ts +4 -0
- package/dist/cli/skills-content/document-quality.d.ts.map +1 -0
- package/dist/cli/skills-content/document-quality.js +195 -0
- package/dist/cli/skills-content/document-quality.js.map +1 -0
- package/dist/cli/skills-content/exemplar.d.ts +4 -0
- package/dist/cli/skills-content/exemplar.d.ts.map +1 -0
- package/dist/cli/skills-content/exemplar.js +68 -0
- package/dist/cli/skills-content/exemplar.js.map +1 -0
- package/dist/cli/skills-content/help.d.ts +2 -0
- package/dist/cli/skills-content/help.d.ts.map +1 -0
- package/dist/cli/skills-content/help.js +78 -0
- package/dist/cli/skills-content/help.js.map +1 -0
- package/dist/cli/skills-content/index.d.ts +23 -0
- package/dist/cli/skills-content/index.d.ts.map +1 -0
- package/dist/cli/skills-content/index.js +23 -0
- package/dist/cli/skills-content/index.js.map +1 -0
- package/dist/cli/skills-content/local-files.d.ts +2 -0
- package/dist/cli/skills-content/local-files.d.ts.map +1 -0
- package/dist/cli/skills-content/local-files.js +96 -0
- package/dist/cli/skills-content/local-files.js.map +1 -0
- package/dist/cli/skills-content/plan-setup-auth.d.ts +9 -0
- package/dist/cli/skills-content/plan-setup-auth.d.ts.map +1 -0
- package/dist/cli/skills-content/plan-setup-auth.js +81 -0
- package/dist/cli/skills-content/plan-setup-auth.js.map +1 -0
- package/dist/cli/skills-content/visual-plan-skill.d.ts +2 -0
- package/dist/cli/skills-content/visual-plan-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visual-plan-skill.js +471 -0
- package/dist/cli/skills-content/visual-plan-skill.js.map +1 -0
- package/dist/cli/skills-content/visual-recap-skill.d.ts +2 -0
- package/dist/cli/skills-content/visual-recap-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visual-recap-skill.js +548 -0
- package/dist/cli/skills-content/visual-recap-skill.js.map +1 -0
- package/dist/cli/skills-content/visualize-repo-skill.d.ts +2 -0
- package/dist/cli/skills-content/visualize-repo-skill.d.ts.map +1 -0
- package/dist/cli/skills-content/visualize-repo-skill.js +94 -0
- package/dist/cli/skills-content/visualize-repo-skill.js.map +1 -0
- package/dist/cli/skills-content/wireframe.d.ts +4 -0
- package/dist/cli/skills-content/wireframe.d.ts.map +1 -0
- package/dist/cli/skills-content/wireframe.js +347 -0
- package/dist/cli/skills-content/wireframe.js.map +1 -0
- package/dist/cli/skills.d.ts +2 -10
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +2 -2710
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +6 -5
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +7 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +62 -40
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +15 -3
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/FeedbackButton.js +2 -2
- package/dist/client/FeedbackButton.js.map +1 -1
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +26 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/app-providers.d.ts +13 -5
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +9 -6
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.d.ts +2 -0
- package/dist/client/blocks/library/wireframe-kit.d.ts.map +1 -1
- package/dist/client/blocks/library/wireframe-kit.js +9 -2
- package/dist/client/blocks/library/wireframe-kit.js.map +1 -1
- package/dist/client/chat/tool-call-display.d.ts +4 -0
- package/dist/client/chat/tool-call-display.d.ts.map +1 -1
- package/dist/client/chat/tool-call-display.js +3 -3
- package/dist/client/chat/tool-call-display.js.map +1 -1
- package/dist/client/chat-model-groups.d.ts.map +1 -1
- package/dist/client/chat-model-groups.js +24 -0
- package/dist/client/chat-model-groups.js.map +1 -1
- package/dist/client/composer/PastedTextChip.js +1 -1
- package/dist/client/composer/PastedTextChip.js.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.d.ts +40 -2
- package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/RealtimeVoiceMode.js +186 -35
- package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +4 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +48 -30
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/composer/VoiceButton.d.ts +2 -0
- package/dist/client/composer/VoiceButton.d.ts.map +1 -1
- package/dist/client/composer/VoiceButton.js +9 -3
- package/dist/client/composer/VoiceButton.js.map +1 -1
- package/dist/client/composer/index.d.ts +2 -2
- package/dist/client/composer/index.d.ts.map +1 -1
- package/dist/client/composer/index.js +1 -1
- package/dist/client/composer/index.js.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.d.ts +104 -2
- package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
- package/dist/client/composer/useRealtimeVoiceMode.js +1015 -35
- package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.d.ts.map +1 -1
- package/dist/client/context-xray/ContextXRayPanel.js +4 -1
- package/dist/client/context-xray/ContextXRayPanel.js.map +1 -1
- package/dist/client/extensions/ExtensionEditor.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionEditor.js +15 -5
- package/dist/client/extensions/ExtensionEditor.js.map +1 -1
- package/dist/client/extensions/ExtensionQueryErrorState.d.ts +8 -0
- package/dist/client/extensions/ExtensionQueryErrorState.d.ts.map +1 -0
- package/dist/client/extensions/ExtensionQueryErrorState.js +11 -0
- package/dist/client/extensions/ExtensionQueryErrorState.js.map +1 -0
- package/dist/client/extensions/ExtensionSlot.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionSlot.js +17 -7
- package/dist/client/extensions/ExtensionSlot.js.map +1 -1
- package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionViewer.js +17 -7
- package/dist/client/extensions/ExtensionViewer.js.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsListPage.js +5 -3
- package/dist/client/extensions/ExtensionsListPage.js.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.d.ts.map +1 -1
- package/dist/client/extensions/ExtensionsSidebarSection.js +21 -8
- package/dist/client/extensions/ExtensionsSidebarSection.js.map +1 -1
- package/dist/client/index.d.ts +1 -3
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -6
- package/dist/client/index.js.map +1 -1
- package/dist/client/progress/RunsTray.d.ts.map +1 -1
- package/dist/client/progress/RunsTray.js +17 -4
- package/dist/client/progress/RunsTray.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts +2 -3
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +46 -22
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/SettingsPanel.d.ts +9 -0
- package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
- package/dist/client/settings/SettingsPanel.js +46 -12
- package/dist/client/settings/SettingsPanel.js.map +1 -1
- package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
- package/dist/client/settings/SettingsTabsPage.js +4 -0
- package/dist/client/settings/SettingsTabsPage.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +2 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +4 -0
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/tool-cells/EditCell.d.ts.map +1 -1
- package/dist/client/tool-cells/EditCell.js +2 -1
- package/dist/client/tool-cells/EditCell.js.map +1 -1
- package/dist/client/tool-cells/FilesChangedSummary.d.ts.map +1 -1
- package/dist/client/tool-cells/FilesChangedSummary.js +2 -1
- package/dist/client/tool-cells/FilesChangedSummary.js.map +1 -1
- package/dist/client/tool-cells/WriteCell.d.ts.map +1 -1
- package/dist/client/tool-cells/WriteCell.js +2 -1
- package/dist/client/tool-cells/WriteCell.js.map +1 -1
- package/dist/client/use-action.d.ts +2 -0
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +10 -0
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.d.ts +2 -0
- package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -1
- package/dist/client/use-agent-chat-home-handoff.js +7 -1
- package/dist/client/use-agent-chat-home-handoff.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +17 -3
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +8 -2
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +57 -32
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/client/use-pausing-interval.d.ts.map +1 -1
- package/dist/client/use-pausing-interval.js +16 -4
- package/dist/client/use-pausing-interval.js.map +1 -1
- package/dist/client/visual-style-controls.js +1 -1
- package/dist/client/visual-style-controls.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +36 -14
- package/dist/deploy/build.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts +7 -0
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +13 -3
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +10 -0
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/scope-store.js +1 -1
- package/dist/integrations/scope-store.js.map +1 -1
- package/dist/integrations/usage-budget-store.js +1 -1
- package/dist/integrations/usage-budget-store.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts +11 -0
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +16 -4
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +12 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +13 -3
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +47 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +48 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/oauth-token.d.ts +1 -1
- package/dist/mcp/oauth-token.d.ts.map +1 -1
- package/dist/mcp/oauth-token.js +6 -1
- package/dist/mcp/oauth-token.js.map +1 -1
- package/dist/mcp-client/workspace-servers.js +4 -4
- package/dist/mcp-client/workspace-servers.js.map +1 -1
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/routes.d.ts +5 -5
- package/dist/observability/routes.d.ts.map +1 -1
- package/dist/observability/routes.js +32 -0
- package/dist/observability/routes.js.map +1 -1
- package/dist/observability/sentiment.d.ts +42 -0
- package/dist/observability/sentiment.d.ts.map +1 -0
- package/dist/observability/sentiment.js +196 -0
- package/dist/observability/sentiment.js.map +1 -0
- package/dist/observability/store.d.ts +5 -0
- package/dist/observability/store.d.ts.map +1 -1
- package/dist/observability/store.js +17 -0
- package/dist/observability/store.js.map +1 -1
- package/dist/observability/traces.d.ts +2 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +42 -57
- package/dist/observability/traces.js.map +1 -1
- package/dist/observability/tracking-identity.d.ts +3 -0
- package/dist/observability/tracking-identity.d.ts.map +1 -0
- package/dist/observability/tracking-identity.js +51 -0
- package/dist/observability/tracking-identity.js.map +1 -0
- package/dist/observability/types.d.ts +10 -0
- package/dist/observability/types.d.ts.map +1 -1
- package/dist/observability/types.js +3 -0
- package/dist/observability/types.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/crypto.d.ts +7 -6
- package/dist/secrets/crypto.d.ts.map +1 -1
- package/dist/secrets/crypto.js +30 -11
- package/dist/secrets/crypto.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/secrets/storage.d.ts +6 -0
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +61 -3
- package/dist/secrets/storage.js.map +1 -1
- package/dist/server/action-change.d.ts +1 -0
- package/dist/server/action-change.d.ts.map +1 -1
- package/dist/server/action-change.js +4 -1
- package/dist/server/action-change.js.map +1 -1
- package/dist/server/action-routes.d.ts.map +1 -1
- package/dist/server/action-routes.js +5 -0
- package/dist/server/action-routes.js.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.d.ts +50 -0
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -0
- package/dist/server/agent-chat/action-filters-a2a.js +127 -0
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -0
- package/dist/server/agent-chat/browser-team-tools.d.ts +21 -0
- package/dist/server/agent-chat/browser-team-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/browser-team-tools.js +417 -0
- package/dist/server/agent-chat/browser-team-tools.js.map +1 -0
- package/dist/server/agent-chat/context-tools.d.ts +33 -0
- package/dist/server/agent-chat/context-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/context-tools.js +520 -0
- package/dist/server/agent-chat/context-tools.js.map +1 -0
- package/dist/server/agent-chat/framework-prompts.d.ts +65 -0
- package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -0
- package/dist/server/agent-chat/framework-prompts.js +403 -0
- package/dist/server/agent-chat/framework-prompts.js.map +1 -0
- package/dist/server/agent-chat/lazy-fs.d.ts +2 -0
- package/dist/server/agent-chat/lazy-fs.d.ts.map +1 -0
- package/dist/server/agent-chat/lazy-fs.js +11 -0
- package/dist/server/agent-chat/lazy-fs.js.map +1 -0
- package/dist/server/agent-chat/mcp-glue.d.ts +9 -0
- package/dist/server/agent-chat/mcp-glue.d.ts.map +1 -0
- package/dist/server/agent-chat/mcp-glue.js +63 -0
- package/dist/server/agent-chat/mcp-glue.js.map +1 -0
- package/dist/server/agent-chat/plugin-options.d.ts +322 -0
- package/dist/server/agent-chat/plugin-options.d.ts.map +1 -0
- package/dist/server/agent-chat/plugin-options.js +2 -0
- package/dist/server/agent-chat/plugin-options.js.map +1 -0
- package/dist/server/agent-chat/process-run-failure.d.ts +12 -0
- package/dist/server/agent-chat/process-run-failure.d.ts.map +1 -0
- package/dist/server/agent-chat/process-run-failure.js +24 -0
- package/dist/server/agent-chat/process-run-failure.js.map +1 -0
- package/dist/server/agent-chat/prompt-resources.d.ts +28 -0
- package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -0
- package/dist/server/agent-chat/prompt-resources.js +514 -0
- package/dist/server/agent-chat/prompt-resources.js.map +1 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts +5 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.d.ts.map +1 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.js +53 -0
- package/dist/server/agent-chat/recurring-jobs-runtime.js.map +1 -0
- package/dist/server/agent-chat/request-surface.d.ts +8 -0
- package/dist/server/agent-chat/request-surface.d.ts.map +1 -0
- package/dist/server/agent-chat/request-surface.js +56 -0
- package/dist/server/agent-chat/request-surface.js.map +1 -0
- package/dist/server/agent-chat/run-code-tools.d.ts +17 -0
- package/dist/server/agent-chat/run-code-tools.d.ts.map +1 -0
- package/dist/server/agent-chat/run-code-tools.js +55 -0
- package/dist/server/agent-chat/run-code-tools.js.map +1 -0
- package/dist/server/agent-chat/script-entries.d.ts +47 -0
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -0
- package/dist/server/agent-chat/script-entries.js +633 -0
- package/dist/server/agent-chat/script-entries.js.map +1 -0
- package/dist/server/agent-chat/shared-thread.d.ts +33 -0
- package/dist/server/agent-chat/shared-thread.d.ts.map +1 -0
- package/dist/server/agent-chat/shared-thread.js +242 -0
- package/dist/server/agent-chat/shared-thread.js.map +1 -0
- package/dist/server/agent-chat/skill-frontmatter.d.ts +7 -0
- package/dist/server/agent-chat/skill-frontmatter.d.ts.map +1 -0
- package/dist/server/agent-chat/skill-frontmatter.js +26 -0
- package/dist/server/agent-chat/skill-frontmatter.js.map +1 -0
- package/dist/server/agent-chat-plugin.d.ts +45 -486
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +173 -3005
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-teams.d.ts +10 -0
- package/dist/server/agent-teams.d.ts.map +1 -1
- package/dist/server/agent-teams.js +13 -3
- package/dist/server/agent-teams.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +50 -52
- package/dist/server/auth.js.map +1 -1
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +22 -21
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/edge.d.ts +1 -0
- package/dist/server/edge.d.ts.map +1 -1
- package/dist/server/edge.js +1 -0
- package/dist/server/edge.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +1 -16
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +1 -0
- package/dist/server/poll.js.map +1 -1
- package/dist/server/realtime-voice.d.ts +10 -0
- package/dist/server/realtime-voice.d.ts.map +1 -1
- package/dist/server/realtime-voice.js +249 -15
- package/dist/server/realtime-voice.js.map +1 -1
- package/dist/server/request-origin.d.ts.map +1 -1
- package/dist/server/request-origin.js +6 -3
- package/dist/server/request-origin.js.map +1 -1
- package/dist/server/ssr-handler.d.ts.map +1 -1
- package/dist/server/ssr-handler.js +47 -2
- package/dist/server/ssr-handler.js.map +1 -1
- package/dist/sharing/access.d.ts +63 -3
- package/dist/sharing/access.d.ts.map +1 -1
- package/dist/sharing/access.js +53 -15
- package/dist/sharing/access.js.map +1 -1
- package/dist/sharing/registry.d.ts +7 -0
- package/dist/sharing/registry.d.ts.map +1 -1
- package/dist/sharing/registry.js.map +1 -1
- package/dist/styles/agent-native.css +17 -16
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/dist/templates/default/app/i18n/ar-SA.ts +6 -0
- package/dist/templates/default/app/i18n/de-DE.ts +6 -0
- package/dist/templates/default/app/i18n/en-US.ts +6 -0
- package/dist/templates/default/app/i18n/es-ES.ts +6 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +6 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +6 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +6 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +6 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +6 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +6 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +6 -0
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -9
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/dist/templates/workspace-core/src/server/index.ts +4 -2
- package/dist/testing.d.ts +16 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +16 -0
- package/dist/testing.js.map +1 -0
- package/dist/triggers/dispatcher.d.ts +7 -0
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +13 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts +16 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +111 -3
- package/dist/vite/client.js.map +1 -1
- package/docs/content/authentication.mdx +3 -3
- package/docs/content/doctor.mdx +170 -0
- package/docs/content/external-agents.mdx +8 -7
- package/docs/content/locales/ar-SA/authentication.mdx +2 -2
- package/docs/content/locales/ar-SA/external-agents.mdx +8 -7
- package/docs/content/locales/ar-SA/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ar-SA/security.mdx +2 -0
- package/docs/content/locales/de-DE/authentication.mdx +1 -1
- package/docs/content/locales/de-DE/external-agents.mdx +8 -7
- package/docs/content/locales/de-DE/mcp-protocol.mdx +1 -1
- package/docs/content/locales/de-DE/security.mdx +2 -0
- package/docs/content/locales/es-ES/authentication.mdx +2 -2
- package/docs/content/locales/es-ES/external-agents.mdx +8 -7
- package/docs/content/locales/es-ES/mcp-protocol.mdx +1 -1
- package/docs/content/locales/es-ES/security.mdx +2 -0
- package/docs/content/locales/fr-FR/authentication.mdx +1 -1
- package/docs/content/locales/fr-FR/external-agents.mdx +8 -7
- package/docs/content/locales/fr-FR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/fr-FR/security.mdx +2 -0
- package/docs/content/locales/hi-IN/authentication.mdx +2 -2
- package/docs/content/locales/hi-IN/external-agents.mdx +8 -7
- package/docs/content/locales/hi-IN/mcp-protocol.mdx +1 -1
- package/docs/content/locales/hi-IN/security.mdx +2 -0
- package/docs/content/locales/ja-JP/authentication.mdx +2 -2
- package/docs/content/locales/ja-JP/external-agents.mdx +8 -7
- package/docs/content/locales/ja-JP/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ja-JP/security.mdx +2 -0
- package/docs/content/locales/ko-KR/authentication.mdx +2 -2
- package/docs/content/locales/ko-KR/external-agents.mdx +8 -7
- package/docs/content/locales/ko-KR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/ko-KR/security.mdx +2 -0
- package/docs/content/locales/pt-BR/authentication.mdx +2 -2
- package/docs/content/locales/pt-BR/external-agents.mdx +8 -7
- package/docs/content/locales/pt-BR/mcp-protocol.mdx +1 -1
- package/docs/content/locales/pt-BR/security.mdx +2 -0
- package/docs/content/locales/zh-CN/authentication.mdx +2 -2
- package/docs/content/locales/zh-CN/external-agents.mdx +8 -7
- package/docs/content/locales/zh-CN/mcp-protocol.mdx +1 -1
- package/docs/content/locales/zh-CN/security.mdx +2 -0
- package/docs/content/locales/zh-TW/authentication.mdx +2 -2
- package/docs/content/locales/zh-TW/external-agents.mdx +8 -7
- package/docs/content/locales/zh-TW/mcp-protocol.mdx +1 -1
- package/docs/content/locales/zh-TW/security.mdx +2 -0
- package/docs/content/mcp-protocol.mdx +1 -1
- package/docs/content/security.mdx +2 -0
- package/package.json +7 -3
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/src/templates/default/app/i18n/ar-SA.ts +6 -0
- package/src/templates/default/app/i18n/de-DE.ts +6 -0
- package/src/templates/default/app/i18n/en-US.ts +6 -0
- package/src/templates/default/app/i18n/es-ES.ts +6 -0
- package/src/templates/default/app/i18n/fr-FR.ts +6 -0
- package/src/templates/default/app/i18n/hi-IN.ts +6 -0
- package/src/templates/default/app/i18n/ja-JP.ts +6 -0
- package/src/templates/default/app/i18n/ko-KR.ts +6 -0
- package/src/templates/default/app/i18n/pt-BR.ts +6 -0
- package/src/templates/default/app/i18n/zh-CN.ts +6 -0
- package/src/templates/default/app/i18n/zh-TW.ts +6 -0
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +27 -29
- package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +2 -1
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +1 -1
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +32 -0
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +2 -2
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +7 -3
- package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +39 -9
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +25 -0
- package/src/templates/workspace-core/src/server/index.ts +4 -2
- package/corpus/core/src/client/ProductionAgentPanel.tsx +0 -9
- package/corpus/core/src/client/auth-redirect-url.ts +0 -23
- package/corpus/core/src/client/useProductionAgent.ts +0 -253
- package/corpus/core/src/shared/auth-redirect-url.ts +0 -1
- package/corpus/templates/analytics/app/pages/Index.tsx +0 -16
- package/corpus/templates/analytics/seeds/dashboards/agent-observability-llm.json +0 -173
- package/dist/client/ProductionAgentPanel.d.ts +0 -6
- package/dist/client/ProductionAgentPanel.d.ts.map +0 -1
- package/dist/client/ProductionAgentPanel.js +0 -6
- package/dist/client/ProductionAgentPanel.js.map +0 -1
- package/dist/client/auth-redirect-url.d.ts +0 -2
- package/dist/client/auth-redirect-url.d.ts.map +0 -1
- package/dist/client/auth-redirect-url.js +0 -19
- package/dist/client/auth-redirect-url.js.map +0 -1
- package/dist/client/useProductionAgent.d.ts +0 -24
- package/dist/client/useProductionAgent.d.ts.map +0 -1
- package/dist/client/useProductionAgent.js +0 -179
- package/dist/client/useProductionAgent.js.map +0 -1
- package/dist/shared/auth-redirect-url.d.ts +0 -2
- package/dist/shared/auth-redirect-url.d.ts.map +0 -1
- package/dist/shared/auth-redirect-url.js +0 -2
- package/dist/shared/auth-redirect-url.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-local.js","sourceRoot":"","sources":["../../src/cli/plan-local.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Plan helper commands.\n *\n * The `plan local` commands are intentionally separate from the Plan app\n * actions. They do not call MCP, hosted write actions, SQLite, or hosted\n * storage; they only read local files or serve them from a localhost bridge so\n * privacy-focused users have an auditable no-DB path. The top-level\n * `plan blocks` command is a schema-only, no-auth helper for fetching the\n * public block catalog before authoring local MDX; it never sends plan content.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport http, {\n type IncomingMessage,\n type Server,\n type ServerResponse,\n} from \"node:http\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n DEFAULT_PLAN_APP_URL,\n defaultPlanBlocksOut,\n fetchPlanBlockCatalog,\n normalizePlanBlockFormat,\n planActionEndpoint,\n} from \"./plan-blocks.js\";\n\ntype LocalPlanKind = \"plan\" | \"recap\";\n\ntype LocalPlanFiles = {\n dir: string;\n planMdx: string;\n canvasMdx?: string;\n prototypeMdx?: string;\n stateJson?: string;\n assets?: Record<string, string>;\n};\n\nexport type LocalPlanValidationIssue = {\n file: string;\n line: number;\n message: string;\n};\n\ntype LocalPlanPreviewInput = {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n};\n\ntype LocalPlanPreviewResult = {\n ok: true;\n dir: string;\n out?: string;\n url: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n opened?: boolean;\n openCommand?: string;\n openError?: string;\n};\n\ntype LocalPlanBridgeMdxFolder = {\n \"plan.mdx\": string;\n \"canvas.mdx\"?: string;\n \"prototype.mdx\"?: string;\n \".plan-state.json\"?: string;\n \"assets/\"?: Record<string, string>;\n};\n\ntype LocalPlanBridgeComment = {\n id: string;\n planId: string;\n parentCommentId: string | null;\n sectionId: string | null;\n kind: string;\n status: string;\n anchor: string | null;\n message: string;\n createdBy: string;\n authorEmail: string | null;\n authorName: string | null;\n resolutionTarget: string | null;\n mentions: unknown[];\n mentionsJson: string | null;\n resolvedBy: string | null;\n resolvedAt: string | null;\n consumedAt: string | null;\n deletedAt: string | null;\n deletedBy: string | null;\n createdAt: string;\n updatedAt: string;\n};\n\ntype LocalPlanBridgeCommentInput = {\n id?: string;\n parentCommentId?: string | null;\n sectionId?: string | null;\n kind?: string;\n status?: string;\n anchor?: string | null;\n message?: string;\n createdBy?: string;\n authorEmail?: string | null;\n authorName?: string | null;\n resolutionTarget?: string | null;\n mentions?: unknown[];\n resolvedBy?: string | null;\n resolvedAt?: string | null;\n};\n\ntype LocalPlanBridgeCommentUpdate = {\n comments?: LocalPlanBridgeCommentInput[];\n deletedCommentIds?: string[];\n};\n\ntype VisualAnswerSourcePayload = {\n question?: string;\n title?: string;\n brief?: string;\n repoPath?: string;\n sourceUrl?: string;\n sourceType?: string;\n mdx: {\n \"plan.mdx\": string;\n \"canvas.mdx\"?: string;\n \"prototype.mdx\"?: string;\n \"assets/\"?: Record<string, string>;\n };\n};\n\nexport type PublishVisualAnswerInput = {\n appUrl: string;\n token: string;\n question?: string;\n sourcePath?: string;\n out?: string;\n prevPlanId?: string;\n repo?: string;\n sourceUrl?: string;\n sourceType?: string;\n visibility?: \"private\" | \"org\" | \"public\";\n fetchFn?: typeof fetch;\n cwd?: string;\n};\n\nexport type LocalPlanBridgePayload = {\n ok: true;\n version: 1;\n source: \"agent-native-local-bridge\";\n localOnly: true;\n slug: string;\n dir: string;\n title: string;\n brief: string;\n kind: LocalPlanKind;\n updatedAt: string;\n files: string[];\n mdx: LocalPlanBridgeMdxFolder;\n comments: LocalPlanBridgeComment[];\n};\n\nexport type LocalPlanServeResult = {\n ok: true;\n dir: string;\n url: string;\n urlFile?: string;\n bridgeUrl: string;\n appUrl: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n host: string;\n port: number;\n opened?: boolean;\n openCommand?: string;\n openError?: string;\n};\n\nexport type LocalPlanBridgeServer = {\n server: Server;\n result: LocalPlanServeResult;\n};\n\nexport type RendererValidationIssue = {\n path: string;\n message: string;\n};\n\nexport type RendererValidation = {\n /** Whether the renderer validate endpoint was reachable and answered. */\n ran: boolean;\n endpoint: string;\n /** Renderer verdict — present only when `ran` is true. */\n valid?: boolean;\n issues?: RendererValidationIssue[];\n /** Transport/endpoint error when `ran` is false (unreachable, 404, old deploy). */\n error?: string;\n};\n\nexport type LocalPlanVerifyResult = {\n ok: boolean;\n dir: string;\n url: string;\n urlFile?: string;\n bridgeUrl: string;\n appUrl: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n preflight: {\n status: number;\n allowOrigin: string | null;\n allowPrivateNetwork: string | null;\n };\n bridge: {\n status: number;\n ok: boolean;\n source?: string;\n localOnly?: boolean;\n files?: string[];\n mdxFiles?: string[];\n error?: string;\n };\n validation: RendererValidation;\n warnings: string[];\n};\n\ntype OpenLocalUrlResult = {\n ok: boolean;\n command: string;\n error?: string;\n};\n\nconst LOCAL_PLAN_COMMENTS_FILE = \"comments.json\";\nconst LOCAL_PLAN_OWNER_EMAIL = \"local@agent-native.local\";\nconst LOCAL_PLAN_BRIDGE_COMMENT_BODY_LIMIT = 1024 * 1024;\n\nconst LOCAL_PLAN_ASSET_MAX_SINGLE_BYTES = 2 * 1024 * 1024;\nconst LOCAL_PLAN_ASSET_MAX_TOTAL_BYTES = 10 * 1024 * 1024;\nconst AGENT_NATIVE_MANIFEST_FILE = \"agent-native.json\";\nconst VISUAL_ANSWER_SOURCE_FILENAME = \"visual-answer-source.json\";\nconst VISUAL_ANSWER_URL_FILENAME = \"visual-answer-url.txt\";\nconst PLAN_ACTION_HTTP_TIMEOUT_MS = 45_000;\nconst LOCAL_PLAN_ASSET_EXTENSIONS = new Set([\n \"png\",\n \"jpg\",\n \"jpeg\",\n \"gif\",\n \"webp\",\n \"svg\",\n]);\n\nfunction parseArgs(argv: string[]): Record<string, string | boolean> {\n const out: Record<string, string | boolean> = {};\n for (let i = 0; i < argv.length; i += 1) {\n const token = argv[i];\n if (!token.startsWith(\"--\")) continue;\n const key = token.slice(2);\n const next = argv[i + 1];\n if (next === undefined || next.startsWith(\"--\")) out[key] = true;\n else {\n out[key] = next;\n i += 1;\n }\n }\n return out;\n}\n\nfunction stringArg(\n args: Record<string, string | boolean>,\n key: string,\n): string {\n const value = args[key];\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Missing --${key}`);\n }\n return value;\n}\n\nfunction optionalArg(\n args: Record<string, string | boolean>,\n key: string,\n): string | undefined {\n const value = args[key];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction boolArg(args: Record<string, string | boolean>, key: string): boolean {\n return args[key] === true;\n}\n\nfunction sanitizeHttpDetail(value: string, maxLength: number): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) return normalized;\n return `${normalized.slice(0, maxLength - 3)}...`;\n}\n\nfunction normalizeVisibility(\n value: string | undefined,\n): \"private\" | \"org\" | \"public\" | undefined {\n if (!value) return undefined;\n if (value === \"private\" || value === \"org\" || value === \"public\") {\n return value;\n }\n throw new Error(\n `Invalid --visibility \"${value}\" (expected private, org, or public)`,\n );\n}\n\nfunction normalizeVisualAnswerSourceType(value: string | undefined): string {\n if (!value) return \"code\";\n if (\n [\n \"code\",\n \"pull-request\",\n \"commit\",\n \"branch\",\n \"diff\",\n \"issue\",\n \"page\",\n ].includes(value)\n ) {\n return value;\n }\n throw new Error(\n `Invalid --source-type \"${value}\" (expected code, pull-request, commit, branch, diff, issue, or page)`,\n );\n}\n\nfunction visualAnswerUrlFromPublishResult(\n result: unknown,\n appUrl: string,\n): string | null {\n const base = appUrl.replace(/\\/$/, \"\");\n if (!result || typeof result !== \"object\") return null;\n const record = result as Record<string, unknown>;\n const rawUrl =\n typeof record.url === \"string\"\n ? record.url\n : record.path && typeof record.path === \"string\"\n ? record.path\n : null;\n if (rawUrl) {\n try {\n return new URL(rawUrl, `${base}/`).toString();\n } catch {\n return null;\n }\n }\n const planId =\n typeof record.planId === \"string\"\n ? record.planId\n : record.plan &&\n typeof record.plan === \"object\" &&\n typeof (record.plan as Record<string, unknown>).id === \"string\"\n ? ((record.plan as Record<string, unknown>).id as string)\n : null;\n return planId ? `${base}/plans/${encodeURIComponent(planId)}` : null;\n}\n\nasync function fetchActionWithTimeout(\n url: string,\n init: RequestInit,\n fetchFn: typeof fetch,\n): Promise<Response> {\n return await fetchFn(url, {\n ...init,\n signal: init.signal ?? AbortSignal.timeout(PLAN_ACTION_HTTP_TIMEOUT_MS),\n });\n}\n\nexport function localPlanFolderName(title: string): string {\n const slug = title\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 64)\n .replace(/-+$/g, \"\");\n return slug || \"untitled-plan\";\n}\n\nfunction normalizeKind(value: string | undefined): LocalPlanKind {\n if (!value) return \"plan\";\n if (value === \"plan\" || value === \"recap\") return value;\n throw new Error(`Invalid --kind \"${value}\" (expected plan or recap)`);\n}\n\nfunction normalizeSlash(filePath: string): string {\n return filePath.replace(/\\\\/g, \"/\");\n}\n\nfunction normalizeRelativePath(filePath: string): string | null {\n if (!filePath.trim() || path.isAbsolute(filePath)) return null;\n const normalized = path.posix\n .normalize(normalizeSlash(filePath.trim()))\n .replace(/\\/+$/, \"\");\n if (\n !normalized ||\n normalized === \".\" ||\n normalized === \"..\" ||\n normalized.startsWith(\"../\") ||\n normalized.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n ) {\n return null;\n }\n return normalized;\n}\n\nfunction findUpward(startDir: string, filename: string): string | null {\n let current = path.resolve(startDir);\n for (;;) {\n const candidate = path.join(current, filename);\n if (fs.existsSync(candidate)) return candidate;\n const parent = path.dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction manifestRootPath(value: unknown): string | null {\n if (typeof value === \"string\") return normalizeRelativePath(value);\n if (isRecord(value) && typeof value.path === \"string\") {\n return normalizeRelativePath(value.path);\n }\n return null;\n}\n\nfunction planManifestConfig(): { rootDir: string; plansPath: string } | null {\n const configuredManifest =\n process.env.AGENT_NATIVE_MANIFEST?.trim() ||\n process.env.AGENT_NATIVE_MANIFEST_PATH?.trim();\n const manifestPath = configuredManifest\n ? path.resolve(configuredManifest)\n : findUpward(process.cwd(), AGENT_NATIVE_MANIFEST_FILE);\n if (!manifestPath) return null;\n\n try {\n const parsed = JSON.parse(\n fs.readFileSync(manifestPath, \"utf-8\"),\n ) as unknown;\n const apps = isRecord(parsed) && isRecord(parsed.apps) ? parsed.apps : null;\n const planApp = apps && isRecord(apps.plan) ? apps.plan : null;\n const roots = planApp && Array.isArray(planApp.roots) ? planApp.roots : [];\n const plansPath = roots\n .map(manifestRootPath)\n .find((item): item is string => Boolean(item));\n return plansPath\n ? { rootDir: path.dirname(manifestPath), plansPath }\n : null;\n } catch {\n return null;\n }\n}\n\nfunction localPlanWorkspaceRoot(startDir = process.cwd()): string {\n const manifestPath = findUpward(startDir, AGENT_NATIVE_MANIFEST_FILE);\n if (manifestPath) return path.dirname(manifestPath);\n const gitDir = findUpward(startDir, \".git\");\n if (gitDir) return path.dirname(gitDir);\n\n const configuredManifest =\n process.env.AGENT_NATIVE_MANIFEST?.trim() ||\n process.env.AGENT_NATIVE_MANIFEST_PATH?.trim();\n if (configuredManifest) return path.dirname(path.resolve(configuredManifest));\n return process.cwd();\n}\n\nfunction defaultPlansDir(): string {\n const configured = process.env.PLAN_LOCAL_DIR;\n if (configured?.trim()) return path.resolve(configured.trim());\n const manifest = planManifestConfig();\n if (manifest) return path.resolve(manifest.rootDir, manifest.plansPath);\n return path.resolve(\"plans\");\n}\n\nfunction defaultLocalPlanAppUrl(): string {\n return (\n process.env.PLAN_LOCAL_APP_URL ||\n process.env.PLAN_BASE_URL ||\n \"http://localhost:8096\"\n );\n}\n\nfunction defaultLocalPlanBridgeAppUrl(): string {\n return (\n process.env.PLAN_LOCAL_BRIDGE_APP_URL ||\n process.env.PLAN_BASE_URL ||\n DEFAULT_PLAN_APP_URL\n );\n}\n\nfunction normalizeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanAppUrl()).replace(/\\/+$/, \"\");\n}\n\nfunction normalizeBridgeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanBridgeAppUrl()).replace(/\\/+$/, \"\");\n}\n\nfunction localPlanPreviewUrl(dir: string, appUrl?: string): string {\n const base = `${normalizeAppUrl(appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(dir)),\n )}`;\n const repoPath = repoRelativePlanPath(dir);\n if (!repoPath) return base;\n return `${base}?${new URLSearchParams({ path: repoPath }).toString()}`;\n}\n\nfunction realpathIfExists(filePath: string): string {\n try {\n return fs.realpathSync.native(filePath);\n } catch {\n return path.resolve(filePath);\n }\n}\n\nfunction repoRelativePlanPath(dir: string): string | null {\n const resolved = realpathIfExists(dir);\n const root = realpathIfExists(localPlanWorkspaceRoot(resolved));\n const relative = path.relative(root, resolved);\n if (!relative || relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n return null;\n }\n return normalizeSlash(relative);\n}\n\nfunction localPlanBridgePageUrl(input: {\n dir: string;\n bridgeUrl: string;\n appUrl?: string;\n}): string {\n return `${normalizeBridgeAppUrl(input.appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(input.dir)),\n )}?bridge=${encodeURIComponent(input.bridgeUrl)}`;\n}\n\nfunction writeLocalPlanUrlFile(dir: string, url: string, urlFile?: string) {\n const file = path.resolve(urlFile || path.join(dir, \".plan-url\"));\n fs.writeFileSync(file, `${url}\\n`, { encoding: \"utf-8\", mode: 0o600 });\n return file;\n}\n\nfunction runOpenCommand(command: string, args: string[]): OpenLocalUrlResult {\n const result = spawnSync(command, args, {\n stdio: \"ignore\",\n windowsHide: true,\n });\n const commandDisplay = [command, ...args].join(\" \");\n if (result.error) {\n return {\n ok: false,\n command: commandDisplay,\n error: result.error.message,\n };\n }\n if (typeof result.status === \"number\" && result.status !== 0) {\n return {\n ok: false,\n command: commandDisplay,\n error: `exit code ${result.status}`,\n };\n }\n return { ok: true, command: commandDisplay };\n}\n\nfunction openLocalUrl(url: string): OpenLocalUrlResult {\n const platform = process.platform;\n if (platform === \"darwin\") {\n for (const appName of [\n \"Google Chrome\",\n \"Chromium\",\n \"Microsoft Edge\",\n \"Brave Browser\",\n ]) {\n const result = runOpenCommand(\"open\", [\"-a\", appName, url]);\n if (result.ok) return result;\n }\n return runOpenCommand(\"open\", [url]);\n }\n if (platform === \"win32\") {\n return runOpenCommand(\"cmd\", [\"/c\", \"start\", \"\", url]);\n }\n return runOpenCommand(\"xdg-open\", [url]);\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction stripFrontmatter(source: string): {\n body: string;\n frontmatter: Record<string, string>;\n} {\n if (!source.startsWith(\"---\\n\")) return { body: source, frontmatter: {} };\n const end = source.indexOf(\"\\n---\", 4);\n if (end < 0) return { body: source, frontmatter: {} };\n const frontmatterSource = source.slice(4, end).trim();\n const body = source.slice(end + 4).replace(/^\\r?\\n/, \"\");\n const frontmatter: Record<string, string> = {};\n for (const line of frontmatterSource.split(/\\r?\\n/)) {\n const match = line.match(/^([A-Za-z0-9_-]+):\\s*(.*)$/);\n if (!match) continue;\n const value = match[2]\n .trim()\n .replace(/^['\"]|['\"]$/g, \"\")\n .trim();\n frontmatter[match[1]] = value;\n }\n return { body, frontmatter };\n}\n\nfunction firstHeading(source: string): string | null {\n for (const line of source.split(/\\r?\\n/)) {\n const match = line.match(/^#{1,3}\\s+(.+)$/);\n if (match) return match[1].trim();\n }\n return null;\n}\n\nfunction splitMdxBlocks(source: string): Array<{\n type: \"markdown\" | \"component\";\n name?: string;\n value: string;\n}> {\n const blocks: Array<{\n type: \"markdown\" | \"component\";\n name?: string;\n value: string;\n }> = [];\n const lines = source.split(/\\r?\\n/);\n let markdown: string[] = [];\n let component: string[] | null = null;\n let componentName = \"\";\n\n function flushMarkdown() {\n const value = markdown.join(\"\\n\").trim();\n if (value) blocks.push({ type: \"markdown\", value });\n markdown = [];\n }\n\n function flushComponent() {\n if (!component) return;\n blocks.push({\n type: \"component\",\n name: componentName || \"MDX component\",\n value: component.join(\"\\n\").trim(),\n });\n component = null;\n componentName = \"\";\n }\n\n for (const line of lines) {\n const start = line.match(/^<([A-Z][A-Za-z0-9_]*)\\b/);\n if (!component && start) {\n flushMarkdown();\n component = [line];\n componentName = start[1];\n if (/\\/>\\s*$/.test(line)) flushComponent();\n continue;\n }\n\n if (component) {\n component.push(line);\n if (new RegExp(`</${componentName}>\\\\s*$`).test(line)) {\n flushComponent();\n }\n continue;\n }\n\n markdown.push(line);\n }\n\n flushComponent();\n flushMarkdown();\n return blocks;\n}\n\nfunction renderMarkdownish(source: string): string {\n const lines = source.split(/\\r?\\n/);\n const html: string[] = [];\n let inCode = false;\n let codeLines: string[] = [];\n let listLines: string[] = [];\n\n function flushList() {\n if (listLines.length === 0) return;\n html.push(\n `<ul>${listLines.map((line) => `<li>${escapeHtml(line)}</li>`).join(\"\")}</ul>`,\n );\n listLines = [];\n }\n\n function flushCode() {\n if (!inCode) return;\n html.push(`<pre><code>${escapeHtml(codeLines.join(\"\\n\"))}</code></pre>`);\n codeLines = [];\n inCode = false;\n }\n\n for (const line of lines) {\n if (line.startsWith(\"```\")) {\n if (inCode) flushCode();\n else {\n flushList();\n inCode = true;\n codeLines = [];\n }\n continue;\n }\n if (inCode) {\n codeLines.push(line);\n continue;\n }\n\n const heading = line.match(/^(#{1,4})\\s+(.+)$/);\n if (heading) {\n flushList();\n const level = Math.min(heading[1].length, 4);\n html.push(`<h${level}>${escapeHtml(heading[2].trim())}</h${level}>`);\n continue;\n }\n\n const bullet = line.match(/^\\s*[-*]\\s+(.+)$/);\n if (bullet) {\n listLines.push(bullet[1]);\n continue;\n }\n\n if (!line.trim()) {\n flushList();\n continue;\n }\n\n flushList();\n html.push(`<p>${escapeHtml(line.trim())}</p>`);\n }\n\n flushCode();\n flushList();\n return html.join(\"\\n\");\n}\n\nfunction readLocalPlanAssets(dir: string): Record<string, string> | undefined {\n const assetsDir = path.join(dir, \"assets\");\n if (!fs.existsSync(assetsDir)) return undefined;\n\n const assets: Record<string, string> = {};\n let totalBytes = 0;\n for (const entry of fs.readdirSync(assetsDir, { withFileTypes: true })) {\n if (!entry.isFile()) continue;\n const filename = path.basename(entry.name);\n if (!filename || filename !== entry.name) continue;\n const ext = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n if (!LOCAL_PLAN_ASSET_EXTENSIONS.has(ext)) continue;\n\n const abs = path.join(assetsDir, filename);\n const bytes = fs.readFileSync(abs);\n if (bytes.byteLength > LOCAL_PLAN_ASSET_MAX_SINGLE_BYTES) continue;\n if (totalBytes + bytes.byteLength > LOCAL_PLAN_ASSET_MAX_TOTAL_BYTES) {\n continue;\n }\n totalBytes += bytes.byteLength;\n assets[filename] = bytes.toString(\"base64\");\n }\n\n return Object.keys(assets).length > 0 ? assets : undefined;\n}\n\nexport function readLocalPlanFiles(dir: string): LocalPlanFiles {\n const resolved = path.resolve(dir);\n const planPath = path.join(resolved, \"plan.mdx\");\n if (!fs.existsSync(planPath)) {\n throw new Error(`Missing local plan source: ${planPath}`);\n }\n const readOptional = (file: string) => {\n const abs = path.join(resolved, file);\n return fs.existsSync(abs) ? fs.readFileSync(abs, \"utf-8\") : undefined;\n };\n return {\n dir: resolved,\n planMdx: fs.readFileSync(planPath, \"utf-8\"),\n canvasMdx: readOptional(\"canvas.mdx\"),\n prototypeMdx: readOptional(\"prototype.mdx\"),\n stateJson: readOptional(\".plan-state.json\"),\n assets: readLocalPlanAssets(resolved),\n };\n}\n\nfunction localPlanMdxFolder(files: LocalPlanFiles): LocalPlanBridgeMdxFolder {\n return {\n \"plan.mdx\": files.planMdx,\n ...(files.canvasMdx ? { \"canvas.mdx\": files.canvasMdx } : {}),\n ...(files.prototypeMdx ? { \"prototype.mdx\": files.prototypeMdx } : {}),\n ...(files.stateJson ? { \".plan-state.json\": files.stateJson } : {}),\n ...(files.assets ? { \"assets/\": files.assets } : {}),\n };\n}\n\nfunction localPlanFileList(files: LocalPlanFiles): string[] {\n return [\n \"plan.mdx\",\n ...(files.canvasMdx ? [\"canvas.mdx\"] : []),\n ...(files.prototypeMdx ? [\"prototype.mdx\"] : []),\n ...(files.stateJson ? [\".plan-state.json\"] : []),\n ...Object.keys(files.assets ?? {}).map((filename) => `assets/${filename}`),\n ];\n}\n\nfunction localPlanSourceEntries(files: LocalPlanFiles): Array<{\n file: string;\n source: string;\n}> {\n return [\n { file: \"plan.mdx\", source: files.planMdx },\n ...(files.canvasMdx\n ? [{ file: \"canvas.mdx\", source: files.canvasMdx }]\n : []),\n ...(files.prototypeMdx\n ? [{ file: \"prototype.mdx\", source: files.prototypeMdx }]\n : []),\n ];\n}\n\nfunction lineNumberAt(source: string, index: number): number {\n let line = 1;\n for (let i = 0; i < index; i += 1) {\n if (source.charCodeAt(i) === 10) line += 1;\n }\n return line;\n}\n\nfunction maskFencedCode(source: string): string {\n return source.replace(\n /(^|\\n)(```|~~~)[\\s\\S]*?(\\n\\2[^\\n]*(?=\\n|$))/g,\n (match) => match.replace(/[^\\n]/g, \" \"),\n );\n}\n\nfunction findJsxOpeningTagEnd(source: string, start: number): number {\n let quote: string | null = null;\n let braceDepth = 0;\n for (let i = start; i < source.length; i += 1) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 1;\n continue;\n }\n if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === \"{\") {\n braceDepth += 1;\n continue;\n }\n if (char === \"}\") {\n braceDepth = Math.max(0, braceDepth - 1);\n continue;\n }\n if (char === \">\" && braceDepth === 0) return i;\n }\n return -1;\n}\n\nfunction addValidationIssue(\n issues: LocalPlanValidationIssue[],\n file: string,\n source: string,\n index: number,\n message: string,\n) {\n issues.push({ file, line: lineNumberAt(source, index), message });\n}\n\nconst ENTITY_RE = /&(?:[a-z][a-z0-9]+|#[0-9]+|#x[0-9a-f]+);/gi;\nconst HTML_TEXT_ATTR_RE =\n /\\b(?:aria-label|alt|placeholder|title|value)=\\s*(?:\"([^\"]*)\"|'([^']*)'|`([^`]*)`)/gi;\nconst WIREFRAME_TEXT_ATTR_RE =\n /\\b(?:text|value|label|placeholder|title|note|due)=\\s*(?:\"([^\"]*)\"|'([^']*)'|`([^`]*)`)/gi;\n\nfunction normalizeVisibleText(value: string): string {\n return value\n .replace(/ | |�*a0;/gi, \" \")\n .replace(ENTITY_RE, \"x\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction meaningfulTextLength(value: string | undefined): number {\n return normalizeVisibleText(value ?? \"\").length;\n}\n\nfunction htmlMeaningfulTextLength(html: string): number {\n let length = 0;\n for (const match of html.matchAll(HTML_TEXT_ATTR_RE)) {\n length += meaningfulTextLength(match[1] ?? match[2] ?? match[3]);\n }\n\n const visibleText = html\n .replace(/<!--[\\s\\S]*?-->/g, \" \")\n .replace(/<script\\b[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style\\b[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<[^>]+>/g, \" \");\n length += meaningfulTextLength(visibleText);\n\n return length;\n}\n\nfunction hasSkeletonGeometry(html: string): boolean {\n return (\n /<(?:div|span|section|main|article|ul|li)\\b/i.test(html) &&\n /\\b(?:height|width|background|border|padding|wf-card|wf-box|wf-pill|wf-chip)\\b/i.test(\n html,\n )\n );\n}\n\nfunction stringAttributeValues(source: string, name: string): string[] {\n const values: string[] = [];\n const re = new RegExp(\n `\\\\b${name}\\\\s*=\\\\s*(?:\\\\{\\\\s*\\`([\\\\s\\\\S]*?)\\`\\\\s*\\\\}|\\\\{\\\\s*\"([^\"]*)\"\\\\s*\\\\}|\\\\{\\\\s*'([^']*)'\\\\s*\\\\}|\"([^\"]*)\"|'([^']*)')`,\n \"g\",\n );\n for (const match of source.matchAll(re)) {\n const value = match[1] ?? match[2] ?? match[3] ?? match[4] ?? match[5];\n if (value !== undefined) values.push(value);\n }\n return values;\n}\n\nfunction hasUnparsedAttributeExpression(source: string, name: string): boolean {\n return new RegExp(`\\\\b${name}\\\\s*=\\\\s*\\\\{`).test(source);\n}\n\nfunction hasMeaningfulWireframeHtml(screenOpening: string): boolean | null {\n const htmlValues = stringAttributeValues(screenOpening, \"html\");\n if (htmlValues.length === 0) {\n return hasUnparsedAttributeExpression(screenOpening, \"html\") ? null : false;\n }\n return htmlValues.some(\n (html) => htmlMeaningfulTextLength(html) >= 2 || hasSkeletonGeometry(html),\n );\n}\n\nfunction hasMeaningfulKitScreen(screenSource: string): boolean {\n for (const match of screenSource.matchAll(WIREFRAME_TEXT_ATTR_RE)) {\n if (meaningfulTextLength(match[1] ?? match[2] ?? match[3]) >= 2) {\n return true;\n }\n }\n if (/\\bitems\\s*=\\s*\\{[\\s\\S]*?\\blabel\\s*:/i.test(screenSource)) return true;\n if (/\\brows\\s*=\\s*\\{[\\s\\S]*?\\b[klv]\\s*:/i.test(screenSource)) return true;\n return false;\n}\n\nfunction hasMeaningfulWireframeScreen(blockSource: string): boolean | null {\n const screenMatch = /<Screen\\b/.exec(blockSource);\n if (!screenMatch) return false;\n const screenStart = screenMatch.index;\n const screenOpeningEnd = findJsxOpeningTagEnd(blockSource, screenStart);\n if (screenOpeningEnd < 0) return false;\n const screenOpening = blockSource.slice(screenStart, screenOpeningEnd + 1);\n const htmlMeaningful = hasMeaningfulWireframeHtml(screenOpening);\n if (htmlMeaningful === true) return true;\n\n const selfClosing = /\\/\\s*>$/.test(screenOpening);\n const closeIndex = selfClosing\n ? -1\n : blockSource.indexOf(\"</Screen>\", screenOpeningEnd + 1);\n const screenSource =\n closeIndex >= 0\n ? blockSource.slice(screenStart, closeIndex + \"</Screen>\".length)\n : screenOpening;\n if (hasMeaningfulKitScreen(screenSource)) return true;\n\n return htmlMeaningful === null ? null : false;\n}\n\nfunction lintWireframeBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskFencedCode(source);\n const re = /<WireframeBlock\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n \"WireframeBlock opening tag is not closed.\",\n );\n continue;\n }\n\n const opening = scanSource.slice(start, openingEnd + 1);\n const unsupportedAttr = opening.match(\n /\\b(data|screens|screen|elements)\\s*=/,\n );\n if (unsupportedAttr) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n `WireframeBlock uses unsupported \"${unsupportedAttr[1]}\" prop. Put content inside a <Screen> child instead.`,\n );\n }\n\n const selfClosing = /\\/\\s*>$/.test(opening);\n const closeTag = \"</WireframeBlock>\";\n const closeIndex = selfClosing\n ? -1\n : scanSource.indexOf(closeTag, openingEnd + 1);\n const blockSource = selfClosing\n ? opening\n : closeIndex >= 0\n ? scanSource.slice(start, closeIndex + closeTag.length)\n : scanSource.slice(start, openingEnd + 1);\n\n if (!selfClosing && closeIndex < 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n \"WireframeBlock must have a closing </WireframeBlock> tag.\",\n );\n }\n\n if (selfClosing || !/<Screen\\b/.test(blockSource)) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'WireframeBlock must wrap a <Screen> child; self-closing wireframes render empty. Use <WireframeBlock><Screen surface=\"browser\">...</Screen></WireframeBlock>.',\n );\n continue;\n }\n\n const meaningfulScreen = hasMeaningfulWireframeScreen(blockSource);\n if (meaningfulScreen === false) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'WireframeBlock contains an empty <Screen>; local previews render blank wireframes. Add visible html text/controls or kit nodes such as <Title text=\"Checkout\" /> and <Btn label=\"Pay\" />.',\n );\n }\n }\n}\n\nfunction lintColumnsBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskFencedCode(source);\n const re = /<Columns\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const columnsAttr = readJsxAttribute(opening, \"columns\");\n if (!columnsAttr) continue;\n const entries =\n columnsAttr.kind === \"expression\"\n ? extractTopLevelObjectLiterals(columnsAttr.value)\n : null;\n if (entries && entries.length > 0) continue;\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'Columns must use <Column> children or a columns={[{ id, label, blocks }]} array, not a bare columns= prop. Use <Columns><Column label=\"Before\">...</Column><Column label=\"After\">...</Column></Columns>.',\n );\n }\n}\n\ntype JsxAttributeValue = {\n name: string;\n kind: \"expression\" | \"string\" | \"bare\" | \"boolean\";\n value: string;\n start: number;\n};\n\nfunction findBalancedEnd(\n source: string,\n start: number,\n open: string,\n close: string,\n): number {\n let depth = 0;\n let quote: string | null = null;\n for (let i = start; i < source.length; i += 1) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 1;\n continue;\n }\n if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === open) {\n depth += 1;\n continue;\n }\n if (char === close) {\n depth -= 1;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\nfunction readJsxAttribute(\n opening: string,\n name: string,\n): JsxAttributeValue | null {\n let i = 0;\n while (i < opening.length) {\n if (!/[A-Za-z_:]/.test(opening[i] ?? \"\")) {\n i += 1;\n continue;\n }\n const nameStart = i;\n i += 1;\n while (/[\\w:.-]/.test(opening[i] ?? \"\")) i += 1;\n const attrName = opening.slice(nameStart, i);\n while (/\\s/.test(opening[i] ?? \"\")) i += 1;\n if (opening[i] !== \"=\") {\n if (attrName === name) {\n return { name, kind: \"boolean\", value: \"true\", start: nameStart };\n }\n continue;\n }\n i += 1;\n while (/\\s/.test(opening[i] ?? \"\")) i += 1;\n const valueStart = i;\n const quote = opening[i];\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n i += 1;\n while (i < opening.length) {\n if (opening[i] === \"\\\\\" && i + 1 < opening.length) {\n i += 2;\n continue;\n }\n if (opening[i] === quote) break;\n i += 1;\n }\n const value = opening.slice(valueStart + 1, i);\n i += 1;\n if (attrName === name) {\n return { name, kind: \"string\", value, start: valueStart + 1 };\n }\n continue;\n }\n if (quote === \"{\") {\n const end = findBalancedEnd(opening, i, \"{\", \"}\");\n if (end < 0) {\n if (attrName === name) {\n return {\n name,\n kind: \"expression\",\n value: opening.slice(valueStart + 1),\n start: valueStart + 1,\n };\n }\n break;\n }\n const value = opening.slice(valueStart + 1, end);\n i = end + 1;\n if (attrName === name) {\n return { name, kind: \"expression\", value, start: valueStart + 1 };\n }\n continue;\n }\n while (i < opening.length && !/[\\s>]/.test(opening[i] ?? \"\")) i += 1;\n if (attrName === name) {\n return {\n name,\n kind: \"bare\",\n value: opening.slice(valueStart, i),\n start: valueStart,\n };\n }\n }\n return null;\n}\n\nfunction expressionOffset(expression: string): number {\n return expression.search(/\\S/);\n}\n\nfunction extractTopLevelObjectLiterals(expression: string): Array<{\n source: string;\n start: number;\n}> | null {\n const leading = expressionOffset(expression);\n if (leading < 0 || expression[leading] !== \"[\") return null;\n const arrayEnd = findBalancedEnd(expression, leading, \"[\", \"]\");\n if (arrayEnd < 0) return null;\n const objects: Array<{ source: string; start: number }> = [];\n let i = leading + 1;\n while (i < arrayEnd) {\n const char = expression[i];\n if (/\\s|,/.test(char ?? \"\")) {\n i += 1;\n continue;\n }\n if (char !== \"{\") {\n return null;\n }\n const objectEnd = findBalancedEnd(expression, i, \"{\", \"}\");\n if (objectEnd < 0 || objectEnd > arrayEnd) return null;\n objects.push({\n source: expression.slice(i, objectEnd + 1),\n start: i,\n });\n i = objectEnd + 1;\n }\n return objects;\n}\n\nfunction findValueEnd(source: string, start: number): number {\n let i = start;\n let quote: string | null = null;\n let depth = 0;\n while (i < source.length) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 2;\n continue;\n }\n if (char === quote) quote = null;\n i += 1;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n i += 1;\n continue;\n }\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n i += 1;\n continue;\n }\n if (char === \"}\" || char === \"]\" || char === \")\") {\n if (depth === 0) return i;\n depth -= 1;\n i += 1;\n continue;\n }\n if (char === \",\" && depth === 0) return i;\n i += 1;\n }\n return source.length;\n}\n\nfunction readObjectKey(\n source: string,\n start: number,\n): {\n key: string;\n keyStart: number;\n colon: number;\n} | null {\n let i = start;\n while (/\\s|,/.test(source[i] ?? \"\")) i += 1;\n const keyStart = i;\n const quote = source[i];\n let key = \"\";\n if (quote === '\"' || quote === \"'\") {\n i += 1;\n const valueStart = i;\n while (i < source.length) {\n if (source[i] === \"\\\\\" && i + 1 < source.length) {\n i += 2;\n continue;\n }\n if (source[i] === quote) break;\n i += 1;\n }\n key = source.slice(valueStart, i);\n i += 1;\n } else if (/[A-Za-z_$]/.test(quote ?? \"\")) {\n i += 1;\n while (/[\\w$]/.test(source[i] ?? \"\")) i += 1;\n key = source.slice(keyStart, i);\n } else {\n return null;\n }\n while (/\\s/.test(source[i] ?? \"\")) i += 1;\n if (source[i] !== \":\") return null;\n return { key, keyStart, colon: i };\n}\n\nfunction readTopLevelObjectProperty(\n objectSource: string,\n name: string,\n): { value: string; valueStart: number } | null {\n const body = objectSource.trim().startsWith(\"{\")\n ? objectSource.slice(1, objectSource.lastIndexOf(\"}\"))\n : objectSource;\n let i = 0;\n while (i < body.length) {\n const key = readObjectKey(body, i);\n if (!key) {\n i += 1;\n continue;\n }\n const valueStart = key.colon + 1;\n const valueEnd = findValueEnd(body, valueStart);\n if (key.key === name) {\n return { value: body.slice(valueStart, valueEnd), valueStart };\n }\n i = valueEnd + 1;\n }\n return null;\n}\n\nfunction isStaticNonEmptyStringLiteral(value: string): boolean {\n const trimmed = value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return false;\n if (!trimmed.endsWith(quote)) return false;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return false;\n return trimmed.slice(1, -1).trim().length > 0;\n}\n\nfunction hasRequiredStaticString(objectSource: string, name: string): boolean {\n const prop = readTopLevelObjectProperty(objectSource, name);\n return prop ? isStaticNonEmptyStringLiteral(prop.value) : false;\n}\n\nfunction hasRequiredStaticId(objectSource: string): boolean {\n return hasRequiredStaticString(objectSource, \"id\");\n}\n\nfunction hasRequiredEnumLiteral(\n objectSource: string,\n name: string,\n allowed: readonly string[],\n): boolean {\n const prop = readTopLevelObjectProperty(objectSource, name);\n if (!prop) return false;\n const trimmed = prop.value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return false;\n if (!trimmed.endsWith(quote)) return false;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return false;\n return allowed.includes(trimmed.slice(1, -1).trim());\n}\n\n// Shared per-item checks so the top-level `<Checklist items={[…]} />` tag and\n// blocks authored as JSON inside a container's `tabs={[…]}` / `columns={[…]}`\n// array enforce the SAME required fields. `listBase` is the absolute offset of\n// the items array in the original source so line numbers point near the item.\nfunction checkChecklistItemList(\n items: Array<{ source: string; start: number }>,\n listBase: number,\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n items.forEach((item, index) => {\n const base = listBase + item.start;\n if (!hasRequiredStaticId(item.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n base,\n `Checklist items[${index}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(item.source, \"label\")) {\n addValidationIssue(\n issues,\n file,\n source,\n base,\n `Checklist items[${index}].label is required by the Plan renderer schema; add a non-empty string label.`,\n );\n }\n });\n}\n\nfunction checkQuestionObjectList(\n questionObjects: Array<{ source: string; start: number }>,\n listBase: number,\n tag: string,\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n questionObjects.forEach((question, questionIndex) => {\n const questionBase = listBase + question.start;\n if (!hasRequiredStaticId(question.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(question.source, \"title\")) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].title is required by the Plan renderer schema; add a non-empty string title.`,\n );\n }\n if (\n !hasRequiredEnumLiteral(question.source, \"mode\", [\n \"single\",\n \"multi\",\n \"freeform\",\n ])\n ) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].mode is required by the Plan renderer schema; use \"single\", \"multi\", or \"freeform\".`,\n );\n }\n const options = readTopLevelObjectProperty(question.source, \"options\");\n if (!options) return;\n const optionObjects = extractTopLevelObjectLiterals(options.value);\n if (!optionObjects) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase + options.valueStart,\n `${tag} questions[${questionIndex}].options must be an inline array of object literals.`,\n );\n return;\n }\n optionObjects.forEach((option, optionIndex) => {\n const optionBase = questionBase + options.valueStart + option.start;\n if (!hasRequiredStaticId(option.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n optionBase,\n `${tag} questions[${questionIndex}].options[${optionIndex}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(option.source, \"label\")) {\n addValidationIssue(\n issues,\n file,\n source,\n optionBase,\n `${tag} questions[${questionIndex}].options[${optionIndex}].label is required by the Plan renderer schema; add a non-empty string label.`,\n );\n }\n });\n });\n}\n\nfunction lintChecklistShape(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n const re = /<Checklist\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const items = readJsxAttribute(opening, \"items\");\n if (!items) continue;\n if (items.kind !== \"expression\") {\n addValidationIssue(\n issues,\n file,\n source,\n start + items.start,\n \"Checklist items must be an inline array expression with stable item ids.\",\n );\n continue;\n }\n const objects = extractTopLevelObjectLiterals(items.value);\n if (!objects) {\n addValidationIssue(\n issues,\n file,\n source,\n start + items.start,\n \"Checklist items must be an inline array of object literals so local check can validate the renderer schema.\",\n );\n continue;\n }\n checkChecklistItemList(objects, start + items.start, file, source, issues);\n }\n}\n\nfunction lintQuestionFormShape(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n const re = /<(QuestionForm|VisualQuestions)\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const tag = match[1] ?? \"QuestionForm\";\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const questions = readJsxAttribute(opening, \"questions\");\n if (!questions) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n `${tag} requires a questions array with at least one question object.`,\n );\n continue;\n }\n if (questions.kind !== \"expression\") {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start,\n `${tag} questions must be an inline array expression with stable question ids.`,\n );\n continue;\n }\n const questionObjects = extractTopLevelObjectLiterals(questions.value);\n if (!questionObjects || questionObjects.length === 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start,\n `${tag} questions must be a non-empty inline array of object literals.`,\n );\n continue;\n }\n checkQuestionObjectList(\n questionObjects,\n start + questions.start,\n tag,\n file,\n source,\n issues,\n );\n }\n}\n\nfunction staticStringLiteralValue(\n value: string | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n const trimmed = value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return undefined;\n if (!trimmed.endsWith(quote) || trimmed.length < 2) return undefined;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return undefined;\n return trimmed.slice(1, -1);\n}\n\n// Container blocks authored with a JSON attribute array (`<TabsBlock tabs={[…]}\n// />`) carry their children as nested block objects, not top-level JSX tags, so\n// the tag-based linters above never inspect them — the exact \"false green\" the\n// renderer catches because it validates the whole parsed block tree. Walk those\n// nested `blocks: [...]` arrays and enforce the same per-block required fields,\n// recursing through nested containers. This is still a subset of the renderer\n// schema (which is why `verify` is the authority), but it closes the common\n// nested checklist / question-form / missing-id case offline.\nconst NESTED_CONTAINER_TAGS: ReadonlyArray<{ tag: string; attr: string }> = [\n { tag: \"TabsBlock\", attr: \"tabs\" },\n { tag: \"Tabs\", attr: \"tabs\" },\n { tag: \"Columns\", attr: \"columns\" },\n];\n\nfunction lintNestedContainerEntry(\n entrySource: string,\n entryBase: number,\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const blocksProp = readTopLevelObjectProperty(entrySource, \"blocks\");\n if (!blocksProp) return;\n const blockObjects = extractTopLevelObjectLiterals(blocksProp.value);\n if (!blockObjects) return;\n const blocksBase = entryBase + blocksProp.valueStart;\n for (const block of blockObjects) {\n lintNestedBlock(\n block.source,\n blocksBase + block.start,\n file,\n source,\n issues,\n );\n }\n}\n\nfunction lintNestedBlock(\n blockSource: string,\n blockBase: number,\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const typeProp = readTopLevelObjectProperty(blockSource, \"type\");\n const type = staticStringLiteralValue(typeProp?.value);\n if (!hasRequiredStaticId(blockSource)) {\n addValidationIssue(\n issues,\n file,\n source,\n blockBase,\n `Nested ${type ?? \"block\"} is missing a required string \\`id\\`; the Plan renderer schema validates every nested block.`,\n );\n }\n const dataProp = readTopLevelObjectProperty(blockSource, \"data\");\n if (!dataProp) return;\n const dataBase = blockBase + dataProp.valueStart;\n\n if (type === \"checklist\") {\n const itemsProp = readTopLevelObjectProperty(dataProp.value, \"items\");\n if (!itemsProp) return;\n const items = extractTopLevelObjectLiterals(itemsProp.value);\n if (items) {\n checkChecklistItemList(\n items,\n dataBase + itemsProp.valueStart,\n file,\n source,\n issues,\n );\n }\n return;\n }\n // visual-questions shares question-form's schema; lint both.\n if (type === \"question-form\" || type === \"visual-questions\") {\n const questionsProp = readTopLevelObjectProperty(\n dataProp.value,\n \"questions\",\n );\n if (!questionsProp) return;\n const questionObjects = extractTopLevelObjectLiterals(questionsProp.value);\n if (questionObjects) {\n checkQuestionObjectList(\n questionObjects,\n dataBase + questionsProp.valueStart,\n type,\n file,\n source,\n issues,\n );\n }\n return;\n }\n if (type === \"tabs\" || type === \"columns\") {\n const innerAttr = type === \"tabs\" ? \"tabs\" : \"columns\";\n const innerProp = readTopLevelObjectProperty(dataProp.value, innerAttr);\n if (!innerProp) return;\n const innerEntries = extractTopLevelObjectLiterals(innerProp.value);\n if (!innerEntries) return;\n const innerBase = dataBase + innerProp.valueStart;\n for (const entry of innerEntries) {\n lintNestedContainerEntry(\n entry.source,\n innerBase + entry.start,\n file,\n source,\n issues,\n );\n }\n }\n}\n\nfunction lintNestedContainerBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n for (const { tag, attr } of NESTED_CONTAINER_TAGS) {\n const re = new RegExp(`<${tag}\\\\b`, \"g\");\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const attrValue = readJsxAttribute(opening, attr);\n if (!attrValue || attrValue.kind !== \"expression\") continue;\n const entries = extractTopLevelObjectLiterals(attrValue.value);\n if (!entries) continue;\n const entriesBase = start + attrValue.start;\n for (const entry of entries) {\n lintNestedContainerEntry(\n entry.source,\n entriesBase + entry.start,\n file,\n source,\n issues,\n );\n }\n }\n }\n}\n\n// Blank out fenced code blocks and inline code spans (preserving newlines and\n// length) so block-tag linters don't trip on documentation examples written in\n// prose — e.g. an inline `<WireframeBlock><Screen>...</Screen></WireframeBlock>`\n// example is not a real block to validate. Real blocks (outside code) are left\n// intact, so their offsets/line numbers stay correct. Without this the default\n// `plan local init` scaffold fails its own `plan local check`/`serve` lint.\nfunction maskCodeRegions(source: string): string {\n const blank = (s: string) => s.replace(/[^\\n]/g, \" \");\n return source.replace(/```[\\s\\S]*?```/g, blank).replace(/`[^`\\n]*`/g, blank);\n}\n\nexport function validateLocalPlanFiles(\n files: LocalPlanFiles,\n): LocalPlanValidationIssue[] {\n const issues: LocalPlanValidationIssue[] = [];\n for (const entry of localPlanSourceEntries(files)) {\n const source = maskCodeRegions(entry.source);\n lintWireframeBlocks(entry.file, source, issues);\n lintColumnsBlocks(entry.file, source, issues);\n lintChecklistShape(entry.file, entry.source, issues);\n lintQuestionFormShape(entry.file, entry.source, issues);\n lintNestedContainerBlocks(entry.file, entry.source, issues);\n }\n return issues;\n}\n\nexport function assertLocalPlanFilesValid(files: LocalPlanFiles): void {\n const issues = validateLocalPlanFiles(files);\n if (issues.length === 0) return;\n const details = issues\n .slice(0, 8)\n .map((issue) => `${issue.file}:${issue.line} ${issue.message}`)\n .join(\"\\n\");\n const overflow =\n issues.length > 8 ? `\\n...plus ${issues.length - 8} more issues` : \"\";\n throw new Error(\n `Local plan source validation failed:\\n${details}${overflow}\\nRun \\`npx @agent-native/core@latest plan blocks --out plan-blocks.md\\` and update the MDX to the documented block shapes.`,\n );\n}\n\nexport function buildLocalPlanPreviewHtml(\n input: LocalPlanPreviewInput,\n): string {\n const files = readLocalPlanFiles(input.dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(files.dir);\n const brief = input.brief || parsed.frontmatter.brief || \"\";\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const blocks = splitMdxBlocks(parsed.body);\n const sourceFiles = [\n [\"plan.mdx\", files.planMdx],\n [\"canvas.mdx\", files.canvasMdx],\n [\"prototype.mdx\", files.prototypeMdx],\n [\".plan-state.json\", files.stateJson],\n ].filter((entry): entry is [string, string] => Boolean(entry[1]));\n\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escapeHtml(title)}</title>\n <style>\n :root {\n color-scheme: light dark;\n --bg: #f8fafc;\n --paper: #ffffff;\n --ink: #0f172a;\n --muted: #64748b;\n --line: #cbd5e1;\n --accent: #2563eb;\n --soft: #eff6ff;\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n }\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #020617;\n --paper: #0f172a;\n --ink: #e2e8f0;\n --muted: #94a3b8;\n --line: #334155;\n --soft: #172554;\n }\n }\n body { margin: 0; background: var(--bg); color: var(--ink); }\n main { max-width: 1040px; margin: 0 auto; padding: 40px 20px 56px; }\n header { margin-bottom: 28px; }\n h1 { font-size: clamp(2rem, 5vw, 3.5rem); line-height: 1; margin: 0 0 12px; }\n h2 { font-size: 1.35rem; margin: 28px 0 10px; }\n h3 { font-size: 1.05rem; margin: 0 0 8px; }\n p, li { line-height: 1.65; }\n .meta { display: flex; flex-wrap: wrap; gap: 8px; color: var(--muted); font-size: 0.9rem; }\n .pill { border: 1px solid var(--line); border-radius: 999px; padding: 4px 10px; background: var(--paper); }\n .notice { background: var(--soft); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; margin: 18px 0; }\n .block, details { background: var(--paper); border: 1px solid var(--line); border-radius: 8px; padding: 18px; margin: 14px 0; }\n .component summary { cursor: pointer; color: var(--accent); font-weight: 650; }\n pre { overflow: auto; border-radius: 8px; border: 1px solid var(--line); padding: 14px; background: rgba(148, 163, 184, 0.12); }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.9rem; }\n .source-tabs { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; }\n </style>\n</head>\n<body>\n <main>\n <header>\n <div class=\"meta\">\n <span class=\"pill\">${kind === \"recap\" ? \"Visual recap\" : \"Visual plan\"}</span>\n <span class=\"pill\">Local-files mode</span>\n <span class=\"pill\">No DB writes</span>\n </div>\n <h1>${escapeHtml(title)}</h1>\n ${brief ? `<p>${escapeHtml(brief)}</p>` : \"\"}\n <div class=\"notice\">\n This preview was generated entirely from local files. It does not call\n the Plan MCP server, the Plan app action surface, a hosted service, or a\n database. Edit the MDX files and regenerate this preview to update it.\n </div>\n </header>\n <section>\n ${blocks\n .map((block) =>\n block.type === \"component\"\n ? `<details class=\"component block\" open><summary>${escapeHtml(\n block.name || \"MDX component\",\n )}</summary><pre><code>${escapeHtml(block.value)}</code></pre></details>`\n : `<article class=\"block\">${renderMarkdownish(block.value)}</article>`,\n )\n .join(\"\\n\")}\n </section>\n <section>\n <h2>Local Source Files</h2>\n <div class=\"source-tabs\">\n ${sourceFiles\n .map(\n ([name, source]) =>\n `<details><summary>${escapeHtml(name)}</summary><pre><code>${escapeHtml(\n source,\n )}</code></pre></details>`,\n )\n .join(\"\\n\")}\n </div>\n </section>\n </main>\n</body>\n</html>\n`;\n}\n\nexport function writeLocalPlanPreview(input: {\n dir: string;\n out?: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n open?: boolean;\n openUrl?: (url: string) => OpenLocalUrlResult;\n}): LocalPlanPreviewResult {\n const dir = path.resolve(input.dir);\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(dir);\n const out = input.out ? path.resolve(input.out) : undefined;\n if (out) {\n fs.mkdirSync(path.dirname(out), { recursive: true });\n fs.writeFileSync(out, buildLocalPlanPreviewHtml({ ...input, dir, kind }));\n }\n const result: LocalPlanPreviewResult = {\n ok: true,\n dir,\n ...(out ? { out } : {}),\n url: out ? pathToFileURL(out).href : localPlanPreviewUrl(dir, input.appUrl),\n title,\n kind,\n files: localPlanFileList(files),\n };\n if (!input.open) return result;\n\n const openResult = (input.openUrl || openLocalUrl)(result.url);\n return {\n ...result,\n opened: openResult.ok,\n openCommand: openResult.command,\n ...(openResult.error ? { openError: openResult.error } : {}),\n };\n}\n\nfunction readLocalPlanBridgeComments(dir: string): LocalPlanBridgeComment[] {\n try {\n const raw = fs.readFileSync(\n path.join(dir, LOCAL_PLAN_COMMENTS_FILE),\n \"utf-8\",\n );\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed)\n ? (parsed as LocalPlanBridgeComment[]).filter(\n (comment) => comment && typeof comment.id === \"string\",\n )\n : [];\n } catch {\n return [];\n }\n}\n\nfunction writeLocalPlanBridgeComments(\n dir: string,\n comments: LocalPlanBridgeComment[],\n): void {\n const target = path.join(dir, LOCAL_PLAN_COMMENTS_FILE);\n if (comments.length === 0) {\n fs.rmSync(target, { force: true });\n return;\n }\n fs.writeFileSync(target, `${JSON.stringify(comments, null, 2)}\\n`, \"utf-8\");\n}\n\nfunction normalizeBridgeCommentString(value: unknown, fallback = \"\"): string {\n return typeof value === \"string\" ? value : fallback;\n}\n\nfunction normalizeBridgeCommentNullableString(value: unknown): string | null {\n const text = typeof value === \"string\" ? value.trim() : \"\";\n return text || null;\n}\n\nfunction normalizeBridgeCommentStatus(value: unknown): string {\n return value === \"resolved\" ? \"resolved\" : \"open\";\n}\n\nfunction newLocalBridgeCommentId(): string {\n return `cmt_${crypto.randomBytes(8).toString(\"hex\")}`;\n}\n\nfunction applyLocalPlanBridgeCommentUpdate(\n dir: string,\n update: LocalPlanBridgeCommentUpdate,\n): LocalPlanBridgeComment[] {\n const existing = readLocalPlanBridgeComments(dir);\n const byId = new Map(existing.map((comment) => [comment.id, comment]));\n const now = new Date().toISOString();\n const planId = `local-${path.basename(dir)}`;\n\n for (const input of update.comments ?? []) {\n const id =\n normalizeBridgeCommentNullableString(input.id) ??\n newLocalBridgeCommentId();\n const prev = byId.get(id);\n const status = normalizeBridgeCommentStatus(input.status ?? prev?.status);\n const message =\n typeof input.message === \"string\" ? input.message : prev?.message;\n if (!message?.trim()) continue;\n\n if (prev) {\n byId.set(id, {\n ...prev,\n parentCommentId:\n normalizeBridgeCommentNullableString(input.parentCommentId) ??\n prev.parentCommentId,\n sectionId:\n normalizeBridgeCommentNullableString(input.sectionId) ??\n prev.sectionId,\n kind: normalizeBridgeCommentString(input.kind, prev.kind),\n status,\n anchor:\n typeof input.anchor === \"string\" || input.anchor === null\n ? input.anchor\n : prev.anchor,\n message,\n authorEmail:\n normalizeBridgeCommentNullableString(input.authorEmail) ??\n prev.authorEmail,\n authorName:\n normalizeBridgeCommentNullableString(input.authorName) ??\n prev.authorName,\n resolutionTarget: \"agent\",\n mentions: [],\n mentionsJson: null,\n resolvedAt:\n status === \"resolved\"\n ? (input.resolvedAt ?? prev.resolvedAt ?? now)\n : null,\n resolvedBy:\n status === \"resolved\"\n ? (input.resolvedBy ?? prev.resolvedBy ?? LOCAL_PLAN_OWNER_EMAIL)\n : null,\n updatedAt: now,\n });\n continue;\n }\n\n byId.set(id, {\n id,\n planId,\n parentCommentId: normalizeBridgeCommentNullableString(\n input.parentCommentId,\n ),\n sectionId: normalizeBridgeCommentNullableString(input.sectionId),\n kind: normalizeBridgeCommentString(input.kind, \"annotation\"),\n status,\n anchor: normalizeBridgeCommentNullableString(input.anchor),\n message,\n createdBy: \"human\",\n authorEmail:\n normalizeBridgeCommentNullableString(input.authorEmail) ??\n LOCAL_PLAN_OWNER_EMAIL,\n authorName: normalizeBridgeCommentNullableString(input.authorName),\n resolutionTarget: \"agent\",\n mentions: [],\n mentionsJson: null,\n resolvedBy: status === \"resolved\" ? LOCAL_PLAN_OWNER_EMAIL : null,\n resolvedAt: status === \"resolved\" ? now : null,\n consumedAt: null,\n deletedAt: null,\n deletedBy: null,\n createdAt: now,\n updatedAt: now,\n });\n }\n\n for (const id of update.deletedCommentIds ?? []) {\n byId.delete(id);\n for (const comment of byId.values()) {\n if (comment.parentCommentId === id) byId.delete(comment.id);\n }\n }\n\n const comments = [...byId.values()].sort((a, b) =>\n a.createdAt === b.createdAt\n ? a.id.localeCompare(b.id)\n : a.createdAt.localeCompare(b.createdAt),\n );\n writeLocalPlanBridgeComments(dir, comments);\n return comments;\n}\n\nfunction buildLocalPlanBridgePayload(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n // `verify` brings the bridge up only to exercise transport + the authoritative\n // renderer check, so it must not be short-circuited by the weaker offline lint.\n skipSourceValidation?: boolean;\n}): LocalPlanBridgePayload {\n const dir = path.resolve(input.dir);\n const files = readLocalPlanFiles(dir);\n if (!input.skipSourceValidation) assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(dir);\n const brief = input.brief || parsed.frontmatter.brief || \"\";\n const comments = readLocalPlanBridgeComments(dir);\n\n return {\n ok: true,\n version: 1,\n source: \"agent-native-local-bridge\",\n localOnly: true,\n slug: path.basename(dir),\n dir,\n title,\n brief,\n kind,\n updatedAt: latestLocalPlanMtime(dir, files),\n files: localPlanFileList(files),\n mdx: localPlanMdxFolder(files),\n comments,\n };\n}\n\nfunction latestLocalPlanMtime(dir: string, files: LocalPlanFiles): string {\n const candidates = [\n path.join(dir, \"plan.mdx\"),\n ...(files.canvasMdx ? [path.join(dir, \"canvas.mdx\")] : []),\n ...(files.prototypeMdx ? [path.join(dir, \"prototype.mdx\")] : []),\n ...(files.stateJson ? [path.join(dir, \".plan-state.json\")] : []),\n path.join(dir, LOCAL_PLAN_COMMENTS_FILE),\n ...Object.keys(files.assets ?? {}).map((filename) =>\n path.join(dir, \"assets\", filename),\n ),\n ];\n let latest = 0;\n for (const file of candidates) {\n try {\n latest = Math.max(latest, fs.statSync(file).mtimeMs);\n } catch {\n // Ignore files deleted between the read and stat passes.\n }\n }\n return new Date(latest || Date.now()).toISOString();\n}\n\nfunction sendBridgeJson(\n res: ServerResponse,\n status: number,\n payload: unknown,\n): void {\n res.writeHead(status, {\n \"access-control-allow-origin\": \"*\",\n \"access-control-allow-methods\": \"GET, POST, OPTIONS\",\n \"access-control-allow-headers\": \"content-type\",\n // Required when the hosted HTTPS Plan UI fetches this localhost bridge.\n \"access-control-allow-private-network\": \"true\",\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/json; charset=utf-8\",\n \"x-agent-native-local-bridge\": \"1\",\n });\n res.end(`${JSON.stringify(payload)}\\n`);\n}\n\nfunction readBridgeJsonBody(req: IncomingMessage): Promise<unknown> {\n return new Promise((resolve, reject) => {\n let raw = \"\";\n req.setEncoding(\"utf-8\");\n req.on(\"data\", (chunk) => {\n raw += chunk;\n if (raw.length > LOCAL_PLAN_BRIDGE_COMMENT_BODY_LIMIT) {\n reject(new Error(\"Local plan comment update is too large.\"));\n req.destroy();\n }\n });\n req.on(\"end\", () => {\n if (!raw.trim()) {\n resolve({});\n return;\n }\n try {\n resolve(JSON.parse(raw));\n } catch {\n reject(new Error(\"Local plan comment update must be JSON.\"));\n }\n });\n req.on(\"error\", reject);\n });\n}\n\nfunction normalizeBridgeCommentUpdatePayload(\n payload: unknown,\n): LocalPlanBridgeCommentUpdate {\n if (!payload || typeof payload !== \"object\") return {};\n const input = payload as LocalPlanBridgeCommentUpdate;\n return {\n comments: Array.isArray(input.comments) ? input.comments : [],\n deletedCommentIds: Array.isArray(input.deletedCommentIds)\n ? input.deletedCommentIds.filter((id) => typeof id === \"string\")\n : [],\n };\n}\n\nfunction bridgeRequestUrl(req: IncomingMessage): URL {\n return new URL(req.url || \"/\", \"http://127.0.0.1\");\n}\n\nfunction bridgeHostForUrl(host: string): string {\n if (host === \"0.0.0.0\" || host === \"::\") return \"127.0.0.1\";\n return host;\n}\n\nexport async function startLocalPlanBridge(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n host?: string;\n port?: number;\n token?: string;\n open?: boolean;\n urlFile?: string | false;\n openUrl?: (url: string) => OpenLocalUrlResult;\n skipSourceValidation?: boolean;\n}): Promise<LocalPlanBridgeServer> {\n const dir = path.resolve(input.dir);\n const initialPayload = buildLocalPlanBridgePayload({\n dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n skipSourceValidation: input.skipSourceValidation,\n });\n const token = input.token || crypto.randomBytes(24).toString(\"base64url\");\n const host = input.host || \"127.0.0.1\";\n const appUrl = normalizeBridgeAppUrl(input.appUrl);\n const server = http.createServer((req, res) => {\n if (req.method === \"OPTIONS\") {\n sendBridgeJson(res, 204, \"\");\n return;\n }\n\n const url = bridgeRequestUrl(req);\n if (\n url.pathname !== \"/local-plan.json\" &&\n url.pathname !== \"/local-plan-comments.json\"\n ) {\n sendBridgeJson(res, 404, { ok: false, error: \"Not found.\" });\n return;\n }\n if (url.searchParams.get(\"token\") !== token) {\n sendBridgeJson(res, 403, { ok: false, error: \"Invalid bridge token.\" });\n return;\n }\n if (url.pathname === \"/local-plan.json\" && req.method !== \"GET\") {\n sendBridgeJson(res, 405, { ok: false, error: \"Method not allowed.\" });\n return;\n }\n if (url.pathname === \"/local-plan-comments.json\" && req.method !== \"POST\") {\n sendBridgeJson(res, 405, { ok: false, error: \"Method not allowed.\" });\n return;\n }\n\n void (async () => {\n try {\n if (url.pathname === \"/local-plan-comments.json\") {\n const body = await readBridgeJsonBody(req);\n applyLocalPlanBridgeCommentUpdate(\n dir,\n normalizeBridgeCommentUpdatePayload(body),\n );\n }\n sendBridgeJson(\n res,\n 200,\n buildLocalPlanBridgePayload({\n dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n skipSourceValidation: input.skipSourceValidation,\n }),\n );\n } catch (error) {\n sendBridgeJson(res, 500, {\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n })();\n });\n\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error) => {\n server.off(\"listening\", onListening);\n reject(error);\n };\n const onListening = () => {\n server.off(\"error\", onError);\n resolve();\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n server.listen(input.port ?? 0, host);\n });\n\n const address = server.address();\n if (!address || typeof address === \"string\") {\n server.close();\n throw new Error(\"Local plan bridge did not bind to a TCP port.\");\n }\n\n const bridgeUrl = `http://${bridgeHostForUrl(host)}:${address.port}/local-plan.json?token=${encodeURIComponent(\n token,\n )}`;\n const url = localPlanBridgePageUrl({ dir, bridgeUrl, appUrl });\n const urlFile =\n input.urlFile === false\n ? undefined\n : writeLocalPlanUrlFile(dir, url, input.urlFile);\n const openResult = input.open\n ? (input.openUrl || openLocalUrl)(url)\n : undefined;\n\n return {\n server,\n result: {\n ok: true,\n dir,\n url,\n ...(urlFile ? { urlFile } : {}),\n bridgeUrl,\n appUrl,\n title: initialPayload.title,\n kind: initialPayload.kind,\n files: initialPayload.files,\n host,\n port: address.port,\n ...(openResult\n ? {\n opened: openResult.ok,\n openCommand: openResult.command,\n ...(openResult.error ? { openError: openResult.error } : {}),\n }\n : {}),\n },\n };\n}\n\nfunction localPlanBridgeWarnings(input: {\n appUrl: string;\n bridgeUrl: string;\n}): string[] {\n const warnings: string[] = [];\n try {\n const appUrl = new URL(input.appUrl);\n const bridgeUrl = new URL(input.bridgeUrl);\n if (appUrl.protocol === \"https:\" && bridgeUrl.protocol === \"http:\") {\n warnings.push(\n \"Safari may block the hosted HTTPS Plan UI from reading the HTTP localhost bridge. Use Chrome/Chromium/Edge, or pass --app-url http://localhost:8096 when running a local Plan app.\",\n );\n }\n } catch {\n // The URLs were normalized earlier; ignore defensive parse failures.\n }\n return warnings;\n}\n\nconst VALIDATE_LOCAL_PLAN_ACTION = \"validate-local-plan-source\";\n\n/**\n * Ask the Plan app to validate the folder against its real renderer schema\n * (`parsePlanMdxFolder` + `planContentSchema`) via the public, no-DB\n * `validate-local-plan-source` action. This is what makes `verify`\n * authoritative: the hand-rolled `check` lint can disagree with the renderer,\n * but this runs the renderer's own parser. Degrades gracefully (`ran: false`)\n * when the endpoint is unreachable or a Plan app predates the action, so an\n * old deploy never turns into a hard failure.\n */\nexport async function fetchRendererValidation(input: {\n appUrl: string;\n files: LocalPlanFiles;\n fetchFn?: typeof fetch;\n}): Promise<RendererValidation> {\n const fetchFn = input.fetchFn ?? fetch;\n const endpoint = planActionEndpoint(input.appUrl, VALIDATE_LOCAL_PLAN_ACTION);\n try {\n const response = await fetchActionWithTimeout(\n endpoint,\n {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ mdx: localPlanMdxFolder(input.files) }),\n },\n fetchFn,\n );\n if (!response.ok) {\n const detail = await response.text().catch(() => \"\");\n return {\n ran: false,\n endpoint,\n error: `${VALIDATE_LOCAL_PLAN_ACTION} failed ${response.status} ${\n response.statusText\n }: ${sanitizeHttpDetail(detail, 300)}`,\n };\n }\n const json = (await response.json().catch(() => null)) as\n | (Record<string, unknown> & { result?: Record<string, unknown> })\n | null;\n const body =\n json && isRecord(json.result) ? json.result : (json ?? undefined);\n if (!body || typeof body.valid !== \"boolean\") {\n return {\n ran: false,\n endpoint,\n error: `${VALIDATE_LOCAL_PLAN_ACTION} returned an unexpected payload.`,\n };\n }\n const issues = Array.isArray(body.issues)\n ? body.issues.filter(isRecord).map((issue) => ({\n path: typeof issue.path === \"string\" ? issue.path : \"\",\n message:\n typeof issue.message === \"string\" ? issue.message : \"Invalid value\",\n }))\n : [];\n return { ran: true, endpoint, valid: body.valid, issues };\n } catch (err) {\n return {\n ran: false,\n endpoint,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\nfunction rendererValidationWarnings(\n validation: RendererValidation,\n offlineIssues: LocalPlanValidationIssue[],\n): string[] {\n if (!validation.ran) {\n const base = `Plan content was NOT validated against the renderer schema (${\n validation.error ?? \"validate endpoint unavailable\"\n }). Fell back to the offline lint. Run against a Plan app that exposes ${VALIDATE_LOCAL_PLAN_ACTION} (e.g. --app-url http://localhost:8096) for authoritative validation.`;\n if (offlineIssues.length === 0) return [base];\n const preview = offlineIssues\n .slice(0, 8)\n .map((issue) => `${issue.file}:${issue.line} ${issue.message}`)\n .join(\"; \");\n const overflow =\n offlineIssues.length > 8 ? ` (+${offlineIssues.length - 8} more)` : \"\";\n return [base, `Offline lint rejected this plan: ${preview}${overflow}`];\n }\n if (validation.valid) return [];\n const issues = validation.issues ?? [];\n const preview = issues\n .slice(0, 8)\n .map((issue) =>\n issue.path ? `${issue.path}: ${issue.message}` : issue.message,\n )\n .join(\"; \");\n const overflow = issues.length > 8 ? ` (+${issues.length - 8} more)` : \"\";\n return [\n `Renderer schema rejected this plan — it will not render. ${preview}${overflow}`,\n ];\n}\n\nexport async function verifyLocalPlanBridge(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n host?: string;\n port?: number;\n token?: string;\n urlFile?: string | false;\n fetchFn?: typeof fetch;\n}): Promise<LocalPlanVerifyResult> {\n const fetchFn = input.fetchFn ?? fetch;\n const files = readLocalPlanFiles(input.dir);\n const bridge = await startLocalPlanBridge({\n dir: input.dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n appUrl: input.appUrl,\n host: input.host,\n port: input.port,\n token: input.token,\n urlFile: input.urlFile,\n // Don't let the weaker offline lint abort the bridge before the authoritative\n // renderer check runs — verify reports the renderer's verdict, not the lint's.\n skipSourceValidation: true,\n });\n\n try {\n const preflight = await fetchFn(bridge.result.bridgeUrl, {\n method: \"OPTIONS\",\n headers: {\n origin: bridge.result.appUrl,\n \"access-control-request-method\": \"GET\",\n \"access-control-request-private-network\": \"true\",\n },\n });\n const response = await fetchFn(bridge.result.bridgeUrl, {\n method: \"GET\",\n headers: { accept: \"application/json\" },\n });\n const payload = (await response.json().catch(() => null)) as\n | (LocalPlanBridgePayload & { mdx?: LocalPlanBridgeMdxFolder })\n | null;\n const mdxFiles = payload?.mdx\n ? Object.keys(payload.mdx).filter((file) => file !== \"assets/\")\n : undefined;\n const bridgeOk =\n response.ok &&\n payload?.ok === true &&\n payload.source === \"agent-native-local-bridge\" &&\n payload.localOnly === true &&\n Boolean(payload.mdx?.[\"plan.mdx\"]);\n const preflightOk =\n preflight.status === 204 &&\n preflight.headers.get(\"access-control-allow-origin\") === \"*\" &&\n preflight.headers.get(\"access-control-allow-private-network\") === \"true\";\n const validation = await fetchRendererValidation({\n appUrl: bridge.result.appUrl,\n files,\n fetchFn,\n });\n // The renderer's verdict is authoritative and gates `ok`. When it could not\n // run (old/unreachable Plan app), fall back to the offline lint as the\n // content signal so verify still catches the common cases offline instead\n // of silently passing unvalidated content.\n const offlineIssues = validation.ran ? [] : validateLocalPlanFiles(files);\n const contentOk = validation.ran\n ? validation.valid === true\n : offlineIssues.length === 0;\n return {\n ok: bridgeOk && preflightOk && contentOk,\n dir: bridge.result.dir,\n url: bridge.result.url,\n ...(bridge.result.urlFile ? { urlFile: bridge.result.urlFile } : {}),\n bridgeUrl: bridge.result.bridgeUrl,\n appUrl: bridge.result.appUrl,\n title: bridge.result.title,\n kind: bridge.result.kind,\n files: bridge.result.files,\n preflight: {\n status: preflight.status,\n allowOrigin: preflight.headers.get(\"access-control-allow-origin\"),\n allowPrivateNetwork: preflight.headers.get(\n \"access-control-allow-private-network\",\n ),\n },\n bridge: {\n status: response.status,\n ok: bridgeOk,\n ...(payload?.source ? { source: payload.source } : {}),\n ...(typeof payload?.localOnly === \"boolean\"\n ? { localOnly: payload.localOnly }\n : {}),\n ...(Array.isArray(payload?.files) ? { files: payload.files } : {}),\n ...(mdxFiles ? { mdxFiles } : {}),\n ...(payload?.error ? { error: payload.error } : {}),\n },\n validation,\n warnings: [\n ...localPlanBridgeWarnings({\n appUrl: bridge.result.appUrl,\n bridgeUrl: bridge.result.bridgeUrl,\n }),\n ...rendererValidationWarnings(validation, offlineIssues),\n ],\n };\n } finally {\n await new Promise<void>((resolve) => bridge.server.close(() => resolve()));\n }\n}\n\nfunction writeLocalPlanSkeleton(input: {\n dir?: string;\n title: string;\n brief?: string;\n kind: LocalPlanKind;\n force?: boolean;\n}): { ok: true; dir: string; files: string[] } {\n const dir = path.resolve(\n input.dir || path.join(defaultPlansDir(), localPlanFolderName(input.title)),\n );\n const planPath = path.join(dir, \"plan.mdx\");\n if (fs.existsSync(planPath) && !input.force) {\n throw new Error(\n `${planPath} already exists. Pass --force to replace the skeleton.`,\n );\n }\n fs.mkdirSync(dir, { recursive: true });\n const title = input.title;\n const brief =\n input.brief ||\n (input.kind === \"recap\"\n ? \"Local visual recap generated without Plan app database writes.\"\n : \"Local visual plan generated without Plan app database writes.\");\n const mdx = [\n \"---\",\n `title: \"${title.replace(/\"/g, '\\\\\"')}\"`,\n `brief: \"${brief.replace(/\"/g, '\\\\\"')}\"`,\n `kind: \"${input.kind}\"`,\n \"localOnly: true\",\n \"---\",\n \"\",\n `# ${title}`,\n \"\",\n brief,\n \"\",\n \"## Review Surface\",\n \"\",\n \"Author the structured plan or recap here. You can add Agent-Native Plan MDX\",\n 'blocks such as `<WireframeBlock><Screen surface=\"browser\">...</Screen></WireframeBlock>`,',\n \"`<Diagram />`, `<TabsBlock />`, `<FileTree />`, or `<Diff />`; the local\",\n \"preview will show the source without publishing it to the Plan app.\",\n \"\",\n ].join(\"\\n\");\n fs.writeFileSync(planPath, mdx, \"utf-8\");\n fs.writeFileSync(\n path.join(dir, \".plan-state.json\"),\n JSON.stringify(\n {\n localOnly: true,\n kind: input.kind,\n createdAt: new Date().toISOString(),\n },\n null,\n 2,\n ) + \"\\n\",\n \"utf-8\",\n );\n return { ok: true, dir, files: [\"plan.mdx\", \".plan-state.json\"] };\n}\n\nfunction runInit(args: Record<string, string | boolean>): void {\n const title = optionalArg(args, \"title\") || \"Untitled local visual plan\";\n const result = writeLocalPlanSkeleton({\n dir: optionalArg(args, \"dir\"),\n title,\n brief: optionalArg(args, \"brief\"),\n kind: normalizeKind(optionalArg(args, \"kind\")),\n force: boolArg(args, \"force\"),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nfunction runCheck(args: Record<string, string | boolean>): void {\n const dir = stringArg(args, \"dir\");\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const result = {\n ok: true,\n noDb: true,\n validation: \"lint-passed\",\n validationScope: \"offline-lint\",\n note: \"Quick offline lint only — NOT the full Plan renderer schema. A green here does not guarantee the plan renders. Run `plan local verify` against a Plan app for authoritative validation before handing off.\",\n dir: files.dir,\n title: parsed.frontmatter.title || firstHeading(parsed.body),\n kind: normalizeKind(parsed.frontmatter.kind),\n files: {\n \"plan.mdx\": Buffer.byteLength(files.planMdx),\n ...(files.canvasMdx\n ? { \"canvas.mdx\": Buffer.byteLength(files.canvasMdx) }\n : {}),\n ...(files.prototypeMdx\n ? { \"prototype.mdx\": Buffer.byteLength(files.prototypeMdx) }\n : {}),\n ...(files.stateJson\n ? { \".plan-state.json\": Buffer.byteLength(files.stateJson) }\n : {}),\n ...(files.assets\n ? Object.fromEntries(\n Object.entries(files.assets).map(([filename, base64]) => [\n `assets/${filename}`,\n Buffer.byteLength(base64, \"base64\"),\n ]),\n )\n : {}),\n },\n };\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nexport function readVisualAnswerSourcePayload(\n sourcePath: string,\n): VisualAnswerSourcePayload {\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(sourcePath, \"utf-8\"));\n } catch (error) {\n throw new Error(\n `Could not read ${sourcePath}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(`${sourcePath} must contain a JSON object.`);\n }\n const source = parsed as Record<string, unknown>;\n const mdx = source.mdx;\n if (!mdx || typeof mdx !== \"object\" || Array.isArray(mdx)) {\n throw new Error(`${sourcePath} must contain an mdx object.`);\n }\n const planMdx = (mdx as Record<string, unknown>)[\"plan.mdx\"];\n if (typeof planMdx !== \"string\" || planMdx.trim().length === 0) {\n throw new Error(\n `${sourcePath} mdx[\"plan.mdx\"] must be a non-empty string.`,\n );\n }\n return source as VisualAnswerSourcePayload;\n}\n\nexport async function publishVisualAnswerSource(\n input: PublishVisualAnswerInput,\n): Promise<{ ok: true; url: string; out: string }> {\n const cwd = input.cwd ?? process.cwd();\n const sourcePath =\n input.sourcePath ?? path.join(cwd, VISUAL_ANSWER_SOURCE_FILENAME);\n const out = input.out ?? path.join(cwd, VISUAL_ANSWER_URL_FILENAME);\n const token = input.token.trim();\n if (!token) throw new Error(\"Plan publish token is empty.\");\n\n const source = readVisualAnswerSourcePayload(sourcePath);\n const question = input.question ?? source.question;\n if (!question?.trim()) {\n throw new Error(\n `Missing visual answer question. Pass --question or set question in ${sourcePath}.`,\n );\n }\n const body = {\n question,\n ...(input.prevPlanId ? { planId: input.prevPlanId } : {}),\n ...(source.title ? { title: source.title } : {}),\n ...(source.brief ? { brief: source.brief } : {}),\n visibility: input.visibility ?? \"org\",\n source: \"imported\",\n ...((input.repo ?? source.repoPath)\n ? { repoPath: input.repo ?? source.repoPath }\n : {}),\n ...((input.sourceUrl ?? source.sourceUrl)\n ? { sourceUrl: input.sourceUrl ?? source.sourceUrl }\n : {}),\n sourceType: normalizeVisualAnswerSourceType(\n input.sourceType ?? source.sourceType,\n ),\n currentFocus: `visual answer: ${question.trim().slice(0, 120)}`,\n status: \"review\",\n mdx: source.mdx,\n };\n\n const endpoint = planActionEndpoint(input.appUrl, \"visual-answer\");\n const fetchFn = input.fetchFn ?? fetch;\n const response = await fetchActionWithTimeout(\n endpoint,\n {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n },\n fetchFn,\n );\n const text = await response.text().catch((error) => String(error));\n if (!response.ok) {\n throw new Error(\n `visual-answer failed ${response.status} ${\n response.statusText\n }: ${sanitizeHttpDetail(text, 800)}`,\n );\n }\n let result: unknown = null;\n try {\n result = text ? JSON.parse(text) : null;\n } catch {\n throw new Error(\"visual-answer returned non-JSON output.\");\n }\n const url = visualAnswerUrlFromPublishResult(result, input.appUrl);\n if (!url) {\n throw new Error(\n \"visual-answer succeeded but did not return a usable /plans/<id> URL or plan id.\",\n );\n }\n fs.writeFileSync(path.resolve(out), `${url}\\n`, \"utf-8\");\n return { ok: true, url, out };\n}\n\nasync function runVisualAnswer(\n subcommand: string | undefined,\n args: Record<string, string | boolean>,\n): Promise<void> {\n if (\n subcommand === undefined ||\n subcommand === \"help\" ||\n subcommand === \"--help\" ||\n subcommand === \"-h\" ||\n args.help === true ||\n args.h === true\n ) {\n process.stdout.write(HELP);\n return;\n }\n if (subcommand !== \"publish\") {\n process.stderr.write(\n `Unknown plan visual-answer subcommand: ${subcommand}\\n${HELP}`,\n );\n process.exit(1);\n }\n const appUrl =\n optionalArg(args, \"app-url\") ||\n process.env.PLAN_VISUAL_ANSWER_APP_URL ||\n process.env.PLAN_RECAP_APP_URL ||\n DEFAULT_PLAN_APP_URL;\n const token =\n optionalArg(args, \"token\") ||\n process.env.PLAN_VISUAL_ANSWER_TOKEN ||\n process.env.PLAN_RECAP_TOKEN ||\n \"\";\n try {\n const result = await publishVisualAnswerSource({\n appUrl,\n token,\n question: optionalArg(args, \"question\"),\n sourcePath: optionalArg(args, \"source\") ?? VISUAL_ANSWER_SOURCE_FILENAME,\n out: optionalArg(args, \"out\") ?? VISUAL_ANSWER_URL_FILENAME,\n prevPlanId: optionalArg(args, \"prev-plan-id\"),\n repo: optionalArg(args, \"repo\"),\n sourceUrl: optionalArg(args, \"source-url\"),\n sourceType: optionalArg(args, \"source-type\"),\n visibility: normalizeVisibility(optionalArg(args, \"visibility\")),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } catch (error) {\n process.stdout.write(\n `${JSON.stringify(\n {\n ok: false,\n reason: error instanceof Error ? error.message : String(error),\n },\n null,\n 2,\n )}\\n`,\n );\n process.exit(1);\n }\n}\n\nfunction runPreview(args: Record<string, string | boolean>): void {\n const result = writeLocalPlanPreview({\n dir: stringArg(args, \"dir\"),\n out: optionalArg(args, \"out\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n open: boolArg(args, \"open\"),\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nasync function runServe(args: Record<string, string | boolean>): Promise<void> {\n const portValue = optionalArg(args, \"port\");\n const port = portValue ? Number(portValue) : undefined;\n if (portValue && (!Number.isInteger(port) || port! < 0 || port! > 65535)) {\n throw new Error(\"--port must be an integer between 0 and 65535.\");\n }\n\n const bridge = await startLocalPlanBridge({\n dir: stringArg(args, \"dir\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n host: optionalArg(args, \"host\"),\n port,\n open: boolArg(args, \"open\"),\n urlFile: optionalArg(args, \"url-file\") || optionalArg(args, \"out\"),\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n\n process.stdout.write(`${JSON.stringify(bridge.result, null, 2)}\\n`);\n process.stderr.write(\n [\n `Local Plan bridge running at ${bridge.result.bridgeUrl}`,\n bridge.result.urlFile\n ? `Open URL written to ${bridge.result.urlFile}`\n : \"\",\n ...localPlanBridgeWarnings({\n appUrl: bridge.result.appUrl,\n bridgeUrl: bridge.result.bridgeUrl,\n }),\n \"Press Ctrl+C to stop.\",\n ]\n .filter(Boolean)\n .join(\"\\n\") + \"\\n\",\n );\n\n await new Promise<void>((resolve) => {\n let stopped = false;\n const cleanup = () => {\n process.off(\"SIGINT\", stop);\n process.off(\"SIGTERM\", stop);\n };\n const stop = () => {\n if (stopped) return;\n stopped = true;\n cleanup();\n bridge.server.close(() => resolve());\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n });\n}\n\nasync function runVerify(\n args: Record<string, string | boolean>,\n): Promise<void> {\n const portValue = optionalArg(args, \"port\");\n const port = portValue ? Number(portValue) : undefined;\n if (portValue && (!Number.isInteger(port) || port! < 0 || port! > 65535)) {\n throw new Error(\"--port must be an integer between 0 and 65535.\");\n }\n\n const result = await verifyLocalPlanBridge({\n dir: stringArg(args, \"dir\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n host: optionalArg(args, \"host\"),\n port,\n urlFile: optionalArg(args, \"url-file\") || optionalArg(args, \"out\") || false,\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n if (!result.ok) process.exit(1);\n}\n\nasync function runBlocks(\n args: Record<string, string | boolean>,\n): Promise<void> {\n const format = normalizePlanBlockFormat(optionalArg(args, \"format\"));\n const appUrl =\n optionalArg(args, \"app-url\") ||\n process.env.PLAN_BLOCKS_APP_URL ||\n process.env.PLAN_RECAP_APP_URL ||\n DEFAULT_PLAN_APP_URL;\n const out = optionalArg(args, \"out\") || defaultPlanBlocksOut(format);\n const useClack = Boolean(process.stdout.isTTY) && !boolArg(args, \"json\");\n let stopSpinner: ((message?: string) => void) | undefined;\n let clack: typeof import(\"@clack/prompts\") | undefined;\n\n if (useClack) {\n clack = await import(\"@clack/prompts\");\n const spinner = clack.spinner();\n spinner.start(\"Fetching Plan block catalog\");\n stopSpinner = (message?: string) => spinner.stop(message);\n }\n\n try {\n const result = await fetchPlanBlockCatalog({\n appUrl,\n format,\n out,\n });\n if (!useClack || !clack) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n stopSpinner?.(\"Fetched Plan block catalog\");\n clack.note(\n [\n `Output ${path.resolve(result.out)}`,\n `Format ${result.format}`,\n typeof result.count === \"number\" ? `Blocks ${result.count}` : \"\",\n \"Privacy No plan content sent\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Plan block catalog\",\n );\n clack.outro(`Wrote ${result.out}`);\n } catch (error) {\n if (useClack && clack) {\n stopSpinner?.(\"Plan block catalog fetch failed\");\n clack.cancel(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n throw error;\n }\n}\n\nconst HELP = `agent-native plan — local Agent-Native Plan helpers\n\nUsage:\n agent-native plan blocks [--format reference|schema] [--app-url <url>] [--out <file>] [--json]\n agent-native plan visual-answer publish --question <text> [--source visual-answer-source.json] [--out visual-answer-url.txt] [--repo owner/name] [--source-url <url>] [--app-url <url>] [--token <planToken>]\n agent-native plan serve --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--port <port>] [--url-file <file>]\n agent-native plan local init --title <title> [--brief <text>] [--kind plan|recap] [--dir <folder>] [--force]\n agent-native plan local check --dir <folder>\n agent-native plan local serve --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--port <port>] [--url-file <file>]\n agent-native plan local verify --dir <folder> [--app-url <url>] [--kind plan|recap] [--port <port>]\n agent-native plan local preview --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--out preview.html]\n\nThe blocks command fetches the no-auth, read-only get-plan-blocks catalog from\nthe Plan app and writes plan-blocks.md (or plan-blocks.schema.json). It sends no\nplan content and is safe for local-files authoring before writing MDX. It uses a\nclack UI in interactive terminals and prints JSON for non-interactive shells or\nwhen --json is passed.\n\nThe visual-answer publish command sends a coding-agent-authored\nvisual-answer-source.json file to the Plan app's visual-answer action and writes\nvisual-answer-url.txt. The source file should contain a question, optional\ntitle/brief/repoPath/sourceUrl, and MDX files under mdx. It is the terminal\nhandoff for /visual-answer workflows after a coding agent has inspected code via\nthe local repo, the Plan bridge, or GitHub and authored structured Plan blocks.\n\nThe local subcommands are the privacy-focused no-DB path. They only read and\nwrite local files: plan.mdx, optional canvas.mdx, optional prototype.mdx, and\noptional .plan-state.json. They do not call the Plan MCP server, the Plan app\nwrite actions, hosted storage, or SQLite.\n\nCommon flow:\n agent-native plan blocks --out plan-blocks.md\n agent-native plan local init --title \"Checkout review\" --kind plan\n agent-native plan local serve --dir plans/checkout-review --open\n\n\\`plan local serve\\` starts a tiny localhost bridge and opens the hosted Plan UI\nagainst that local-only source. The hosted app fetches the MDX from localhost in\nthe browser; it does not write plan content to the hosted database. The served\nURL is written to \\`.plan-url\\` by default; pass \\`--url-file\\` to choose a\ndifferent local-only file. On macOS, \\`--open\\` prefers Chromium browsers because\nSafari may block the hosted HTTPS page from reading the HTTP localhost bridge.\nUse \\`plan local verify\\` for headless bridge/CORS diagnostics that exit cleanly.\nUse \\`plan local preview\\` for a local Plan dev server route. \\`preview --out\\` is\na legacy/debug escape hatch that writes a standalone static HTML file.\n\\`plan serve\\` is kept as a compatibility alias for \\`plan local serve\\`.\n`;\n\nexport async function runPlan(argv: string[]): Promise<void> {\n const [area, sub, ...rest] = argv;\n if (area === \"blocks\") {\n await runBlocks(parseArgs(argv.slice(1)));\n return;\n }\n if (area === \"serve\") {\n const args = parseArgs(argv.slice(1));\n if (args.help === true || args.h === true) {\n process.stdout.write(HELP);\n return;\n }\n await runServe(args);\n return;\n }\n if (area === \"visual-answer\") {\n await runVisualAnswer(sub, parseArgs(rest));\n return;\n }\n if (area !== \"local\") {\n // Bare `agent-native plan` / `plan help` / `plan --help` → show help on\n // stdout and exit 0 (informational, not an error).\n if (\n area === undefined ||\n area === \"help\" ||\n area === \"--help\" ||\n area === \"-h\"\n ) {\n process.stdout.write(HELP);\n return;\n }\n // A non-empty, unrecognised area (e.g. `agent-native plan lokal`) is an\n // error: print to stderr so the CI log captures it, and exit 1 so callers\n // can detect the failure. This mirrors the existing behaviour for unknown\n // subcommands inside `plan local`.\n process.stderr.write(`Unknown plan area: ${area}\\n${HELP}`);\n process.exit(1);\n }\n const args = parseArgs(rest);\n // `plan local <sub> --help` / `-h` shows help instead of running the\n // subcommand (e.g. `plan local init --help` must not scaffold a folder).\n if (args.help === true || args.h === true) {\n process.stdout.write(HELP);\n return;\n }\n switch (sub) {\n case \"init\":\n runInit(args);\n return;\n case \"check\":\n runCheck(args);\n return;\n case \"preview\":\n runPreview(args);\n return;\n case \"serve\":\n await runServe(args);\n return;\n case \"verify\":\n await runVerify(args);\n return;\n case \"help\":\n case \"--help\":\n case \"-h\":\n case undefined:\n process.stdout.write(HELP);\n return;\n default:\n process.stderr.write(`Unknown plan local subcommand: ${sub}\\n${HELP}`);\n process.exit(1);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"plan-local.js","sourceRoot":"","sources":["../../src/cli/plan-local.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Plan helper commands.\n *\n * The `plan local` commands are intentionally separate from the Plan app\n * actions. They do not call MCP, hosted write actions, SQLite, or hosted\n * storage; they only read local files or serve them from a localhost bridge so\n * privacy-focused users have an auditable no-DB path. The top-level\n * `plan blocks` command is a schema-only, no-auth helper for fetching the\n * public block catalog before authoring local MDX; it never sends plan content.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport http, {\n type IncomingMessage,\n type Server,\n type ServerResponse,\n} from \"node:http\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport {\n DEFAULT_PLAN_APP_URL,\n defaultPlanBlocksOut,\n fetchPlanBlockCatalog,\n normalizePlanBlockFormat,\n planActionEndpoint,\n} from \"./plan-blocks.js\";\n\ntype LocalPlanKind = \"plan\" | \"recap\";\n\ntype LocalPlanFiles = {\n dir: string;\n planMdx: string;\n canvasMdx?: string;\n prototypeMdx?: string;\n stateJson?: string;\n assets?: Record<string, string>;\n};\n\nexport type LocalPlanValidationIssue = {\n file: string;\n line: number;\n message: string;\n};\n\ntype LocalPlanPreviewInput = {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n};\n\ntype LocalPlanPreviewResult = {\n ok: true;\n dir: string;\n out?: string;\n url: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n opened?: boolean;\n openCommand?: string;\n openError?: string;\n};\n\ntype LocalPlanBridgeMdxFolder = {\n \"plan.mdx\": string;\n \"canvas.mdx\"?: string;\n \"prototype.mdx\"?: string;\n \".plan-state.json\"?: string;\n \"assets/\"?: Record<string, string>;\n};\n\ntype LocalPlanBridgeComment = {\n id: string;\n planId: string;\n parentCommentId: string | null;\n sectionId: string | null;\n kind: string;\n status: string;\n anchor: string | null;\n message: string;\n createdBy: string;\n authorEmail: string | null;\n authorName: string | null;\n resolutionTarget: string | null;\n mentions: unknown[];\n mentionsJson: string | null;\n resolvedBy: string | null;\n resolvedAt: string | null;\n consumedAt: string | null;\n deletedAt: string | null;\n deletedBy: string | null;\n createdAt: string;\n updatedAt: string;\n};\n\ntype LocalPlanBridgeCommentInput = {\n id?: string;\n parentCommentId?: string | null;\n sectionId?: string | null;\n kind?: string;\n status?: string;\n anchor?: string | null;\n message?: string;\n createdBy?: string;\n authorEmail?: string | null;\n authorName?: string | null;\n resolutionTarget?: string | null;\n mentions?: unknown[];\n resolvedBy?: string | null;\n resolvedAt?: string | null;\n};\n\ntype LocalPlanBridgeCommentUpdate = {\n comments?: LocalPlanBridgeCommentInput[];\n deletedCommentIds?: string[];\n};\n\ntype VisualAnswerSourcePayload = {\n question?: string;\n title?: string;\n brief?: string;\n repoPath?: string;\n sourceUrl?: string;\n sourceType?: string;\n mdx: {\n \"plan.mdx\": string;\n \"canvas.mdx\"?: string;\n \"prototype.mdx\"?: string;\n \"assets/\"?: Record<string, string>;\n };\n};\n\nexport type PublishVisualAnswerInput = {\n appUrl: string;\n token: string;\n question?: string;\n sourcePath?: string;\n out?: string;\n prevPlanId?: string;\n repo?: string;\n sourceUrl?: string;\n sourceType?: string;\n visibility?: \"private\" | \"org\" | \"public\";\n fetchFn?: typeof fetch;\n cwd?: string;\n};\n\nexport type LocalPlanBridgePayload = {\n ok: true;\n version: 1;\n source: \"agent-native-local-bridge\";\n localOnly: true;\n slug: string;\n dir: string;\n title: string;\n brief: string;\n kind: LocalPlanKind;\n updatedAt: string;\n files: string[];\n mdx: LocalPlanBridgeMdxFolder;\n comments: LocalPlanBridgeComment[];\n};\n\nexport type LocalPlanServeResult = {\n ok: true;\n dir: string;\n url: string;\n urlFile?: string;\n bridgeUrl: string;\n appUrl: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n host: string;\n port: number;\n opened?: boolean;\n openCommand?: string;\n openError?: string;\n};\n\nexport type LocalPlanBridgeServer = {\n server: Server;\n result: LocalPlanServeResult;\n};\n\nexport type RendererValidationIssue = {\n path: string;\n message: string;\n};\n\nexport type RendererValidation = {\n /** Whether the renderer validate endpoint was reachable and answered. */\n ran: boolean;\n endpoint: string;\n /** Renderer verdict — present only when `ran` is true. */\n valid?: boolean;\n issues?: RendererValidationIssue[];\n /** Transport/endpoint error when `ran` is false (unreachable, 404, old deploy). */\n error?: string;\n};\n\nexport type LocalPlanVerifyResult = {\n ok: boolean;\n dir: string;\n url: string;\n urlFile?: string;\n bridgeUrl: string;\n appUrl: string;\n title: string;\n kind: LocalPlanKind;\n files: string[];\n preflight: {\n status: number;\n allowOrigin: string | null;\n allowPrivateNetwork: string | null;\n };\n bridge: {\n status: number;\n ok: boolean;\n source?: string;\n localOnly?: boolean;\n files?: string[];\n mdxFiles?: string[];\n error?: string;\n };\n validation: RendererValidation;\n warnings: string[];\n};\n\ntype OpenLocalUrlResult = {\n ok: boolean;\n command: string;\n error?: string;\n};\n\nconst LOCAL_PLAN_COMMENTS_FILE = \"comments.json\";\nconst LOCAL_PLAN_OWNER_EMAIL = \"local@agent-native.local\";\nconst LOCAL_PLAN_BRIDGE_COMMENT_BODY_LIMIT = 1024 * 1024;\n\nconst LOCAL_PLAN_ASSET_MAX_SINGLE_BYTES = 2 * 1024 * 1024;\nconst LOCAL_PLAN_ASSET_MAX_TOTAL_BYTES = 10 * 1024 * 1024;\nconst AGENT_NATIVE_MANIFEST_FILE = \"agent-native.json\";\nconst VISUAL_ANSWER_SOURCE_FILENAME = \"visual-answer-source.json\";\nconst VISUAL_ANSWER_URL_FILENAME = \"visual-answer-url.txt\";\nconst PLAN_ACTION_HTTP_TIMEOUT_MS = 45_000;\nconst LOCAL_PLAN_ASSET_EXTENSIONS = new Set([\n \"png\",\n \"jpg\",\n \"jpeg\",\n \"gif\",\n \"webp\",\n \"svg\",\n]);\n\nfunction parseArgs(argv: string[]): Record<string, string | boolean> {\n const out: Record<string, string | boolean> = {};\n for (let i = 0; i < argv.length; i += 1) {\n const token = argv[i];\n if (!token.startsWith(\"--\")) continue;\n const key = token.slice(2);\n const next = argv[i + 1];\n if (next === undefined || next.startsWith(\"--\")) out[key] = true;\n else {\n out[key] = next;\n i += 1;\n }\n }\n return out;\n}\n\nfunction stringArg(\n args: Record<string, string | boolean>,\n key: string,\n): string {\n const value = args[key];\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Missing --${key}`);\n }\n return value;\n}\n\nfunction optionalArg(\n args: Record<string, string | boolean>,\n key: string,\n): string | undefined {\n const value = args[key];\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction boolArg(args: Record<string, string | boolean>, key: string): boolean {\n return args[key] === true;\n}\n\nfunction sanitizeHttpDetail(value: string, maxLength: number): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) return normalized;\n return `${normalized.slice(0, maxLength - 3)}...`;\n}\n\nfunction normalizeVisibility(\n value: string | undefined,\n): \"private\" | \"org\" | \"public\" | undefined {\n if (!value) return undefined;\n if (value === \"private\" || value === \"org\" || value === \"public\") {\n return value;\n }\n throw new Error(\n `Invalid --visibility \"${value}\" (expected private, org, or public)`,\n );\n}\n\nfunction normalizeVisualAnswerSourceType(value: string | undefined): string {\n if (!value) return \"code\";\n if (\n [\n \"code\",\n \"pull-request\",\n \"commit\",\n \"branch\",\n \"diff\",\n \"issue\",\n \"page\",\n ].includes(value)\n ) {\n return value;\n }\n throw new Error(\n `Invalid --source-type \"${value}\" (expected code, pull-request, commit, branch, diff, issue, or page)`,\n );\n}\n\nfunction visualAnswerUrlFromPublishResult(\n result: unknown,\n appUrl: string,\n): string | null {\n const base = appUrl.replace(/\\/$/, \"\");\n if (!result || typeof result !== \"object\") return null;\n const record = result as Record<string, unknown>;\n const rawUrl =\n typeof record.url === \"string\"\n ? record.url\n : record.path && typeof record.path === \"string\"\n ? record.path\n : null;\n if (rawUrl) {\n try {\n return new URL(rawUrl, `${base}/`).toString();\n } catch {\n return null;\n }\n }\n const planId =\n typeof record.planId === \"string\"\n ? record.planId\n : record.plan &&\n typeof record.plan === \"object\" &&\n typeof (record.plan as Record<string, unknown>).id === \"string\"\n ? ((record.plan as Record<string, unknown>).id as string)\n : null;\n return planId ? `${base}/plans/${encodeURIComponent(planId)}` : null;\n}\n\nasync function fetchActionWithTimeout(\n url: string,\n init: RequestInit,\n fetchFn: typeof fetch,\n): Promise<Response> {\n return await fetchFn(url, {\n ...init,\n signal: init.signal ?? AbortSignal.timeout(PLAN_ACTION_HTTP_TIMEOUT_MS),\n });\n}\n\nexport function localPlanFolderName(title: string): string {\n const slug = title\n .normalize(\"NFKD\")\n .replace(/[\\u0300-\\u036f]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 64)\n .replace(/-+$/g, \"\");\n return slug || \"untitled-plan\";\n}\n\nfunction normalizeKind(value: string | undefined): LocalPlanKind {\n if (!value) return \"plan\";\n if (value === \"plan\" || value === \"recap\") return value;\n throw new Error(`Invalid --kind \"${value}\" (expected plan or recap)`);\n}\n\nfunction normalizeSlash(filePath: string): string {\n return filePath.replace(/\\\\/g, \"/\");\n}\n\nfunction normalizeRelativePath(filePath: string): string | null {\n if (!filePath.trim() || path.isAbsolute(filePath)) return null;\n const normalized = path.posix\n .normalize(normalizeSlash(filePath.trim()))\n .replace(/\\/+$/, \"\");\n if (\n !normalized ||\n normalized === \".\" ||\n normalized === \"..\" ||\n normalized.startsWith(\"../\") ||\n normalized.split(\"/\").some((part) => !part || part === \".\" || part === \"..\")\n ) {\n return null;\n }\n return normalized;\n}\n\nfunction findUpward(startDir: string, filename: string): string | null {\n let current = path.resolve(startDir);\n for (;;) {\n const candidate = path.join(current, filename);\n if (fs.existsSync(candidate)) return candidate;\n const parent = path.dirname(current);\n if (parent === current) return null;\n current = parent;\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction manifestRootPath(value: unknown): string | null {\n if (typeof value === \"string\") return normalizeRelativePath(value);\n if (isRecord(value) && typeof value.path === \"string\") {\n return normalizeRelativePath(value.path);\n }\n return null;\n}\n\nfunction planManifestConfig(): { rootDir: string; plansPath: string } | null {\n const configuredManifest =\n process.env.AGENT_NATIVE_MANIFEST?.trim() ||\n process.env.AGENT_NATIVE_MANIFEST_PATH?.trim();\n const manifestPath = configuredManifest\n ? path.resolve(configuredManifest)\n : findUpward(process.cwd(), AGENT_NATIVE_MANIFEST_FILE);\n if (!manifestPath) return null;\n\n try {\n const parsed = JSON.parse(\n fs.readFileSync(manifestPath, \"utf-8\"),\n ) as unknown;\n const apps = isRecord(parsed) && isRecord(parsed.apps) ? parsed.apps : null;\n const planApp = apps && isRecord(apps.plan) ? apps.plan : null;\n const roots = planApp && Array.isArray(planApp.roots) ? planApp.roots : [];\n const plansPath = roots\n .map(manifestRootPath)\n .find((item): item is string => Boolean(item));\n return plansPath\n ? { rootDir: path.dirname(manifestPath), plansPath }\n : null;\n } catch {\n return null;\n }\n}\n\nfunction localPlanWorkspaceRoot(startDir = process.cwd()): string {\n const manifestPath = findUpward(startDir, AGENT_NATIVE_MANIFEST_FILE);\n if (manifestPath) return path.dirname(manifestPath);\n const gitDir = findUpward(startDir, \".git\");\n if (gitDir) return path.dirname(gitDir);\n\n const configuredManifest =\n process.env.AGENT_NATIVE_MANIFEST?.trim() ||\n process.env.AGENT_NATIVE_MANIFEST_PATH?.trim();\n if (configuredManifest) return path.dirname(path.resolve(configuredManifest));\n return process.cwd();\n}\n\nfunction defaultPlansDir(): string {\n const configured = process.env.PLAN_LOCAL_DIR;\n if (configured?.trim()) return path.resolve(configured.trim());\n const manifest = planManifestConfig();\n if (manifest) return path.resolve(manifest.rootDir, manifest.plansPath);\n return path.resolve(\"plans\");\n}\n\nfunction defaultLocalPlanAppUrl(): string {\n return (\n process.env.PLAN_LOCAL_APP_URL ||\n process.env.PLAN_BASE_URL ||\n \"http://localhost:8096\"\n );\n}\n\nfunction defaultLocalPlanBridgeAppUrl(): string {\n return (\n process.env.PLAN_LOCAL_BRIDGE_APP_URL ||\n process.env.PLAN_BASE_URL ||\n DEFAULT_PLAN_APP_URL\n );\n}\n\nfunction normalizeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanAppUrl()).replace(/\\/+$/, \"\");\n}\n\nfunction normalizeBridgeAppUrl(value: string | undefined): string {\n return (value || defaultLocalPlanBridgeAppUrl()).replace(/\\/+$/, \"\");\n}\n\nfunction localPlanPreviewUrl(dir: string, appUrl?: string): string {\n const base = `${normalizeAppUrl(appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(dir)),\n )}`;\n const repoPath = repoRelativePlanPath(dir);\n if (!repoPath) return base;\n return `${base}?${new URLSearchParams({ path: repoPath }).toString()}`;\n}\n\nfunction realpathIfExists(filePath: string): string {\n try {\n return fs.realpathSync.native(filePath);\n } catch {\n return path.resolve(filePath);\n }\n}\n\nfunction repoRelativePlanPath(dir: string): string | null {\n const resolved = realpathIfExists(dir);\n const root = realpathIfExists(localPlanWorkspaceRoot(resolved));\n const relative = path.relative(root, resolved);\n if (!relative || relative.startsWith(\"..\") || path.isAbsolute(relative)) {\n return null;\n }\n return normalizeSlash(relative);\n}\n\nfunction localPlanBridgePageUrl(input: {\n dir: string;\n bridgeUrl: string;\n appUrl?: string;\n}): string {\n return `${normalizeBridgeAppUrl(input.appUrl)}/local-plans/${encodeURIComponent(\n path.basename(path.resolve(input.dir)),\n )}?bridge=${encodeURIComponent(input.bridgeUrl)}`;\n}\n\nfunction writeLocalPlanUrlFile(dir: string, url: string, urlFile?: string) {\n const file = path.resolve(urlFile || path.join(dir, \".plan-url\"));\n fs.writeFileSync(file, `${url}\\n`, { encoding: \"utf-8\", mode: 0o600 });\n return file;\n}\n\nfunction runOpenCommand(command: string, args: string[]): OpenLocalUrlResult {\n const result = spawnSync(command, args, {\n stdio: \"ignore\",\n windowsHide: true,\n });\n const commandDisplay = [command, ...args].join(\" \");\n if (result.error) {\n return {\n ok: false,\n command: commandDisplay,\n error: result.error.message,\n };\n }\n if (typeof result.status === \"number\" && result.status !== 0) {\n return {\n ok: false,\n command: commandDisplay,\n error: `exit code ${result.status}`,\n };\n }\n return { ok: true, command: commandDisplay };\n}\n\nfunction openLocalUrl(url: string): OpenLocalUrlResult {\n const platform = process.platform;\n if (platform === \"darwin\") {\n for (const appName of [\n \"Google Chrome\",\n \"Chromium\",\n \"Microsoft Edge\",\n \"Brave Browser\",\n ]) {\n const result = runOpenCommand(\"open\", [\"-a\", appName, url]);\n if (result.ok) return result;\n }\n return runOpenCommand(\"open\", [url]);\n }\n if (platform === \"win32\") {\n return runOpenCommand(\"cmd\", [\"/c\", \"start\", \"\", url]);\n }\n return runOpenCommand(\"xdg-open\", [url]);\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nfunction stripFrontmatter(source: string): {\n body: string;\n frontmatter: Record<string, string>;\n} {\n if (!source.startsWith(\"---\\n\")) return { body: source, frontmatter: {} };\n const end = source.indexOf(\"\\n---\", 4);\n if (end < 0) return { body: source, frontmatter: {} };\n const frontmatterSource = source.slice(4, end).trim();\n const body = source.slice(end + 4).replace(/^\\r?\\n/, \"\");\n const frontmatter: Record<string, string> = {};\n for (const line of frontmatterSource.split(/\\r?\\n/)) {\n const match = line.match(/^([A-Za-z0-9_-]+):\\s*(.*)$/);\n if (!match) continue;\n const value = match[2]\n .trim()\n .replace(/^['\"]|['\"]$/g, \"\")\n .trim();\n frontmatter[match[1]] = value;\n }\n return { body, frontmatter };\n}\n\nfunction firstHeading(source: string): string | null {\n for (const line of source.split(/\\r?\\n/)) {\n const match = line.match(/^#{1,3}\\s+(.+)$/);\n if (match) return match[1].trim();\n }\n return null;\n}\n\nfunction splitMdxBlocks(source: string): Array<{\n type: \"markdown\" | \"component\";\n name?: string;\n value: string;\n}> {\n const blocks: Array<{\n type: \"markdown\" | \"component\";\n name?: string;\n value: string;\n }> = [];\n const lines = source.split(/\\r?\\n/);\n let markdown: string[] = [];\n let component: string[] | null = null;\n let componentName = \"\";\n\n function flushMarkdown() {\n const value = markdown.join(\"\\n\").trim();\n if (value) blocks.push({ type: \"markdown\", value });\n markdown = [];\n }\n\n function flushComponent() {\n if (!component) return;\n blocks.push({\n type: \"component\",\n name: componentName || \"MDX component\",\n value: component.join(\"\\n\").trim(),\n });\n component = null;\n componentName = \"\";\n }\n\n for (const line of lines) {\n const start = line.match(/^<([A-Z][A-Za-z0-9_]*)\\b/);\n if (!component && start) {\n flushMarkdown();\n component = [line];\n componentName = start[1];\n if (/\\/>\\s*$/.test(line)) flushComponent();\n continue;\n }\n\n if (component) {\n component.push(line);\n if (new RegExp(`</${componentName}>\\\\s*$`).test(line)) {\n flushComponent();\n }\n continue;\n }\n\n markdown.push(line);\n }\n\n flushComponent();\n flushMarkdown();\n return blocks;\n}\n\nfunction renderMarkdownish(source: string): string {\n const lines = source.split(/\\r?\\n/);\n const html: string[] = [];\n let inCode = false;\n let codeLines: string[] = [];\n let listLines: string[] = [];\n\n function flushList() {\n if (listLines.length === 0) return;\n html.push(\n `<ul>${listLines.map((line) => `<li>${escapeHtml(line)}</li>`).join(\"\")}</ul>`,\n );\n listLines = [];\n }\n\n function flushCode() {\n if (!inCode) return;\n html.push(`<pre><code>${escapeHtml(codeLines.join(\"\\n\"))}</code></pre>`);\n codeLines = [];\n inCode = false;\n }\n\n for (const line of lines) {\n if (line.startsWith(\"```\")) {\n if (inCode) flushCode();\n else {\n flushList();\n inCode = true;\n codeLines = [];\n }\n continue;\n }\n if (inCode) {\n codeLines.push(line);\n continue;\n }\n\n const heading = line.match(/^(#{1,4})\\s+(.+)$/);\n if (heading) {\n flushList();\n const level = Math.min(heading[1].length, 4);\n html.push(`<h${level}>${escapeHtml(heading[2].trim())}</h${level}>`);\n continue;\n }\n\n const bullet = line.match(/^\\s*[-*]\\s+(.+)$/);\n if (bullet) {\n listLines.push(bullet[1]);\n continue;\n }\n\n if (!line.trim()) {\n flushList();\n continue;\n }\n\n flushList();\n html.push(`<p>${escapeHtml(line.trim())}</p>`);\n }\n\n flushCode();\n flushList();\n return html.join(\"\\n\");\n}\n\nfunction readLocalPlanAssets(dir: string): Record<string, string> | undefined {\n const assetsDir = path.join(dir, \"assets\");\n if (!fs.existsSync(assetsDir)) return undefined;\n\n const assets: Record<string, string> = {};\n let totalBytes = 0;\n for (const entry of fs.readdirSync(assetsDir, { withFileTypes: true })) {\n if (!entry.isFile()) continue;\n const filename = path.basename(entry.name);\n if (!filename || filename !== entry.name) continue;\n const ext = filename.split(\".\").pop()?.toLowerCase() ?? \"\";\n if (!LOCAL_PLAN_ASSET_EXTENSIONS.has(ext)) continue;\n\n const abs = path.join(assetsDir, filename);\n const bytes = fs.readFileSync(abs);\n if (bytes.byteLength > LOCAL_PLAN_ASSET_MAX_SINGLE_BYTES) continue;\n if (totalBytes + bytes.byteLength > LOCAL_PLAN_ASSET_MAX_TOTAL_BYTES) {\n continue;\n }\n totalBytes += bytes.byteLength;\n assets[filename] = bytes.toString(\"base64\");\n }\n\n return Object.keys(assets).length > 0 ? assets : undefined;\n}\n\nexport function readLocalPlanFiles(dir: string): LocalPlanFiles {\n const resolved = path.resolve(dir);\n const planPath = path.join(resolved, \"plan.mdx\");\n if (!fs.existsSync(planPath)) {\n throw new Error(`Missing local plan source: ${planPath}`);\n }\n const readOptional = (file: string) => {\n const abs = path.join(resolved, file);\n return fs.existsSync(abs) ? fs.readFileSync(abs, \"utf-8\") : undefined;\n };\n return {\n dir: resolved,\n planMdx: fs.readFileSync(planPath, \"utf-8\"),\n canvasMdx: readOptional(\"canvas.mdx\"),\n prototypeMdx: readOptional(\"prototype.mdx\"),\n stateJson: readOptional(\".plan-state.json\"),\n assets: readLocalPlanAssets(resolved),\n };\n}\n\nfunction localPlanMdxFolder(files: LocalPlanFiles): LocalPlanBridgeMdxFolder {\n return {\n \"plan.mdx\": files.planMdx,\n ...(files.canvasMdx ? { \"canvas.mdx\": files.canvasMdx } : {}),\n ...(files.prototypeMdx ? { \"prototype.mdx\": files.prototypeMdx } : {}),\n ...(files.stateJson ? { \".plan-state.json\": files.stateJson } : {}),\n ...(files.assets ? { \"assets/\": files.assets } : {}),\n };\n}\n\nfunction localPlanFileList(files: LocalPlanFiles): string[] {\n return [\n \"plan.mdx\",\n ...(files.canvasMdx ? [\"canvas.mdx\"] : []),\n ...(files.prototypeMdx ? [\"prototype.mdx\"] : []),\n ...(files.stateJson ? [\".plan-state.json\"] : []),\n ...Object.keys(files.assets ?? {}).map((filename) => `assets/${filename}`),\n ];\n}\n\nfunction localPlanSourceEntries(files: LocalPlanFiles): Array<{\n file: string;\n source: string;\n}> {\n return [\n { file: \"plan.mdx\", source: files.planMdx },\n ...(files.canvasMdx\n ? [{ file: \"canvas.mdx\", source: files.canvasMdx }]\n : []),\n ...(files.prototypeMdx\n ? [{ file: \"prototype.mdx\", source: files.prototypeMdx }]\n : []),\n ];\n}\n\nfunction lineNumberAt(source: string, index: number): number {\n let line = 1;\n for (let i = 0; i < index; i += 1) {\n if (source.charCodeAt(i) === 10) line += 1;\n }\n return line;\n}\n\nfunction maskFencedCode(source: string): string {\n return source.replace(\n /(^|\\n)(```|~~~)[\\s\\S]*?(\\n\\2[^\\n]*(?=\\n|$))/g,\n (match) => match.replace(/[^\\n]/g, \" \"),\n );\n}\n\nfunction findJsxOpeningTagEnd(source: string, start: number): number {\n let quote: string | null = null;\n let braceDepth = 0;\n for (let i = start; i < source.length; i += 1) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 1;\n continue;\n }\n if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === \"{\") {\n braceDepth += 1;\n continue;\n }\n if (char === \"}\") {\n braceDepth = Math.max(0, braceDepth - 1);\n continue;\n }\n if (char === \">\" && braceDepth === 0) return i;\n }\n return -1;\n}\n\nfunction addValidationIssue(\n issues: LocalPlanValidationIssue[],\n file: string,\n source: string,\n index: number,\n message: string,\n) {\n issues.push({ file, line: lineNumberAt(source, index), message });\n}\n\nconst ENTITY_RE = /&(?:[a-z][a-z0-9]+|#[0-9]+|#x[0-9a-f]+);/gi;\nconst HTML_TEXT_ATTR_RE =\n /\\b(?:aria-label|alt|placeholder|title|value)=\\s*(?:\"([^\"]*)\"|'([^']*)'|`([^`]*)`)/gi;\nconst WIREFRAME_TEXT_ATTR_RE =\n /\\b(?:text|value|label|placeholder|title|note|due)=\\s*(?:\"([^\"]*)\"|'([^']*)'|`([^`]*)`)/gi;\n\nfunction normalizeVisibleText(value: string): string {\n return value\n .replace(/ | |�*a0;/gi, \" \")\n .replace(ENTITY_RE, \"x\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction meaningfulTextLength(value: string | undefined): number {\n return normalizeVisibleText(value ?? \"\").length;\n}\n\nfunction htmlMeaningfulTextLength(html: string): number {\n let length = 0;\n for (const match of html.matchAll(HTML_TEXT_ATTR_RE)) {\n length += meaningfulTextLength(match[1] ?? match[2] ?? match[3]);\n }\n\n const visibleText = html\n .replace(/<!--[\\s\\S]*?-->/g, \" \")\n .replace(/<script\\b[\\s\\S]*?<\\/script>/gi, \" \")\n .replace(/<style\\b[\\s\\S]*?<\\/style>/gi, \" \")\n .replace(/<[^>]+>/g, \" \");\n length += meaningfulTextLength(visibleText);\n\n return length;\n}\n\nfunction hasSkeletonGeometry(html: string): boolean {\n return (\n /<(?:div|span|section|main|article|ul|li)\\b/i.test(html) &&\n /\\b(?:height|width|background|border|padding|wf-card|wf-box|wf-pill|wf-chip)\\b/i.test(\n html,\n )\n );\n}\n\nfunction stringAttributeValues(source: string, name: string): string[] {\n const values: string[] = [];\n const re = new RegExp(\n `\\\\b${name}\\\\s*=\\\\s*(?:\\\\{\\\\s*\\`([\\\\s\\\\S]*?)\\`\\\\s*\\\\}|\\\\{\\\\s*\"([^\"]*)\"\\\\s*\\\\}|\\\\{\\\\s*'([^']*)'\\\\s*\\\\}|\"([^\"]*)\"|'([^']*)')`,\n \"g\",\n );\n for (const match of source.matchAll(re)) {\n const value = match[1] ?? match[2] ?? match[3] ?? match[4] ?? match[5];\n if (value !== undefined) values.push(value);\n }\n return values;\n}\n\nfunction hasUnparsedAttributeExpression(source: string, name: string): boolean {\n return new RegExp(`\\\\b${name}\\\\s*=\\\\s*\\\\{`).test(source);\n}\n\nfunction hasMeaningfulWireframeHtml(screenOpening: string): boolean | null {\n const htmlValues = stringAttributeValues(screenOpening, \"html\");\n if (htmlValues.length === 0) {\n return hasUnparsedAttributeExpression(screenOpening, \"html\") ? null : false;\n }\n return htmlValues.some(\n (html) => htmlMeaningfulTextLength(html) >= 2 || hasSkeletonGeometry(html),\n );\n}\n\nfunction hasMeaningfulKitScreen(screenSource: string): boolean {\n for (const match of screenSource.matchAll(WIREFRAME_TEXT_ATTR_RE)) {\n if (meaningfulTextLength(match[1] ?? match[2] ?? match[3]) >= 2) {\n return true;\n }\n }\n if (/\\bitems\\s*=\\s*\\{[\\s\\S]*?\\blabel\\s*:/i.test(screenSource)) return true;\n if (/\\brows\\s*=\\s*\\{[\\s\\S]*?\\b[klv]\\s*:/i.test(screenSource)) return true;\n return false;\n}\n\nfunction hasMeaningfulWireframeScreen(blockSource: string): boolean | null {\n const screenMatch = /<Screen\\b/.exec(blockSource);\n if (!screenMatch) return false;\n const screenStart = screenMatch.index;\n const screenOpeningEnd = findJsxOpeningTagEnd(blockSource, screenStart);\n if (screenOpeningEnd < 0) return false;\n const screenOpening = blockSource.slice(screenStart, screenOpeningEnd + 1);\n const htmlMeaningful = hasMeaningfulWireframeHtml(screenOpening);\n if (htmlMeaningful === true) return true;\n\n const selfClosing = /\\/\\s*>$/.test(screenOpening);\n const closeIndex = selfClosing\n ? -1\n : blockSource.indexOf(\"</Screen>\", screenOpeningEnd + 1);\n const screenSource =\n closeIndex >= 0\n ? blockSource.slice(screenStart, closeIndex + \"</Screen>\".length)\n : screenOpening;\n if (hasMeaningfulKitScreen(screenSource)) return true;\n\n return htmlMeaningful === null ? null : false;\n}\n\nfunction lintWireframeBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskFencedCode(source);\n const re = /<WireframeBlock\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n \"WireframeBlock opening tag is not closed.\",\n );\n continue;\n }\n\n const opening = scanSource.slice(start, openingEnd + 1);\n const unsupportedAttr = opening.match(\n /\\b(data|screens|screen|elements)\\s*=/,\n );\n if (unsupportedAttr) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n `WireframeBlock uses unsupported \"${unsupportedAttr[1]}\" prop. Put content inside a <Screen> child instead.`,\n );\n }\n\n const selfClosing = /\\/\\s*>$/.test(opening);\n const closeTag = \"</WireframeBlock>\";\n const closeIndex = selfClosing\n ? -1\n : scanSource.indexOf(closeTag, openingEnd + 1);\n const blockSource = selfClosing\n ? opening\n : closeIndex >= 0\n ? scanSource.slice(start, closeIndex + closeTag.length)\n : scanSource.slice(start, openingEnd + 1);\n\n if (!selfClosing && closeIndex < 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n \"WireframeBlock must have a closing </WireframeBlock> tag.\",\n );\n }\n\n if (selfClosing || !/<Screen\\b/.test(blockSource)) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'WireframeBlock must wrap a <Screen> child; self-closing wireframes render empty. Use <WireframeBlock><Screen surface=\"browser\">...</Screen></WireframeBlock>.',\n );\n continue;\n }\n\n const meaningfulScreen = hasMeaningfulWireframeScreen(blockSource);\n if (meaningfulScreen === false) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'WireframeBlock contains an empty <Screen>; local previews render blank wireframes. Add visible html text/controls or kit nodes such as <Title text=\"Checkout\" /> and <Btn label=\"Pay\" />.',\n );\n }\n }\n}\n\nfunction lintColumnsBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskFencedCode(source);\n const re = /<Columns\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const columnsAttr = readJsxAttribute(opening, \"columns\");\n if (!columnsAttr) continue;\n const entries =\n columnsAttr.kind === \"expression\"\n ? extractTopLevelObjectLiterals(columnsAttr.value)\n : null;\n if (entries && entries.length > 0) continue;\n addValidationIssue(\n issues,\n file,\n source,\n start,\n 'Columns must use <Column> children or a columns={[{ id, label, blocks }]} array, not a bare columns= prop. Use <Columns><Column label=\"Before\">...</Column><Column label=\"After\">...</Column></Columns>.',\n );\n }\n}\n\ntype JsxAttributeValue = {\n name: string;\n kind: \"expression\" | \"string\" | \"bare\" | \"boolean\";\n value: string;\n start: number;\n};\n\nfunction findBalancedEnd(\n source: string,\n start: number,\n open: string,\n close: string,\n): number {\n let depth = 0;\n let quote: string | null = null;\n for (let i = start; i < source.length; i += 1) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 1;\n continue;\n }\n if (char === quote) quote = null;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n continue;\n }\n if (char === open) {\n depth += 1;\n continue;\n }\n if (char === close) {\n depth -= 1;\n if (depth === 0) return i;\n }\n }\n return -1;\n}\n\nfunction readJsxAttribute(\n opening: string,\n name: string,\n): JsxAttributeValue | null {\n let i = 0;\n while (i < opening.length) {\n if (!/[A-Za-z_:]/.test(opening[i] ?? \"\")) {\n i += 1;\n continue;\n }\n const nameStart = i;\n i += 1;\n while (/[\\w:.-]/.test(opening[i] ?? \"\")) i += 1;\n const attrName = opening.slice(nameStart, i);\n while (/\\s/.test(opening[i] ?? \"\")) i += 1;\n if (opening[i] !== \"=\") {\n if (attrName === name) {\n return { name, kind: \"boolean\", value: \"true\", start: nameStart };\n }\n continue;\n }\n i += 1;\n while (/\\s/.test(opening[i] ?? \"\")) i += 1;\n const valueStart = i;\n const quote = opening[i];\n if (quote === '\"' || quote === \"'\" || quote === \"`\") {\n i += 1;\n while (i < opening.length) {\n if (opening[i] === \"\\\\\" && i + 1 < opening.length) {\n i += 2;\n continue;\n }\n if (opening[i] === quote) break;\n i += 1;\n }\n const value = opening.slice(valueStart + 1, i);\n i += 1;\n if (attrName === name) {\n return { name, kind: \"string\", value, start: valueStart + 1 };\n }\n continue;\n }\n if (quote === \"{\") {\n const end = findBalancedEnd(opening, i, \"{\", \"}\");\n if (end < 0) {\n if (attrName === name) {\n return {\n name,\n kind: \"expression\",\n value: opening.slice(valueStart + 1),\n start: valueStart + 1,\n };\n }\n break;\n }\n const value = opening.slice(valueStart + 1, end);\n i = end + 1;\n if (attrName === name) {\n return { name, kind: \"expression\", value, start: valueStart + 1 };\n }\n continue;\n }\n while (i < opening.length && !/[\\s>]/.test(opening[i] ?? \"\")) i += 1;\n if (attrName === name) {\n return {\n name,\n kind: \"bare\",\n value: opening.slice(valueStart, i),\n start: valueStart,\n };\n }\n }\n return null;\n}\n\nfunction expressionOffset(expression: string): number {\n return expression.search(/\\S/);\n}\n\nfunction extractTopLevelObjectLiterals(expression: string): Array<{\n source: string;\n start: number;\n}> | null {\n const leading = expressionOffset(expression);\n if (leading < 0 || expression[leading] !== \"[\") return null;\n const arrayEnd = findBalancedEnd(expression, leading, \"[\", \"]\");\n if (arrayEnd < 0) return null;\n const objects: Array<{ source: string; start: number }> = [];\n let i = leading + 1;\n while (i < arrayEnd) {\n const char = expression[i];\n if (/\\s|,/.test(char ?? \"\")) {\n i += 1;\n continue;\n }\n if (char !== \"{\") {\n return null;\n }\n const objectEnd = findBalancedEnd(expression, i, \"{\", \"}\");\n if (objectEnd < 0 || objectEnd > arrayEnd) return null;\n objects.push({\n source: expression.slice(i, objectEnd + 1),\n start: i,\n });\n i = objectEnd + 1;\n }\n return objects;\n}\n\nfunction findValueEnd(source: string, start: number): number {\n let i = start;\n let quote: string | null = null;\n let depth = 0;\n while (i < source.length) {\n const char = source[i];\n if (quote) {\n if (char === \"\\\\\" && i + 1 < source.length) {\n i += 2;\n continue;\n }\n if (char === quote) quote = null;\n i += 1;\n continue;\n }\n if (char === '\"' || char === \"'\" || char === \"`\") {\n quote = char;\n i += 1;\n continue;\n }\n if (char === \"{\" || char === \"[\" || char === \"(\") {\n depth += 1;\n i += 1;\n continue;\n }\n if (char === \"}\" || char === \"]\" || char === \")\") {\n if (depth === 0) return i;\n depth -= 1;\n i += 1;\n continue;\n }\n if (char === \",\" && depth === 0) return i;\n i += 1;\n }\n return source.length;\n}\n\nfunction readObjectKey(\n source: string,\n start: number,\n): {\n key: string;\n keyStart: number;\n colon: number;\n} | null {\n let i = start;\n while (/\\s|,/.test(source[i] ?? \"\")) i += 1;\n const keyStart = i;\n const quote = source[i];\n let key = \"\";\n if (quote === '\"' || quote === \"'\") {\n i += 1;\n const valueStart = i;\n while (i < source.length) {\n if (source[i] === \"\\\\\" && i + 1 < source.length) {\n i += 2;\n continue;\n }\n if (source[i] === quote) break;\n i += 1;\n }\n key = source.slice(valueStart, i);\n i += 1;\n } else if (/[A-Za-z_$]/.test(quote ?? \"\")) {\n i += 1;\n while (/[\\w$]/.test(source[i] ?? \"\")) i += 1;\n key = source.slice(keyStart, i);\n } else {\n return null;\n }\n while (/\\s/.test(source[i] ?? \"\")) i += 1;\n if (source[i] !== \":\") return null;\n return { key, keyStart, colon: i };\n}\n\nfunction readTopLevelObjectProperty(\n objectSource: string,\n name: string,\n): { value: string; valueStart: number } | null {\n const body = objectSource.trim().startsWith(\"{\")\n ? objectSource.slice(1, objectSource.lastIndexOf(\"}\"))\n : objectSource;\n let i = 0;\n while (i < body.length) {\n const key = readObjectKey(body, i);\n if (!key) {\n i += 1;\n continue;\n }\n const valueStart = key.colon + 1;\n const valueEnd = findValueEnd(body, valueStart);\n if (key.key === name) {\n return { value: body.slice(valueStart, valueEnd), valueStart };\n }\n i = valueEnd + 1;\n }\n return null;\n}\n\nfunction isStaticNonEmptyStringLiteral(value: string): boolean {\n const trimmed = value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return false;\n if (!trimmed.endsWith(quote)) return false;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return false;\n return trimmed.slice(1, -1).trim().length > 0;\n}\n\nfunction hasRequiredStaticString(objectSource: string, name: string): boolean {\n const prop = readTopLevelObjectProperty(objectSource, name);\n return prop ? isStaticNonEmptyStringLiteral(prop.value) : false;\n}\n\nfunction hasRequiredStaticId(objectSource: string): boolean {\n return hasRequiredStaticString(objectSource, \"id\");\n}\n\nfunction hasRequiredEnumLiteral(\n objectSource: string,\n name: string,\n allowed: readonly string[],\n): boolean {\n const prop = readTopLevelObjectProperty(objectSource, name);\n if (!prop) return false;\n const trimmed = prop.value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return false;\n if (!trimmed.endsWith(quote)) return false;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return false;\n return allowed.includes(trimmed.slice(1, -1).trim());\n}\n\n// Shared per-item checks so the top-level `<Checklist items={[…]} />` tag and\n// blocks authored as JSON inside a container's `tabs={[…]}` / `columns={[…]}`\n// array enforce the SAME required fields. `listBase` is the absolute offset of\n// the items array in the original source so line numbers point near the item.\nfunction checkChecklistItemList(\n items: Array<{ source: string; start: number }>,\n listBase: number,\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n items.forEach((item, index) => {\n const base = listBase + item.start;\n if (!hasRequiredStaticId(item.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n base,\n `Checklist items[${index}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(item.source, \"label\")) {\n addValidationIssue(\n issues,\n file,\n source,\n base,\n `Checklist items[${index}].label is required by the Plan renderer schema; add a non-empty string label.`,\n );\n }\n });\n}\n\nfunction checkQuestionObjectList(\n questionObjects: Array<{ source: string; start: number }>,\n listBase: number,\n tag: string,\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n questionObjects.forEach((question, questionIndex) => {\n const questionBase = listBase + question.start;\n if (!hasRequiredStaticId(question.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(question.source, \"title\")) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].title is required by the Plan renderer schema; add a non-empty string title.`,\n );\n }\n if (\n !hasRequiredEnumLiteral(question.source, \"mode\", [\n \"single\",\n \"multi\",\n \"freeform\",\n ])\n ) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase,\n `${tag} questions[${questionIndex}].mode is required by the Plan renderer schema; use \"single\", \"multi\", or \"freeform\".`,\n );\n }\n const options = readTopLevelObjectProperty(question.source, \"options\");\n if (!options) return;\n const optionObjects = extractTopLevelObjectLiterals(options.value);\n if (!optionObjects) {\n addValidationIssue(\n issues,\n file,\n source,\n questionBase + options.valueStart,\n `${tag} questions[${questionIndex}].options must be an inline array of object literals.`,\n );\n return;\n }\n optionObjects.forEach((option, optionIndex) => {\n const optionBase = questionBase + options.valueStart + option.start;\n if (!hasRequiredStaticId(option.source)) {\n addValidationIssue(\n issues,\n file,\n source,\n optionBase,\n `${tag} questions[${questionIndex}].options[${optionIndex}].id is required by the Plan renderer schema; add a stable string id.`,\n );\n }\n if (!hasRequiredStaticString(option.source, \"label\")) {\n addValidationIssue(\n issues,\n file,\n source,\n optionBase,\n `${tag} questions[${questionIndex}].options[${optionIndex}].label is required by the Plan renderer schema; add a non-empty string label.`,\n );\n }\n });\n });\n}\n\nfunction lintChecklistShape(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n const re = /<Checklist\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const items = readJsxAttribute(opening, \"items\");\n if (!items) continue;\n if (items.kind !== \"expression\") {\n addValidationIssue(\n issues,\n file,\n source,\n start + items.start,\n \"Checklist items must be an inline array expression with stable item ids.\",\n );\n continue;\n }\n const objects = extractTopLevelObjectLiterals(items.value);\n if (!objects) {\n addValidationIssue(\n issues,\n file,\n source,\n start + items.start,\n \"Checklist items must be an inline array of object literals so local check can validate the renderer schema.\",\n );\n continue;\n }\n checkChecklistItemList(objects, start + items.start, file, source, issues);\n }\n}\n\nfunction lintQuestionFormShape(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n const re = /<(QuestionForm|VisualQuestions)\\b/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const tag = match[1] ?? \"QuestionForm\";\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const questions = readJsxAttribute(opening, \"questions\");\n if (!questions) {\n addValidationIssue(\n issues,\n file,\n source,\n start,\n `${tag} requires a questions array with at least one question object.`,\n );\n continue;\n }\n if (questions.kind !== \"expression\") {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start,\n `${tag} questions must be an inline array expression with stable question ids.`,\n );\n continue;\n }\n const questionObjects = extractTopLevelObjectLiterals(questions.value);\n if (!questionObjects || questionObjects.length === 0) {\n addValidationIssue(\n issues,\n file,\n source,\n start + questions.start,\n `${tag} questions must be a non-empty inline array of object literals.`,\n );\n continue;\n }\n checkQuestionObjectList(\n questionObjects,\n start + questions.start,\n tag,\n file,\n source,\n issues,\n );\n }\n}\n\nfunction staticStringLiteralValue(\n value: string | undefined,\n): string | undefined {\n if (value === undefined) return undefined;\n const trimmed = value.trim();\n const quote = trimmed[0];\n if (quote !== '\"' && quote !== \"'\" && quote !== \"`\") return undefined;\n if (!trimmed.endsWith(quote) || trimmed.length < 2) return undefined;\n if (quote === \"`\" && /\\$\\{/.test(trimmed)) return undefined;\n return trimmed.slice(1, -1);\n}\n\n// Container blocks authored with a JSON attribute array (`<TabsBlock tabs={[…]}\n// />`) carry their children as nested block objects, not top-level JSX tags, so\n// the tag-based linters above never inspect them — the exact \"false green\" the\n// renderer catches because it validates the whole parsed block tree. Walk those\n// nested `blocks: [...]` arrays and enforce the same per-block required fields,\n// recursing through nested containers. This is still a subset of the renderer\n// schema (which is why `verify` is the authority), but it closes the common\n// nested checklist / question-form / missing-id case offline.\nconst NESTED_CONTAINER_TAGS: ReadonlyArray<{ tag: string; attr: string }> = [\n { tag: \"TabsBlock\", attr: \"tabs\" },\n { tag: \"Tabs\", attr: \"tabs\" },\n { tag: \"Columns\", attr: \"columns\" },\n];\n\nfunction lintNestedContainerEntry(\n entrySource: string,\n entryBase: number,\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const blocksProp = readTopLevelObjectProperty(entrySource, \"blocks\");\n if (!blocksProp) return;\n const blockObjects = extractTopLevelObjectLiterals(blocksProp.value);\n if (!blockObjects) return;\n const blocksBase = entryBase + blocksProp.valueStart;\n for (const block of blockObjects) {\n lintNestedBlock(\n block.source,\n blocksBase + block.start,\n file,\n source,\n issues,\n );\n }\n}\n\nfunction lintNestedBlock(\n blockSource: string,\n blockBase: number,\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const typeProp = readTopLevelObjectProperty(blockSource, \"type\");\n const type = staticStringLiteralValue(typeProp?.value);\n if (!hasRequiredStaticId(blockSource)) {\n addValidationIssue(\n issues,\n file,\n source,\n blockBase,\n `Nested ${type ?? \"block\"} is missing a required string \\`id\\`; the Plan renderer schema validates every nested block.`,\n );\n }\n const dataProp = readTopLevelObjectProperty(blockSource, \"data\");\n if (!dataProp) return;\n const dataBase = blockBase + dataProp.valueStart;\n\n if (type === \"checklist\") {\n const itemsProp = readTopLevelObjectProperty(dataProp.value, \"items\");\n if (!itemsProp) return;\n const items = extractTopLevelObjectLiterals(itemsProp.value);\n if (items) {\n checkChecklistItemList(\n items,\n dataBase + itemsProp.valueStart,\n file,\n source,\n issues,\n );\n }\n return;\n }\n // visual-questions shares question-form's schema; lint both.\n if (type === \"question-form\" || type === \"visual-questions\") {\n const questionsProp = readTopLevelObjectProperty(\n dataProp.value,\n \"questions\",\n );\n if (!questionsProp) return;\n const questionObjects = extractTopLevelObjectLiterals(questionsProp.value);\n if (questionObjects) {\n checkQuestionObjectList(\n questionObjects,\n dataBase + questionsProp.valueStart,\n type,\n file,\n source,\n issues,\n );\n }\n return;\n }\n if (type === \"tabs\" || type === \"columns\") {\n const innerAttr = type === \"tabs\" ? \"tabs\" : \"columns\";\n const innerProp = readTopLevelObjectProperty(dataProp.value, innerAttr);\n if (!innerProp) return;\n const innerEntries = extractTopLevelObjectLiterals(innerProp.value);\n if (!innerEntries) return;\n const innerBase = dataBase + innerProp.valueStart;\n for (const entry of innerEntries) {\n lintNestedContainerEntry(\n entry.source,\n innerBase + entry.start,\n file,\n source,\n issues,\n );\n }\n }\n}\n\nfunction lintNestedContainerBlocks(\n file: string,\n source: string,\n issues: LocalPlanValidationIssue[],\n) {\n const scanSource = maskCodeRegions(source);\n for (const { tag, attr } of NESTED_CONTAINER_TAGS) {\n const re = new RegExp(`<${tag}\\\\b`, \"g\");\n let match: RegExpExecArray | null;\n while ((match = re.exec(scanSource))) {\n const start = match.index;\n const openingEnd = findJsxOpeningTagEnd(scanSource, start);\n if (openingEnd < 0) continue;\n const opening = source.slice(start, openingEnd + 1);\n const attrValue = readJsxAttribute(opening, attr);\n if (!attrValue || attrValue.kind !== \"expression\") continue;\n const entries = extractTopLevelObjectLiterals(attrValue.value);\n if (!entries) continue;\n const entriesBase = start + attrValue.start;\n for (const entry of entries) {\n lintNestedContainerEntry(\n entry.source,\n entriesBase + entry.start,\n file,\n source,\n issues,\n );\n }\n }\n }\n}\n\n// Blank out fenced code blocks and inline code spans (preserving newlines and\n// length) so block-tag linters don't trip on documentation examples written in\n// prose — e.g. an inline `<WireframeBlock><Screen>...</Screen></WireframeBlock>`\n// example is not a real block to validate. Real blocks (outside code) are left\n// intact, so their offsets/line numbers stay correct. Without this the default\n// `plan local init` scaffold fails its own `plan local check`/`serve` lint.\nfunction maskCodeRegions(source: string): string {\n const blank = (s: string) => s.replace(/[^\\n]/g, \" \");\n return source.replace(/```[\\s\\S]*?```/g, blank).replace(/`[^`\\n]*`/g, blank);\n}\n\nexport function validateLocalPlanFiles(\n files: LocalPlanFiles,\n): LocalPlanValidationIssue[] {\n const issues: LocalPlanValidationIssue[] = [];\n for (const entry of localPlanSourceEntries(files)) {\n const source = maskCodeRegions(entry.source);\n lintWireframeBlocks(entry.file, source, issues);\n lintColumnsBlocks(entry.file, source, issues);\n lintChecklistShape(entry.file, entry.source, issues);\n lintQuestionFormShape(entry.file, entry.source, issues);\n lintNestedContainerBlocks(entry.file, entry.source, issues);\n }\n return issues;\n}\n\nexport function assertLocalPlanFilesValid(files: LocalPlanFiles): void {\n const issues = validateLocalPlanFiles(files);\n if (issues.length === 0) return;\n const details = issues\n .slice(0, 8)\n .map((issue) => `${issue.file}:${issue.line} ${issue.message}`)\n .join(\"\\n\");\n const overflow =\n issues.length > 8 ? `\\n...plus ${issues.length - 8} more issues` : \"\";\n throw new Error(\n `Local plan source validation failed:\\n${details}${overflow}\\nRun \\`npx @agent-native/core@latest plan blocks --out plan-blocks.md\\` and update the MDX to the documented block shapes.`,\n );\n}\n\nexport function buildLocalPlanPreviewHtml(\n input: LocalPlanPreviewInput,\n): string {\n const files = readLocalPlanFiles(input.dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(files.dir);\n const brief = input.brief || parsed.frontmatter.brief || \"\";\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const blocks = splitMdxBlocks(parsed.body);\n const sourceFiles = [\n [\"plan.mdx\", files.planMdx],\n [\"canvas.mdx\", files.canvasMdx],\n [\"prototype.mdx\", files.prototypeMdx],\n [\".plan-state.json\", files.stateJson],\n ].filter((entry): entry is [string, string] => Boolean(entry[1]));\n\n return `<!doctype html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <title>${escapeHtml(title)}</title>\n <style>\n :root {\n color-scheme: light dark;\n --bg: #f8fafc;\n --paper: #ffffff;\n --ink: #0f172a;\n --muted: #64748b;\n --line: #cbd5e1;\n --accent: #2563eb;\n --soft: #eff6ff;\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n }\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #020617;\n --paper: #0f172a;\n --ink: #e2e8f0;\n --muted: #94a3b8;\n --line: #334155;\n --soft: #172554;\n }\n }\n body { margin: 0; background: var(--bg); color: var(--ink); }\n main { max-width: 1040px; margin: 0 auto; padding: 40px 20px 56px; }\n header { margin-bottom: 28px; }\n h1 { font-size: clamp(2rem, 5vw, 3.5rem); line-height: 1; margin: 0 0 12px; }\n h2 { font-size: 1.35rem; margin: 28px 0 10px; }\n h3 { font-size: 1.05rem; margin: 0 0 8px; }\n p, li { line-height: 1.65; }\n .meta { display: flex; flex-wrap: wrap; gap: 8px; color: var(--muted); font-size: 0.9rem; }\n .pill { border: 1px solid var(--line); border-radius: 999px; padding: 4px 10px; background: var(--paper); }\n .notice { background: var(--soft); border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; margin: 18px 0; }\n .block, details { background: var(--paper); border: 1px solid var(--line); border-radius: 8px; padding: 18px; margin: 14px 0; }\n .component summary { cursor: pointer; color: var(--accent); font-weight: 650; }\n pre { overflow: auto; border-radius: 8px; border: 1px solid var(--line); padding: 14px; background: rgba(148, 163, 184, 0.12); }\n code { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.9rem; }\n .source-tabs { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; }\n </style>\n</head>\n<body>\n <main>\n <header>\n <div class=\"meta\">\n <span class=\"pill\">${kind === \"recap\" ? \"Visual recap\" : \"Visual plan\"}</span>\n <span class=\"pill\">Local-files mode</span>\n <span class=\"pill\">No DB writes</span>\n </div>\n <h1>${escapeHtml(title)}</h1>\n ${brief ? `<p>${escapeHtml(brief)}</p>` : \"\"}\n <div class=\"notice\">\n This preview was generated entirely from local files. It does not call\n the Plan MCP server, the Plan app action surface, a hosted service, or a\n database. Edit the MDX files and regenerate this preview to update it.\n </div>\n </header>\n <section>\n ${blocks\n .map((block) =>\n block.type === \"component\"\n ? `<details class=\"component block\" open><summary>${escapeHtml(\n block.name || \"MDX component\",\n )}</summary><pre><code>${escapeHtml(block.value)}</code></pre></details>`\n : `<article class=\"block\">${renderMarkdownish(block.value)}</article>`,\n )\n .join(\"\\n\")}\n </section>\n <section>\n <h2>Local Source Files</h2>\n <div class=\"source-tabs\">\n ${sourceFiles\n .map(\n ([name, source]) =>\n `<details><summary>${escapeHtml(name)}</summary><pre><code>${escapeHtml(\n source,\n )}</code></pre></details>`,\n )\n .join(\"\\n\")}\n </div>\n </section>\n </main>\n</body>\n</html>\n`;\n}\n\nexport function writeLocalPlanPreview(input: {\n dir: string;\n out?: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n open?: boolean;\n openUrl?: (url: string) => OpenLocalUrlResult;\n}): LocalPlanPreviewResult {\n const dir = path.resolve(input.dir);\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(dir);\n const out = input.out ? path.resolve(input.out) : undefined;\n if (out) {\n fs.mkdirSync(path.dirname(out), { recursive: true });\n fs.writeFileSync(out, buildLocalPlanPreviewHtml({ ...input, dir, kind }));\n }\n const result: LocalPlanPreviewResult = {\n ok: true,\n dir,\n ...(out ? { out } : {}),\n url: out ? pathToFileURL(out).href : localPlanPreviewUrl(dir, input.appUrl),\n title,\n kind,\n files: localPlanFileList(files),\n };\n if (!input.open) return result;\n\n const openResult = (input.openUrl || openLocalUrl)(result.url);\n return {\n ...result,\n opened: openResult.ok,\n openCommand: openResult.command,\n ...(openResult.error ? { openError: openResult.error } : {}),\n };\n}\n\nfunction readLocalPlanBridgeComments(dir: string): LocalPlanBridgeComment[] {\n try {\n const raw = fs.readFileSync(\n path.join(dir, LOCAL_PLAN_COMMENTS_FILE),\n \"utf-8\",\n );\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed)\n ? (parsed as LocalPlanBridgeComment[]).filter(\n (comment) => comment && typeof comment.id === \"string\",\n )\n : [];\n } catch {\n return [];\n }\n}\n\nfunction writeLocalPlanBridgeComments(\n dir: string,\n comments: LocalPlanBridgeComment[],\n): void {\n const target = path.join(dir, LOCAL_PLAN_COMMENTS_FILE);\n if (comments.length === 0) {\n fs.rmSync(target, { force: true });\n return;\n }\n fs.writeFileSync(target, `${JSON.stringify(comments, null, 2)}\\n`, \"utf-8\");\n}\n\nfunction normalizeBridgeCommentString(value: unknown, fallback = \"\"): string {\n return typeof value === \"string\" ? value : fallback;\n}\n\nfunction normalizeBridgeCommentNullableString(value: unknown): string | null {\n const text = typeof value === \"string\" ? value.trim() : \"\";\n return text || null;\n}\n\nfunction normalizeBridgeCommentStatus(value: unknown): string {\n return value === \"resolved\" ? \"resolved\" : \"open\";\n}\n\nfunction newLocalBridgeCommentId(): string {\n return `cmt_${crypto.randomBytes(8).toString(\"hex\")}`;\n}\n\nfunction applyLocalPlanBridgeCommentUpdate(\n dir: string,\n update: LocalPlanBridgeCommentUpdate,\n): LocalPlanBridgeComment[] {\n const existing = readLocalPlanBridgeComments(dir);\n const byId = new Map(existing.map((comment) => [comment.id, comment]));\n const now = new Date().toISOString();\n const planId = `local-${path.basename(dir)}`;\n\n for (const input of update.comments ?? []) {\n const id =\n normalizeBridgeCommentNullableString(input.id) ??\n newLocalBridgeCommentId();\n const prev = byId.get(id);\n const status = normalizeBridgeCommentStatus(input.status ?? prev?.status);\n const message =\n typeof input.message === \"string\" ? input.message : prev?.message;\n if (!message?.trim()) continue;\n\n if (prev) {\n byId.set(id, {\n ...prev,\n parentCommentId:\n normalizeBridgeCommentNullableString(input.parentCommentId) ??\n prev.parentCommentId,\n sectionId:\n normalizeBridgeCommentNullableString(input.sectionId) ??\n prev.sectionId,\n kind: normalizeBridgeCommentString(input.kind, prev.kind),\n status,\n anchor:\n typeof input.anchor === \"string\" || input.anchor === null\n ? input.anchor\n : prev.anchor,\n message,\n authorEmail:\n normalizeBridgeCommentNullableString(input.authorEmail) ??\n prev.authorEmail,\n authorName:\n normalizeBridgeCommentNullableString(input.authorName) ??\n prev.authorName,\n resolutionTarget: \"agent\",\n mentions: [],\n mentionsJson: null,\n resolvedAt:\n status === \"resolved\"\n ? (input.resolvedAt ?? prev.resolvedAt ?? now)\n : null,\n resolvedBy:\n status === \"resolved\"\n ? (input.resolvedBy ?? prev.resolvedBy ?? LOCAL_PLAN_OWNER_EMAIL)\n : null,\n updatedAt: now,\n });\n continue;\n }\n\n byId.set(id, {\n id,\n planId,\n parentCommentId: normalizeBridgeCommentNullableString(\n input.parentCommentId,\n ),\n sectionId: normalizeBridgeCommentNullableString(input.sectionId),\n kind: normalizeBridgeCommentString(input.kind, \"annotation\"),\n status,\n anchor: normalizeBridgeCommentNullableString(input.anchor),\n message,\n createdBy: \"human\",\n authorEmail:\n normalizeBridgeCommentNullableString(input.authorEmail) ??\n LOCAL_PLAN_OWNER_EMAIL,\n authorName: normalizeBridgeCommentNullableString(input.authorName),\n resolutionTarget: \"agent\",\n mentions: [],\n mentionsJson: null,\n resolvedBy: status === \"resolved\" ? LOCAL_PLAN_OWNER_EMAIL : null,\n resolvedAt: status === \"resolved\" ? now : null,\n consumedAt: null,\n deletedAt: null,\n deletedBy: null,\n createdAt: now,\n updatedAt: now,\n });\n }\n\n for (const id of update.deletedCommentIds ?? []) {\n byId.delete(id);\n for (const comment of byId.values()) {\n if (comment.parentCommentId === id) byId.delete(comment.id);\n }\n }\n\n const comments = [...byId.values()].sort((a, b) =>\n a.createdAt === b.createdAt\n ? a.id.localeCompare(b.id)\n : a.createdAt.localeCompare(b.createdAt),\n );\n writeLocalPlanBridgeComments(dir, comments);\n return comments;\n}\n\nfunction buildLocalPlanBridgePayload(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n // `verify` brings the bridge up only to exercise transport + the authoritative\n // renderer check, so it must not be short-circuited by the weaker offline lint.\n skipSourceValidation?: boolean;\n}): LocalPlanBridgePayload {\n const dir = path.resolve(input.dir);\n const files = readLocalPlanFiles(dir);\n if (!input.skipSourceValidation) assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const kind = input.kind || normalizeKind(parsed.frontmatter.kind);\n const title =\n input.title ||\n parsed.frontmatter.title ||\n firstHeading(parsed.body) ||\n path.basename(dir);\n const brief = input.brief || parsed.frontmatter.brief || \"\";\n const comments = readLocalPlanBridgeComments(dir);\n\n return {\n ok: true,\n version: 1,\n source: \"agent-native-local-bridge\",\n localOnly: true,\n slug: path.basename(dir),\n dir,\n title,\n brief,\n kind,\n updatedAt: latestLocalPlanMtime(dir, files),\n files: localPlanFileList(files),\n mdx: localPlanMdxFolder(files),\n comments,\n };\n}\n\nfunction latestLocalPlanMtime(dir: string, files: LocalPlanFiles): string {\n const candidates = [\n path.join(dir, \"plan.mdx\"),\n ...(files.canvasMdx ? [path.join(dir, \"canvas.mdx\")] : []),\n ...(files.prototypeMdx ? [path.join(dir, \"prototype.mdx\")] : []),\n ...(files.stateJson ? [path.join(dir, \".plan-state.json\")] : []),\n path.join(dir, LOCAL_PLAN_COMMENTS_FILE),\n ...Object.keys(files.assets ?? {}).map((filename) =>\n path.join(dir, \"assets\", filename),\n ),\n ];\n let latest = 0;\n for (const file of candidates) {\n try {\n latest = Math.max(latest, fs.statSync(file).mtimeMs);\n } catch {\n // Ignore files deleted between the read and stat passes.\n }\n }\n return new Date(latest || Date.now()).toISOString();\n}\n\nfunction sendBridgeJson(\n res: ServerResponse,\n status: number,\n payload: unknown,\n): void {\n res.writeHead(status, {\n \"access-control-allow-origin\": \"*\",\n \"access-control-allow-methods\": \"GET, POST, OPTIONS\",\n \"access-control-allow-headers\": \"content-type\",\n // Required when the hosted HTTPS Plan UI fetches this localhost bridge.\n \"access-control-allow-private-network\": \"true\",\n \"cache-control\": \"no-store\",\n \"content-type\": \"application/json; charset=utf-8\",\n \"x-agent-native-local-bridge\": \"1\",\n });\n res.end(`${JSON.stringify(payload)}\\n`);\n}\n\nfunction readBridgeJsonBody(req: IncomingMessage): Promise<unknown> {\n return new Promise((resolve, reject) => {\n let raw = \"\";\n req.setEncoding(\"utf-8\");\n req.on(\"data\", (chunk) => {\n raw += chunk;\n if (raw.length > LOCAL_PLAN_BRIDGE_COMMENT_BODY_LIMIT) {\n reject(new Error(\"Local plan comment update is too large.\"));\n req.destroy();\n }\n });\n req.on(\"end\", () => {\n if (!raw.trim()) {\n resolve({});\n return;\n }\n try {\n resolve(JSON.parse(raw));\n } catch {\n reject(new Error(\"Local plan comment update must be JSON.\"));\n }\n });\n req.on(\"error\", reject);\n });\n}\n\nfunction normalizeBridgeCommentUpdatePayload(\n payload: unknown,\n): LocalPlanBridgeCommentUpdate {\n if (!payload || typeof payload !== \"object\") return {};\n const input = payload as LocalPlanBridgeCommentUpdate;\n return {\n comments: Array.isArray(input.comments) ? input.comments : [],\n deletedCommentIds: Array.isArray(input.deletedCommentIds)\n ? input.deletedCommentIds.filter((id) => typeof id === \"string\")\n : [],\n };\n}\n\nfunction bridgeRequestUrl(req: IncomingMessage): URL {\n return new URL(req.url || \"/\", \"http://127.0.0.1\");\n}\n\nfunction bridgeHostForUrl(host: string): string {\n if (host === \"0.0.0.0\" || host === \"::\") return \"127.0.0.1\";\n return host;\n}\n\nexport async function startLocalPlanBridge(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n host?: string;\n port?: number;\n token?: string;\n open?: boolean;\n urlFile?: string | false;\n openUrl?: (url: string) => OpenLocalUrlResult;\n skipSourceValidation?: boolean;\n}): Promise<LocalPlanBridgeServer> {\n const dir = path.resolve(input.dir);\n const initialPayload = buildLocalPlanBridgePayload({\n dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n skipSourceValidation: input.skipSourceValidation,\n });\n const token = input.token || crypto.randomBytes(24).toString(\"base64url\");\n const host = input.host || \"127.0.0.1\";\n const appUrl = normalizeBridgeAppUrl(input.appUrl);\n const server = http.createServer((req, res) => {\n if (req.method === \"OPTIONS\") {\n sendBridgeJson(res, 204, \"\");\n return;\n }\n\n const url = bridgeRequestUrl(req);\n if (\n url.pathname !== \"/local-plan.json\" &&\n url.pathname !== \"/local-plan-comments.json\"\n ) {\n sendBridgeJson(res, 404, { ok: false, error: \"Not found.\" });\n return;\n }\n if (url.searchParams.get(\"token\") !== token) {\n sendBridgeJson(res, 403, { ok: false, error: \"Invalid bridge token.\" });\n return;\n }\n if (url.pathname === \"/local-plan.json\" && req.method !== \"GET\") {\n sendBridgeJson(res, 405, { ok: false, error: \"Method not allowed.\" });\n return;\n }\n if (url.pathname === \"/local-plan-comments.json\" && req.method !== \"POST\") {\n sendBridgeJson(res, 405, { ok: false, error: \"Method not allowed.\" });\n return;\n }\n\n void (async () => {\n try {\n if (url.pathname === \"/local-plan-comments.json\") {\n const body = await readBridgeJsonBody(req);\n applyLocalPlanBridgeCommentUpdate(\n dir,\n normalizeBridgeCommentUpdatePayload(body),\n );\n }\n sendBridgeJson(\n res,\n 200,\n buildLocalPlanBridgePayload({\n dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n skipSourceValidation: input.skipSourceValidation,\n }),\n );\n } catch (error) {\n sendBridgeJson(res, 500, {\n ok: false,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n })();\n });\n\n await new Promise<void>((resolve, reject) => {\n const onError = (error: Error) => {\n server.off(\"listening\", onListening);\n reject(error);\n };\n const onListening = () => {\n server.off(\"error\", onError);\n resolve();\n };\n server.once(\"error\", onError);\n server.once(\"listening\", onListening);\n server.listen(input.port ?? 0, host);\n });\n\n const address = server.address();\n if (!address || typeof address === \"string\") {\n server.close();\n throw new Error(\"Local plan bridge did not bind to a TCP port.\");\n }\n\n const bridgeUrl = `http://${bridgeHostForUrl(host)}:${address.port}/local-plan.json?token=${encodeURIComponent(\n token,\n )}`;\n const url = localPlanBridgePageUrl({ dir, bridgeUrl, appUrl });\n const urlFile =\n input.urlFile === false\n ? undefined\n : writeLocalPlanUrlFile(dir, url, input.urlFile);\n const openResult = input.open\n ? (input.openUrl || openLocalUrl)(url)\n : undefined;\n\n return {\n server,\n result: {\n ok: true,\n dir,\n url,\n ...(urlFile ? { urlFile } : {}),\n bridgeUrl,\n appUrl,\n title: initialPayload.title,\n kind: initialPayload.kind,\n files: initialPayload.files,\n host,\n port: address.port,\n ...(openResult\n ? {\n opened: openResult.ok,\n openCommand: openResult.command,\n ...(openResult.error ? { openError: openResult.error } : {}),\n }\n : {}),\n },\n };\n}\n\nfunction localPlanBridgeWarnings(input: {\n appUrl: string;\n bridgeUrl: string;\n}): string[] {\n const warnings: string[] = [];\n try {\n const appUrl = new URL(input.appUrl);\n const bridgeUrl = new URL(input.bridgeUrl);\n if (appUrl.protocol === \"https:\" && bridgeUrl.protocol === \"http:\") {\n warnings.push(\n `Chrome/Edge will ask for Local Network access so ${appUrl.hostname} can read this loopback bridge. Allow it; if you denied it, re-enable Local Network access in the ${appUrl.hostname} site settings, then retry.`,\n );\n warnings.push(\n \"Safari may block the hosted HTTPS Plan UI from reading the HTTP localhost bridge. Use Chrome/Chromium/Edge, or pass --app-url http://localhost:8096 when running a local Plan app.\",\n );\n }\n } catch {\n // The URLs were normalized earlier; ignore defensive parse failures.\n }\n return warnings;\n}\n\nconst VALIDATE_LOCAL_PLAN_ACTION = \"validate-local-plan-source\";\n\n/**\n * Ask the Plan app to validate the folder against its real renderer schema\n * (`parsePlanMdxFolder` + `planContentSchema`) via the public, no-DB\n * `validate-local-plan-source` action. This is what makes `verify`\n * authoritative: the hand-rolled `check` lint can disagree with the renderer,\n * but this runs the renderer's own parser. Degrades gracefully (`ran: false`)\n * when the endpoint is unreachable or a Plan app predates the action, so an\n * old deploy never turns into a hard failure.\n */\nexport async function fetchRendererValidation(input: {\n appUrl: string;\n files: LocalPlanFiles;\n fetchFn?: typeof fetch;\n}): Promise<RendererValidation> {\n const fetchFn = input.fetchFn ?? fetch;\n const endpoint = planActionEndpoint(input.appUrl, VALIDATE_LOCAL_PLAN_ACTION);\n try {\n const response = await fetchActionWithTimeout(\n endpoint,\n {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ mdx: localPlanMdxFolder(input.files) }),\n },\n fetchFn,\n );\n if (!response.ok) {\n const detail = await response.text().catch(() => \"\");\n return {\n ran: false,\n endpoint,\n error: `${VALIDATE_LOCAL_PLAN_ACTION} failed ${response.status} ${\n response.statusText\n }: ${sanitizeHttpDetail(detail, 300)}`,\n };\n }\n const json = (await response.json().catch(() => null)) as\n | (Record<string, unknown> & { result?: Record<string, unknown> })\n | null;\n const body =\n json && isRecord(json.result) ? json.result : (json ?? undefined);\n if (!body || typeof body.valid !== \"boolean\") {\n return {\n ran: false,\n endpoint,\n error: `${VALIDATE_LOCAL_PLAN_ACTION} returned an unexpected payload.`,\n };\n }\n const issues = Array.isArray(body.issues)\n ? body.issues.filter(isRecord).map((issue) => ({\n path: typeof issue.path === \"string\" ? issue.path : \"\",\n message:\n typeof issue.message === \"string\" ? issue.message : \"Invalid value\",\n }))\n : [];\n return { ran: true, endpoint, valid: body.valid, issues };\n } catch (err) {\n return {\n ran: false,\n endpoint,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n}\n\nfunction rendererValidationWarnings(\n validation: RendererValidation,\n offlineIssues: LocalPlanValidationIssue[],\n): string[] {\n if (!validation.ran) {\n const base = `Plan content was NOT validated against the renderer schema (${\n validation.error ?? \"validate endpoint unavailable\"\n }). Fell back to the offline lint. Run against a Plan app that exposes ${VALIDATE_LOCAL_PLAN_ACTION} (e.g. --app-url http://localhost:8096) for authoritative validation.`;\n if (offlineIssues.length === 0) return [base];\n const preview = offlineIssues\n .slice(0, 8)\n .map((issue) => `${issue.file}:${issue.line} ${issue.message}`)\n .join(\"; \");\n const overflow =\n offlineIssues.length > 8 ? ` (+${offlineIssues.length - 8} more)` : \"\";\n return [base, `Offline lint rejected this plan: ${preview}${overflow}`];\n }\n if (validation.valid) return [];\n const issues = validation.issues ?? [];\n const preview = issues\n .slice(0, 8)\n .map((issue) =>\n issue.path ? `${issue.path}: ${issue.message}` : issue.message,\n )\n .join(\"; \");\n const overflow = issues.length > 8 ? ` (+${issues.length - 8} more)` : \"\";\n return [\n `Renderer schema rejected this plan — it will not render. ${preview}${overflow}`,\n ];\n}\n\nexport async function verifyLocalPlanBridge(input: {\n dir: string;\n kind?: LocalPlanKind;\n title?: string;\n brief?: string;\n appUrl?: string;\n host?: string;\n port?: number;\n token?: string;\n urlFile?: string | false;\n fetchFn?: typeof fetch;\n}): Promise<LocalPlanVerifyResult> {\n const fetchFn = input.fetchFn ?? fetch;\n const files = readLocalPlanFiles(input.dir);\n const bridge = await startLocalPlanBridge({\n dir: input.dir,\n kind: input.kind,\n title: input.title,\n brief: input.brief,\n appUrl: input.appUrl,\n host: input.host,\n port: input.port,\n token: input.token,\n urlFile: input.urlFile,\n // Don't let the weaker offline lint abort the bridge before the authoritative\n // renderer check runs — verify reports the renderer's verdict, not the lint's.\n skipSourceValidation: true,\n });\n\n try {\n const preflight = await fetchFn(bridge.result.bridgeUrl, {\n method: \"OPTIONS\",\n headers: {\n origin: bridge.result.appUrl,\n \"access-control-request-method\": \"GET\",\n \"access-control-request-private-network\": \"true\",\n },\n });\n const response = await fetchFn(bridge.result.bridgeUrl, {\n method: \"GET\",\n headers: { accept: \"application/json\" },\n });\n const payload = (await response.json().catch(() => null)) as\n | (LocalPlanBridgePayload & { mdx?: LocalPlanBridgeMdxFolder })\n | null;\n const mdxFiles = payload?.mdx\n ? Object.keys(payload.mdx).filter((file) => file !== \"assets/\")\n : undefined;\n const bridgeOk =\n response.ok &&\n payload?.ok === true &&\n payload.source === \"agent-native-local-bridge\" &&\n payload.localOnly === true &&\n Boolean(payload.mdx?.[\"plan.mdx\"]);\n const preflightOk =\n preflight.status === 204 &&\n preflight.headers.get(\"access-control-allow-origin\") === \"*\" &&\n preflight.headers.get(\"access-control-allow-private-network\") === \"true\";\n const validation = await fetchRendererValidation({\n appUrl: bridge.result.appUrl,\n files,\n fetchFn,\n });\n // The renderer's verdict is authoritative and gates `ok`. When it could not\n // run (old/unreachable Plan app), fall back to the offline lint as the\n // content signal so verify still catches the common cases offline instead\n // of silently passing unvalidated content.\n const offlineIssues = validation.ran ? [] : validateLocalPlanFiles(files);\n const contentOk = validation.ran\n ? validation.valid === true\n : offlineIssues.length === 0;\n return {\n ok: bridgeOk && preflightOk && contentOk,\n dir: bridge.result.dir,\n url: bridge.result.url,\n ...(bridge.result.urlFile ? { urlFile: bridge.result.urlFile } : {}),\n bridgeUrl: bridge.result.bridgeUrl,\n appUrl: bridge.result.appUrl,\n title: bridge.result.title,\n kind: bridge.result.kind,\n files: bridge.result.files,\n preflight: {\n status: preflight.status,\n allowOrigin: preflight.headers.get(\"access-control-allow-origin\"),\n allowPrivateNetwork: preflight.headers.get(\n \"access-control-allow-private-network\",\n ),\n },\n bridge: {\n status: response.status,\n ok: bridgeOk,\n ...(payload?.source ? { source: payload.source } : {}),\n ...(typeof payload?.localOnly === \"boolean\"\n ? { localOnly: payload.localOnly }\n : {}),\n ...(Array.isArray(payload?.files) ? { files: payload.files } : {}),\n ...(mdxFiles ? { mdxFiles } : {}),\n ...(payload?.error ? { error: payload.error } : {}),\n },\n validation,\n warnings: [\n ...localPlanBridgeWarnings({\n appUrl: bridge.result.appUrl,\n bridgeUrl: bridge.result.bridgeUrl,\n }),\n ...rendererValidationWarnings(validation, offlineIssues),\n ],\n };\n } finally {\n await new Promise<void>((resolve) => bridge.server.close(() => resolve()));\n }\n}\n\nfunction writeLocalPlanSkeleton(input: {\n dir?: string;\n title: string;\n brief?: string;\n kind: LocalPlanKind;\n force?: boolean;\n}): { ok: true; dir: string; files: string[] } {\n const dir = path.resolve(\n input.dir || path.join(defaultPlansDir(), localPlanFolderName(input.title)),\n );\n const planPath = path.join(dir, \"plan.mdx\");\n if (fs.existsSync(planPath) && !input.force) {\n throw new Error(\n `${planPath} already exists. Pass --force to replace the skeleton.`,\n );\n }\n fs.mkdirSync(dir, { recursive: true });\n const title = input.title;\n const brief =\n input.brief ||\n (input.kind === \"recap\"\n ? \"Local visual recap generated without Plan app database writes.\"\n : \"Local visual plan generated without Plan app database writes.\");\n const mdx = [\n \"---\",\n `title: \"${title.replace(/\"/g, '\\\\\"')}\"`,\n `brief: \"${brief.replace(/\"/g, '\\\\\"')}\"`,\n `kind: \"${input.kind}\"`,\n \"localOnly: true\",\n \"---\",\n \"\",\n `# ${title}`,\n \"\",\n brief,\n \"\",\n \"## Review Surface\",\n \"\",\n \"Author the structured plan or recap here. You can add Agent-Native Plan MDX\",\n 'blocks such as `<WireframeBlock><Screen surface=\"browser\">...</Screen></WireframeBlock>`,',\n \"`<Diagram />`, `<TabsBlock />`, `<FileTree />`, or `<Diff />`; the local\",\n \"preview will show the source without publishing it to the Plan app.\",\n \"\",\n ].join(\"\\n\");\n fs.writeFileSync(planPath, mdx, \"utf-8\");\n fs.writeFileSync(\n path.join(dir, \".plan-state.json\"),\n JSON.stringify(\n {\n localOnly: true,\n kind: input.kind,\n createdAt: new Date().toISOString(),\n },\n null,\n 2,\n ) + \"\\n\",\n \"utf-8\",\n );\n return { ok: true, dir, files: [\"plan.mdx\", \".plan-state.json\"] };\n}\n\nfunction runInit(args: Record<string, string | boolean>): void {\n const title = optionalArg(args, \"title\") || \"Untitled local visual plan\";\n const result = writeLocalPlanSkeleton({\n dir: optionalArg(args, \"dir\"),\n title,\n brief: optionalArg(args, \"brief\"),\n kind: normalizeKind(optionalArg(args, \"kind\")),\n force: boolArg(args, \"force\"),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nfunction runCheck(args: Record<string, string | boolean>): void {\n const dir = stringArg(args, \"dir\");\n const files = readLocalPlanFiles(dir);\n assertLocalPlanFilesValid(files);\n const parsed = stripFrontmatter(files.planMdx);\n const result = {\n ok: true,\n noDb: true,\n validation: \"lint-passed\",\n validationScope: \"offline-lint\",\n note: \"Quick offline lint only — NOT the full Plan renderer schema. A green here does not guarantee the plan renders. Run `plan local verify` against a Plan app for authoritative validation before handing off.\",\n dir: files.dir,\n title: parsed.frontmatter.title || firstHeading(parsed.body),\n kind: normalizeKind(parsed.frontmatter.kind),\n files: {\n \"plan.mdx\": Buffer.byteLength(files.planMdx),\n ...(files.canvasMdx\n ? { \"canvas.mdx\": Buffer.byteLength(files.canvasMdx) }\n : {}),\n ...(files.prototypeMdx\n ? { \"prototype.mdx\": Buffer.byteLength(files.prototypeMdx) }\n : {}),\n ...(files.stateJson\n ? { \".plan-state.json\": Buffer.byteLength(files.stateJson) }\n : {}),\n ...(files.assets\n ? Object.fromEntries(\n Object.entries(files.assets).map(([filename, base64]) => [\n `assets/${filename}`,\n Buffer.byteLength(base64, \"base64\"),\n ]),\n )\n : {}),\n },\n };\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nexport function readVisualAnswerSourcePayload(\n sourcePath: string,\n): VisualAnswerSourcePayload {\n let parsed: unknown;\n try {\n parsed = JSON.parse(fs.readFileSync(sourcePath, \"utf-8\"));\n } catch (error) {\n throw new Error(\n `Could not read ${sourcePath}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new Error(`${sourcePath} must contain a JSON object.`);\n }\n const source = parsed as Record<string, unknown>;\n const mdx = source.mdx;\n if (!mdx || typeof mdx !== \"object\" || Array.isArray(mdx)) {\n throw new Error(`${sourcePath} must contain an mdx object.`);\n }\n const planMdx = (mdx as Record<string, unknown>)[\"plan.mdx\"];\n if (typeof planMdx !== \"string\" || planMdx.trim().length === 0) {\n throw new Error(\n `${sourcePath} mdx[\"plan.mdx\"] must be a non-empty string.`,\n );\n }\n return source as VisualAnswerSourcePayload;\n}\n\nexport async function publishVisualAnswerSource(\n input: PublishVisualAnswerInput,\n): Promise<{ ok: true; url: string; out: string }> {\n const cwd = input.cwd ?? process.cwd();\n const sourcePath =\n input.sourcePath ?? path.join(cwd, VISUAL_ANSWER_SOURCE_FILENAME);\n const out = input.out ?? path.join(cwd, VISUAL_ANSWER_URL_FILENAME);\n const token = input.token.trim();\n if (!token) throw new Error(\"Plan publish token is empty.\");\n\n const source = readVisualAnswerSourcePayload(sourcePath);\n const question = input.question ?? source.question;\n if (!question?.trim()) {\n throw new Error(\n `Missing visual answer question. Pass --question or set question in ${sourcePath}.`,\n );\n }\n const body = {\n question,\n ...(input.prevPlanId ? { planId: input.prevPlanId } : {}),\n ...(source.title ? { title: source.title } : {}),\n ...(source.brief ? { brief: source.brief } : {}),\n visibility: input.visibility ?? \"org\",\n source: \"imported\",\n ...((input.repo ?? source.repoPath)\n ? { repoPath: input.repo ?? source.repoPath }\n : {}),\n ...((input.sourceUrl ?? source.sourceUrl)\n ? { sourceUrl: input.sourceUrl ?? source.sourceUrl }\n : {}),\n sourceType: normalizeVisualAnswerSourceType(\n input.sourceType ?? source.sourceType,\n ),\n currentFocus: `visual answer: ${question.trim().slice(0, 120)}`,\n status: \"review\",\n mdx: source.mdx,\n };\n\n const endpoint = planActionEndpoint(input.appUrl, \"visual-answer\");\n const fetchFn = input.fetchFn ?? fetch;\n const response = await fetchActionWithTimeout(\n endpoint,\n {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/json\",\n authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(body),\n },\n fetchFn,\n );\n const text = await response.text().catch((error) => String(error));\n if (!response.ok) {\n throw new Error(\n `visual-answer failed ${response.status} ${\n response.statusText\n }: ${sanitizeHttpDetail(text, 800)}`,\n );\n }\n let result: unknown = null;\n try {\n result = text ? JSON.parse(text) : null;\n } catch {\n throw new Error(\"visual-answer returned non-JSON output.\");\n }\n const url = visualAnswerUrlFromPublishResult(result, input.appUrl);\n if (!url) {\n throw new Error(\n \"visual-answer succeeded but did not return a usable /plans/<id> URL or plan id.\",\n );\n }\n fs.writeFileSync(path.resolve(out), `${url}\\n`, \"utf-8\");\n return { ok: true, url, out };\n}\n\nasync function runVisualAnswer(\n subcommand: string | undefined,\n args: Record<string, string | boolean>,\n): Promise<void> {\n if (\n subcommand === undefined ||\n subcommand === \"help\" ||\n subcommand === \"--help\" ||\n subcommand === \"-h\" ||\n args.help === true ||\n args.h === true\n ) {\n process.stdout.write(HELP);\n return;\n }\n if (subcommand !== \"publish\") {\n process.stderr.write(\n `Unknown plan visual-answer subcommand: ${subcommand}\\n${HELP}`,\n );\n process.exit(1);\n }\n const appUrl =\n optionalArg(args, \"app-url\") ||\n process.env.PLAN_VISUAL_ANSWER_APP_URL ||\n process.env.PLAN_RECAP_APP_URL ||\n DEFAULT_PLAN_APP_URL;\n const token =\n optionalArg(args, \"token\") ||\n process.env.PLAN_VISUAL_ANSWER_TOKEN ||\n process.env.PLAN_RECAP_TOKEN ||\n \"\";\n try {\n const result = await publishVisualAnswerSource({\n appUrl,\n token,\n question: optionalArg(args, \"question\"),\n sourcePath: optionalArg(args, \"source\") ?? VISUAL_ANSWER_SOURCE_FILENAME,\n out: optionalArg(args, \"out\") ?? VISUAL_ANSWER_URL_FILENAME,\n prevPlanId: optionalArg(args, \"prev-plan-id\"),\n repo: optionalArg(args, \"repo\"),\n sourceUrl: optionalArg(args, \"source-url\"),\n sourceType: optionalArg(args, \"source-type\"),\n visibility: normalizeVisibility(optionalArg(args, \"visibility\")),\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } catch (error) {\n process.stdout.write(\n `${JSON.stringify(\n {\n ok: false,\n reason: error instanceof Error ? error.message : String(error),\n },\n null,\n 2,\n )}\\n`,\n );\n process.exit(1);\n }\n}\n\nfunction runPreview(args: Record<string, string | boolean>): void {\n const result = writeLocalPlanPreview({\n dir: stringArg(args, \"dir\"),\n out: optionalArg(args, \"out\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n open: boolArg(args, \"open\"),\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n}\n\nasync function runServe(args: Record<string, string | boolean>): Promise<void> {\n const portValue = optionalArg(args, \"port\");\n const port = portValue ? Number(portValue) : undefined;\n if (portValue && (!Number.isInteger(port) || port! < 0 || port! > 65535)) {\n throw new Error(\"--port must be an integer between 0 and 65535.\");\n }\n\n const bridge = await startLocalPlanBridge({\n dir: stringArg(args, \"dir\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n host: optionalArg(args, \"host\"),\n port,\n open: boolArg(args, \"open\"),\n urlFile: optionalArg(args, \"url-file\") || optionalArg(args, \"out\"),\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n\n process.stdout.write(`${JSON.stringify(bridge.result, null, 2)}\\n`);\n process.stderr.write(\n [\n `Local Plan bridge running at ${bridge.result.bridgeUrl}`,\n bridge.result.urlFile\n ? `Open URL written to ${bridge.result.urlFile}`\n : \"\",\n ...localPlanBridgeWarnings({\n appUrl: bridge.result.appUrl,\n bridgeUrl: bridge.result.bridgeUrl,\n }),\n \"Keep this bridge command running while the Plan page is open; stopping it makes this URL unreachable.\",\n \"Press Ctrl+C to stop.\",\n ]\n .filter(Boolean)\n .join(\"\\n\") + \"\\n\",\n );\n\n await new Promise<void>((resolve) => {\n let stopped = false;\n const cleanup = () => {\n process.off(\"SIGINT\", stop);\n process.off(\"SIGTERM\", stop);\n };\n const stop = () => {\n if (stopped) return;\n stopped = true;\n cleanup();\n bridge.server.close(() => resolve());\n };\n process.once(\"SIGINT\", stop);\n process.once(\"SIGTERM\", stop);\n });\n}\n\nasync function runVerify(\n args: Record<string, string | boolean>,\n): Promise<void> {\n const portValue = optionalArg(args, \"port\");\n const port = portValue ? Number(portValue) : undefined;\n if (portValue && (!Number.isInteger(port) || port! < 0 || port! > 65535)) {\n throw new Error(\"--port must be an integer between 0 and 65535.\");\n }\n\n const result = await verifyLocalPlanBridge({\n dir: stringArg(args, \"dir\"),\n appUrl: optionalArg(args, \"app-url\"),\n title: optionalArg(args, \"title\"),\n brief: optionalArg(args, \"brief\"),\n host: optionalArg(args, \"host\"),\n port,\n urlFile: optionalArg(args, \"url-file\") || optionalArg(args, \"out\") || false,\n kind: optionalArg(args, \"kind\")\n ? normalizeKind(optionalArg(args, \"kind\"))\n : undefined,\n });\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n if (!result.ok) process.exit(1);\n}\n\nasync function runBlocks(\n args: Record<string, string | boolean>,\n): Promise<void> {\n const format = normalizePlanBlockFormat(optionalArg(args, \"format\"));\n const appUrl =\n optionalArg(args, \"app-url\") ||\n process.env.PLAN_BLOCKS_APP_URL ||\n process.env.PLAN_RECAP_APP_URL ||\n DEFAULT_PLAN_APP_URL;\n const out = optionalArg(args, \"out\") || defaultPlanBlocksOut(format);\n const useClack = Boolean(process.stdout.isTTY) && !boolArg(args, \"json\");\n let stopSpinner: ((message?: string) => void) | undefined;\n let clack: typeof import(\"@clack/prompts\") | undefined;\n\n if (useClack) {\n clack = await import(\"@clack/prompts\");\n const spinner = clack.spinner();\n spinner.start(\"Fetching Plan block catalog\");\n stopSpinner = (message?: string) => spinner.stop(message);\n }\n\n try {\n const result = await fetchPlanBlockCatalog({\n appUrl,\n format,\n out,\n });\n if (!useClack || !clack) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n stopSpinner?.(\"Fetched Plan block catalog\");\n clack.note(\n [\n `Output ${path.resolve(result.out)}`,\n `Format ${result.format}`,\n typeof result.count === \"number\" ? `Blocks ${result.count}` : \"\",\n \"Privacy No plan content sent\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Plan block catalog\",\n );\n clack.outro(`Wrote ${result.out}`);\n } catch (error) {\n if (useClack && clack) {\n stopSpinner?.(\"Plan block catalog fetch failed\");\n clack.cancel(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n throw error;\n }\n}\n\nconst HELP = `agent-native plan — local Agent-Native Plan helpers\n\nUsage:\n agent-native plan blocks [--format reference|schema] [--app-url <url>] [--out <file>] [--json]\n agent-native plan visual-answer publish --question <text> [--source visual-answer-source.json] [--out visual-answer-url.txt] [--repo owner/name] [--source-url <url>] [--app-url <url>] [--token <planToken>]\n agent-native plan serve --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--port <port>] [--url-file <file>]\n agent-native plan local init --title <title> [--brief <text>] [--kind plan|recap] [--dir <folder>] [--force]\n agent-native plan local check --dir <folder>\n agent-native plan local serve --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--port <port>] [--url-file <file>]\n agent-native plan local verify --dir <folder> [--app-url <url>] [--kind plan|recap] [--port <port>]\n agent-native plan local preview --dir <folder> [--app-url <url>] [--kind plan|recap] [--open] [--out preview.html]\n\nThe blocks command fetches the no-auth, read-only get-plan-blocks catalog from\nthe Plan app and writes plan-blocks.md (or plan-blocks.schema.json). It sends no\nplan content and is safe for local-files authoring before writing MDX. It uses a\nclack UI in interactive terminals and prints JSON for non-interactive shells or\nwhen --json is passed.\n\nThe visual-answer publish command sends a coding-agent-authored\nvisual-answer-source.json file to the Plan app's visual-answer action and writes\nvisual-answer-url.txt. The source file should contain a question, optional\ntitle/brief/repoPath/sourceUrl, and MDX files under mdx. It is the terminal\nhandoff for /visual-answer workflows after a coding agent has inspected code via\nthe local repo, the Plan bridge, or GitHub and authored structured Plan blocks.\n\nThe local subcommands are the privacy-focused no-DB path. They only read and\nwrite local files: plan.mdx, optional canvas.mdx, optional prototype.mdx, and\noptional .plan-state.json. They do not call the Plan MCP server, the Plan app\nwrite actions, hosted storage, or SQLite.\n\nCommon flow:\n agent-native plan blocks --out plan-blocks.md\n agent-native plan local init --title \"Checkout review\" --kind plan\n agent-native plan local serve --dir plans/checkout-review --open\n\n\\`plan local serve\\` starts a tiny localhost bridge and opens the hosted Plan UI\nagainst that local-only source. The hosted app fetches the MDX from localhost in\nthe browser; it does not write plan content to the hosted database. The served\nURL is written to \\`.plan-url\\` by default; pass \\`--url-file\\` to choose a\ndifferent local-only file. On macOS, \\`--open\\` prefers Chromium browsers.\nChrome/Edge will ask for Local Network access to read the loopback bridge; if\nyou deny it, re-enable Local Network access in the plan.agent-native.com site\nsettings and retry. Keep the bridge command running while the page is open.\nSafari may block the hosted HTTPS page from reading the HTTP localhost bridge;\nuse a Chromium browser or a local Plan app via \\`--app-url http://localhost:8096\\`.\nUse \\`plan local verify\\` for headless bridge/CORS diagnostics that exit cleanly.\nUse \\`plan local preview\\` for a local Plan dev server route. \\`preview --out\\` is\na legacy/debug escape hatch that writes a standalone static HTML file.\n\\`plan serve\\` is kept as a compatibility alias for \\`plan local serve\\`.\n`;\n\nexport async function runPlan(argv: string[]): Promise<void> {\n const [area, sub, ...rest] = argv;\n if (area === \"blocks\") {\n await runBlocks(parseArgs(argv.slice(1)));\n return;\n }\n if (area === \"serve\") {\n const args = parseArgs(argv.slice(1));\n if (args.help === true || args.h === true) {\n process.stdout.write(HELP);\n return;\n }\n await runServe(args);\n return;\n }\n if (area === \"visual-answer\") {\n await runVisualAnswer(sub, parseArgs(rest));\n return;\n }\n if (area !== \"local\") {\n // Bare `agent-native plan` / `plan help` / `plan --help` → show help on\n // stdout and exit 0 (informational, not an error).\n if (\n area === undefined ||\n area === \"help\" ||\n area === \"--help\" ||\n area === \"-h\"\n ) {\n process.stdout.write(HELP);\n return;\n }\n // A non-empty, unrecognised area (e.g. `agent-native plan lokal`) is an\n // error: print to stderr so the CI log captures it, and exit 1 so callers\n // can detect the failure. This mirrors the existing behaviour for unknown\n // subcommands inside `plan local`.\n process.stderr.write(`Unknown plan area: ${area}\\n${HELP}`);\n process.exit(1);\n }\n const args = parseArgs(rest);\n // `plan local <sub> --help` / `-h` shows help instead of running the\n // subcommand (e.g. `plan local init --help` must not scaffold a folder).\n if (args.help === true || args.h === true) {\n process.stdout.write(HELP);\n return;\n }\n switch (sub) {\n case \"init\":\n runInit(args);\n return;\n case \"check\":\n runCheck(args);\n return;\n case \"preview\":\n runPreview(args);\n return;\n case \"serve\":\n await runServe(args);\n return;\n case \"verify\":\n await runVerify(args);\n return;\n case \"help\":\n case \"--help\":\n case \"-h\":\n case undefined:\n process.stdout.write(HELP);\n return;\n default:\n process.stderr.write(`Unknown plan local subcommand: ${sub}\\n${HELP}`);\n process.exit(1);\n }\n}\n"]}
|