@agent-native/core 0.122.4 → 0.123.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 +554 -0
- package/corpus/core/docs/content/actions.mdx +33 -20
- package/corpus/core/docs/content/agent-mentions.mdx +30 -19
- package/corpus/core/docs/content/agent-native-toolkit.mdx +8 -6
- package/corpus/core/docs/content/agent-resources.mdx +11 -0
- package/corpus/core/docs/content/agent-surfaces.mdx +41 -30
- package/corpus/core/docs/content/audit-log.mdx +78 -0
- package/corpus/core/docs/content/authentication.mdx +7 -5
- package/corpus/core/docs/content/automations.mdx +15 -9
- package/corpus/core/docs/content/client.mdx +11 -11
- package/corpus/core/docs/content/cloneable-saas.mdx +7 -1
- package/corpus/core/docs/content/code-agents-ui.mdx +9 -1
- package/corpus/core/docs/content/components.mdx +7 -0
- package/corpus/core/docs/content/context-awareness.mdx +1 -0
- package/corpus/core/docs/content/creating-templates.mdx +9 -1
- package/corpus/core/docs/content/custom-design-system.mdx +8 -0
- package/corpus/core/docs/content/data-programs.mdx +6 -0
- package/corpus/core/docs/content/deployment.mdx +2 -0
- package/corpus/core/docs/content/doctor.mdx +5 -3
- package/corpus/core/docs/content/extensions.mdx +26 -0
- package/corpus/core/docs/content/external-agents-catalog.mdx +533 -0
- package/corpus/core/docs/content/external-agents.mdx +20 -514
- package/corpus/core/docs/content/faq.mdx +2 -2
- package/corpus/core/docs/content/file-uploads.mdx +44 -0
- package/corpus/core/docs/content/frames.mdx +2 -2
- package/corpus/core/docs/content/generative-ui.mdx +8 -0
- package/corpus/core/docs/content/getting-started.mdx +45 -17
- package/corpus/core/docs/content/human-approval.mdx +9 -0
- package/corpus/core/docs/content/integrations.mdx +4 -3
- package/corpus/core/docs/content/internationalization.mdx +4 -11
- package/corpus/core/docs/content/key-concepts.mdx +1 -1
- package/corpus/core/docs/content/local-file-mode.mdx +5 -0
- package/corpus/core/docs/content/mcp-apps.mdx +2 -1
- package/corpus/core/docs/content/mcp-clients.mdx +32 -1
- package/corpus/core/docs/content/mcp-protocol.mdx +4 -3
- package/corpus/core/docs/content/messaging-internals.mdx +328 -0
- package/corpus/core/docs/content/messaging-recipes.mdx +194 -0
- package/corpus/core/docs/content/messaging.mdx +9 -307
- package/corpus/core/docs/content/multi-app-workspace.mdx +1 -1
- package/corpus/core/docs/content/multi-tenancy.mdx +1 -0
- package/corpus/core/docs/content/native-chat-ui.mdx +8 -0
- package/corpus/core/docs/content/notifications.mdx +18 -20
- package/corpus/core/docs/content/observability.mdx +1 -0
- package/corpus/core/docs/content/onboarding.mdx +20 -6
- package/corpus/core/docs/content/organizations-teams-permissions.mdx +99 -124
- package/corpus/core/docs/content/package-lifecycle.mdx +19 -7
- package/corpus/core/docs/content/progress.mdx +11 -0
- package/corpus/core/docs/content/real-time-collaboration.mdx +44 -3
- package/corpus/core/docs/content/recurring-jobs.mdx +14 -1
- package/corpus/core/docs/content/security.mdx +5 -2
- package/corpus/core/docs/content/server.mdx +2 -1
- package/corpus/core/docs/content/sharing.mdx +22 -3
- package/corpus/core/docs/content/skills-guide.mdx +62 -19
- package/corpus/core/docs/content/syncing-template-changes.mdx +9 -0
- package/corpus/core/docs/content/template-analytics-connectors.mdx +75 -0
- package/corpus/core/docs/content/template-analytics-dashboards.mdx +106 -0
- package/corpus/core/docs/content/template-analytics-developers.mdx +287 -0
- package/corpus/core/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
- package/corpus/core/docs/content/template-analytics.mdx +21 -263
- package/corpus/core/docs/content/template-assets-developers.mdx +456 -0
- package/corpus/core/docs/content/template-assets-generation.mdx +147 -0
- package/corpus/core/docs/content/template-assets-integrations.mdx +319 -0
- package/corpus/core/docs/content/template-assets-presets.mdx +185 -0
- package/corpus/core/docs/content/template-assets.mdx +12 -562
- package/corpus/core/docs/content/template-brain-agent.mdx +103 -0
- package/corpus/core/docs/content/template-brain-developers.mdx +379 -0
- package/corpus/core/docs/content/template-brain-knowledge.mdx +50 -0
- package/corpus/core/docs/content/template-brain-sources.mdx +163 -0
- package/corpus/core/docs/content/template-brain.mdx +30 -390
- package/corpus/core/docs/content/template-calendar-agent.mdx +133 -0
- package/corpus/core/docs/content/template-calendar-booking-links.mdx +73 -0
- package/corpus/core/docs/content/template-calendar-developers.mdx +366 -0
- package/corpus/core/docs/content/template-calendar-scheduling.mdx +128 -0
- package/corpus/core/docs/content/template-calendar.mdx +13 -260
- package/corpus/core/docs/content/template-chat-developers.mdx +88 -0
- package/corpus/core/docs/content/template-chat-first-edits.mdx +145 -0
- package/corpus/core/docs/content/template-chat.mdx +12 -77
- package/corpus/core/docs/content/template-clips-ai-and-editing.mdx +114 -0
- package/corpus/core/docs/content/template-clips-capture-everywhere.mdx +120 -0
- package/corpus/core/docs/content/template-clips-developers.mdx +373 -0
- package/corpus/core/docs/content/template-clips-sharing-and-teams.mdx +182 -0
- package/corpus/core/docs/content/template-clips.mdx +19 -508
- package/corpus/core/docs/content/template-content-databases.mdx +406 -0
- package/corpus/core/docs/content/template-content-developers.mdx +364 -0
- package/corpus/core/docs/content/template-content-editing.mdx +60 -0
- package/corpus/core/docs/content/template-content-sync.mdx +149 -0
- package/corpus/core/docs/content/template-content.mdx +21 -561
- package/corpus/core/docs/content/template-design-brand-and-figma.mdx +150 -0
- package/corpus/core/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
- package/corpus/core/docs/content/template-design-developers.mdx +358 -0
- package/corpus/core/docs/content/template-design-quality-and-components.mdx +95 -0
- package/corpus/core/docs/content/template-design.mdx +20 -344
- package/corpus/core/docs/content/template-dispatch-developers.mdx +121 -0
- package/corpus/core/docs/content/template-dispatch-messaging-routing.mdx +114 -0
- package/corpus/core/docs/content/template-dispatch-operations.mdx +160 -0
- package/corpus/core/docs/content/template-dispatch-vault-integrations.mdx +316 -0
- package/corpus/core/docs/content/template-dispatch.mdx +24 -283
- package/corpus/core/docs/content/template-forms-building-publishing.mdx +135 -0
- package/corpus/core/docs/content/template-forms-developers.mdx +195 -0
- package/corpus/core/docs/content/template-forms-responses.mdx +120 -0
- package/corpus/core/docs/content/template-forms.mdx +21 -230
- package/corpus/core/docs/content/template-mail-agent.mdx +114 -0
- package/corpus/core/docs/content/template-mail-developers.mdx +356 -0
- package/corpus/core/docs/content/template-mail-drafts-and-queue.mdx +103 -0
- package/corpus/core/docs/content/template-mail-inbox.mdx +118 -0
- package/corpus/core/docs/content/template-mail.mdx +23 -274
- package/corpus/core/docs/content/template-plan-automations.mdx +213 -0
- package/corpus/core/docs/content/template-plan-developers.mdx +703 -0
- package/corpus/core/docs/content/template-plan-local-and-desktop.mdx +236 -0
- package/corpus/core/docs/content/template-plan-review-workflow.mdx +180 -0
- package/corpus/core/docs/content/template-plan.mdx +60 -910
- package/corpus/core/docs/content/template-slides-agent.mdx +102 -0
- package/corpus/core/docs/content/template-slides-design-and-media.mdx +94 -0
- package/corpus/core/docs/content/template-slides-developers.mdx +488 -0
- package/corpus/core/docs/content/template-slides-editing.mdx +56 -0
- package/corpus/core/docs/content/template-slides.mdx +20 -362
- package/corpus/core/docs/content/toolkit-capability-packages.mdx +38 -13
- package/corpus/core/docs/content/toolkit-context-knowledge.mdx +49 -9
- package/corpus/core/docs/content/toolkit-editors-canvases.mdx +72 -10
- package/corpus/core/docs/content/toolkit-resources.mdx +16 -0
- package/corpus/core/docs/content/toolkit-settings.mdx +3 -3
- package/corpus/core/docs/content/toolkit-sharing.mdx +5 -7
- package/corpus/core/docs/content/using-your-agent.mdx +25 -2
- package/corpus/core/docs/content/voice-input.mdx +11 -7
- package/corpus/core/docs/content/what-is-agent-native.mdx +1 -0
- package/corpus/core/docs/content/workspace-connections.mdx +21 -11
- package/corpus/core/docs/content/workspace-management.mdx +1 -1
- package/corpus/core/package.json +1 -3
- package/corpus/core/src/a2a/client.ts +4 -2
- package/corpus/core/src/agent/action-warnings.ts +103 -0
- package/corpus/core/src/agent/durable-background.ts +42 -5
- package/corpus/core/src/agent/engine/ai-sdk-engine.ts +58 -6
- package/corpus/core/src/agent/engine/anthropic-engine.ts +51 -8
- package/corpus/core/src/agent/engine/builder-engine.ts +56 -18
- package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +10 -9
- package/corpus/core/src/agent/engine/credential-errors.ts +11 -0
- package/corpus/core/src/agent/engine/error-detail.ts +39 -0
- package/corpus/core/src/agent/engine/prompt-cache.ts +44 -0
- package/corpus/core/src/agent/engine/registry.ts +22 -30
- package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +2 -1
- package/corpus/core/src/agent/engine/translate-anthropic.ts +99 -0
- package/corpus/core/src/agent/loop-settings.ts +94 -7
- package/corpus/core/src/agent/production-agent.ts +667 -157
- package/corpus/core/src/agent/run-loop-with-resume.ts +27 -1
- package/corpus/core/src/agent/run-manager.ts +229 -39
- package/corpus/core/src/agent/run-store.ts +397 -64
- package/corpus/core/src/agent/thread-data-builder.ts +5 -1
- package/corpus/core/src/agent/types.ts +23 -6
- package/corpus/core/src/application-state/script-helpers.ts +5 -2
- package/corpus/core/src/cli/agents.ts +69 -1
- package/corpus/core/src/cli/app-skill.ts +1 -1
- package/corpus/core/src/cli/code-agent-executor.ts +7 -3
- package/corpus/core/src/cli/design-connect.ts +82 -8
- package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
- package/corpus/core/src/cli/templates-meta.ts +12 -0
- package/corpus/core/src/client/AssistantChat.tsx +623 -607
- package/corpus/core/src/client/agent-chat-adapter.ts +176 -29
- package/corpus/core/src/client/chat/message-components.tsx +13 -0
- package/corpus/core/src/client/embed-auth.ts +3 -1
- package/corpus/core/src/client/integrations/IntegrationCard.tsx +41 -24
- package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +37 -21
- package/corpus/core/src/client/integrations/webhook-url.ts +29 -0
- package/corpus/core/src/client/org/OrgSwitcher.tsx +41 -27
- package/corpus/core/src/client/org/RequireActiveOrg.tsx +7 -0
- package/corpus/core/src/client/org/TeamPage.tsx +144 -14
- package/corpus/core/src/client/org/hooks.ts +27 -0
- package/corpus/core/src/client/org/index.ts +2 -0
- package/corpus/core/src/client/require-session.tsx +40 -29
- package/corpus/core/src/client/session-replay.ts +1 -1
- package/corpus/core/src/client/settings/DemoModeSection.tsx +0 -5
- package/corpus/core/src/client/settings/SecretsSection.tsx +47 -42
- package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
- package/corpus/core/src/client/sse-event-processor.ts +83 -8
- package/corpus/core/src/client/use-action.ts +22 -13
- package/corpus/core/src/client/use-agent-engine-configured.ts +36 -4
- package/corpus/core/src/client/use-db-sync.ts +21 -1
- package/corpus/core/src/credentials/index.ts +124 -2
- package/corpus/core/src/deploy/build.ts +93 -30
- package/corpus/core/src/deploy/workspace-deploy.ts +21 -16
- package/corpus/core/src/guards/no-localhost-fallback.ts +76 -14
- package/corpus/core/src/integrations/google-docs-poller.ts +19 -12
- package/corpus/core/src/integrations/webhook-handler.ts +56 -33
- package/corpus/core/src/jobs/scheduler.ts +57 -23
- package/corpus/core/src/localization/default-messages.ts +23 -1
- package/corpus/core/src/observability/evals.ts +7 -8
- package/corpus/core/src/observability/traces.ts +2 -0
- package/corpus/core/src/org/accept-pending.ts +2 -2
- package/corpus/core/src/org/active-org.ts +73 -0
- package/corpus/core/src/org/auto-join-domain.ts +7 -2
- package/corpus/core/src/org/context.ts +169 -66
- package/corpus/core/src/org/handlers.ts +148 -10
- package/corpus/core/src/org/plugin.ts +8 -1
- package/corpus/core/src/org/types.ts +6 -1
- package/corpus/core/src/provider-api/index.ts +6 -1
- package/corpus/core/src/resources/handlers.ts +2 -6
- package/corpus/core/src/resources/script-helpers.ts +2 -1
- package/corpus/core/src/scripts/chat/search-chats.ts +5 -2
- package/corpus/core/src/scripts/describe-workspace-apps.ts +59 -0
- package/corpus/core/src/scripts/resources/delete-memory.ts +5 -2
- package/corpus/core/src/scripts/resources/delete.ts +5 -2
- package/corpus/core/src/scripts/resources/effective.ts +5 -2
- package/corpus/core/src/scripts/resources/list.ts +5 -2
- package/corpus/core/src/scripts/resources/read.ts +5 -2
- package/corpus/core/src/scripts/resources/save-memory.ts +5 -2
- package/corpus/core/src/scripts/resources/write.ts +5 -2
- package/corpus/core/src/server/agent-capabilities.ts +147 -0
- package/corpus/core/src/server/agent-chat/framework-prompts.ts +11 -13
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +183 -57
- package/corpus/core/src/server/agent-chat/script-entries.ts +20 -7
- package/corpus/core/src/server/agent-chat-plugin.ts +27 -0
- package/corpus/core/src/server/auth.ts +38 -32
- package/corpus/core/src/server/core-routes-plugin.ts +229 -179
- package/corpus/core/src/server/credential-provider.ts +196 -44
- package/corpus/core/src/server/embed-session.ts +10 -0
- package/corpus/core/src/server/framework-request-handler.ts +43 -0
- package/corpus/core/src/server/google-auth-plugin.ts +13 -450
- package/corpus/core/src/server/index.ts +4 -1
- package/corpus/core/src/server/onboarding-html.ts +20 -56
- package/corpus/core/src/server/open-route.ts +6 -1
- package/corpus/core/src/server/poll.ts +1 -1
- package/corpus/core/src/server/prompts/framework-core-compact.ts +5 -5
- package/corpus/core/src/server/prompts/framework-core.ts +7 -9
- package/corpus/core/src/server/prompts/shared-rules.ts +20 -9
- package/corpus/core/src/server/request-context.ts +58 -2
- package/corpus/core/src/server/scoped-key-storage.ts +1 -1
- package/corpus/core/src/settings/org-settings.ts +9 -0
- package/corpus/core/src/settings/store.ts +29 -0
- package/corpus/core/src/shared/index.ts +13 -0
- package/corpus/core/src/shared/sign-in-journey.ts +331 -0
- package/corpus/core/src/styles/agent-native.css +8 -0
- package/corpus/core/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/core/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/core/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/core/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
- package/corpus/core/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/core/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/core/src/templates/chat/AGENTS.md +8 -0
- package/corpus/core/src/templates/chat/app/entry.client.tsx +3 -0
- package/corpus/core/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
- package/corpus/core/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
- package/corpus/core/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
- package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +2 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/core/src/templates/default/AGENTS.md +68 -195
- package/corpus/core/src/templates/default/app/entry.client.tsx +3 -0
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +8 -0
- package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +8 -0
- package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
- package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/core/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +62 -124
- package/corpus/core/src/templates/workspace-root/AGENTS.md +6 -1
- package/corpus/core/src/triggers/dispatcher.ts +28 -17
- package/corpus/core/src/vite/client.ts +20 -8
- package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +41 -1
- package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +50 -22
- package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -1
- package/corpus/templates/analytics/.agents/skills/data-querying/references/inline-chart-embeds.md +8 -0
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/analytics/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/analytics/.builder/skills/charts/SKILL.md +2 -2
- package/corpus/templates/analytics/actions/delete-dashboard-view.ts +24 -0
- package/corpus/templates/analytics/actions/delete-user-pref.ts +22 -0
- package/corpus/templates/analytics/actions/generate-chart.ts +8 -245
- package/corpus/templates/analytics/actions/get-theme.ts +27 -0
- package/corpus/templates/analytics/actions/get-user-pref.ts +22 -0
- package/corpus/templates/analytics/actions/list-dashboard-views.ts +25 -0
- package/corpus/templates/analytics/actions/save-dashboard-view.ts +33 -0
- package/corpus/templates/analytics/actions/set-theme.ts +22 -0
- package/corpus/templates/analytics/actions/set-user-pref.ts +24 -0
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +134 -27
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -9
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +0 -17
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +10 -5
- package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +22 -52
- package/corpus/templates/analytics/app/hooks/use-user-pref.ts +21 -31
- package/corpus/templates/analytics/app/i18n-data.ts +10 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dual-axis.ts +73 -0
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +8 -27
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +0 -57
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +8 -0
- package/corpus/templates/analytics/app/root.tsx +0 -28
- package/corpus/templates/analytics/changelog/2026-07-26-error-issues-now-group-by-message-as-well-as-stack-frame-and.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-26-line-area-and-bar-dashboard-panels-can-plot-series-on-a-seco.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-26-scheduled-dashboard-email-reports-now-arrive-complete-and-re.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-26-session-replays-now-detect-rage-clicks-so-the-rage-click-fil.md +6 -0
- package/corpus/templates/analytics/docs/error-capture.md +8 -4
- package/corpus/templates/analytics/package.json +1 -2
- package/corpus/templates/analytics/scripts/preview-dashboard-report.ts +221 -0
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +39 -32
- package/corpus/templates/analytics/server/lib/dashboard-report-render.ts +1168 -0
- package/corpus/templates/analytics/server/lib/dashboard-report.ts +111 -1358
- package/corpus/templates/analytics/server/lib/error-capture.ts +32 -15
- package/corpus/templates/analytics/server/lib/report-chart-svg.ts +901 -0
- package/corpus/templates/analytics/server/lib/session-replay.ts +77 -1
- package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +3 -4
- package/corpus/templates/assets/.agents/skills/a2a-assets/SKILL.md +28 -0
- package/corpus/templates/assets/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/assets/.agents/skills/assets-navigation/SKILL.md +46 -0
- package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +12 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +28 -0
- package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +9 -0
- package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +11 -0
- package/corpus/templates/assets/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/assets/AGENTS.md +58 -125
- package/corpus/templates/assets/actions/variant-slots.ts +8 -4
- package/corpus/templates/assets/app/entry.client.tsx +3 -0
- package/corpus/templates/assets/package.json +0 -2
- package/corpus/templates/brain/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/templates/brain/.agents/skills/brain/SKILL.md +78 -4
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +15 -3
- package/corpus/templates/brain/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/brain/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/brain/AGENTS.md +73 -119
- package/corpus/templates/brain/app/entry.client.tsx +3 -0
- package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +56 -3
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/calendar/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/calendar/AGENTS.md +22 -45
- package/corpus/templates/calendar/app/entry.client.tsx +3 -0
- package/corpus/templates/calendar/server/handlers/events.ts +0 -364
- package/corpus/templates/chat/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/chat/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/chat/AGENTS.md +8 -0
- package/corpus/templates/chat/app/entry.client.tsx +3 -0
- package/corpus/templates/clips/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +42 -0
- package/corpus/templates/clips/.agents/skills/brain-export/SKILL.md +59 -0
- package/corpus/templates/clips/.agents/skills/bug-reports/SKILL.md +37 -0
- package/corpus/templates/clips/.agents/skills/crm-call-evidence/SKILL.md +41 -0
- package/corpus/templates/clips/.agents/skills/dictate/SKILL.md +4 -0
- package/corpus/templates/clips/.agents/skills/external-integrations/SKILL.md +45 -0
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +9 -0
- package/corpus/templates/clips/.agents/skills/recording/SKILL.md +45 -0
- package/corpus/templates/clips/.agents/skills/screen-memory/SKILL.md +43 -0
- package/corpus/templates/clips/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +38 -1
- package/corpus/templates/clips/AGENTS.md +82 -224
- package/corpus/templates/clips/actions/create-recording.ts +4 -0
- package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +6 -10
- package/corpus/templates/clips/app/routes/invite.$token.tsx +6 -5
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +4 -5
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -8
- package/corpus/templates/clips/changelog/2026-07-26-long-agent-chat-turns-now-finish-instead-of-stopping-partway.md +6 -0
- package/corpus/templates/clips/changelog/2026-07-26-recordings-no-longer-get-stuck-on-uploading-uploads-now-hold.md +6 -0
- package/corpus/templates/clips/server/db/schema.ts +3 -0
- package/corpus/templates/clips/server/jobs/brain-export.ts +4 -0
- package/corpus/templates/clips/server/lib/recording-upload-state.ts +0 -52
- package/corpus/templates/clips/server/lib/upload-lease.ts +241 -0
- package/corpus/templates/clips/server/plugins/agent-chat.ts +4 -0
- package/corpus/templates/clips/server/plugins/db.ts +18 -347
- package/corpus/templates/clips/server/routes/api/clips/brain-export/run.post.ts +7 -1
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +123 -126
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/reset-chunks.post.ts +4 -0
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/resume.get.ts +118 -0
- package/corpus/templates/clips/server/routes/api/uploads/reap.post.ts +69 -0
- package/corpus/templates/content/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/content/.agents/skills/content/SKILL.md +4 -0
- package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +8 -0
- package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +55 -0
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +12 -1
- package/corpus/templates/content/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/content/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/content/AGENTS.md +63 -131
- package/corpus/templates/content/app/routes/_app.tsx +4 -4
- package/corpus/templates/content/server/routes/api/notion/callback.get.ts +6 -24
- package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +115 -0
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +177 -0
- package/corpus/templates/crm/.agents/skills/crm/SKILL.md +205 -0
- package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +220 -0
- package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +169 -0
- package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/crm/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +122 -0
- package/corpus/templates/crm/.env.example +5 -0
- package/corpus/templates/crm/AGENTS.md +82 -0
- package/corpus/templates/crm/CHANGELOG.md +25 -0
- package/corpus/templates/crm/DEVELOPING.md +66 -0
- package/corpus/templates/crm/README.md +122 -0
- package/corpus/templates/crm/_gitignore +12 -0
- package/corpus/templates/crm/actions/_crm-action-utils.ts +98 -0
- package/corpus/templates/crm/actions/_crm-attribute-utils.ts +219 -0
- package/corpus/templates/crm/actions/_crm-dashboard.ts +69 -0
- package/corpus/templates/crm/actions/_crm-data-program-actions.ts +15 -0
- package/corpus/templates/crm/actions/_crm-list-utils.ts +775 -0
- package/corpus/templates/crm/actions/_crm-signal-utils.ts +79 -0
- package/corpus/templates/crm/actions/add-crm-record-to-list.ts +164 -0
- package/corpus/templates/crm/actions/apply-crm-proposals.ts +291 -0
- package/corpus/templates/crm/actions/archive-crm-attribute.ts +69 -0
- package/corpus/templates/crm/actions/attach-call-evidence.ts +170 -0
- package/corpus/templates/crm/actions/configure-crm-connection.ts +126 -0
- package/corpus/templates/crm/actions/configure-native-crm.ts +44 -0
- package/corpus/templates/crm/actions/create-crm-attribute.ts +350 -0
- package/corpus/templates/crm/actions/create-crm-list.ts +194 -0
- package/corpus/templates/crm/actions/create-crm-record.ts +148 -0
- package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +58 -0
- package/corpus/templates/crm/actions/delete-crm-saved-view.ts +68 -0
- package/corpus/templates/crm/actions/delete-staged-dataset.ts +14 -0
- package/corpus/templates/crm/actions/estimate-crm-enrichment.ts +229 -0
- package/corpus/templates/crm/actions/find-crm-duplicates.ts +87 -0
- package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +36 -0
- package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +35 -0
- package/corpus/templates/crm/actions/get-crm-dashboard.ts +14 -0
- package/corpus/templates/crm/actions/get-crm-overview.ts +13 -0
- package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +61 -0
- package/corpus/templates/crm/actions/get-crm-record-page.ts +287 -0
- package/corpus/templates/crm/actions/get-crm-record.ts +75 -0
- package/corpus/templates/crm/actions/get-crm-workspace.ts +364 -0
- package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +81 -0
- package/corpus/templates/crm/actions/list-crm-attributes.ts +71 -0
- package/corpus/templates/crm/actions/list-crm-connections.ts +68 -0
- package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +15 -0
- package/corpus/templates/crm/actions/list-crm-dashboards.ts +15 -0
- package/corpus/templates/crm/actions/list-crm-enrichment-slots.ts +28 -0
- package/corpus/templates/crm/actions/list-crm-list-entries.ts +192 -0
- package/corpus/templates/crm/actions/list-crm-lists.ts +80 -0
- package/corpus/templates/crm/actions/list-crm-proposals.ts +55 -0
- package/corpus/templates/crm/actions/list-crm-record-field-history.ts +201 -0
- package/corpus/templates/crm/actions/list-crm-record-values.ts +200 -0
- package/corpus/templates/crm/actions/list-crm-records.ts +103 -0
- package/corpus/templates/crm/actions/list-crm-saved-views.ts +66 -0
- package/corpus/templates/crm/actions/list-crm-signal-hits.ts +43 -0
- package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +32 -0
- package/corpus/templates/crm/actions/list-crm-tasks.ts +22 -0
- package/corpus/templates/crm/actions/list-staged-datasets.ts +14 -0
- package/corpus/templates/crm/actions/list-workspace-connections.ts +47 -0
- package/corpus/templates/crm/actions/manage-crm-attribute-option.ts +272 -0
- package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +87 -0
- package/corpus/templates/crm/actions/manage-crm-task.ts +132 -0
- package/corpus/templates/crm/actions/merge-crm-records.ts +691 -0
- package/corpus/templates/crm/actions/navigate.ts +54 -0
- package/corpus/templates/crm/actions/provider-api-catalog.ts +22 -0
- package/corpus/templates/crm/actions/provider-api-docs.ts +54 -0
- package/corpus/templates/crm/actions/provider-api-request.ts +92 -0
- package/corpus/templates/crm/actions/query-staged-dataset.ts +44 -0
- package/corpus/templates/crm/actions/record-crm-call-insight.ts +160 -0
- package/corpus/templates/crm/actions/record-crm-smart-signal.ts +150 -0
- package/corpus/templates/crm/actions/remove-crm-list-entry.ts +79 -0
- package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +23 -0
- package/corpus/templates/crm/actions/review-crm-signal.ts +31 -0
- package/corpus/templates/crm/actions/run-crm-attribute-fill.ts +443 -0
- package/corpus/templates/crm/actions/run-crm-enrichment.ts +647 -0
- package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +103 -0
- package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +265 -0
- package/corpus/templates/crm/actions/run.ts +7 -0
- package/corpus/templates/crm/actions/save-crm-dashboard.ts +51 -0
- package/corpus/templates/crm/actions/save-crm-saved-view.ts +296 -0
- package/corpus/templates/crm/actions/sync-crm.ts +146 -0
- package/corpus/templates/crm/actions/update-crm-attribute.ts +111 -0
- package/corpus/templates/crm/actions/update-crm-list-entry.ts +102 -0
- package/corpus/templates/crm/actions/update-crm-list.ts +97 -0
- package/corpus/templates/crm/actions/update-crm-record.ts +543 -0
- package/corpus/templates/crm/actions/view-screen.ts +324 -0
- package/corpus/templates/crm/agent-native.app-skill.json +69 -0
- package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +158 -0
- package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +78 -0
- package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +220 -0
- package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +414 -0
- package/corpus/templates/crm/app/components/crm/RecordActions.tsx +648 -0
- package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +488 -0
- package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +232 -0
- package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +93 -0
- package/corpus/templates/crm/app/components/crm/Surface.tsx +97 -0
- package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +180 -0
- package/corpus/templates/crm/app/components/crm/board/CrmBoard.tsx +988 -0
- package/corpus/templates/crm/app/components/crm/board/board-model.ts +399 -0
- package/corpus/templates/crm/app/components/crm/board/entry-filter.ts +150 -0
- package/corpus/templates/crm/app/components/crm/board/view-draft.ts +227 -0
- package/corpus/templates/crm/app/components/crm/grid/CrmGrid.tsx +1033 -0
- package/corpus/templates/crm/app/components/crm/grid/GridCell.tsx +620 -0
- package/corpus/templates/crm/app/components/crm/grid/clipboard.ts +84 -0
- package/corpus/templates/crm/app/components/crm/grid/model.ts +304 -0
- package/corpus/templates/crm/app/components/crm/grid/navigation.ts +220 -0
- package/corpus/templates/crm/app/components/crm/grid/query.ts +214 -0
- package/corpus/templates/crm/app/components/crm/record/AttributePanel.tsx +192 -0
- package/corpus/templates/crm/app/components/crm/record/FieldHistory.tsx +179 -0
- package/corpus/templates/crm/app/components/crm/record/RecordHeader.tsx +103 -0
- package/corpus/templates/crm/app/components/crm/record/RecordLists.tsx +235 -0
- package/corpus/templates/crm/app/components/crm/record/RecordTabs.tsx +206 -0
- package/corpus/templates/crm/app/components/crm/record/field-editors.tsx +245 -0
- package/corpus/templates/crm/app/components/crm/record/record-data.ts +603 -0
- package/corpus/templates/crm/app/components/crm/settings/AdvancedSettings.tsx +49 -0
- package/corpus/templates/crm/app/components/crm/settings/AttributeOptionsEditor.tsx +441 -0
- package/corpus/templates/crm/app/components/crm/settings/ConnectionSettings.tsx +169 -0
- package/corpus/templates/crm/app/components/crm/settings/FieldsSettings.tsx +935 -0
- package/corpus/templates/crm/app/components/crm/settings/ListsSettings.tsx +339 -0
- package/corpus/templates/crm/app/components/crm/settings/settings-admin.ts +377 -0
- package/corpus/templates/crm/app/components/crm/shared/AttributeValueParts.tsx +69 -0
- package/corpus/templates/crm/app/components/crm/shared/attribute-value.ts +591 -0
- package/corpus/templates/crm/app/components/layout/CrmCommandMenu.tsx +556 -0
- package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +130 -0
- package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +407 -0
- package/corpus/templates/crm/app/components/layout/command-palette-search.ts +126 -0
- package/corpus/templates/crm/app/components/layout/crm-ui-intents.ts +41 -0
- package/corpus/templates/crm/app/components/layout/sidebar-collapse.ts +40 -0
- package/corpus/templates/crm/app/components/layout/sidebar-lists.ts +109 -0
- package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/badge.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/button.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/card.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/checkbox.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/dialog.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/dropdown-menu.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/hover-card.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/input.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/label.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/popover.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/select.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/sheet.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/skeleton.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/switch.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/table.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/tabs.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/textarea.tsx +1 -0
- package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +17 -0
- package/corpus/templates/crm/app/components/ui/tooltip.tsx +1 -0
- package/corpus/templates/crm/app/design-system.ts +3 -0
- package/corpus/templates/crm/app/entry.client.tsx +19 -0
- package/corpus/templates/crm/app/entry.server.tsx +10 -0
- package/corpus/templates/crm/app/global.css +167 -0
- package/corpus/templates/crm/app/hooks/use-keyboard-shortcuts.ts +206 -0
- package/corpus/templates/crm/app/hooks/use-navigation-state.ts +48 -0
- package/corpus/templates/crm/app/i18n/en-US.ts +684 -0
- package/corpus/templates/crm/app/i18n/index.ts +34 -0
- package/corpus/templates/crm/app/lib/dashboard.ts +13 -0
- package/corpus/templates/crm/app/lib/navigation.ts +17 -0
- package/corpus/templates/crm/app/lib/tab-id.ts +1 -0
- package/corpus/templates/crm/app/lib/types.ts +172 -0
- package/corpus/templates/crm/app/lib/utils.ts +1 -0
- package/corpus/templates/crm/app/root.tsx +93 -0
- package/corpus/templates/crm/app/routes/_index.tsx +26 -0
- package/corpus/templates/crm/app/routes/accounts.tsx +41 -0
- package/corpus/templates/crm/app/routes/agent.tsx +5 -0
- package/corpus/templates/crm/app/routes/ask.tsx +53 -0
- package/corpus/templates/crm/app/routes/dashboard.tsx +118 -0
- package/corpus/templates/crm/app/routes/lists.tsx +228 -0
- package/corpus/templates/crm/app/routes/opportunities.tsx +41 -0
- package/corpus/templates/crm/app/routes/people.tsx +41 -0
- package/corpus/templates/crm/app/routes/proposals.tsx +388 -0
- package/corpus/templates/crm/app/routes/records.$recordId.tsx +53 -0
- package/corpus/templates/crm/app/routes/records.tsx +64 -0
- package/corpus/templates/crm/app/routes/settings.tsx +118 -0
- package/corpus/templates/crm/app/routes/setup.tsx +308 -0
- package/corpus/templates/crm/app/routes/tasks.tsx +252 -0
- package/corpus/templates/crm/app/routes/views.tsx +683 -0
- package/corpus/templates/crm/app/routes.ts +19 -0
- package/corpus/templates/crm/app/vite-env.d.ts +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-any-list-or-view-can-be-shown-as-a-board-grouped-by-stage-so.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-crm-now-finds-likely-duplicate-records-and-tells-you-exactly.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-enrichment-now-shows-what-a-run-will-cost-before-it-starts-g.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-lists-turn-any-set-of-records-into-a-pipeline-with-its-own-s.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-moving-a-record-or-list-entry-into-a-stage-that-was-retired-.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-opening-a-record-now-shows-one-page-with-its-fields-the-list.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-press-cmd-k-to-jump-to-any-record-list-view-or-setting-and-u.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-provider-record-edits-now-show-an-exact-before-after-diff-an.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-record-page-attribute-labels-now-read-in-full-instead-of-bei.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-records-now-use-typed-fields-currency-dates-ratings-status-s.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-retyping-a-value-on-the-record-page-now-replaces-it-instead-.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-settings-now-has-fields-and-lists-tabs-for-adding-fields-edi.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-the-proposal-review-now-shows-the-field-that-actually-change.md +6 -0
- package/corpus/templates/crm/changelog/2026-07-26-the-record-grid-is-now-a-real-spreadsheet-filter-sort-and-pa.md +6 -0
- package/corpus/templates/crm/components.json +20 -0
- package/corpus/templates/crm/docs/architecture/crm-contract.md +214 -0
- package/corpus/templates/crm/docs/features/README.md +55 -0
- package/corpus/templates/crm/docs/features/f1-records-and-fields.mdx +52 -0
- package/corpus/templates/crm/docs/features/f2-lists-pipelines-and-views.mdx +48 -0
- package/corpus/templates/crm/docs/features/f3-work-and-record-quality.mdx +40 -0
- package/corpus/templates/crm/docs/features/f4-evidence-and-chat.mdx +47 -0
- package/corpus/templates/crm/learnings.defaults.md +5 -0
- package/corpus/templates/crm/netlify.toml +11 -0
- package/corpus/templates/crm/package.json +61 -0
- package/corpus/templates/crm/public/favicon.svg +1 -0
- package/corpus/templates/crm/public/icon-180.svg +1 -0
- package/corpus/templates/crm/public/manifest.json +11 -0
- package/corpus/templates/crm/react-router.config.ts +7 -0
- package/corpus/templates/crm/server/crm/adapter.ts +32 -0
- package/corpus/templates/crm/server/crm/crm-field-firewall.ts +64 -0
- package/corpus/templates/crm/server/crm/crm-mirror.ts +721 -0
- package/corpus/templates/crm/server/crm/field-policy-attributes.ts +48 -0
- package/corpus/templates/crm/server/crm/hubspot-adapter.ts +1146 -0
- package/corpus/templates/crm/server/crm/native-adapter.ts +1810 -0
- package/corpus/templates/crm/server/crm/provider-record-link.ts +264 -0
- package/corpus/templates/crm/server/crm/read-through.ts +207 -0
- package/corpus/templates/crm/server/crm/salesforce-adapter.ts +1255 -0
- package/corpus/templates/crm/server/db/crm-store.ts +1112 -0
- package/corpus/templates/crm/server/db/index.ts +191 -0
- package/corpus/templates/crm/server/db/schema.ts +647 -0
- package/corpus/templates/crm/server/lib/crm-query.ts +1558 -0
- package/corpus/templates/crm/server/lib/dedupe.ts +714 -0
- package/corpus/templates/crm/server/lib/enrichment-cost.ts +381 -0
- package/corpus/templates/crm/server/lib/enrichment-slots.ts +519 -0
- package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +65 -0
- package/corpus/templates/crm/server/lib/intelligence/evidence.ts +105 -0
- package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +94 -0
- package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +39 -0
- package/corpus/templates/crm/server/lib/intelligence/summary.ts +19 -0
- package/corpus/templates/crm/server/lib/lifecycle.ts +634 -0
- package/corpus/templates/crm/server/lib/provider-api.ts +64 -0
- package/corpus/templates/crm/server/middleware/auth.ts +4 -0
- package/corpus/templates/crm/server/plugins/agent-chat.ts +65 -0
- package/corpus/templates/crm/server/plugins/auth.ts +14 -0
- package/corpus/templates/crm/server/plugins/core-routes.ts +17 -0
- package/corpus/templates/crm/server/plugins/db.ts +738 -0
- package/corpus/templates/crm/server/routes/[...page].get.ts +5 -0
- package/corpus/templates/crm/shared/crm-attributes.ts +469 -0
- package/corpus/templates/crm/shared/crm-automation-recipes.ts +132 -0
- package/corpus/templates/crm/shared/crm-contract.ts +417 -0
- package/corpus/templates/crm/shared/crm-navigation.ts +190 -0
- package/corpus/templates/crm/shared/crm-sales-config.ts +63 -0
- package/corpus/templates/crm/ssr-entry.ts +11 -0
- package/corpus/templates/crm/tsconfig.json +24 -0
- package/corpus/templates/crm/vite.config.ts +15 -0
- package/corpus/templates/crm/vitest.config.ts +5 -0
- package/corpus/templates/design/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
- package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +15 -0
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/design/.agents/skills/full-app-build/SKILL.md +12 -0
- package/corpus/templates/design/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/design/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/design/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +201 -102
- package/corpus/templates/design/AGENTS.md +58 -71
- package/corpus/templates/design/actions/open-visual-edit.ts +111 -2
- package/corpus/templates/design/app/components/design/AddLocalhostScreenDialog.tsx +236 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1 -1
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2 -2
- package/corpus/templates/design/app/entry.client.tsx +3 -0
- package/corpus/templates/design/app/i18n-data.ts +192 -12
- package/corpus/templates/design/app/pages/Present.tsx +6 -9
- package/corpus/templates/design/app/pages/VisualEdit.tsx +4 -7
- package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +20 -0
- package/corpus/templates/design/changelog/2026-07-26-apply-design-updates-from-a-centered-top-toolbar-without-cov.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/dispatch/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/dispatch/app/entry.client.tsx +3 -0
- package/corpus/templates/dispatch/server/plugins/identity-sso.ts +27 -16
- package/corpus/templates/forms/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/forms/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/forms/DEVELOPING.md +1 -1
- package/corpus/templates/forms/app/entry.client.tsx +3 -0
- package/corpus/templates/forms/app/pages/FormsListPage.tsx +3 -5
- package/corpus/templates/forms/app/routes/_app.tsx +4 -4
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/macros/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/macros/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/macros/app/entry.client.tsx +3 -0
- package/corpus/templates/mail/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/mail/.agents/skills/contacts-and-crm/SKILL.md +10 -0
- package/corpus/templates/mail/.agents/skills/draft-queue/SKILL.md +3 -0
- package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +26 -2
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/mail/.agents/skills/inbox-automations/SKILL.md +37 -0
- package/corpus/templates/mail/.agents/skills/inbox-reads-and-triage/SKILL.md +58 -0
- package/corpus/templates/mail/.agents/skills/mail-backends/SKILL.md +33 -0
- package/corpus/templates/mail/.agents/skills/provider-api-scans/SKILL.md +39 -0
- package/corpus/templates/mail/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/mail/AGENTS.md +74 -143
- package/corpus/templates/mail/actions/create-alias.ts +36 -0
- package/corpus/templates/mail/actions/create-automation.ts +28 -0
- package/corpus/templates/mail/actions/create-scheduled-job.ts +45 -0
- package/corpus/templates/mail/actions/delete-alias.ts +26 -0
- package/corpus/templates/mail/actions/delete-automation.ts +21 -0
- package/corpus/templates/mail/actions/get-automation-settings.ts +32 -0
- package/corpus/templates/mail/actions/get-mail-preferences.ts +18 -0
- package/corpus/templates/mail/actions/list-aliases.ts +17 -0
- package/corpus/templates/mail/actions/list-automations.ts +18 -0
- package/corpus/templates/mail/actions/list-scheduled-jobs.ts +18 -0
- package/corpus/templates/mail/actions/update-alias.ts +37 -0
- package/corpus/templates/mail/actions/update-automation-settings.ts +33 -0
- package/corpus/templates/mail/actions/update-automation.ts +33 -0
- package/corpus/templates/mail/actions/update-mail-preferences.ts +68 -0
- package/corpus/templates/mail/actions/update-scheduled-job.ts +25 -0
- package/corpus/templates/mail/app/entry.client.tsx +3 -0
- package/corpus/templates/mail/app/hooks/use-aliases.ts +6 -36
- package/corpus/templates/mail/app/hooks/use-automations.ts +9 -16
- package/corpus/templates/mail/app/hooks/use-emails.ts +6 -5
- package/corpus/templates/mail/app/hooks/use-scheduled-jobs.ts +12 -15
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +15 -9
- package/corpus/templates/mail/server/handlers/automations.ts +5 -142
- package/corpus/templates/mail/server/handlers/emails.ts +1 -56
- package/corpus/templates/mail/server/handlers/scheduled-jobs.ts +0 -134
- package/corpus/templates/mail/server/lib/aliases.ts +18 -0
- package/corpus/templates/mail/server/lib/automations.ts +104 -0
- package/corpus/templates/mail/server/lib/jobs.ts +34 -0
- package/corpus/templates/mail/server/lib/mail-settings.ts +43 -0
- package/corpus/templates/mail/shared/automation-schema.ts +10 -0
- package/corpus/templates/plan/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/plan/.agents/skills/plan-authoring-flow/SKILL.md +98 -0
- package/corpus/templates/plan/.agents/skills/plan-browser-editing/SKILL.md +42 -0
- package/corpus/templates/plan/.agents/skills/plan-comments-and-feedback/SKILL.md +68 -0
- package/corpus/templates/plan/.agents/skills/plan-events/SKILL.md +22 -0
- package/corpus/templates/plan/.agents/skills/plan-hosted-writes/SKILL.md +42 -0
- package/corpus/templates/plan/.agents/skills/plan-local-codebase-chat/SKILL.md +38 -0
- package/corpus/templates/plan/.agents/skills/plan-review-recaps/SKILL.md +25 -0
- package/corpus/templates/plan/.agents/skills/plan-source-sync/SKILL.md +68 -0
- package/corpus/templates/plan/.agents/skills/plan-version-history/SKILL.md +25 -0
- package/corpus/templates/plan/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/plan/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/plan/AGENTS.md +64 -296
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +9 -8
- package/corpus/templates/plan/app/pages/PlansPage.tsx +5 -10
- package/corpus/templates/slides/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/slides/.agents/skills/deck-management/SKILL.md +7 -7
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/slides/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +3 -2
- package/corpus/templates/slides/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/slides/DEVELOPING.md +3 -3
- package/corpus/templates/slides/actions/_deck-write.ts +52 -0
- package/corpus/templates/slides/actions/add-deck.ts +73 -0
- package/corpus/templates/slides/actions/delete-deck.ts +60 -0
- package/corpus/templates/slides/actions/get-deck.ts +3 -1
- package/corpus/templates/slides/actions/save-deck.ts +144 -0
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +27 -20
- package/corpus/templates/slides/app/context/DeckContext.tsx +173 -100
- package/corpus/templates/slides/app/pages/Index.tsx +3 -6
- package/corpus/templates/slides/app/routes/slide.tsx +16 -12
- package/corpus/templates/slides/changelog/2026-07-26-a-newly-created-deck-now-appears-in-the-deck-list-right-away.md +6 -0
- package/corpus/templates/slides/server/handlers/decks.ts +2 -378
- package/corpus/templates/tasks/.agents/skills/action-reference/SKILL.md +47 -0
- package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +19 -1
- package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/corpus/templates/tasks/.agents/skills/change-summary/SKILL.md +19 -1
- package/corpus/templates/tasks/.agents/skills/custom-fields/SKILL.md +63 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +20 -6
- package/corpus/templates/tasks/.agents/skills/security/SKILL.md +2 -0
- package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +228 -0
- package/corpus/templates/tasks/.agents/skills/store-conventions/SKILL.md +45 -0
- package/corpus/templates/tasks/.agents/skills/storing-data/SKILL.md +178 -0
- package/corpus/templates/tasks/.agents/skills/task-inbox-workflow/SKILL.md +66 -0
- package/corpus/templates/tasks/AGENTS.md +48 -113
- package/corpus/templates/tasks/app/entry.client.tsx +3 -0
- package/corpus/toolkit/CHANGELOG.md +12 -0
- package/corpus/toolkit/package.json +1 -1
- package/corpus/toolkit/src/composer/PromptComposer.tsx +23 -20
- package/dist/a2a/client.d.ts +3 -1
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +4 -2
- package/dist/a2a/client.js.map +1 -1
- package/dist/agent/action-warnings.d.ts +27 -0
- package/dist/agent/action-warnings.d.ts.map +1 -0
- package/dist/agent/action-warnings.js +73 -0
- package/dist/agent/action-warnings.js.map +1 -0
- package/dist/agent/durable-background.d.ts +8 -0
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +37 -5
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
- package/dist/agent/engine/ai-sdk-engine.js +47 -6
- package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
- package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
- package/dist/agent/engine/anthropic-engine.js +41 -9
- package/dist/agent/engine/anthropic-engine.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/engine/builder-engine.js +46 -19
- package/dist/agent/engine/builder-engine.js.map +1 -1
- package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -1
- package/dist/agent/engine/continuation-dispatch-retry.js +11 -9
- package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -1
- package/dist/agent/engine/credential-errors.d.ts +6 -0
- package/dist/agent/engine/credential-errors.d.ts.map +1 -1
- package/dist/agent/engine/credential-errors.js +10 -0
- package/dist/agent/engine/credential-errors.js.map +1 -1
- package/dist/agent/engine/error-detail.d.ts +2 -0
- package/dist/agent/engine/error-detail.d.ts.map +1 -0
- package/dist/agent/engine/error-detail.js +37 -0
- package/dist/agent/engine/error-detail.js.map +1 -0
- package/dist/agent/engine/prompt-cache.d.ts +34 -0
- package/dist/agent/engine/prompt-cache.d.ts.map +1 -0
- package/dist/agent/engine/prompt-cache.js +39 -0
- package/dist/agent/engine/prompt-cache.js.map +1 -0
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +23 -33
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/engine/tool-call-journal-seed.d.ts +1 -1
- package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -1
- package/dist/agent/engine/tool-call-journal-seed.js +2 -2
- package/dist/agent/engine/tool-call-journal-seed.js.map +1 -1
- package/dist/agent/engine/translate-anthropic.d.ts +28 -0
- package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
- package/dist/agent/engine/translate-anthropic.js +75 -0
- package/dist/agent/engine/translate-anthropic.js.map +1 -1
- package/dist/agent/loop-settings.d.ts +35 -2
- package/dist/agent/loop-settings.d.ts.map +1 -1
- package/dist/agent/loop-settings.js +71 -8
- package/dist/agent/loop-settings.js.map +1 -1
- package/dist/agent/production-agent.d.ts +105 -20
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +516 -123
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +24 -2
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/run-manager.d.ts +52 -9
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +191 -36
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/run-store.d.ts +87 -14
- package/dist/agent/run-store.d.ts.map +1 -1
- package/dist/agent/run-store.js +331 -59
- package/dist/agent/run-store.js.map +1 -1
- package/dist/agent/thread-data-builder.d.ts.map +1 -1
- package/dist/agent/thread-data-builder.js +6 -1
- package/dist/agent/thread-data-builder.js.map +1 -1
- package/dist/agent/types.d.ts +18 -6
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js +9 -5
- package/dist/agent/types.js.map +1 -1
- package/dist/application-state/script-helpers.d.ts.map +1 -1
- package/dist/application-state/script-helpers.js +2 -2
- package/dist/application-state/script-helpers.js.map +1 -1
- package/dist/cli/agents.d.ts +2 -0
- package/dist/cli/agents.d.ts.map +1 -1
- package/dist/cli/agents.js +48 -1
- package/dist/cli/agents.js.map +1 -1
- package/dist/cli/app-skill.js +1 -1
- package/dist/cli/app-skill.js.map +1 -1
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +3 -3
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +73 -8
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/design-visual-edit-skill.js +169 -24
- package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +12 -0
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +135 -125
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +17 -0
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +141 -31
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/chat/message-components.d.ts +9 -1
- package/dist/client/chat/message-components.d.ts.map +1 -1
- package/dist/client/chat/message-components.js +12 -1
- package/dist/client/chat/message-components.js.map +1 -1
- package/dist/client/embed-auth.d.ts.map +1 -1
- package/dist/client/embed-auth.js +3 -1
- package/dist/client/embed-auth.js.map +1 -1
- package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationCard.js +9 -4
- package/dist/client/integrations/IntegrationCard.js.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
- package/dist/client/integrations/IntegrationsPanel.js +13 -7
- package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
- package/dist/client/integrations/webhook-url.d.ts +7 -0
- package/dist/client/integrations/webhook-url.d.ts.map +1 -0
- package/dist/client/integrations/webhook-url.js +32 -0
- package/dist/client/integrations/webhook-url.js.map +1 -0
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +13 -11
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
- package/dist/client/org/RequireActiveOrg.js +2 -2
- package/dist/client/org/RequireActiveOrg.js.map +1 -1
- package/dist/client/org/TeamPage.d.ts.map +1 -1
- package/dist/client/org/TeamPage.js +52 -13
- package/dist/client/org/TeamPage.js.map +1 -1
- package/dist/client/org/hooks.d.ts +9 -0
- package/dist/client/org/hooks.d.ts.map +1 -1
- package/dist/client/org/hooks.js +24 -0
- package/dist/client/org/hooks.js.map +1 -1
- package/dist/client/org/index.d.ts +1 -1
- package/dist/client/org/index.d.ts.map +1 -1
- package/dist/client/org/index.js +1 -1
- package/dist/client/org/index.js.map +1 -1
- package/dist/client/require-session.d.ts +12 -17
- package/dist/client/require-session.d.ts.map +1 -1
- package/dist/client/require-session.js +36 -23
- package/dist/client/require-session.js.map +1 -1
- package/dist/client/session-replay.js +1 -1
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/settings/DemoModeSection.d.ts +0 -1
- package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
- package/dist/client/settings/DemoModeSection.js +0 -4
- package/dist/client/settings/DemoModeSection.js.map +1 -1
- package/dist/client/settings/SecretsSection.d.ts.map +1 -1
- package/dist/client/settings/SecretsSection.js +12 -8
- package/dist/client/settings/SecretsSection.js.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts +0 -1
- package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +1 -4
- package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts +33 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +83 -8
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +23 -14
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts +9 -3
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +30 -3
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +3 -0
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +18 -1
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/credentials/index.d.ts +29 -1
- package/dist/credentials/index.d.ts.map +1 -1
- package/dist/credentials/index.js +111 -2
- package/dist/credentials/index.js.map +1 -1
- package/dist/deploy/build.d.ts +14 -3
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +81 -24
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.d.ts +15 -0
- package/dist/deploy/workspace-deploy.d.ts.map +1 -1
- package/dist/deploy/workspace-deploy.js +19 -18
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/guards/no-localhost-fallback.d.ts +7 -0
- package/dist/guards/no-localhost-fallback.d.ts.map +1 -1
- package/dist/guards/no-localhost-fallback.js +75 -16
- package/dist/guards/no-localhost-fallback.js.map +1 -1
- package/dist/integrations/google-docs-poller.d.ts.map +1 -1
- package/dist/integrations/google-docs-poller.js +8 -3
- package/dist/integrations/google-docs-poller.js.map +1 -1
- package/dist/integrations/webhook-handler.d.ts.map +1 -1
- package/dist/integrations/webhook-handler.js +22 -4
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/jobs/scheduler.d.ts +17 -0
- package/dist/jobs/scheduler.d.ts.map +1 -1
- package/dist/jobs/scheduler.js +60 -33
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/localization/default-messages.d.ts +17 -1
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +17 -1
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/observability/evals.d.ts.map +1 -1
- package/dist/observability/evals.js +7 -10
- package/dist/observability/evals.js.map +1 -1
- package/dist/observability/routes.d.ts +3 -3
- package/dist/observability/traces.d.ts +2 -0
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js.map +1 -1
- package/dist/org/accept-pending.js +2 -2
- package/dist/org/accept-pending.js.map +1 -1
- package/dist/org/active-org.d.ts +16 -0
- package/dist/org/active-org.d.ts.map +1 -0
- package/dist/org/active-org.js +57 -0
- package/dist/org/active-org.js.map +1 -0
- package/dist/org/auto-join-domain.d.ts.map +1 -1
- package/dist/org/auto-join-domain.js +3 -2
- package/dist/org/auto-join-domain.js.map +1 -1
- package/dist/org/context.d.ts +19 -1
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +159 -71
- package/dist/org/context.js.map +1 -1
- package/dist/org/handlers.d.ts +24 -1
- package/dist/org/handlers.d.ts.map +1 -1
- package/dist/org/handlers.js +129 -10
- package/dist/org/handlers.js.map +1 -1
- package/dist/org/plugin.d.ts +2 -0
- package/dist/org/plugin.d.ts.map +1 -1
- package/dist/org/plugin.js +9 -2
- package/dist/org/plugin.js.map +1 -1
- package/dist/org/types.d.ts +6 -1
- package/dist/org/types.d.ts.map +1 -1
- package/dist/org/types.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +9 -9
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/provider-api/index.d.ts.map +1 -1
- package/dist/provider-api/index.js +3 -2
- package/dist/provider-api/index.js.map +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/resources/handlers.d.ts.map +1 -1
- package/dist/resources/handlers.js +2 -7
- package/dist/resources/handlers.js.map +1 -1
- package/dist/resources/script-helpers.d.ts.map +1 -1
- package/dist/resources/script-helpers.js +2 -2
- package/dist/resources/script-helpers.js.map +1 -1
- package/dist/scripts/chat/search-chats.d.ts.map +1 -1
- package/dist/scripts/chat/search-chats.js +2 -2
- package/dist/scripts/chat/search-chats.js.map +1 -1
- package/dist/scripts/describe-workspace-apps.d.ts +4 -0
- package/dist/scripts/describe-workspace-apps.d.ts.map +1 -0
- package/dist/scripts/describe-workspace-apps.js +34 -0
- package/dist/scripts/describe-workspace-apps.js.map +1 -0
- package/dist/scripts/resources/delete-memory.d.ts.map +1 -1
- package/dist/scripts/resources/delete-memory.js +2 -2
- package/dist/scripts/resources/delete-memory.js.map +1 -1
- package/dist/scripts/resources/delete.d.ts.map +1 -1
- package/dist/scripts/resources/delete.js +2 -2
- package/dist/scripts/resources/delete.js.map +1 -1
- package/dist/scripts/resources/effective.d.ts.map +1 -1
- package/dist/scripts/resources/effective.js +2 -2
- package/dist/scripts/resources/effective.js.map +1 -1
- package/dist/scripts/resources/list.d.ts.map +1 -1
- package/dist/scripts/resources/list.js +2 -2
- package/dist/scripts/resources/list.js.map +1 -1
- package/dist/scripts/resources/read.d.ts.map +1 -1
- package/dist/scripts/resources/read.js +2 -2
- package/dist/scripts/resources/read.js.map +1 -1
- package/dist/scripts/resources/save-memory.d.ts.map +1 -1
- package/dist/scripts/resources/save-memory.js +2 -2
- package/dist/scripts/resources/save-memory.js.map +1 -1
- package/dist/scripts/resources/write.d.ts.map +1 -1
- package/dist/scripts/resources/write.js +2 -2
- package/dist/scripts/resources/write.js.map +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-capabilities.d.ts +21 -0
- package/dist/server/agent-capabilities.d.ts.map +1 -0
- package/dist/server/agent-capabilities.js +106 -0
- package/dist/server/agent-capabilities.js.map +1 -0
- package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
- package/dist/server/agent-chat/framework-prompts.js +11 -13
- package/dist/server/agent-chat/framework-prompts.js.map +1 -1
- package/dist/server/agent-chat/prompt-resources.d.ts +32 -0
- package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
- package/dist/server/agent-chat/prompt-resources.js +117 -56
- package/dist/server/agent-chat/prompt-resources.js.map +1 -1
- package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
- package/dist/server/agent-chat/script-entries.js +18 -8
- package/dist/server/agent-chat/script-entries.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +27 -1
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/auth.d.ts +9 -9
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +32 -33
- package/dist/server/auth.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +45 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +162 -139
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/credential-provider.d.ts +35 -2
- package/dist/server/credential-provider.d.ts.map +1 -1
- package/dist/server/credential-provider.js +155 -40
- package/dist/server/credential-provider.js.map +1 -1
- package/dist/server/embed-session.d.ts.map +1 -1
- package/dist/server/embed-session.js +10 -0
- package/dist/server/embed-session.js.map +1 -1
- package/dist/server/framework-request-handler.d.ts.map +1 -1
- package/dist/server/framework-request-handler.js +38 -0
- package/dist/server/framework-request-handler.js.map +1 -1
- package/dist/server/google-auth-plugin.d.ts.map +1 -1
- package/dist/server/google-auth-plugin.js +12 -444
- package/dist/server/google-auth-plugin.js.map +1 -1
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +2 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +20 -56
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/open-route.d.ts.map +1 -1
- package/dist/server/open-route.js +6 -1
- package/dist/server/open-route.js.map +1 -1
- package/dist/server/poll.js +1 -1
- package/dist/server/poll.js.map +1 -1
- package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
- package/dist/server/prompts/framework-core-compact.js +5 -6
- package/dist/server/prompts/framework-core-compact.js.map +1 -1
- package/dist/server/prompts/framework-core.d.ts.map +1 -1
- package/dist/server/prompts/framework-core.js +7 -10
- package/dist/server/prompts/framework-core.js.map +1 -1
- package/dist/server/prompts/shared-rules.d.ts +20 -2
- package/dist/server/prompts/shared-rules.d.ts.map +1 -1
- package/dist/server/prompts/shared-rules.js +20 -10
- package/dist/server/prompts/shared-rules.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/request-context.d.ts +26 -1
- package/dist/server/request-context.d.ts.map +1 -1
- package/dist/server/request-context.js +52 -2
- package/dist/server/request-context.js.map +1 -1
- package/dist/server/scoped-key-storage.js +1 -1
- package/dist/server/scoped-key-storage.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/settings/org-settings.d.ts +2 -0
- package/dist/settings/org-settings.d.ts.map +1 -1
- package/dist/settings/org-settings.js +5 -1
- package/dist/settings/org-settings.js.map +1 -1
- package/dist/settings/store.d.ts +6 -0
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +25 -0
- package/dist/settings/store.js.map +1 -1
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/sign-in-journey.d.ts +102 -0
- package/dist/shared/sign-in-journey.d.ts.map +1 -0
- package/dist/shared/sign-in-journey.js +269 -0
- package/dist/shared/sign-in-journey.js.map +1 -0
- package/dist/styles/agent-native.css +8 -0
- package/dist/templates/chat/.agents/skills/actions/SKILL.md +19 -1
- package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
- package/dist/templates/chat/.agents/skills/security/SKILL.md +2 -0
- package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/dist/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
- package/dist/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
- package/dist/templates/chat/AGENTS.md +8 -0
- package/dist/templates/chat/app/entry.client.tsx +3 -0
- package/dist/templates/default/.agents/skills/actions/SKILL.md +19 -1
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
- package/dist/templates/default/.agents/skills/security/SKILL.md +2 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/dist/templates/default/AGENTS.md +68 -195
- package/dist/templates/default/app/entry.client.tsx +3 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +8 -0
- package/dist/templates/default/app/i18n/de-DE.ts +8 -0
- package/dist/templates/default/app/i18n/en-US.ts +8 -0
- package/dist/templates/default/app/i18n/es-ES.ts +8 -0
- package/dist/templates/default/app/i18n/fr-FR.ts +8 -0
- package/dist/templates/default/app/i18n/hi-IN.ts +8 -0
- package/dist/templates/default/app/i18n/ja-JP.ts +8 -0
- package/dist/templates/default/app/i18n/ko-KR.ts +8 -0
- package/dist/templates/default/app/i18n/pt-BR.ts +8 -0
- package/dist/templates/default/app/i18n/zh-CN.ts +8 -0
- package/dist/templates/default/app/i18n/zh-TW.ts +8 -0
- package/dist/templates/headless/.agents/skills/actions/SKILL.md +19 -1
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
- package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
- package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
- package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
- package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
- package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
- package/dist/templates/workspace-core/AGENTS.md +62 -124
- package/dist/templates/workspace-root/AGENTS.md +6 -1
- package/dist/triggers/dispatcher.d.ts.map +1 -1
- package/dist/triggers/dispatcher.js +10 -3
- package/dist/triggers/dispatcher.js.map +1 -1
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +18 -8
- package/dist/vite/client.js.map +1 -1
- package/docs/content/actions.mdx +33 -20
- package/docs/content/agent-mentions.mdx +30 -19
- package/docs/content/agent-native-toolkit.mdx +8 -6
- package/docs/content/agent-resources.mdx +11 -0
- package/docs/content/agent-surfaces.mdx +41 -30
- package/docs/content/audit-log.mdx +78 -0
- package/docs/content/authentication.mdx +7 -5
- package/docs/content/automations.mdx +15 -9
- package/docs/content/client.mdx +11 -11
- package/docs/content/cloneable-saas.mdx +7 -1
- package/docs/content/code-agents-ui.mdx +9 -1
- package/docs/content/components.mdx +7 -0
- package/docs/content/context-awareness.mdx +1 -0
- package/docs/content/creating-templates.mdx +9 -1
- package/docs/content/custom-design-system.mdx +8 -0
- package/docs/content/data-programs.mdx +6 -0
- package/docs/content/deployment.mdx +2 -0
- package/docs/content/doctor.mdx +5 -3
- package/docs/content/extensions.mdx +26 -0
- package/docs/content/external-agents-catalog.mdx +533 -0
- package/docs/content/external-agents.mdx +20 -514
- package/docs/content/faq.mdx +2 -2
- package/docs/content/file-uploads.mdx +44 -0
- package/docs/content/frames.mdx +2 -2
- package/docs/content/generative-ui.mdx +8 -0
- package/docs/content/getting-started.mdx +45 -17
- package/docs/content/human-approval.mdx +9 -0
- package/docs/content/integrations.mdx +4 -3
- package/docs/content/internationalization.mdx +4 -11
- package/docs/content/key-concepts.mdx +1 -1
- package/docs/content/local-file-mode.mdx +5 -0
- package/docs/content/mcp-apps.mdx +2 -1
- package/docs/content/mcp-clients.mdx +32 -1
- package/docs/content/mcp-protocol.mdx +4 -3
- package/docs/content/messaging-internals.mdx +328 -0
- package/docs/content/messaging-recipes.mdx +194 -0
- package/docs/content/messaging.mdx +9 -307
- package/docs/content/multi-app-workspace.mdx +1 -1
- package/docs/content/multi-tenancy.mdx +1 -0
- package/docs/content/native-chat-ui.mdx +8 -0
- package/docs/content/notifications.mdx +18 -20
- package/docs/content/observability.mdx +1 -0
- package/docs/content/onboarding.mdx +20 -6
- package/docs/content/organizations-teams-permissions.mdx +99 -124
- package/docs/content/package-lifecycle.mdx +19 -7
- package/docs/content/progress.mdx +11 -0
- package/docs/content/real-time-collaboration.mdx +44 -3
- package/docs/content/recurring-jobs.mdx +14 -1
- package/docs/content/security.mdx +5 -2
- package/docs/content/server.mdx +2 -1
- package/docs/content/sharing.mdx +22 -3
- package/docs/content/skills-guide.mdx +62 -19
- package/docs/content/syncing-template-changes.mdx +9 -0
- package/docs/content/template-analytics-connectors.mdx +75 -0
- package/docs/content/template-analytics-dashboards.mdx +106 -0
- package/docs/content/template-analytics-developers.mdx +287 -0
- package/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
- package/docs/content/template-analytics.mdx +21 -263
- package/docs/content/template-assets-developers.mdx +456 -0
- package/docs/content/template-assets-generation.mdx +147 -0
- package/docs/content/template-assets-integrations.mdx +319 -0
- package/docs/content/template-assets-presets.mdx +185 -0
- package/docs/content/template-assets.mdx +12 -562
- package/docs/content/template-brain-agent.mdx +103 -0
- package/docs/content/template-brain-developers.mdx +379 -0
- package/docs/content/template-brain-knowledge.mdx +50 -0
- package/docs/content/template-brain-sources.mdx +163 -0
- package/docs/content/template-brain.mdx +30 -390
- package/docs/content/template-calendar-agent.mdx +133 -0
- package/docs/content/template-calendar-booking-links.mdx +73 -0
- package/docs/content/template-calendar-developers.mdx +366 -0
- package/docs/content/template-calendar-scheduling.mdx +128 -0
- package/docs/content/template-calendar.mdx +13 -260
- package/docs/content/template-chat-developers.mdx +88 -0
- package/docs/content/template-chat-first-edits.mdx +145 -0
- package/docs/content/template-chat.mdx +12 -77
- package/docs/content/template-clips-ai-and-editing.mdx +114 -0
- package/docs/content/template-clips-capture-everywhere.mdx +120 -0
- package/docs/content/template-clips-developers.mdx +373 -0
- package/docs/content/template-clips-sharing-and-teams.mdx +182 -0
- package/docs/content/template-clips.mdx +19 -508
- package/docs/content/template-content-databases.mdx +406 -0
- package/docs/content/template-content-developers.mdx +364 -0
- package/docs/content/template-content-editing.mdx +60 -0
- package/docs/content/template-content-sync.mdx +149 -0
- package/docs/content/template-content.mdx +21 -561
- package/docs/content/template-design-brand-and-figma.mdx +150 -0
- package/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
- package/docs/content/template-design-developers.mdx +358 -0
- package/docs/content/template-design-quality-and-components.mdx +95 -0
- package/docs/content/template-design.mdx +20 -344
- package/docs/content/template-dispatch-developers.mdx +121 -0
- package/docs/content/template-dispatch-messaging-routing.mdx +114 -0
- package/docs/content/template-dispatch-operations.mdx +160 -0
- package/docs/content/template-dispatch-vault-integrations.mdx +316 -0
- package/docs/content/template-dispatch.mdx +24 -283
- package/docs/content/template-forms-building-publishing.mdx +135 -0
- package/docs/content/template-forms-developers.mdx +195 -0
- package/docs/content/template-forms-responses.mdx +120 -0
- package/docs/content/template-forms.mdx +21 -230
- package/docs/content/template-mail-agent.mdx +114 -0
- package/docs/content/template-mail-developers.mdx +356 -0
- package/docs/content/template-mail-drafts-and-queue.mdx +103 -0
- package/docs/content/template-mail-inbox.mdx +118 -0
- package/docs/content/template-mail.mdx +23 -274
- package/docs/content/template-plan-automations.mdx +213 -0
- package/docs/content/template-plan-developers.mdx +703 -0
- package/docs/content/template-plan-local-and-desktop.mdx +236 -0
- package/docs/content/template-plan-review-workflow.mdx +180 -0
- package/docs/content/template-plan.mdx +60 -910
- package/docs/content/template-slides-agent.mdx +102 -0
- package/docs/content/template-slides-design-and-media.mdx +94 -0
- package/docs/content/template-slides-developers.mdx +488 -0
- package/docs/content/template-slides-editing.mdx +56 -0
- package/docs/content/template-slides.mdx +20 -362
- package/docs/content/toolkit-capability-packages.mdx +38 -13
- package/docs/content/toolkit-context-knowledge.mdx +49 -9
- package/docs/content/toolkit-editors-canvases.mdx +72 -10
- package/docs/content/toolkit-resources.mdx +16 -0
- package/docs/content/toolkit-settings.mdx +3 -3
- package/docs/content/toolkit-sharing.mdx +5 -7
- package/docs/content/using-your-agent.mdx +25 -2
- package/docs/content/voice-input.mdx +11 -7
- package/docs/content/what-is-agent-native.mdx +1 -0
- package/docs/content/workspace-connections.mdx +21 -11
- package/docs/content/workspace-management.mdx +1 -1
- package/package.json +2 -4
- package/src/a2a/client.ts +4 -2
- package/src/agent/action-warnings.ts +103 -0
- package/src/agent/durable-background.ts +42 -5
- package/src/agent/engine/ai-sdk-engine.ts +58 -6
- package/src/agent/engine/anthropic-engine.ts +51 -8
- package/src/agent/engine/builder-engine.ts +56 -18
- package/src/agent/engine/continuation-dispatch-retry.ts +10 -9
- package/src/agent/engine/credential-errors.ts +11 -0
- package/src/agent/engine/error-detail.ts +39 -0
- package/src/agent/engine/prompt-cache.ts +44 -0
- package/src/agent/engine/registry.ts +22 -30
- package/src/agent/engine/tool-call-journal-seed.ts +2 -1
- package/src/agent/engine/translate-anthropic.ts +99 -0
- package/src/agent/loop-settings.ts +94 -7
- package/src/agent/production-agent.ts +667 -157
- package/src/agent/run-loop-with-resume.ts +27 -1
- package/src/agent/run-manager.ts +229 -39
- package/src/agent/run-store.ts +397 -64
- package/src/agent/thread-data-builder.ts +5 -1
- package/src/agent/types.ts +23 -6
- package/src/application-state/script-helpers.ts +5 -2
- package/src/cli/agents.ts +69 -1
- package/src/cli/app-skill.ts +1 -1
- package/src/cli/code-agent-executor.ts +7 -3
- package/src/cli/design-connect.ts +82 -8
- package/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
- package/src/cli/templates-meta.ts +12 -0
- package/src/client/AssistantChat.tsx +623 -607
- package/src/client/agent-chat-adapter.ts +176 -29
- package/src/client/chat/message-components.tsx +13 -0
- package/src/client/embed-auth.ts +3 -1
- package/src/client/integrations/IntegrationCard.tsx +41 -24
- package/src/client/integrations/IntegrationsPanel.tsx +37 -21
- package/src/client/integrations/webhook-url.ts +29 -0
- package/src/client/org/OrgSwitcher.tsx +41 -27
- package/src/client/org/RequireActiveOrg.tsx +7 -0
- package/src/client/org/TeamPage.tsx +144 -14
- package/src/client/org/hooks.ts +27 -0
- package/src/client/org/index.ts +2 -0
- package/src/client/require-session.tsx +40 -29
- package/src/client/session-replay.ts +1 -1
- package/src/client/settings/DemoModeSection.tsx +0 -5
- package/src/client/settings/SecretsSection.tsx +47 -42
- package/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
- package/src/client/sse-event-processor.ts +83 -8
- package/src/client/use-action.ts +22 -13
- package/src/client/use-agent-engine-configured.ts +36 -4
- package/src/client/use-db-sync.ts +21 -1
- package/src/credentials/index.ts +124 -2
- package/src/deploy/build.ts +93 -30
- package/src/deploy/workspace-deploy.ts +21 -16
- package/src/guards/no-localhost-fallback.ts +76 -14
- package/src/integrations/google-docs-poller.ts +19 -12
- package/src/integrations/webhook-handler.ts +56 -33
- package/src/jobs/scheduler.ts +57 -23
- package/src/localization/default-messages.ts +23 -1
- package/src/observability/evals.ts +7 -8
- package/src/observability/traces.ts +2 -0
- package/src/org/accept-pending.ts +2 -2
- package/src/org/active-org.ts +73 -0
- package/src/org/auto-join-domain.ts +7 -2
- package/src/org/context.ts +169 -66
- package/src/org/handlers.ts +148 -10
- package/src/org/plugin.ts +8 -1
- package/src/org/types.ts +6 -1
- package/src/provider-api/index.ts +6 -1
- package/src/resources/handlers.ts +2 -6
- package/src/resources/script-helpers.ts +2 -1
- package/src/scripts/chat/search-chats.ts +5 -2
- package/src/scripts/describe-workspace-apps.ts +59 -0
- package/src/scripts/resources/delete-memory.ts +5 -2
- package/src/scripts/resources/delete.ts +5 -2
- package/src/scripts/resources/effective.ts +5 -2
- package/src/scripts/resources/list.ts +5 -2
- package/src/scripts/resources/read.ts +5 -2
- package/src/scripts/resources/save-memory.ts +5 -2
- package/src/scripts/resources/write.ts +5 -2
- package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +11 -31
- package/src/server/agent-capabilities.ts +147 -0
- package/src/server/agent-chat/framework-prompts.ts +11 -13
- package/src/server/agent-chat/prompt-resources.ts +183 -57
- package/src/server/agent-chat/script-entries.ts +20 -7
- package/src/server/agent-chat-plugin.ts +27 -0
- package/src/server/auth.ts +38 -32
- package/src/server/core-routes-plugin.ts +229 -179
- package/src/server/credential-provider.ts +196 -44
- package/src/server/embed-session.ts +10 -0
- package/src/server/framework-request-handler.ts +43 -0
- package/src/server/google-auth-plugin.ts +13 -450
- package/src/server/index.ts +4 -1
- package/src/server/onboarding-html.ts +20 -56
- package/src/server/open-route.ts +6 -1
- package/src/server/poll.ts +1 -1
- package/src/server/prompts/framework-core-compact.ts +5 -5
- package/src/server/prompts/framework-core.ts +7 -9
- package/src/server/prompts/shared-rules.ts +20 -9
- package/src/server/request-context.ts +58 -2
- package/src/server/scoped-key-storage.ts +1 -1
- package/src/settings/org-settings.ts +9 -0
- package/src/settings/store.ts +29 -0
- package/src/shared/index.ts +13 -0
- package/src/shared/sign-in-journey.ts +331 -0
- package/src/styles/agent-native.css +8 -0
- package/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
- package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
- package/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
- package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/src/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
- package/src/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
- package/src/templates/chat/AGENTS.md +8 -0
- package/src/templates/chat/app/entry.client.tsx +3 -0
- package/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
- package/src/templates/default/.agents/skills/security/SKILL.md +2 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/src/templates/default/AGENTS.md +68 -195
- package/src/templates/default/app/entry.client.tsx +3 -0
- package/src/templates/default/app/i18n/ar-SA.ts +8 -0
- package/src/templates/default/app/i18n/de-DE.ts +8 -0
- package/src/templates/default/app/i18n/en-US.ts +8 -0
- package/src/templates/default/app/i18n/es-ES.ts +8 -0
- package/src/templates/default/app/i18n/fr-FR.ts +8 -0
- package/src/templates/default/app/i18n/hi-IN.ts +8 -0
- package/src/templates/default/app/i18n/ja-JP.ts +8 -0
- package/src/templates/default/app/i18n/ko-KR.ts +8 -0
- package/src/templates/default/app/i18n/pt-BR.ts +8 -0
- package/src/templates/default/app/i18n/zh-CN.ts +8 -0
- package/src/templates/default/app/i18n/zh-TW.ts +8 -0
- package/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
- package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
- package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
- package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
- package/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
- package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
- package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
- package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
- package/src/templates/workspace-core/AGENTS.md +62 -124
- package/src/templates/workspace-root/AGENTS.md +6 -1
- package/src/triggers/dispatcher.ts +28 -17
- package/src/vite/client.ts +20 -8
- package/corpus/core/src/client/components/MissingKeyCard.tsx +0 -61
- package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +0 -495
- package/corpus/core/src/client/settings/BackgroundAgentSection.tsx +0 -193
- package/corpus/core/src/client/settings/BrowserSection.tsx +0 -110
- package/corpus/templates/analytics/app/components/InlineMetric.tsx +0 -31
- package/corpus/templates/analytics/app/components/auth/LoginScreen.tsx +0 -4
- package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +0 -128
- package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +0 -264
- package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +0 -84
- package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +0 -92
- package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +0 -154
- package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +0 -49
- package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +0 -120
- package/corpus/templates/analytics/server/handlers/dashboard-views.ts +0 -85
- package/corpus/templates/analytics/server/handlers/user-prefs.ts +0 -58
- package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId]/[viewId].delete.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].post.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/theme.get.ts +0 -17
- package/corpus/templates/analytics/server/routes/api/theme.post.ts +0 -15
- package/corpus/templates/analytics/server/routes/api/user-prefs/[key].delete.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/user-prefs/[key].get.ts +0 -1
- package/corpus/templates/analytics/server/routes/api/user-prefs/[key].put.ts +0 -1
- package/corpus/templates/assets/app/components/library/CreateLibraryDialog.tsx +0 -156
- package/corpus/templates/assets/app/components/library/LibraryCard.tsx +0 -213
- package/corpus/templates/calendar/app/components/calendar/GoogleSyncButton.tsx +0 -49
- package/corpus/templates/calendar/server/routes/api/events/[id].delete.ts +0 -1
- package/corpus/templates/calendar/server/routes/api/events/[id].get.ts +0 -1
- package/corpus/templates/calendar/server/routes/api/events/[id].put.ts +0 -1
- package/corpus/templates/content/app/components/layout/AppLayout.tsx +0 -9
- package/corpus/templates/content/server/routes/api/comments/[id].delete.ts +0 -69
- package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +0 -109
- package/corpus/templates/content/server/routes/api/documents/[id]/versions.get.ts +0 -53
- package/corpus/templates/design/app/components/design/code-workbench/ActivityBar.tsx +0 -85
- package/corpus/templates/design/app/components/design-system/DesignSystemCard.tsx +0 -129
- package/corpus/templates/forms/app/components/layout/AppLayout.tsx +0 -9
- package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +0 -213
- package/corpus/templates/mail/server/handlers/aliases.ts +0 -98
- package/corpus/templates/mail/server/routes/api/aliases/[id].delete.ts +0 -1
- package/corpus/templates/mail/server/routes/api/aliases/[id].patch.ts +0 -1
- package/corpus/templates/mail/server/routes/api/aliases/index.get.ts +0 -1
- package/corpus/templates/mail/server/routes/api/aliases/index.post.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/[id].delete.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/[id].patch.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/index.get.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/index.post.ts +0 -1
- package/corpus/templates/mail/server/routes/api/automations/settings.get.ts +0 -22
- package/corpus/templates/mail/server/routes/api/automations/settings.put.ts +0 -25
- package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].delete.ts +0 -1
- package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].patch.ts +0 -1
- package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.get.ts +0 -1
- package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.post.ts +0 -1
- package/corpus/templates/mail/server/routes/api/settings.get.ts +0 -1
- package/corpus/templates/mail/server/routes/api/settings.patch.ts +0 -1
- package/corpus/templates/slides/app/components/deck/BuilderLogo.tsx +0 -22
- package/corpus/templates/slides/app/components/design-system/DesignSystemPreview.tsx +0 -176
- package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +0 -244
- package/corpus/templates/slides/app/components/editor/ImportButton.tsx +0 -84
- package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +0 -43
- package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +0 -50
- package/corpus/templates/slides/server/routes/api/decks/[id].delete.ts +0 -1
- package/corpus/templates/slides/server/routes/api/decks/[id].get.ts +0 -1
- package/corpus/templates/slides/server/routes/api/decks/[id].put.ts +0 -1
- package/corpus/templates/slides/server/routes/api/decks/index.get.ts +0 -1
- package/corpus/templates/slides/server/routes/api/decks/index.post.ts +0 -1
- package/dist/client/components/MissingKeyCard.d.ts +0 -7
- package/dist/client/components/MissingKeyCard.d.ts.map +0 -1
- package/dist/client/components/MissingKeyCard.js +0 -32
- package/dist/client/components/MissingKeyCard.js.map +0 -1
- package/dist/client/extensions/agent-native-extension-runtime.d.ts +0 -69
- package/dist/client/extensions/agent-native-extension-runtime.d.ts.map +0 -1
- package/dist/client/extensions/agent-native-extension-runtime.js +0 -348
- package/dist/client/extensions/agent-native-extension-runtime.js.map +0 -1
- package/dist/client/settings/BackgroundAgentSection.d.ts +0 -2
- package/dist/client/settings/BackgroundAgentSection.d.ts.map +0 -1
- package/dist/client/settings/BackgroundAgentSection.js +0 -68
- package/dist/client/settings/BackgroundAgentSection.js.map +0 -1
- package/dist/client/settings/BrowserSection.d.ts +0 -2
- package/dist/client/settings/BrowserSection.d.ts.map +0 -1
- package/dist/client/settings/BrowserSection.js +0 -40
- package/dist/client/settings/BrowserSection.js.map +0 -1
- package/dist/templates/chat/.react-router/types/+server-build.d.ts +0 -18
- package/dist/templates/chat/.react-router/types/app/+types/root.ts +0 -68
- package/src/client/components/MissingKeyCard.tsx +0 -61
- package/src/client/extensions/agent-native-extension-runtime.ts +0 -495
- package/src/client/settings/BackgroundAgentSection.tsx +0 -193
- package/src/client/settings/BrowserSection.tsx +0 -110
- package/src/templates/chat/.react-router/types/+server-build.d.ts +0 -18
- package/src/templates/chat/.react-router/types/app/+types/root.ts +0 -68
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"design-connect.js","sourceRoot":"","sources":["../../src/cli/design-connect.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport crypto from \"node:crypto\";\nimport fsSync from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport type { FileHandle } from \"node:fs/promises\";\nimport http, {\n type IncomingMessage,\n type Server,\n type ServerResponse,\n} from \"node:http\";\nimport https from \"node:https\";\nimport path from \"node:path\";\n\nconst DEFAULT_BRIDGE_PORT = 7331;\nconst ROUTE_MANIFEST_FILE = path.join(\".agent-native\", \"design-routes.json\");\nconst DEFAULT_DEV_SERVER_CANDIDATES = [\n \"http://127.0.0.1:5173\",\n \"http://localhost:5173\",\n \"http://127.0.0.1:3000\",\n \"http://localhost:3000\",\n \"http://127.0.0.1:8080\",\n \"http://localhost:8080\",\n];\n\nconst BRIDGE_OPERATIONS = [\n \"select\",\n \"resolveNodeToFile\",\n \"readFile\",\n \"applyEdit\",\n \"writeFile\",\n \"captureSnapshot\",\n \"captureState\",\n \"listFiles\",\n] as const;\n\ntype BridgeOperation = (typeof BRIDGE_OPERATIONS)[number];\n\nconst SERVER_REGISTRATION_BRIDGE_OPERATIONS = new Set<BridgeOperation>([\n \"select\",\n \"resolveNodeToFile\",\n \"readFile\",\n \"applyEdit\",\n \"writeFile\",\n \"captureSnapshot\",\n \"captureState\",\n]);\n\n/** Additive manifest capability flags advertised alongside the operation list. */\nconst MANIFEST_CAPABILITIES = {\n listFiles: true,\n readTextFiles: true,\n writeTextFiles: true,\n} as const;\n\nexport interface DesignConnectArgs {\n url?: string;\n port: number;\n root: string;\n routeManifest?: string;\n /** Optional deployed design app URL used to self-register the bridge on\n * startup. When set (or when AGENT_NATIVE_URL / DESIGN_APP_URL env vars\n * are present) the CLI POSTs to `/_agent-native/actions/connect-localhost`\n * with the real bridge token so the server can store it for grant minting. */\n appUrl?: string;\n /** Server-minted bridge token to adopt instead of minting one, so the bridge\n * matches the token already stored on the user's connection row (no\n * self-registration). Also read from AGENT_NATIVE_BRIDGE_TOKEN. */\n bridgeToken?: string;\n /** Read-only token used by Design browser previews. This is deliberately\n * distinct from `bridgeToken`, which unlocks local filesystem reads/writes.\n * When omitted it is derived one-way from bridgeToken for compatibility\n * with existing /visual-edit launch commands. */\n previewToken?: string;\n json: boolean;\n once: boolean;\n dryRun: boolean;\n daemon: boolean;\n help: boolean;\n}\n\nexport interface DesignConnectRoute {\n id: string;\n path: string;\n title: string;\n sourceFile?: string;\n sourceKind: \"react-router\" | \"html\" | \"manual\";\n screenshotUrl?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface DesignConnectManifest {\n version: 1;\n source: \"agent-native-design-connect\";\n sourceType: \"localhost\";\n localOnly: true;\n devServerUrl: string;\n bridgeUrl: string;\n rootPath: string;\n routeManifestPath: string;\n routeManifestCreated: boolean;\n routes: DesignConnectRoute[];\n routeCount: number;\n generatedAt: string;\n capabilities: Array<{\n operation: BridgeOperation;\n status: \"available\" | \"planned\" | \"disabled\";\n reason?: string;\n }>;\n /**\n * Additive high-level capability flags beyond the low-level operation list.\n * `connect-localhost` persists this so `list-design-source-capabilities` can\n * reflect readFile/writeFile/listFiles availability for localhost sources.\n */\n manifestCapabilities: typeof MANIFEST_CAPABILITIES;\n}\n\nexport interface DesignConnectBridge {\n server: Server;\n manifest: DesignConnectManifest;\n /** Per-rootPath bridge token. Kept in-process only; never serialised into\n * the manifest JSON so it is not exposed over the network via GET /manifest.\n * The server-side grant action reads it from the running bridge instance. */\n bridgeToken: string;\n /** Read-only token accepted by manifest, route, snapshot, proxy, and editor\n * bridge-registration endpoints. Safe to hand to the Design browser, but\n * never accepted by filesystem endpoints. */\n previewToken: string;\n /** Random id minted fresh each time this bridge process boots. Also\n * returned by `/health`, `/live-edit-bridge`, and the \"unknown bridge key\"\n * 409 from `/live-edit` — a client can compare it across those responses\n * to tell a restarted bridge process apart from a genuine registration\n * bug. See the `bridgeInstanceId` doc comment in startDesignConnectBridge. */\n bridgeInstanceId: string;\n}\n\nexport interface DesignConnectBridgeOptions {\n bridgeToken?: string;\n previewToken?: string;\n /** Extra exact browser origins allowed to make CORS requests to the bridge.\n * The production Design origin and loopback development origins are always\n * recognized; custom deployments should pass their app origin here. */\n allowedOrigins?: string[];\n}\n\nconst PREVIEW_TOKEN_DOMAIN = \"agent-native-design-preview-v1\\0\";\nconst PREVIEW_SESSION_COOKIE_NAME = \"agent-native-preview-token\";\n\n/**\n * Derive a read-only preview credential from the stronger filesystem token.\n * The one-way hash keeps old `--bridge-token` launch commands compatible while\n * ensuring a leaked preview credential cannot be promoted into write access.\n */\nexport function deriveDesignPreviewToken(bridgeToken: string): string {\n return crypto\n .createHash(\"sha256\")\n .update(PREVIEW_TOKEN_DOMAIN)\n .update(bridgeToken)\n .digest(\"hex\");\n}\n\nfunction stringFlagValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n if (!value || value.startsWith(\"-\")) {\n throw new Error(`${flag} requires a value`);\n }\n return value;\n}\n\nfunction normalizeSlash(value: string) {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction normalizeHttpUrl(value: string): string {\n const raw = value.trim();\n const withProtocol = /^[a-z]+:\\/\\//i.test(raw) ? raw : `http://${raw}`;\n const parsed = new URL(withProtocol);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"--url must be an http(s) URL\");\n }\n parsed.hash = \"\";\n return parsed.toString().replace(/\\/$/, \"\");\n}\n\nexport function parseDesignConnectArgs(argv: string[]): DesignConnectArgs {\n const args = argv[0] === \"connect\" ? argv.slice(1) : argv;\n const parsed: DesignConnectArgs = {\n port: DEFAULT_BRIDGE_PORT,\n root: process.cwd(),\n json: false,\n once: false,\n dryRun: false,\n daemon: false,\n help: false,\n };\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index]!;\n if (arg === \"help\" || arg === \"--help\" || arg === \"-h\") {\n parsed.help = true;\n } else if (arg === \"--url\") {\n parsed.url = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--url=\")) {\n parsed.url = arg.slice(\"--url=\".length);\n } else if (arg === \"--port\") {\n parsed.port = Number.parseInt(stringFlagValue(args, index, arg), 10);\n index += 1;\n } else if (arg.startsWith(\"--port=\")) {\n parsed.port = Number.parseInt(arg.slice(\"--port=\".length), 10);\n } else if (arg === \"--root\") {\n parsed.root = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--root=\")) {\n parsed.root = arg.slice(\"--root=\".length);\n } else if (arg === \"--route-manifest\") {\n parsed.routeManifest = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--route-manifest=\")) {\n parsed.routeManifest = arg.slice(\"--route-manifest=\".length);\n } else if (arg === \"--app-url\") {\n parsed.appUrl = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--app-url=\")) {\n parsed.appUrl = arg.slice(\"--app-url=\".length);\n } else if (arg === \"--bridge-token\") {\n parsed.bridgeToken = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--bridge-token=\")) {\n parsed.bridgeToken = arg.slice(\"--bridge-token=\".length);\n } else if (arg === \"--preview-token\") {\n parsed.previewToken = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--preview-token=\")) {\n parsed.previewToken = arg.slice(\"--preview-token=\".length);\n } else if (arg === \"--json\") {\n parsed.json = true;\n parsed.once = true;\n } else if (arg === \"--once\") {\n parsed.once = true;\n } else if (arg === \"--dry-run\") {\n parsed.dryRun = true;\n parsed.once = true;\n } else if (arg === \"--daemon\") {\n parsed.daemon = true;\n } else if (arg.startsWith(\"-\")) {\n throw new Error(`Unknown option: ${arg}`);\n } else {\n throw new Error(`Unexpected argument: ${arg}`);\n }\n }\n\n if (!Number.isInteger(parsed.port) || parsed.port <= 0) {\n throw new Error(\"--port must be a positive integer\");\n }\n if (parsed.daemon && (parsed.json || parsed.once || parsed.dryRun)) {\n throw new Error(\n \"--daemon cannot be combined with --json, --once, or --dry-run\",\n );\n }\n parsed.root = path.resolve(parsed.root);\n parsed.url = parsed.url ? normalizeHttpUrl(parsed.url) : undefined;\n return parsed;\n}\n\nfunction routeId(routePath: string): string {\n const normalized = routePath.trim() || \"/\";\n const slug = normalized\n .replace(/^\\/+/, \"\")\n .replace(/\\*/g, \"w\")\n .replace(/:/g, \"p\")\n .replace(/[[\\]]/g, \"\")\n .replace(/[^a-zA-Z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .toLowerCase();\n // Slugs are intentionally readable but necessarily lossy: `/foo/bar`,\n // `/foo-bar`, and `/foo_bar` all collapse to the same text, while `/` and\n // `/*` can collide with literal `/root` and `/wildcard` paths. Suffix every\n // route with a stable hash of its normalized path so URL/query states and\n // router patterns can never silently replace one another in the manifest.\n const readable =\n normalized === \"/\"\n ? \"root\"\n : /^\\/\\*+$/.test(normalized) || !slug\n ? \"wildcard\"\n : slug;\n return `route-${readable}-${stableRoutePathHash(normalized)}`;\n}\n\nfunction stableRoutePathHash(value: string): string {\n let hash = 0xcbf29ce484222325n;\n for (const character of value) {\n hash ^= BigInt(character.codePointAt(0)!);\n hash = BigInt.asUintN(64, hash * 0x100000001b3n);\n }\n return hash.toString(36);\n}\n\nfunction titleFromRoutePath(routePath: string): string {\n if (routePath === \"/\") return \"Home\";\n if (routePath === \"/*\" || routePath === \"*\") return \"Wildcard\";\n return (\n routePath\n .replace(/^\\/+/, \"\")\n .replace(/[:$]/g, \"\")\n .replace(/[-_/]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/\\b\\w/g, (char) => char.toUpperCase()) || \"Screen\"\n );\n}\n\nfunction walkFiles(dir: string, files: string[] = []): string[] {\n if (!fsSync.existsSync(dir)) return files;\n for (const entry of fsSync.readdirSync(dir, { withFileTypes: true })) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n const absolute = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walkFiles(absolute, files);\n } else {\n files.push(absolute);\n }\n }\n return files;\n}\n\nfunction routePathFromReactRouterFile(filePath: string, routesDir: string) {\n const withoutExt = normalizeSlash(path.relative(routesDir, filePath)).replace(\n /\\.[cm]?[jt]sx?$/,\n \"\",\n );\n const parts: string[] = [];\n for (const segment of withoutExt.split(\"/\")) {\n for (const token of segment.split(\".\")) {\n if (!token || token === \"route\" || token === \"index\") continue;\n if (token === \"_index\") continue;\n if (token.startsWith(\"_\")) continue;\n const pathToken = token.endsWith(\"_\") ? token.slice(0, -1) : token;\n if (pathToken === \"$\") {\n parts.push(\"*\");\n } else if (pathToken.startsWith(\"$\")) {\n const param = pathToken.slice(1) || \"param\";\n parts.push(`:${param}`);\n } else {\n parts.push(pathToken);\n }\n }\n }\n return `/${parts.join(\"/\")}`.replace(/\\/+/g, \"/\");\n}\n\nexport function discoverDesignRoutes(root: string): DesignConnectRoute[] {\n const absoluteRoot = path.resolve(root);\n const routeDirs = [\n path.join(absoluteRoot, \"app\", \"routes\"),\n path.join(absoluteRoot, \"src\", \"routes\"),\n path.join(absoluteRoot, \"pages\"),\n ].filter((dir) => fsSync.existsSync(dir));\n const routes = new Map<string, DesignConnectRoute>();\n\n for (const routeDir of routeDirs) {\n for (const file of walkFiles(routeDir)) {\n if (!/\\.[cm]?[jt]sx?$/.test(file)) continue;\n if (/\\.test\\.|\\.spec\\./.test(file)) continue;\n const pathName = routePathFromReactRouterFile(file, routeDir);\n routes.set(pathName, {\n id: routeId(pathName),\n path: pathName,\n title: titleFromRoutePath(pathName),\n sourceFile: normalizeSlash(path.relative(absoluteRoot, file)),\n sourceKind: \"react-router\",\n });\n }\n }\n\n if (routes.size === 0) {\n for (const dir of [absoluteRoot, path.join(absoluteRoot, \"public\")]) {\n for (const file of walkFiles(dir)) {\n if (!file.endsWith(\".html\")) continue;\n const rel = normalizeSlash(path.relative(dir, file));\n const pathName =\n rel === \"index.html\" ? \"/\" : `/${rel.replace(/\\.html$/, \"\")}`;\n routes.set(pathName, {\n id: routeId(pathName),\n path: pathName,\n title: titleFromRoutePath(pathName),\n sourceFile: normalizeSlash(path.relative(absoluteRoot, file)),\n sourceKind: \"html\",\n });\n }\n }\n }\n\n return [...routes.values()].sort((a, b) => {\n if (a.path === \"/\") return -1;\n if (b.path === \"/\") return 1;\n return a.path.localeCompare(b.path);\n });\n}\n\nasync function probeDevServer(url: string): Promise<boolean> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 800);\n try {\n const response = await fetch(url, {\n method: \"GET\",\n signal: controller.signal,\n });\n return response.status < 500;\n } catch {\n return false;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nasync function waitForBridgeHealth(\n bridgeUrl: string,\n timeoutMs = 5_000,\n): Promise<boolean> {\n const healthUrl = new URL(\"/health\", bridgeUrl).toString();\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 400);\n try {\n const response = await fetch(healthUrl, {\n method: \"GET\",\n signal: controller.signal,\n });\n if (response.ok) return true;\n } catch {\n // Keep polling until the detached process finishes binding the port.\n } finally {\n clearTimeout(timeout);\n }\n await new Promise((resolve) => setTimeout(resolve, 150));\n }\n return false;\n}\n\nfunction isDesignConnectManifest(\n value: unknown,\n): value is DesignConnectManifest {\n if (!value || typeof value !== \"object\") return false;\n const manifest = value as Partial<DesignConnectManifest>;\n return (\n manifest.version === 1 &&\n manifest.source === \"agent-native-design-connect\" &&\n manifest.sourceType === \"localhost\" &&\n manifest.localOnly === true &&\n typeof manifest.devServerUrl === \"string\" &&\n typeof manifest.bridgeUrl === \"string\" &&\n typeof manifest.rootPath === \"string\"\n );\n}\n\nasync function fetchRunningBridgeManifest(\n bridgeUrl: string,\n previewToken?: string,\n): Promise<DesignConnectManifest | null> {\n const manifestUrl = new URL(\"/manifest.json\", bridgeUrl);\n if (previewToken) {\n manifestUrl.searchParams.set(\"previewToken\", previewToken);\n }\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 800);\n try {\n const response = await fetch(manifestUrl, {\n method: \"GET\",\n signal: controller.signal,\n });\n if (!response.ok) return null;\n const body = (await response.json()) as unknown;\n return isDesignConnectManifest(body) ? body : null;\n } catch {\n return null;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport function designConnectManifestsTargetSameApp(\n running: Pick<DesignConnectManifest, \"devServerUrl\" | \"rootPath\">,\n requested: Pick<DesignConnectManifest, \"devServerUrl\" | \"rootPath\">,\n): boolean {\n let runningUrl = running.devServerUrl;\n let requestedUrl = requested.devServerUrl;\n try {\n runningUrl = normalizeHttpUrl(runningUrl);\n requestedUrl = normalizeHttpUrl(requestedUrl);\n } catch {\n // Fall through to direct string comparison for malformed legacy manifests.\n }\n return (\n runningUrl === requestedUrl &&\n path.resolve(running.rootPath) === path.resolve(requested.rootPath)\n );\n}\n\n/** Non-sensitive stable identifier used by /health so daemon reruns can detect\n * an already-running bridge for the same app without exposing its root path or\n * route manifest. */\nexport function designConnectAppFingerprint(\n manifest: Pick<DesignConnectManifest, \"devServerUrl\" | \"rootPath\">,\n): string {\n let devServerUrl = manifest.devServerUrl;\n try {\n devServerUrl = normalizeHttpUrl(devServerUrl);\n } catch {\n // Hash the original string for malformed legacy manifests.\n }\n return crypto\n .createHash(\"sha256\")\n .update(`${devServerUrl}\\n${path.resolve(manifest.rootPath)}`)\n .digest(\"base64url\")\n .slice(0, 24);\n}\n\nasync function fetchRunningBridgeFingerprint(\n bridgeUrl: string,\n): Promise<string | null> {\n const healthUrl = new URL(\"/health\", bridgeUrl).toString();\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 800);\n try {\n const response = await fetch(healthUrl, {\n method: \"GET\",\n signal: controller.signal,\n });\n if (!response.ok) return null;\n const body = (await response.json()) as Record<string, unknown>;\n return typeof body[\"appFingerprint\"] === \"string\"\n ? body[\"appFingerprint\"]\n : null;\n } catch {\n return null;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nasync function resolveDevServerUrl(url?: string): Promise<string> {\n if (url) return normalizeHttpUrl(url);\n for (const candidate of DEFAULT_DEV_SERVER_CANDIDATES) {\n if (await probeDevServer(candidate)) return candidate;\n }\n return DEFAULT_DEV_SERVER_CANDIDATES[0]!;\n}\n\nasync function ensureRouteManifest(options: {\n root: string;\n routeManifestPath: string;\n routes: DesignConnectRoute[];\n devServerUrl: string;\n dryRun: boolean;\n}): Promise<{ path: string; created: boolean; routes: DesignConnectRoute[] }> {\n const manifestPath = path.isAbsolute(options.routeManifestPath)\n ? options.routeManifestPath\n : path.join(options.root, options.routeManifestPath);\n if (fsSync.existsSync(manifestPath)) {\n try {\n const parsed = JSON.parse(\n await fs.readFile(manifestPath, \"utf8\"),\n ) as Record<string, unknown>;\n const savedRoutes = Array.isArray(parsed.routes)\n ? parsed.routes.flatMap((value): DesignConnectRoute[] => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return [];\n }\n const route = value as Record<string, unknown>;\n if (typeof route.path !== \"string\" || !route.path.trim()) return [];\n const sourceKind =\n route.sourceKind === \"react-router\" ||\n route.sourceKind === \"html\" ||\n route.sourceKind === \"manual\"\n ? route.sourceKind\n : \"manual\";\n return [\n {\n id:\n typeof route.id === \"string\" && route.id.trim()\n ? route.id\n : routeId(route.path),\n path: route.path,\n title:\n typeof route.title === \"string\" && route.title.trim()\n ? route.title\n : titleFromRoutePath(route.path),\n sourceFile:\n typeof route.sourceFile === \"string\"\n ? route.sourceFile\n : undefined,\n sourceKind,\n screenshotUrl:\n typeof route.screenshotUrl === \"string\"\n ? route.screenshotUrl\n : undefined,\n metadata:\n route.metadata &&\n typeof route.metadata === \"object\" &&\n !Array.isArray(route.metadata)\n ? (route.metadata as Record<string, unknown>)\n : undefined,\n },\n ];\n })\n : [];\n if (savedRoutes.length > 0) {\n const savedPaths = new Set(savedRoutes.map((route) => route.path));\n return {\n path: manifestPath,\n created: false,\n // Keep manual/custom route order and metadata while still surfacing\n // newly discovered routes on subsequent bridge starts.\n routes: [\n ...savedRoutes,\n ...options.routes.filter((route) => !savedPaths.has(route.path)),\n ],\n };\n }\n } catch {\n // Never overwrite a malformed/custom file. Route discovery remains a\n // safe runtime fallback and the user can repair the manifest in place.\n }\n return { path: manifestPath, created: false, routes: options.routes };\n }\n if (!options.dryRun) {\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(\n manifestPath,\n `${JSON.stringify(\n {\n version: 1,\n sourceType: \"localhost\",\n devServerUrl: options.devServerUrl,\n rootPath: options.root,\n routes: options.routes,\n generatedAt: new Date().toISOString(),\n },\n null,\n 2,\n )}\\n`,\n \"utf8\",\n );\n }\n return {\n path: manifestPath,\n created: !options.dryRun,\n routes: options.routes,\n };\n}\n\nexport async function prepareDesignConnectManifest(\n options: Partial<DesignConnectArgs> & { root?: string } = {},\n): Promise<DesignConnectManifest> {\n const root = path.resolve(options.root ?? process.cwd());\n const port = options.port ?? DEFAULT_BRIDGE_PORT;\n const devServerUrl = await resolveDevServerUrl(options.url);\n const bridgeUrl = `http://127.0.0.1:${port}`;\n const discoveredRoutes = discoverDesignRoutes(root);\n const routeManifest = await ensureRouteManifest({\n root,\n routeManifestPath: options.routeManifest ?? ROUTE_MANIFEST_FILE,\n routes: discoveredRoutes,\n devServerUrl,\n dryRun: Boolean(options.dryRun),\n });\n const generatedAt = new Date().toISOString();\n const routes = routeManifest.routes;\n\n return {\n version: 1,\n source: \"agent-native-design-connect\",\n sourceType: \"localhost\",\n localOnly: true,\n devServerUrl,\n bridgeUrl,\n rootPath: root,\n routeManifestPath: routeManifest.path,\n routeManifestCreated: routeManifest.created,\n routes,\n routeCount: routes.length,\n generatedAt,\n manifestCapabilities: MANIFEST_CAPABILITIES,\n capabilities: BRIDGE_OPERATIONS.map((operation) => ({\n operation,\n status: \"available\" as const,\n reason:\n operation === \"resolveNodeToFile\"\n ? // resolveNodeToFile maps a runtime DOM node id (from the editor's\n // 'select' payload) to { file, line, component } provenance.\n // React development builds expose jsxDEV call sites through the\n // Fiber debug stack; other runtimes/builds can emit explicit DOM\n // provenance attributes — see the help text below.\n \"React development builds resolve jsxDEV call sites automatically; other runtimes can emit data-source-file / data-source-line / data-component-name attributes.\"\n : undefined,\n })),\n };\n}\n\nconst BRIDGE_CORS_HEADERS = Symbol(\"agent-native-design-bridge-cors\");\n\ntype CorsAwareResponse = ServerResponse & {\n [BRIDGE_CORS_HEADERS]?: Record<string, string>;\n};\n\nfunction isLoopbackOrigin(parsed: URL): boolean {\n const hostname = parsed.hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n return (\n hostname === \"localhost\" ||\n hostname === \"::1\" ||\n /^127(?:\\.\\d{1,3}){3}$/.test(hostname)\n );\n}\n\nfunction isApprovedDesignOrigin(\n rawOrigin: string,\n configuredOrigins: ReadonlySet<string>,\n): boolean {\n let parsed: URL;\n try {\n parsed = new URL(rawOrigin);\n } catch {\n return false;\n }\n if (parsed.origin !== rawOrigin) return false;\n if (configuredOrigins.has(parsed.origin)) return true;\n if (\n (parsed.protocol === \"http:\" || parsed.protocol === \"https:\") &&\n isLoopbackOrigin(parsed)\n ) {\n return true;\n }\n return (\n parsed.protocol === \"https:\" &&\n (parsed.hostname === \"design.agent-native.com\" ||\n parsed.hostname.endsWith(\".design.agent-native.com\"))\n );\n}\n\nfunction configureBridgeCors(\n req: IncomingMessage,\n res: ServerResponse,\n configuredOrigins: ReadonlySet<string>,\n): boolean {\n const origin =\n typeof req.headers.origin === \"string\" ? req.headers.origin : \"\";\n const approved = origin\n ? isApprovedDesignOrigin(origin, configuredOrigins)\n : false;\n (res as CorsAwareResponse)[BRIDGE_CORS_HEADERS] = approved\n ? {\n \"access-control-allow-origin\": origin,\n \"access-control-allow-methods\":\n \"GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS\",\n \"access-control-allow-headers\":\n \"authorization, content-type, x-bridge-token, x-design-preview-token, x-csrf-token, x-xsrf-token, x-requested-with\",\n \"access-control-allow-private-network\": \"true\",\n vary: \"Origin\",\n }\n : {};\n return approved;\n}\n\nfunction bridgeCorsHeaders(res: ServerResponse): Record<string, string> {\n return (res as CorsAwareResponse)[BRIDGE_CORS_HEADERS] ?? {};\n}\n\nfunction sendJson(\n res: ServerResponse,\n statusCode: number,\n body: Record<string, unknown>,\n) {\n res.writeHead(statusCode, {\n \"content-type\": \"application/json; charset=utf-8\",\n ...bridgeCorsHeaders(res),\n });\n res.end(`${JSON.stringify(body, null, 2)}\\n`);\n}\n\nfunction sendText(\n res: ServerResponse,\n statusCode: number,\n body: string,\n contentType: string,\n setCookieHeaders: string[] = [],\n) {\n res.writeHead(statusCode, {\n \"content-type\": contentType,\n ...(setCookieHeaders.length > 0 ? { \"set-cookie\": setCookieHeaders } : {}),\n ...bridgeCorsHeaders(res),\n });\n res.end(body);\n}\n\nfunction sendBytes(\n res: ServerResponse,\n statusCode: number,\n body: Buffer,\n headers: Headers,\n contentLength = body.length,\n setCookieHeaders: string[] = [],\n) {\n const responseHeaders: Record<string, string | string[]> = {\n ...bridgeCorsHeaders(res),\n \"content-length\": String(contentLength),\n ...(setCookieHeaders.length > 0 ? { \"set-cookie\": setCookieHeaders } : {}),\n };\n for (const name of [\n \"content-type\",\n \"cache-control\",\n \"etag\",\n \"last-modified\",\n ]) {\n const value = headers.get(name);\n if (value) responseHeaders[name] = value;\n }\n res.writeHead(statusCode, responseHeaders);\n res.end(body);\n}\n\nfunction sameOrigin(a: string, b: string): boolean {\n try {\n return new URL(a).origin === new URL(b).origin;\n } catch {\n return false;\n }\n}\n\nfunction constantTimeTokenMatches(\n providedToken: string,\n expectedToken: string,\n): boolean {\n try {\n return (\n providedToken.length === expectedToken.length &&\n crypto.timingSafeEqual(\n Buffer.from(providedToken, \"utf8\"),\n Buffer.from(expectedToken, \"utf8\"),\n )\n );\n } catch {\n return false;\n }\n}\n\nfunction readHeader(req: IncomingMessage, name: string): string {\n const value = req.headers[name];\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction readRequestCookie(req: IncomingMessage, name: string): string {\n for (const rawPair of readHeader(req, \"cookie\").split(\";\")) {\n const pair = rawPair.trim();\n const separator = pair.indexOf(\"=\");\n if (separator <= 0 || pair.slice(0, separator).trim() !== name) continue;\n return pair.slice(separator + 1).trim();\n }\n return \"\";\n}\n\nfunction previewSessionSetCookie(previewToken: string): string {\n // Partitioned SameSite=None keeps the read-only bridge credential available\n // to nested Design frames without granting an unpartitioned third-party\n // cookie. Loopback origins are potentially trustworthy in Chromium, which\n // permits Secure cookies for local development.\n return `${PREVIEW_SESSION_COOKIE_NAME}=${previewToken}; HttpOnly; Path=/; SameSite=None; Secure; Partitioned`;\n}\n\n/**\n * Preserve only browser metadata a local dev server needs to classify module\n * requests and parse ordinary same-origin app mutations. Browser cookies and\n * Authorization are forwarded only when Sec-Fetch-Site says the request came\n * from the proxied app itself; cross-site callers cannot relay them. Bridge\n * control tokens and referrers are never forwarded, and mutation origins are\n * replaced with the connected dev-server origin. Cookie-backed login also\n * uses the isolated in-memory upstream jar below so iframe cookie restrictions\n * cannot split the session across URL-backed screens.\n */\nfunction previewProxyRequestHeaders(\n req: IncomingMessage,\n devServerUrl: string,\n cookieHeader = \"\",\n): Record<string, string> {\n const headers: Record<string, string> = {};\n for (const name of [\n \"accept\",\n \"accept-language\",\n \"content-type\",\n \"sec-fetch-dest\",\n \"sec-fetch-mode\",\n \"sec-fetch-site\",\n \"x-csrf-token\",\n \"x-xsrf-token\",\n \"x-requested-with\",\n ] as const) {\n const value = readHeader(req, name);\n if (value) headers[name] = value;\n }\n const browserSameOrigin = readHeader(req, \"sec-fetch-site\") === \"same-origin\";\n const browserCookie = browserSameOrigin ? readHeader(req, \"cookie\") : \"\";\n const mergedCookie = mergePreviewCookieHeaders(cookieHeader, browserCookie);\n if (mergedCookie) headers[\"cookie\"] = mergedCookie;\n // Same-origin app code may use localStorage-backed bearer auth. Forward it\n // only from a browser request already classified as same-origin; cross-site\n // callers still authenticate to the bridge with the separate preview token,\n // which is never copied upstream.\n if (browserSameOrigin) {\n const authorization = readHeader(req, \"authorization\");\n if (authorization && authorization.length <= 16 * 1024) {\n headers[\"authorization\"] = authorization;\n }\n }\n if (req.method && ![\"GET\", \"HEAD\"].includes(req.method)) {\n headers[\"origin\"] = new URL(devServerUrl).origin;\n }\n return headers;\n}\n\nfunction mergePreviewCookieHeaders(\n jarCookieHeader: string,\n browserCookieHeader: string,\n): string {\n const values = new Map<string, string>();\n const absorb = (header: string) => {\n if (!header || Buffer.byteLength(header) > MAX_PREVIEW_COOKIE_BYTES) return;\n for (const rawPair of header.split(\";\")) {\n const pair = rawPair.trim();\n const separator = pair.indexOf(\"=\");\n if (separator <= 0) continue;\n const name = pair.slice(0, separator).trim();\n const value = pair.slice(separator + 1).trim();\n if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) continue;\n if (/^(?:x-)?agent-native-(?:bridge|preview)(?:-|$)/i.test(name)) {\n continue;\n }\n values.set(name, value);\n }\n };\n absorb(jarCookieHeader);\n // A client-readable same-origin cookie is allowed to update the jar's stale\n // value for this request. HttpOnly cookies arrive with the same value and\n // remain effectively jar-owned.\n absorb(browserCookieHeader);\n return [...values].map(([name, value]) => `${name}=${value}`).join(\"; \");\n}\n\nconst MAX_PREVIEW_SESSION_COOKIES = 128;\nconst MAX_PREVIEW_COOKIE_BYTES = 8 * 1024;\n\ntype PreviewSessionCookie = {\n name: string;\n value: string;\n path: string;\n secure: boolean;\n expiresAt?: number;\n};\n\nfunction responseSetCookieHeaders(headers: Headers): string[] {\n const withGetSetCookie = headers as Headers & {\n getSetCookie?: () => string[];\n };\n if (typeof withGetSetCookie.getSetCookie === \"function\") {\n return withGetSetCookie.getSetCookie();\n }\n const single = headers.get(\"set-cookie\");\n return single ? [single] : [];\n}\n\nfunction defaultCookiePath(url: URL): string {\n const pathname = url.pathname || \"/\";\n const lastSlash = pathname.lastIndexOf(\"/\");\n return lastSlash <= 0 ? \"/\" : pathname.slice(0, lastSlash);\n}\n\nfunction sanitizedBridgeSetCookie(raw: string): string {\n return raw\n .split(\";\")\n .filter((part) => !/^\\s*domain\\s*=/i.test(part))\n .join(\";\");\n}\n\n/**\n * Ephemeral cookie session for one connected dev-server origin. Cookies never\n * enter SQL, disk, logs, or another target origin, and disappear when the\n * local bridge exits. This keeps authenticated URL screens in one bridge\n * process on the same upstream session even when browser third-party-cookie\n * rules would otherwise isolate or reject the nested iframe cookies.\n */\nclass PreviewSessionCookieJar {\n private readonly origin: string;\n private readonly cookies = new Map<string, PreviewSessionCookie>();\n\n constructor(devServerUrl: string) {\n this.origin = new URL(devServerUrl).origin;\n }\n\n store(headers: Headers, responseUrl: string): string[] {\n const parsedUrl = new URL(responseUrl);\n if (parsedUrl.origin !== this.origin) return [];\n const browserCookies: string[] = [];\n for (const raw of responseSetCookieHeaders(headers)) {\n if (!raw || Buffer.byteLength(raw) > MAX_PREVIEW_COOKIE_BYTES) continue;\n const parts = raw.split(\";\");\n const first = parts.shift()?.trim() ?? \"\";\n const separator = first.indexOf(\"=\");\n if (separator <= 0) continue;\n const name = first.slice(0, separator).trim();\n const value = first.slice(separator + 1).trim();\n if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) continue;\n let cookiePath = defaultCookiePath(parsedUrl);\n let secure = false;\n let expiresAt: number | undefined;\n let deleteCookie = false;\n for (const attribute of parts) {\n const trimmed = attribute.trim();\n const equals = trimmed.indexOf(\"=\");\n const key = (equals < 0 ? trimmed : trimmed.slice(0, equals))\n .trim()\n .toLowerCase();\n const attributeValue =\n equals < 0 ? \"\" : trimmed.slice(equals + 1).trim();\n if (key === \"path\" && attributeValue.startsWith(\"/\")) {\n cookiePath = attributeValue;\n } else if (key === \"secure\") {\n secure = true;\n } else if (key === \"max-age\") {\n const seconds = Number(attributeValue);\n if (Number.isFinite(seconds)) {\n deleteCookie = seconds <= 0;\n expiresAt = Date.now() + seconds * 1000;\n }\n } else if (key === \"expires\" && expiresAt === undefined) {\n const parsed = Date.parse(attributeValue);\n if (Number.isFinite(parsed)) expiresAt = parsed;\n }\n }\n const mapKey = `${cookiePath}\\u0000${name}`;\n if (\n deleteCookie ||\n (expiresAt !== undefined && expiresAt <= Date.now())\n ) {\n this.cookies.delete(mapKey);\n } else {\n this.cookies.delete(mapKey);\n this.cookies.set(mapKey, {\n name,\n value,\n path: cookiePath,\n secure,\n ...(expiresAt !== undefined ? { expiresAt } : {}),\n });\n while (this.cookies.size > MAX_PREVIEW_SESSION_COOKIES) {\n const oldest = this.cookies.keys().next().value;\n if (typeof oldest !== \"string\") break;\n this.cookies.delete(oldest);\n }\n }\n browserCookies.push(sanitizedBridgeSetCookie(raw));\n }\n return browserCookies;\n }\n\n headerFor(targetUrl: string): string {\n const parsed = new URL(targetUrl);\n if (parsed.origin !== this.origin) return \"\";\n const now = Date.now();\n const matches: PreviewSessionCookie[] = [];\n for (const [key, cookie] of this.cookies) {\n if (cookie.expiresAt !== undefined && cookie.expiresAt <= now) {\n this.cookies.delete(key);\n continue;\n }\n if (\n cookie.secure &&\n parsed.protocol !== \"https:\" &&\n !isLoopbackOrigin(parsed)\n ) {\n continue;\n }\n const pathMatches =\n cookie.path === \"/\" ||\n parsed.pathname === cookie.path ||\n (cookie.path.endsWith(\"/\")\n ? parsed.pathname.startsWith(cookie.path)\n : parsed.pathname.startsWith(`${cookie.path}/`));\n if (!pathMatches) continue;\n matches.push(cookie);\n }\n matches.sort((a, b) => b.path.length - a.path.length);\n return matches.map((cookie) => `${cookie.name}=${cookie.value}`).join(\"; \");\n }\n}\n\nfunction resolvePreviewSnapshotUrl(\n devServerUrl: string,\n rawUrl: string | null,\n): string {\n const base = normalizeHttpUrl(devServerUrl);\n const parsed = new URL(rawUrl?.trim() || \"/\", `${base}/`);\n parsed.hash = \"\";\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"Snapshot URL must use http(s).\");\n }\n if (!sameOrigin(parsed.toString(), base)) {\n throw new Error(\"Snapshot URL must stay on the connected dev server.\");\n }\n return parsed.toString();\n}\n\nfunction resolvePreviewProxyUrl(\n devServerUrl: string,\n requestUrl: string | undefined,\n): string {\n const base = normalizeHttpUrl(devServerUrl);\n const parsedRequest = new URL(requestUrl ?? \"/\", base);\n const parsed = new URL(\n `${parsedRequest.pathname}${parsedRequest.search}`,\n `${base}/`,\n );\n parsed.hash = \"\";\n if (!sameOrigin(parsed.toString(), base)) {\n throw new Error(\"Proxy URL must stay on the connected dev server.\");\n }\n return parsed.toString();\n}\n\nasync function fetchPreviewSnapshot(\n devServerUrl: string,\n targetUrl: string,\n cookieJar?: PreviewSessionCookieJar,\n redirects = 0,\n): Promise<{\n url: string;\n status: number;\n contentType: string;\n html: string;\n setCookieHeaders: string[];\n}> {\n if (redirects > 5) {\n throw new Error(\"Too many redirects while fetching preview snapshot.\");\n }\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n const response = await fetch(targetUrl, {\n method: \"GET\",\n redirect: \"manual\",\n signal: controller.signal,\n headers: {\n accept: \"text/html,application/xhtml+xml;q=0.9,*/*;q=0.8\",\n ...(cookieJar?.headerFor(targetUrl)\n ? { cookie: cookieJar.headerFor(targetUrl) }\n : {}),\n },\n });\n const setCookieHeaders =\n cookieJar?.store(response.headers, targetUrl) ?? [];\n const location = response.headers.get(\"location\");\n if (location && response.status >= 300 && response.status < 400) {\n const redirected = new URL(location, targetUrl);\n redirected.hash = \"\";\n if (!sameOrigin(redirected.toString(), devServerUrl)) {\n throw new Error(\"Snapshot redirect left the connected dev server.\");\n }\n return fetchPreviewSnapshot(\n devServerUrl,\n redirected.toString(),\n cookieJar,\n redirects + 1,\n );\n }\n return {\n url: response.url || targetUrl,\n status: response.status,\n contentType: response.headers.get(\"content-type\") ?? \"\",\n html: await response.text(),\n setCookieHeaders,\n };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nasync function fetchPreviewProxyResource(\n devServerUrl: string,\n targetUrl: string,\n request: {\n method: string;\n headers?: Record<string, string>;\n body?: Buffer;\n },\n cookieJar?: PreviewSessionCookieJar,\n redirects = 0,\n): Promise<{\n url: string;\n status: number;\n headers: Headers;\n body: Buffer;\n setCookieHeaders: string[];\n}> {\n if (redirects > 5) {\n throw new Error(\"Too many redirects while proxying preview resource.\");\n }\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n const response = await fetch(targetUrl, {\n method: request.method,\n redirect: \"manual\",\n signal: controller.signal,\n headers: request.headers,\n body:\n request.method === \"GET\" || request.method === \"HEAD\"\n ? undefined\n : request.body,\n });\n const setCookieHeaders =\n cookieJar?.store(response.headers, targetUrl) ?? [];\n const location = response.headers.get(\"location\");\n if (location && response.status >= 300 && response.status < 400) {\n const redirected = new URL(location, targetUrl);\n redirected.hash = \"\";\n if (!sameOrigin(redirected.toString(), devServerUrl)) {\n throw new Error(\"Proxy redirect left the connected dev server.\");\n }\n const switchToGet =\n response.status === 303 ||\n ((response.status === 301 || response.status === 302) &&\n request.method === \"POST\");\n const redirectedResponse = await fetchPreviewProxyResource(\n devServerUrl,\n redirected.toString(),\n {\n method: switchToGet ? \"GET\" : request.method,\n headers: {\n ...(request.headers ?? {}),\n ...(cookieJar?.headerFor(redirected.toString())\n ? { cookie: cookieJar.headerFor(redirected.toString()) }\n : {}),\n },\n body: switchToGet ? undefined : request.body,\n },\n cookieJar,\n redirects + 1,\n );\n return {\n ...redirectedResponse,\n setCookieHeaders: [\n ...setCookieHeaders,\n ...redirectedResponse.setCookieHeaders,\n ],\n };\n }\n return {\n url: response.url || targetUrl,\n status: response.status,\n headers: response.headers,\n body: Buffer.from(await response.arrayBuffer()),\n setCookieHeaders,\n };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction addLiveEditBaseHref(html: string, href: string): string {\n const escapedHref = href.replace(/&/g, \"&\").replace(/\"/g, \""\");\n const baseTag = `<base href=\"${escapedHref}\">`;\n if (/<base\\b/i.test(html)) return html;\n if (/<head\\b[^>]*>/i.test(html)) {\n return html.replace(/<head\\b[^>]*>/i, (match) => `${match}${baseTag}`);\n }\n if (/<html\\b[^>]*>/i.test(html)) {\n return html.replace(\n /<html\\b[^>]*>/i,\n (match) => `${match}<head>${baseTag}</head>`,\n );\n }\n return `<!DOCTYPE html><html><head>${baseTag}<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"></head><body>${html}</body></html>`;\n}\n\n/**\n * Rewrite the iframe path to the real target route before the proxied app's\n * bundle runs. The bridge serves snapshots from its own `/live-edit` path, so a\n * client-side-routed SPA would otherwise boot at \"/live-edit\", match no route,\n * and render its 404. A synchronous inline script in `<head>` runs during parse\n * (before deferred module bundles), so `history.replaceState` lands the SPA on\n * the intended route. Assets still resolve via the injected `<base href>`.\n */\nfunction injectPreBootLocationShim(html: string, targetPath: string): string {\n const path = targetPath.trim();\n if (!path || path === \"/live-edit\") return html;\n const shim = `<script data-agent-native-live-edit-location>\n(function(){try{var p=${JSON.stringify(path)};if(p&&(location.pathname+location.search)!==p){history.replaceState(null,\"\",p);}}catch(e){}})();\n</script>`;\n if (/<head\\b[^>]*>/i.test(html)) {\n return html.replace(/<head\\b[^>]*>/i, (match) => `${match}${shim}`);\n }\n if (/<html\\b[^>]*>/i.test(html)) {\n return html.replace(\n /<html\\b[^>]*>/i,\n (match) => `${match}<head>${shim}</head>`,\n );\n }\n return `${shim}${html}`;\n}\n\nfunction injectLiveEditBridge(\n html: string,\n baseHref: string,\n script: string,\n targetPath: string,\n) {\n const withBase = injectPreBootLocationShim(\n addLiveEditBaseHref(html, baseHref),\n targetPath,\n );\n if (!script) return withBase;\n if (withBase.includes(\"</body>\")) {\n return withBase.replace(\"</body>\", `${script}</body>`);\n }\n if (withBase.includes(\"</html>\")) {\n return withBase.replace(\"</html>\", `${script}</html>`);\n }\n return `${withBase}${script}`;\n}\n\n/** Read the full request body as a UTF-8 string. */\nasync function readRequestBody(req: IncomingMessage): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n req.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf8\")));\n req.on(\"error\", reject);\n });\n}\n\nconst MAX_PREVIEW_PROXY_REQUEST_BYTES = 8 * 1024 * 1024;\n\nclass PreviewProxyRequestTooLargeError extends Error {}\n\nasync function readPreviewProxyRequestBody(\n req: IncomingMessage,\n): Promise<Buffer> {\n const declaredLength = Number(readHeader(req, \"content-length\"));\n if (\n Number.isFinite(declaredLength) &&\n declaredLength > MAX_PREVIEW_PROXY_REQUEST_BYTES\n ) {\n throw new PreviewProxyRequestTooLargeError(\n \"Preview request body exceeds the 8 MB limit.\",\n );\n }\n return new Promise<Buffer>((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n let tooLarge = false;\n req.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > MAX_PREVIEW_PROXY_REQUEST_BYTES) {\n tooLarge = true;\n chunks.length = 0;\n return;\n }\n if (!tooLarge) chunks.push(chunk);\n });\n req.on(\"end\", () => {\n if (tooLarge) {\n reject(\n new PreviewProxyRequestTooLargeError(\n \"Preview request body exceeds the 8 MB limit.\",\n ),\n );\n return;\n }\n resolve(Buffer.concat(chunks));\n });\n req.on(\"error\", reject);\n });\n}\n\n/**\n * Resolve `targetDir` under `rootPath` with realpath so that symlinks and\n * traversal sequences (../../etc) cannot escape the root. Throws if the\n * resolved path does not start with the resolved root.\n *\n * This also guards against a symlink LEAF inside root (e.g.\n * `rootPath/link.css` -> `/Users/me/.ssh/id_rsa`): the parent-directory\n * realpath check alone would pass confinement because the parent is inside\n * root, letting reads/writes silently follow the symlink outside root. After\n * the parent check we additionally lstat the target itself — if it exists and\n * is a symlink, or if its realpath resolves outside `resolvedRoot`, we reject.\n */\nasync function assertPathInside(\n rootPath: string,\n targetPath: string,\n): Promise<void> {\n const resolvedRoot = await fs.realpath(rootPath).catch(() => {\n throw new Error(`Bridge root path does not exist: ${rootPath}`);\n });\n\n // Resolve the parent directory (the file itself may not exist yet for writes).\n const targetParent = path.dirname(path.resolve(rootPath, targetPath));\n const resolvedParent = await fs.realpath(targetParent).catch(async () => {\n // Parent may not exist yet; walk up until we find a real ancestor.\n let candidate = targetParent;\n for (let i = 0; i < 32; i++) {\n const up = path.dirname(candidate);\n if (up === candidate) break;\n candidate = up;\n try {\n return await fs.realpath(candidate);\n } catch {\n // keep walking\n }\n }\n throw new Error(`Cannot resolve parent directory: ${targetParent}`);\n });\n\n if (\n !resolvedParent.startsWith(resolvedRoot + path.sep) &&\n resolvedParent !== resolvedRoot\n ) {\n throw new Error(`Path traversal detected: resolved target is outside root`);\n }\n\n // Reject a symlink LEAF, even though its parent directory is confined to\n // root. A pre-existing symlink at the target path (file or directory) could\n // otherwise be followed straight out of root by the caller's subsequent\n // fs.readFile/fs.writeFile call.\n const targetAbsolute = path.resolve(rootPath, targetPath);\n const lstat = await fs.lstat(targetAbsolute).catch(() => null);\n if (lstat?.isSymbolicLink()) {\n throw new Error(\n `Path traversal detected: \"${targetPath}\" is a symlink, which is not allowed inside the connected root`,\n );\n }\n if (lstat) {\n const resolvedTarget = await fs.realpath(targetAbsolute).catch(() => null);\n if (\n resolvedTarget &&\n resolvedTarget !== resolvedRoot &&\n !resolvedTarget.startsWith(resolvedRoot + path.sep)\n ) {\n throw new Error(\n `Path traversal detected: \"${targetPath}\" resolves outside the connected root`,\n );\n }\n }\n}\n\ninterface SafeBridgeFileTarget {\n absolutePath: string;\n canonicalPath: string;\n}\n\n/**\n * Resolve a bridge file to a stable lock key without following a leaf\n * symlink. Missing parent directories are represented beneath their nearest\n * existing real ancestor, so aliases through in-root directory symlinks share\n * one mutex while first-time file creation remains supported.\n */\nasync function resolveSafeBridgeFileTarget(\n rootPath: string,\n targetPath: string,\n): Promise<SafeBridgeFileTarget> {\n await assertPathInside(rootPath, targetPath);\n const resolvedRoot = await fs.realpath(rootPath);\n const absolutePath = path.resolve(rootPath, targetPath);\n let existingAncestor = path.dirname(absolutePath);\n let resolvedAncestor: string | null = null;\n for (let depth = 0; depth < 32; depth += 1) {\n try {\n resolvedAncestor = await fs.realpath(existingAncestor);\n break;\n } catch {\n const parent = path.dirname(existingAncestor);\n if (parent === existingAncestor) break;\n existingAncestor = parent;\n }\n }\n if (!resolvedAncestor) {\n throw new Error(`Cannot resolve parent directory: ${absolutePath}`);\n }\n // Existing regular files get their own realpath as the lock key. Besides\n // resolving in-root directory aliases, this canonicalizes case on the\n // default macOS filesystem so `Button.tsx` and `button.tsx` cannot acquire\n // separate mutexes for the same inode. assertPathInside already rejected a\n // symlink leaf before this point.\n const canonicalPath =\n (await fs.realpath(absolutePath).catch(() => null)) ??\n path.resolve(\n resolvedAncestor,\n path.relative(existingAncestor, absolutePath),\n );\n if (\n canonicalPath !== resolvedRoot &&\n !canonicalPath.startsWith(resolvedRoot + path.sep)\n ) {\n throw new Error(\"Path traversal detected: resolved target is outside root\");\n }\n return { absolutePath, canonicalPath };\n}\n\nconst bridgeWriteLocks = new Map<string, Promise<void>>();\n\n/** Serialize read-check-write sequences for one canonical local file. */\nasync function withBridgeWriteLock<T>(\n canonicalPath: string,\n work: () => Promise<T>,\n): Promise<T> {\n const previous = bridgeWriteLocks.get(canonicalPath) ?? Promise.resolve();\n let release!: () => void;\n const gate = new Promise<void>((resolve) => {\n release = resolve;\n });\n const queued = previous.catch(() => undefined).then(() => gate);\n bridgeWriteLocks.set(canonicalPath, queued);\n await previous.catch(() => undefined);\n try {\n return await work();\n } finally {\n release();\n if (bridgeWriteLocks.get(canonicalPath) === queued) {\n bridgeWriteLocks.delete(canonicalPath);\n }\n }\n}\n\ninterface BridgeFileSnapshot {\n content: string;\n versionHash: string;\n mode: number;\n}\n\nfunction contentVersionHash(content: string | Buffer): string {\n return crypto.createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\n/** Read an existing regular file without ever following a leaf symlink. */\nasync function readBridgeFileSnapshot(\n absolutePath: string,\n): Promise<BridgeFileSnapshot | null> {\n const noFollow = fsSync.constants.O_NOFOLLOW ?? 0;\n let handle: FileHandle | null = null;\n try {\n handle = await fs.open(absolutePath, fsSync.constants.O_RDONLY | noFollow);\n const stat = await handle.stat();\n if (!stat.isFile()) {\n throw new Error(`Bridge target is not a regular file: ${absolutePath}`);\n }\n const bytes = await handle.readFile();\n return {\n content: bytes.toString(\"utf8\"),\n versionHash: contentVersionHash(bytes),\n mode: stat.mode & 0o777,\n };\n } catch (error: unknown) {\n const code =\n error instanceof Error && \"code\" in error\n ? (error as NodeJS.ErrnoException).code\n : undefined;\n if (code === \"ENOENT\") return null;\n throw error;\n } finally {\n await handle?.close().catch(() => undefined);\n }\n}\n\nclass BridgeVersionConflictError extends Error {\n constructor(readonly currentVersionHash?: string) {\n super(\"version conflict\");\n }\n}\n\nclass BridgePreconditionRequiredError extends Error {\n constructor() {\n super(\"expectedVersionHash is required\");\n }\n}\n\nfunction assertExpectedBridgeVersion(\n expectedVersionHash: string | undefined,\n currentVersionHash: string | undefined,\n requireExpectedVersionHash = false,\n): void {\n // Preserve compatibility: callers that omit a hash retain the existing\n // last-write-wins behavior, including creation. Compiled-source callers opt\n // into exact compare-and-swap by sending the hash returned by read-file.\n if (requireExpectedVersionHash && expectedVersionHash === undefined) {\n throw new BridgePreconditionRequiredError();\n }\n if (\n expectedVersionHash !== undefined &&\n (currentVersionHash !== undefined\n ? currentVersionHash !== expectedVersionHash\n : requireExpectedVersionHash)\n ) {\n throw new BridgeVersionConflictError(currentVersionHash);\n }\n}\n\n/**\n * Replace a file durably without exposing a partial write: create an\n * O_EXCL/O_NOFOLLOW temp sibling, fsync it, revalidate confinement and the\n * expected content hash, rename atomically, then fsync the parent directory.\n */\nasync function atomicWriteBridgeFile(args: {\n rootPath: string;\n relPath: string;\n lockedCanonicalPath: string;\n content: string;\n expectedVersionHash?: string;\n requireExpectedVersionHash?: boolean;\n originalMode?: number;\n}): Promise<string> {\n const parent = path.dirname(path.resolve(args.rootPath, args.relPath));\n await fs.mkdir(parent, { recursive: true });\n const revalidated = await resolveSafeBridgeFileTarget(\n args.rootPath,\n args.relPath,\n );\n if (revalidated.canonicalPath !== args.lockedCanonicalPath) {\n throw new Error(\"Bridge target changed while waiting for the write lock\");\n }\n\n const basename = path.basename(revalidated.absolutePath);\n const tempPath = path.join(\n parent,\n `.${basename}.agent-native-${process.pid}-${crypto.randomBytes(8).toString(\"hex\")}.tmp`,\n );\n const noFollow = fsSync.constants.O_NOFOLLOW ?? 0;\n let tempHandle: FileHandle | null = null;\n try {\n tempHandle = await fs.open(\n tempPath,\n fsSync.constants.O_CREAT |\n fsSync.constants.O_EXCL |\n fsSync.constants.O_WRONLY |\n noFollow,\n args.originalMode ?? 0o666,\n );\n await tempHandle.writeFile(args.content, \"utf8\");\n await tempHandle.sync();\n await tempHandle.close();\n tempHandle = null;\n\n // Re-check after the potentially slow temp write/fsync. This catches a\n // parent/leaf symlink swap and an external content edit before rename.\n const beforeRenameTarget = await resolveSafeBridgeFileTarget(\n args.rootPath,\n args.relPath,\n );\n if (beforeRenameTarget.canonicalPath !== args.lockedCanonicalPath) {\n throw new Error(\"Bridge target changed during atomic write\");\n }\n const current = await readBridgeFileSnapshot(\n beforeRenameTarget.absolutePath,\n );\n assertExpectedBridgeVersion(\n args.expectedVersionHash,\n current?.versionHash,\n args.requireExpectedVersionHash,\n );\n\n await fs.rename(tempPath, beforeRenameTarget.absolutePath);\n const directoryHandle = await fs.open(parent, \"r\").catch(() => null);\n if (directoryHandle) {\n try {\n await directoryHandle.sync();\n } finally {\n await directoryHandle.close();\n }\n }\n return contentVersionHash(args.content);\n } finally {\n await tempHandle?.close().catch(() => undefined);\n await fs.rm(tempPath, { force: true }).catch(() => undefined);\n }\n}\n\n/**\n * Extensions that are safe for creating a brand-new text/code file through\n * the bridge. Existing files are classified by their bytes instead, so the\n * Code workbench can edit languages and extensionless config files without a\n * permanently incomplete allowlist.\n */\nconst ALLOWED_NEW_TEXT_FILE_EXTENSIONS = new Set([\n \".html\",\n \".htm\",\n \".css\",\n \".scss\",\n \".less\",\n \".js\",\n \".jsx\",\n \".ts\",\n \".tsx\",\n \".mjs\",\n \".cjs\",\n \".json\",\n \".md\",\n \".mdx\",\n \".vue\",\n \".svelte\",\n \".astro\",\n \".txt\",\n \".yml\",\n \".yaml\",\n \".svg\",\n \".py\",\n \".rb\",\n \".php\",\n \".java\",\n \".kt\",\n \".kts\",\n \".go\",\n \".rs\",\n \".c\",\n \".h\",\n \".cc\",\n \".cpp\",\n \".hpp\",\n \".cs\",\n \".swift\",\n \".sh\",\n \".bash\",\n \".zsh\",\n \".fish\",\n \".sql\",\n \".toml\",\n \".xml\",\n \".graphql\",\n \".gql\",\n \".prisma\",\n \".properties\",\n \".ini\",\n \".conf\",\n \".env.example\",\n]);\n\nconst ALLOWED_NEW_EXTENSIONLESS_TEXT_FILES = new Set([\n \"dockerfile\",\n \"makefile\",\n \"procfile\",\n \"gemfile\",\n \"rakefile\",\n \"license\",\n \"readme\",\n]);\n\nconst BLOCKED_BINARY_WRITE_EXTENSIONS = new Set([\n \".png\",\n \".jpg\",\n \".jpeg\",\n \".gif\",\n \".webp\",\n \".ico\",\n \".woff\",\n \".woff2\",\n \".ttf\",\n \".otf\",\n \".eot\",\n \".mp3\",\n \".mp4\",\n \".mov\",\n \".webm\",\n \".zip\",\n \".gz\",\n \".tar\",\n \".pdf\",\n \".wasm\",\n \".fig\",\n \".sketch\",\n \".exe\",\n \".dll\",\n \".dylib\",\n \".so\",\n \".class\",\n \".jar\",\n]);\n\nfunction assertEditableTextFile(\n relPath: string,\n existing: BridgeFileSnapshot | null,\n): void {\n const ext = path.extname(relPath).toLowerCase();\n if (BLOCKED_BINARY_WRITE_EXTENSIONS.has(ext)) {\n throw new Error(\n `Write rejected: extension \"${ext}\" is a binary file type.`,\n );\n }\n if (existing) {\n if (existing.content.includes(\"\\0\")) {\n throw new Error(\n \"Write rejected: the existing file contains binary data.\",\n );\n }\n return;\n }\n const basename = path.basename(relPath).toLowerCase();\n if (\n !ALLOWED_NEW_TEXT_FILE_EXTENSIONS.has(ext) &&\n !ALLOWED_NEW_EXTENSIONLESS_TEXT_FILES.has(basename)\n ) {\n throw new Error(\n `Write rejected: extension \"${ext || \"(no extension)\"}\" is not recognized for a new text/code file.`,\n );\n }\n}\n\n/**\n * Blocklist for secret-looking paths. Applied to /read-file, /write-file,\n * /apply-edit, AND /list-files so secrets are never returned or served\n * through the bridge, even to a caller holding a valid write grant. Reads of\n * other dotfiles (.gitignore, .prettierrc, etc.) remain allowed.\n *\n * All comparisons are case-insensitive: macOS's default filesystem (and\n * Windows) is case-insensitive, so \".ENV\", \"ID_RSA\", or \"KEY.PEM\" refer to\n * the exact same on-disk file as their lowercase form and must be blocked\n * identically.\n */\nfunction isBlockedSecretPath(relPath: string): boolean {\n const normalized = normalizeSlash(relPath).replace(/^\\/+/, \"\").toLowerCase();\n const segments = normalized.split(\"/\").filter(Boolean);\n if (segments.some((segment) => segment === \".git\")) return true;\n const basename = segments[segments.length - 1] ?? normalized;\n if (/^\\.env/.test(basename)) return true;\n if (/\\.pem$/.test(basename)) return true;\n if (/\\.key$/.test(basename)) return true;\n if (/^id_rsa/.test(basename)) return true;\n return false;\n}\n\nfunction assertNotBlockedSecretPath(relPath: string): void {\n if (isBlockedSecretPath(relPath)) {\n throw new Error(\n `Access rejected: \"${relPath}\" matches a blocked secret-file pattern.`,\n );\n }\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n if (!needle) return 0;\n let count = 0;\n let index = haystack.indexOf(needle);\n while (index !== -1) {\n count += 1;\n if (count > 1) return count;\n index = haystack.indexOf(needle, index + 1);\n }\n return count;\n}\n\n// ── /list-files: recursive walk with .gitignore + always-ignore + size/binary\n// filtering ───────────────────────────────────────────────────────────────\n\n/** Directories always excluded from /list-files, regardless of .gitignore. */\nconst ALWAYS_IGNORED_DIR_NAMES = new Set([\n \".git\",\n \"node_modules\",\n \"dist\",\n \"build\",\n \".next\",\n \".output\",\n \".nuxt\",\n \"coverage\",\n \".cache\",\n]);\n\nconst ALWAYS_IGNORED_FILE_NAMES = new Set([\".DS_Store\"]);\n\n/** Binary-looking extensions skipped from /list-files results. */\nconst BINARY_LOOKING_EXTENSIONS = new Set([\n \".png\",\n \".jpg\",\n \".jpeg\",\n \".gif\",\n \".webp\",\n \".ico\",\n \".woff\",\n \".woff2\",\n \".ttf\",\n \".otf\",\n \".eot\",\n \".mp3\",\n \".mp4\",\n \".mov\",\n \".webm\",\n \".zip\",\n \".gz\",\n \".tar\",\n \".pdf\",\n \".wasm\",\n \".fig\",\n \".sketch\",\n]);\n\nconst LIST_FILES_MAX_ENTRIES = 20_000;\nconst LIST_FILES_MAX_BYTES = 2 * 1024 * 1024;\n\nexport interface GitignoreRule {\n /** Raw pattern as read from .gitignore, already trimmed of comments/blank lines. */\n pattern: string;\n /** True when the pattern is anchored to the root (leading \"/\"). */\n anchored: boolean;\n /** True when the pattern only matches directories (trailing \"/\"). */\n dirOnly: boolean;\n}\n\n/**\n * Parse a simple subset of .gitignore syntax: exact names, `dir/`, `*.ext`,\n * and leading-slash root-anchored patterns. This intentionally does not\n * implement full gitignore glob semantics (double-star, negation, etc.) —\n * good enough to keep obviously-ignored build output and local files out of\n * the workbench file tree.\n */\nexport function parseGitignore(contents: string): GitignoreRule[] {\n const rules: GitignoreRule[] = [];\n for (const rawLine of contents.split(/\\r?\\n/)) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\")) continue;\n if (line.startsWith(\"!\")) continue; // negation unsupported in this subset\n const anchored = line.startsWith(\"/\");\n const withoutAnchor = anchored ? line.slice(1) : line;\n const dirOnly = withoutAnchor.endsWith(\"/\");\n const pattern = dirOnly ? withoutAnchor.slice(0, -1) : withoutAnchor;\n if (!pattern) continue;\n rules.push({ pattern, anchored, dirOnly });\n }\n return rules;\n}\n\nfunction globToRegExp(pattern: string): RegExp {\n let out = \"\";\n for (const char of pattern) {\n if (char === \"*\") out += \"[^/]*\";\n else if (char === \"?\") out += \"[^/]\";\n else out += char.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n }\n return new RegExp(`^${out}$`);\n}\n\n/**\n * Test one path segment (or full relative path, for anchored patterns)\n * against a parsed gitignore rule.\n */\nfunction ruleMatches(\n rule: GitignoreRule,\n relPath: string,\n isDir: boolean,\n): boolean {\n if (rule.dirOnly && !isDir) return false;\n const regex = globToRegExp(rule.pattern);\n if (rule.anchored) {\n return regex.test(relPath);\n }\n // Unanchored: match against any path segment (basename) or the full path,\n // mirroring gitignore's \"matches at any depth\" behavior for simple patterns.\n const segments = relPath.split(\"/\");\n return segments.some((segment) => regex.test(segment)) || regex.test(relPath);\n}\n\nexport function isIgnoredByGitignore(\n rules: GitignoreRule[],\n relPath: string,\n isDir: boolean,\n): boolean {\n return rules.some((rule) => ruleMatches(rule, relPath, isDir));\n}\n\n/**\n * Pure predicate: should this file be excluded from /list-files results?\n * Combines the always-ignored directory/file names, the parsed .gitignore\n * rules, the binary-looking extension list, the secret-path blocklist, and\n * the per-file size cap. `sizeBytes` may be omitted when unknown (the always/\n * gitignore/binary/secret checks still apply).\n */\nexport function shouldExcludeFromListing(\n relPath: string,\n options: { gitignore: GitignoreRule[]; sizeBytes?: number },\n): boolean {\n const normalized = normalizeSlash(relPath).replace(/^\\/+/, \"\");\n const segments = normalized.split(\"/\").filter(Boolean);\n if (segments.some((segment) => ALWAYS_IGNORED_DIR_NAMES.has(segment))) {\n return true;\n }\n const basename = segments[segments.length - 1] ?? normalized;\n if (ALWAYS_IGNORED_FILE_NAMES.has(basename)) return true;\n if (isBlockedSecretPath(normalized)) return true;\n if (isIgnoredByGitignore(options.gitignore, normalized, false)) return true;\n // A `dir/` gitignore rule matches the file's ancestor directories too, not\n // just the file itself (e.g. \"build-output/\" must ignore\n // \"build-output/index.html\").\n for (let depth = 1; depth < segments.length; depth += 1) {\n const ancestorPath = segments.slice(0, depth).join(\"/\");\n if (isIgnoredByGitignore(options.gitignore, ancestorPath, true)) {\n return true;\n }\n }\n const ext = path.extname(basename).toLowerCase();\n if (BINARY_LOOKING_EXTENSIONS.has(ext)) return true;\n if (\n typeof options.sizeBytes === \"number\" &&\n options.sizeBytes > LIST_FILES_MAX_BYTES\n ) {\n return true;\n }\n return false;\n}\n\n/**\n * Should this directory be pruned entirely from the walk? Cheaper than\n * checking every descendant file individually once a directory itself is\n * ignored (always-ignored names, gitignore dir rules, or the .git/secret\n * blocklist).\n */\nfunction shouldPruneDirectory(\n relPath: string,\n gitignore: GitignoreRule[],\n): boolean {\n const normalized = normalizeSlash(relPath).replace(/^\\/+/, \"\");\n const segments = normalized.split(\"/\").filter(Boolean);\n const basename = segments[segments.length - 1] ?? normalized;\n if (ALWAYS_IGNORED_DIR_NAMES.has(basename)) return true;\n if (basename === \".git\") return true;\n if (isIgnoredByGitignore(gitignore, normalized, true)) return true;\n return false;\n}\n\nexport interface ListedBridgeFile {\n path: string;\n size: number;\n}\n\nexport interface ListFilesResult {\n files: ListedBridgeFile[];\n truncated: boolean;\n}\n\n/**\n * Recursively walk `rootPath`, honoring .gitignore + the always-ignore list +\n * binary/size/secret filtering, never following symlinks that would escape\n * root (delegates to `assertPathInside`'s realpath confinement per-entry).\n * Caps at `LIST_FILES_MAX_ENTRIES` and reports `truncated` when the cap is\n * hit.\n */\nasync function walkBridgeFiles(rootPath: string): Promise<ListFilesResult> {\n let gitignore: GitignoreRule[] = [];\n try {\n const raw = await fs.readFile(path.join(rootPath, \".gitignore\"), \"utf8\");\n gitignore = parseGitignore(raw);\n } catch {\n // No root .gitignore — proceed with only the always-ignore list.\n }\n\n const files: ListedBridgeFile[] = [];\n let truncated = false;\n const resolvedRoot = await fs.realpath(rootPath);\n\n async function walk(absoluteDir: string, relDir: string): Promise<void> {\n if (truncated) return;\n let entries: fsSync.Dirent[];\n try {\n entries = await fs.readdir(absoluteDir, { withFileTypes: true });\n } catch {\n return;\n }\n // Sort for deterministic output.\n entries.sort((a, b) => a.name.localeCompare(b.name));\n for (const entry of entries) {\n if (truncated) return;\n const relPath = relDir ? `${relDir}/${entry.name}` : entry.name;\n const absolutePath = path.join(absoluteDir, entry.name);\n\n if (entry.isSymbolicLink()) {\n // Never follow symlinks that escape root; resolve and re-check.\n let real: string;\n try {\n real = await fs.realpath(absolutePath);\n } catch {\n continue;\n }\n if (\n real !== resolvedRoot &&\n !real.startsWith(resolvedRoot + path.sep)\n ) {\n continue;\n }\n const stat = await fs.stat(absolutePath).catch(() => null);\n if (!stat) continue;\n if (stat.isDirectory()) {\n if (shouldPruneDirectory(relPath, gitignore)) continue;\n await walk(absolutePath, relPath);\n } else if (stat.isFile()) {\n if (\n !shouldExcludeFromListing(relPath, {\n gitignore,\n sizeBytes: stat.size,\n })\n ) {\n files.push({ path: normalizeSlash(relPath), size: stat.size });\n if (files.length >= LIST_FILES_MAX_ENTRIES) {\n truncated = true;\n return;\n }\n }\n }\n continue;\n }\n\n if (entry.isDirectory()) {\n if (shouldPruneDirectory(relPath, gitignore)) continue;\n await walk(absolutePath, relPath);\n continue;\n }\n\n if (entry.isFile()) {\n const stat = await fs.stat(absolutePath).catch(() => null);\n if (!stat) continue;\n if (\n shouldExcludeFromListing(relPath, {\n gitignore,\n sizeBytes: stat.size,\n })\n ) {\n continue;\n }\n files.push({ path: normalizeSlash(relPath), size: stat.size });\n if (files.length >= LIST_FILES_MAX_ENTRIES) {\n truncated = true;\n return;\n }\n }\n }\n }\n\n await walk(resolvedRoot, \"\");\n return { files, truncated };\n}\n\nexport async function startDesignConnectBridge(\n manifest: DesignConnectManifest,\n seedOrOptions?: string | DesignConnectBridgeOptions,\n): Promise<DesignConnectBridge> {\n // Shared secret the browser sends (x-bridge-token) to unlock live-edit/read/\n // write. Bridge and the user's connection row must agree on it. Adopt a\n // server-minted seed when given (MCP flow); otherwise mint one and rely on\n // --app-url self-registration to push it up. Kept in-process, never served.\n const options: DesignConnectBridgeOptions =\n typeof seedOrOptions === \"string\"\n ? { bridgeToken: seedOrOptions }\n : (seedOrOptions ?? {});\n const bridgeToken =\n options.bridgeToken ||\n process.env[\"AGENT_NATIVE_BRIDGE_TOKEN\"] ||\n crypto.randomBytes(32).toString(\"hex\");\n const previewToken =\n options.previewToken ||\n process.env[\"AGENT_NATIVE_PREVIEW_TOKEN\"] ||\n deriveDesignPreviewToken(bridgeToken);\n const configuredOrigins = new Set(\n (options.allowedOrigins ?? []).flatMap((raw): string[] => {\n try {\n return [new URL(raw).origin];\n } catch {\n return [];\n }\n }),\n );\n let liveEditBridgeScript = \"\";\n // One bridge process serves every URL-backed screen in an overview. The\n // editor script carries screen-specific state (notably screenId), so a\n // single global slot lets parallel iframe registrations overwrite each\n // other and boot a frame with another frame's identity. Keep keyed scripts\n // for modern clients while retaining the unkeyed slot for older clients.\n const liveEditBridgeScripts = new Map<string, string>();\n // Identifies THIS bridge process's in-memory registry, minted fresh every\n // time the bridge boots. `liveEditBridgeScripts` above only lives in\n // process memory, so a bridge restart (crash, machine sleep/wake, manual\n // restart) silently empties it: any screen that registered a bridgeKey\n // before the restart now gets a 409 \"unknown bridge key\" from `/live-edit`\n // even though nothing about that screen actually changed. Echoing this id\n // on both the registration response and the 409 lets a client tell the two\n // cases apart — \"this exact process never saw my key\" (stale/typo, id\n // matches what it already has cached) vs. \"the process restarted since I\n // registered\" (id changed, safe to transparently re-POST `/live-edit-bridge`\n // and retry) — instead of guessing from the error text or retrying forever.\n const bridgeInstanceId = crypto.randomBytes(16).toString(\"hex\");\n const previewSessionCookies = new PreviewSessionCookieJar(\n manifest.devServerUrl,\n );\n\n const server = http.createServer(\n (req: IncomingMessage, res: ServerResponse) => {\n const corsApproved = configureBridgeCors(req, res, configuredOrigins);\n if (req.method === \"OPTIONS\") {\n sendJson(\n res,\n corsApproved ? 204 : 403,\n corsApproved\n ? {}\n : { ok: false, error: \"origin is not allowed by this bridge\" },\n );\n return;\n }\n\n const requestUrl = new URL(req.url ?? \"/\", manifest.bridgeUrl);\n const pathname = requestUrl.pathname;\n const providedPreviewToken =\n readHeader(req, \"x-design-preview-token\") ||\n requestUrl.searchParams.get(\"previewToken\") ||\n readRequestCookie(req, PREVIEW_SESSION_COOKIE_NAME) ||\n \"\";\n const previewTokenValid = constantTimeTokenMatches(\n providedPreviewToken,\n previewToken,\n );\n const rejectInvalidPreviewToken = (): boolean => {\n if (previewTokenValid) return false;\n sendJson(res, 401, {\n ok: false,\n error: \"invalid or missing preview token\",\n });\n return true;\n };\n\n // ── Read-only preview routes (preview token required) ────────────────\n\n if (pathname === \"/\" || pathname === \"/manifest.json\") {\n if (rejectInvalidPreviewToken()) return;\n sendJson(res, 200, manifest as unknown as Record<string, unknown>);\n return;\n }\n if (pathname === \"/routes.json\") {\n if (rejectInvalidPreviewToken()) return;\n sendJson(res, 200, {\n version: 1,\n sourceType: \"localhost\",\n devServerUrl: manifest.devServerUrl,\n rootPath: manifest.rootPath,\n routes: manifest.routes,\n generatedAt: manifest.generatedAt,\n });\n return;\n }\n if (pathname === \"/health\") {\n sendJson(res, 200, {\n ok: true,\n source: manifest.source,\n appFingerprint: designConnectAppFingerprint(manifest),\n bridgeInstanceId,\n });\n return;\n }\n if (pathname === \"/live-edit-bridge\") {\n if (req.method !== \"POST\") {\n sendJson(res, 405, { ok: false, error: \"method not allowed\" });\n return;\n }\n if (rejectInvalidPreviewToken()) return;\n void (async () => {\n try {\n const raw = await readRequestBody(req);\n const body = JSON.parse(raw) as Record<string, unknown>;\n const script =\n typeof body[\"script\"] === \"string\" ? body[\"script\"] : \"\";\n const bridgeKey =\n typeof body[\"bridgeKey\"] === \"string\"\n ? body[\"bridgeKey\"].trim()\n : \"\";\n const installsSupportedDesignBridge =\n script.includes(\"agent-native:editor-chrome-ready\") ||\n script.includes(\"embedded-canvas-pan\");\n if (!installsSupportedDesignBridge) {\n sendJson(res, 400, {\n ok: false,\n error:\n \"script must install an approved Agent Native editor or canvas-pan bridge\",\n });\n return;\n }\n if (\n bridgeKey &&\n (!/^[a-zA-Z0-9:._-]+$/.test(bridgeKey) || bridgeKey.length > 128)\n ) {\n sendJson(res, 400, {\n ok: false,\n error: \"bridgeKey must be 1-128 safe identifier characters\",\n });\n return;\n }\n liveEditBridgeScript = script;\n if (bridgeKey) {\n liveEditBridgeScripts.delete(bridgeKey);\n liveEditBridgeScripts.set(bridgeKey, script);\n // Bound the in-memory cache. Normal editor usage has one key per\n // visible screen; 128 also leaves ample room for mode changes.\n while (liveEditBridgeScripts.size > 128) {\n const oldest = liveEditBridgeScripts.keys().next().value;\n if (typeof oldest !== \"string\") break;\n liveEditBridgeScripts.delete(oldest);\n }\n }\n sendJson(res, 200, {\n ok: true,\n bridgeInstanceId,\n ...(bridgeKey ? { bridgeKey } : {}),\n });\n } catch (err: unknown) {\n sendJson(res, 400, {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n })();\n return;\n }\n if (pathname === \"/live-edit\") {\n if (req.method !== \"GET\") {\n sendJson(res, 405, { ok: false, error: \"method not allowed\" });\n return;\n }\n if (rejectInvalidPreviewToken()) return;\n void (async () => {\n try {\n const targetUrl = resolvePreviewSnapshotUrl(\n manifest.devServerUrl,\n requestUrl.searchParams.get(\"url\") ??\n requestUrl.searchParams.get(\"path\"),\n );\n const snapshot = await fetchPreviewSnapshot(\n manifest.devServerUrl,\n targetUrl,\n previewSessionCookies,\n );\n const includeEditorBridge =\n requestUrl.searchParams.get(\"bridge\") !== \"0\";\n const requestedBridgeKey =\n requestUrl.searchParams.get(\"bridgeKey\")?.trim() ?? \"\";\n const editorBridgeScript = requestedBridgeKey\n ? (liveEditBridgeScripts.get(requestedBridgeKey) ?? \"\")\n : liveEditBridgeScript;\n if (\n includeEditorBridge &&\n requestedBridgeKey &&\n !editorBridgeScript\n ) {\n // Machine-readable `code` + echoed `bridgeKey`/`bridgeInstanceId`\n // let a client distinguish \"this bridge process restarted since\n // I last registered — safe to silently re-POST\n // /live-edit-bridge and retry\" from a genuine caller bug,\n // instead of string-matching `error` (see bridgeInstanceId's\n // doc comment above for the full rationale).\n sendJson(res, 409, {\n ok: false,\n code: \"unknown-bridge-key\",\n bridgeKey: requestedBridgeKey,\n bridgeInstanceId,\n error:\n \"The requested live-edit bridge script is not registered. Reload the Design frame to register it again.\",\n });\n return;\n }\n // The dev server route the SPA must boot on (e.g. \"/todo\"), taken\n // from the resolved snapshot target rather than the bridge's own\n // \"/live-edit\" request path.\n const targetParsed = new URL(targetUrl);\n const targetPath =\n `${targetParsed.pathname}${targetParsed.search}` || \"/\";\n const html = injectLiveEditBridge(\n snapshot.html,\n new URL(\"/\", manifest.bridgeUrl).toString(),\n includeEditorBridge ? editorBridgeScript : \"\",\n targetPath,\n );\n sendText(\n res,\n snapshot.status >= 400 ? snapshot.status : 200,\n html,\n snapshot.contentType.includes(\"html\")\n ? snapshot.contentType\n : \"text/html; charset=utf-8\",\n [\n ...snapshot.setCookieHeaders,\n previewSessionSetCookie(previewToken),\n ],\n );\n } catch (err: unknown) {\n sendJson(res, 400, {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n })();\n return;\n }\n if (pathname === \"/snapshot\") {\n if (req.method !== \"GET\") {\n sendJson(res, 405, { ok: false, error: \"method not allowed\" });\n return;\n }\n if (rejectInvalidPreviewToken()) return;\n void (async () => {\n try {\n const targetUrl = resolvePreviewSnapshotUrl(\n manifest.devServerUrl,\n requestUrl.searchParams.get(\"url\") ??\n requestUrl.searchParams.get(\"path\"),\n );\n const snapshot = await fetchPreviewSnapshot(\n manifest.devServerUrl,\n targetUrl,\n previewSessionCookies,\n );\n sendJson(res, snapshot.status >= 400 ? snapshot.status : 200, {\n ok: snapshot.status < 400,\n source: manifest.source,\n url: snapshot.url,\n status: snapshot.status,\n contentType: snapshot.contentType,\n html: snapshot.html,\n });\n } catch (err: unknown) {\n sendJson(res, 400, {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n })();\n return;\n }\n\n // ── Token-gated write endpoints (POST only) ───────────────────────────\n\n if (\n pathname === \"/read-file\" ||\n pathname === \"/write-file\" ||\n pathname === \"/apply-edit\" ||\n pathname === \"/list-files\"\n ) {\n if (req.method !== \"POST\") {\n sendJson(res, 405, { ok: false, error: \"method not allowed\" });\n return;\n }\n\n // Authenticate with constant-time comparison to prevent timing attacks.\n const providedToken = readHeader(req, \"x-bridge-token\");\n const tokenValid = constantTimeTokenMatches(providedToken, bridgeToken);\n if (!tokenValid) {\n sendJson(res, 401, {\n ok: false,\n error: \"invalid or missing bridge token\",\n });\n return;\n }\n\n // Handle asynchronously so we can use await.\n void (async () => {\n try {\n const raw = await readRequestBody(req);\n const body = JSON.parse(raw) as Record<string, unknown>;\n\n if (pathname === \"/list-files\") {\n try {\n const result = await walkBridgeFiles(manifest.rootPath);\n sendJson(res, 200, {\n ok: true,\n files: result.files,\n truncated: result.truncated,\n });\n } catch (err: unknown) {\n sendJson(res, 500, {\n ok: false,\n error: `list-files failed: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n return;\n }\n\n const relPath =\n typeof body[\"relPath\"] === \"string\" ? body[\"relPath\"] : undefined;\n\n if (!relPath) {\n sendJson(res, 400, { ok: false, error: \"relPath is required\" });\n return;\n }\n\n assertNotBlockedSecretPath(relPath);\n const initialTarget = await resolveSafeBridgeFileTarget(\n manifest.rootPath,\n relPath,\n );\n\n if (pathname === \"/read-file\") {\n // Read-file: no extension restriction (agents need to read any\n // non-secret file), but the secret-path blocklist above still\n // applies to .env*, *.pem, *.key, id_rsa*, and anything under .git/.\n const snapshot = await readBridgeFileSnapshot(\n initialTarget.absolutePath,\n );\n if (!snapshot) {\n sendJson(res, 404, { ok: false, error: \"file not found\" });\n return;\n }\n sendJson(res, 200, {\n ok: true,\n content: snapshot.content,\n versionHash: snapshot.versionHash,\n });\n return;\n }\n\n const expectedVersionHash =\n typeof body[\"expectedVersionHash\"] === \"string\"\n ? body[\"expectedVersionHash\"]\n : undefined;\n const requireExpectedVersionHash =\n body[\"requireExpectedVersionHash\"] === true;\n await withBridgeWriteLock(initialTarget.canonicalPath, async () => {\n const lockedTarget = await resolveSafeBridgeFileTarget(\n manifest.rootPath,\n relPath,\n );\n if (lockedTarget.canonicalPath !== initialTarget.canonicalPath) {\n throw new Error(\n \"Bridge target changed while waiting for the write lock\",\n );\n }\n const existing = await readBridgeFileSnapshot(\n lockedTarget.absolutePath,\n );\n assertEditableTextFile(relPath, existing);\n assertExpectedBridgeVersion(\n expectedVersionHash,\n existing?.versionHash,\n requireExpectedVersionHash,\n );\n\n if (pathname === \"/write-file\") {\n const content =\n typeof body[\"content\"] === \"string\"\n ? body[\"content\"]\n : undefined;\n if (content === undefined) {\n sendJson(res, 400, {\n ok: false,\n error: \"content is required for write-file\",\n });\n return;\n }\n const versionHash = await atomicWriteBridgeFile({\n rootPath: manifest.rootPath,\n relPath,\n lockedCanonicalPath: initialTarget.canonicalPath,\n content,\n expectedVersionHash,\n requireExpectedVersionHash,\n originalMode: existing?.mode,\n });\n sendJson(res, 200, { ok: true, relPath, versionHash });\n return;\n }\n\n // /apply-edit supports either full replace ({content}) or one\n // exact search-and-replace. Both stay within this file's lock.\n if (typeof body[\"content\"] === \"string\") {\n const versionHash = await atomicWriteBridgeFile({\n rootPath: manifest.rootPath,\n relPath,\n lockedCanonicalPath: initialTarget.canonicalPath,\n content: body[\"content\"],\n expectedVersionHash,\n requireExpectedVersionHash,\n originalMode: existing?.mode,\n });\n sendJson(res, 200, {\n ok: true,\n relPath,\n method: \"replace\",\n versionHash,\n });\n return;\n }\n\n const search =\n typeof body[\"search\"] === \"string\" ? body[\"search\"] : undefined;\n const replace =\n typeof body[\"replace\"] === \"string\"\n ? body[\"replace\"]\n : undefined;\n if (search === undefined || replace === undefined) {\n sendJson(res, 400, {\n ok: false,\n error:\n \"apply-edit requires either {content} for a full replace, or {search, replace} for a patch\",\n });\n return;\n }\n if (!existing) {\n sendJson(res, 404, {\n ok: false,\n error: \"file not found — use write-file to create new files\",\n });\n return;\n }\n if (search.length === 0) {\n sendJson(res, 400, {\n ok: false,\n error: \"search string must not be empty\",\n });\n return;\n }\n const occurrenceCount = countOccurrences(\n existing.content,\n search,\n );\n if (occurrenceCount === 0) {\n sendJson(res, 422, {\n ok: false,\n error: \"search string not found in file\",\n });\n return;\n }\n if (occurrenceCount > 1) {\n sendJson(res, 422, {\n ok: false,\n error:\n \"search string is ambiguous; it appears more than once in the file\",\n });\n return;\n }\n const updated = existing.content.replace(search, replace);\n const versionHash = await atomicWriteBridgeFile({\n rootPath: manifest.rootPath,\n relPath,\n lockedCanonicalPath: initialTarget.canonicalPath,\n content: updated,\n expectedVersionHash,\n requireExpectedVersionHash,\n originalMode: existing.mode,\n });\n sendJson(res, 200, {\n ok: true,\n relPath,\n method: \"patch\",\n versionHash,\n });\n });\n } catch (err: unknown) {\n if (err instanceof BridgePreconditionRequiredError) {\n sendJson(res, 428, {\n ok: false,\n error: \"expectedVersionHash is required\",\n });\n return;\n }\n if (err instanceof BridgeVersionConflictError) {\n sendJson(res, 409, {\n ok: false,\n error: \"version conflict\",\n currentVersionHash: err.currentVersionHash,\n });\n return;\n }\n sendJson(res, 500, {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n })();\n return;\n }\n\n if (\n req.method &&\n [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(req.method)\n ) {\n if (!previewTokenValid) {\n sendJson(res, 401, {\n ok: false,\n error: \"invalid or missing preview token\",\n });\n return;\n }\n void (async () => {\n try {\n const proxyRequestUrl = new URL(req.url ?? \"/\", manifest.bridgeUrl);\n proxyRequestUrl.searchParams.delete(\"previewToken\");\n const targetUrl = resolvePreviewProxyUrl(\n manifest.devServerUrl,\n `${proxyRequestUrl.pathname}${proxyRequestUrl.search}`,\n );\n const method = req.method ?? \"GET\";\n const requestBody =\n method === \"GET\" || method === \"HEAD\"\n ? undefined\n : await readPreviewProxyRequestBody(req);\n const cookieHeader = previewSessionCookies.headerFor(targetUrl);\n const proxied = await fetchPreviewProxyResource(\n manifest.devServerUrl,\n targetUrl,\n {\n method,\n headers: previewProxyRequestHeaders(\n req,\n manifest.devServerUrl,\n cookieHeader,\n ),\n body: requestBody,\n },\n previewSessionCookies,\n );\n const contentType = proxied.headers.get(\"content-type\") ?? \"\";\n const documentNavigation =\n readHeader(req, \"sec-fetch-dest\") === \"document\";\n const responseBody =\n documentNavigation && contentType.includes(\"html\")\n ? Buffer.from(\n injectLiveEditBridge(\n proxied.body.toString(\"utf8\"),\n new URL(\"/\", manifest.bridgeUrl).toString(),\n liveEditBridgeScript,\n (() => {\n const parsed = new URL(proxied.url);\n return `${parsed.pathname}${parsed.search}` || \"/\";\n })(),\n ),\n )\n : proxied.body;\n sendBytes(\n res,\n proxied.status,\n method === \"HEAD\" ? Buffer.alloc(0) : responseBody,\n proxied.headers,\n responseBody.length,\n proxied.setCookieHeaders,\n );\n } catch (err: unknown) {\n sendJson(\n res,\n err instanceof PreviewProxyRequestTooLargeError ? 413 : 400,\n {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n })();\n return;\n }\n\n sendJson(res, 404, { ok: false, error: \"not found\" });\n },\n );\n\n // Vite's proxied /@vite/client derives its HMR socket from the document's\n // bridge origin. Tunnel WebSocket upgrades to the one connected dev-server\n // origin so Fast Refresh remains live inside URL-backed screens. The target\n // is never caller-controlled, bridge credentials are stripped, and only a\n // same-origin iframe (or an explicit preview-token caller) can open it.\n server.on(\"upgrade\", (req, clientSocket, clientHead) => {\n const requestUrl = new URL(req.url ?? \"/\", manifest.bridgeUrl);\n const providedPreviewToken =\n readHeader(req, \"x-design-preview-token\") ||\n requestUrl.searchParams.get(\"previewToken\") ||\n readRequestCookie(req, PREVIEW_SESSION_COOKIE_NAME) ||\n \"\";\n const browserOrigin = readHeader(req, \"origin\");\n const sameBridgeOrigin =\n browserOrigin === new URL(manifest.bridgeUrl).origin;\n if (!constantTimeTokenMatches(providedPreviewToken, previewToken)) {\n clientSocket.end(\n \"HTTP/1.1 401 Unauthorized\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n\",\n );\n return;\n }\n requestUrl.searchParams.delete(\"previewToken\");\n let targetUrl: URL;\n try {\n targetUrl = new URL(\n resolvePreviewProxyUrl(\n manifest.devServerUrl,\n `${requestUrl.pathname}${requestUrl.search}`,\n ),\n );\n } catch {\n clientSocket.end(\n \"HTTP/1.1 400 Bad Request\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n\",\n );\n return;\n }\n\n const upstreamHeaders = { ...req.headers };\n delete upstreamHeaders[\"x-bridge-token\"];\n delete upstreamHeaders[\"x-design-preview-token\"];\n delete upstreamHeaders[\"authorization\"];\n delete upstreamHeaders[\"cookie\"];\n upstreamHeaders.host = targetUrl.host;\n upstreamHeaders.origin = new URL(manifest.devServerUrl).origin;\n const cookie = mergePreviewCookieHeaders(\n previewSessionCookies.headerFor(targetUrl.toString()),\n sameBridgeOrigin ? readHeader(req, \"cookie\") : \"\",\n );\n if (cookie) upstreamHeaders.cookie = cookie;\n\n const requestImpl = targetUrl.protocol === \"https:\" ? https : http;\n const upstreamRequest = requestImpl.request({\n protocol: targetUrl.protocol,\n hostname: targetUrl.hostname,\n port: targetUrl.port,\n path: `${targetUrl.pathname}${targetUrl.search}`,\n method: \"GET\",\n headers: upstreamHeaders,\n });\n upstreamRequest.on(\n \"upgrade\",\n (upstreamResponse, upstreamSocket, upstreamHead) => {\n const statusLine = `HTTP/1.1 ${upstreamResponse.statusCode ?? 101} ${upstreamResponse.statusMessage || \"Switching Protocols\"}\\r\\n`;\n const headerLines: string[] = [];\n for (\n let index = 0;\n index < upstreamResponse.rawHeaders.length;\n index += 2\n ) {\n const name = upstreamResponse.rawHeaders[index];\n const value = upstreamResponse.rawHeaders[index + 1];\n if (name && value !== undefined)\n headerLines.push(`${name}: ${value}`);\n }\n clientSocket.write(`${statusLine}${headerLines.join(\"\\r\\n\")}\\r\\n\\r\\n`);\n if (clientHead.length > 0) upstreamSocket.write(clientHead);\n if (upstreamHead.length > 0) clientSocket.write(upstreamHead);\n clientSocket.once(\"close\", () => upstreamSocket.destroy());\n upstreamSocket.once(\"close\", () => clientSocket.destroy());\n upstreamSocket.pipe(clientSocket);\n clientSocket.pipe(upstreamSocket);\n },\n );\n upstreamRequest.on(\"response\", (upstreamResponse) => {\n clientSocket.end(\n `HTTP/1.1 ${upstreamResponse.statusCode ?? 502} ${upstreamResponse.statusMessage || \"WebSocket upgrade failed\"}\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n`,\n );\n upstreamResponse.resume();\n });\n upstreamRequest.on(\"error\", () => {\n if (!clientSocket.destroyed) {\n clientSocket.end(\n \"HTTP/1.1 502 Bad Gateway\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n\",\n );\n }\n });\n upstreamRequest.end();\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(new URL(manifest.bridgeUrl).port, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n\n return { server, manifest, bridgeToken, previewToken, bridgeInstanceId };\n}\n\n/**\n * Resolve the design app URL from an explicit value or environment variables.\n * Returns undefined when no URL is configured (registration is optional).\n */\nexport function resolveAppUrl(explicit?: string): string | undefined {\n const raw =\n explicit ||\n process.env[\"AGENT_NATIVE_URL\"] ||\n process.env[\"DESIGN_APP_URL\"] ||\n process.env[\"APP_URL\"] ||\n process.env[\"VITE_APP_URL\"] ||\n process.env[\"BETTER_AUTH_URL\"] ||\n process.env[\"VITE_BETTER_AUTH_URL\"];\n if (!raw) return undefined;\n try {\n const parsed = new URL(raw.trim());\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return undefined;\n }\n return parsed.toString().replace(/\\/+$/, \"\");\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolve a bearer token from environment variables for authenticating the\n * self-registration POST. The CLI does not perform a device-code flow — it\n * relies on a pre-minted token supplied via env var (e.g. the same token\n * already written into the agent's MCP config).\n */\nfunction resolveAuthToken(): string | undefined {\n return (\n process.env[\"AGENT_NATIVE_TOKEN\"] ||\n process.env[\"DESIGN_ACCESS_TOKEN\"] ||\n process.env[\"ACCESS_TOKEN\"] ||\n undefined\n );\n}\n\n/**\n * POST to the design app's `connect-localhost` action endpoint to register\n * (or refresh) the bridge connection and persist the real bridge token on the\n * server row. This is a best-effort call: failures are logged but do not\n * abort the bridge process.\n *\n * @param appUrl - Deployed design app base URL (e.g. https://design.agent-native.com)\n * @param bridge - The running bridge returned by startDesignConnectBridge\n * @param authToken - Optional bearer token for the authenticated action route\n */\nexport async function registerConnectionWithServer(\n appUrl: string,\n bridge: DesignConnectBridge,\n authToken?: string,\n): Promise<void> {\n const endpoint = `${appUrl}/_agent-native/actions/connect-localhost`;\n const { manifest, bridgeToken, previewToken } = bridge;\n const payload = {\n devServerUrl: manifest.devServerUrl,\n bridgeUrl: manifest.bridgeUrl,\n rootPath: manifest.rootPath,\n capabilities: manifest.capabilities.filter((capability) =>\n SERVER_REGISTRATION_BRIDGE_OPERATIONS.has(capability.operation),\n ),\n routeManifest: {\n version: 1 as const,\n sourceType: \"localhost\" as const,\n devServerUrl: manifest.devServerUrl,\n rootPath: manifest.rootPath,\n routes: manifest.routes,\n generatedAt: manifest.generatedAt,\n },\n // Include the real bridge token so the server stores it on the connection\n // row. grant-localhost-write-consent then reads it from the row instead of\n // minting its own unrelated token, which would always produce a 401.\n bridgeToken,\n previewToken,\n status: \"connected\" as const,\n };\n\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n if (authToken) {\n headers[\"authorization\"] = `Bearer ${authToken}`;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 15_000);\n try {\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n if (!res.ok) {\n const message = await res.text().catch(() => res.statusText);\n throw new Error(`${res.status} ${message || res.statusText}`);\n }\n } catch (error) {\n // Best-effort: network errors or auth issues are non-fatal, but make the\n // problem discoverable before the user tries \"Apply to source\".\n console.error(\n `[design connect] Could not register bridge with ${endpoint}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction printHelp() {\n console.log(`Usage:\n agent-native design connect [options]\n\nOptions:\n --url <url> Dev server URL to inspect (auto-detected if omitted)\n --port <number> Local bridge port (default ${DEFAULT_BRIDGE_PORT})\n --root <path> App/repo root for route discovery (default cwd)\n --route-manifest <path> Non-destructive route manifest output path\n --app-url <url> Deployed design app URL for self-registration\n (also reads AGENT_NATIVE_URL / DESIGN_APP_URL env)\n --bridge-token <token> Adopt a bridge token minted server-side by the\n authenticated connect-localhost / open-visual-edit\n action instead of minting one. Used by the remote-MCP\n /visual-edit flow so the bridge and the user's stored\n connection token match with no self-registration.\n (also reads AGENT_NATIVE_BRIDGE_TOKEN env)\n --preview-token <token> Adopt the paired read-only browser preview token.\n Optional when --bridge-token is present: compatible\n clients derive the same one-way token automatically.\n (also reads AGENT_NATIVE_PREVIEW_TOKEN env)\n --daemon Start the bridge detached, wait for /health, then exit\n --json Print the manifest JSON and exit\n --once Prepare/scaffold the manifest and exit\n --dry-run Print what would be exposed without writing files\n\nElement provenance (resolveNodeToFile):\n The design editor can map a selected DOM element back to its source file,\n line, and component name using one of these provenance sources:\n\n • React development builds with jsxDEV enabled (the default):\n Design reads the selected element's development-only Fiber debug stack.\n React does not emit data-source-* DOM attributes automatically.\n\n • A Babel source plugin (e.g. babel-plugin-react-source or a custom plugin):\n Emits data-source-file=\"src/Button.tsx\" data-source-line=\"12\"\n data-source-column=\"4\" data-component-name=\"Button\" on each element.\n\n • data-loc=\"src/Button.tsx:12:4\" shorthand attribute (Babel source convention):\n The bridge parses this as { sourceFile, line, column } automatically.\n\n In production React builds and other runtimes without explicit attributes,\n the editor still works but exact element provenance may be absent.\n Cross-origin localhost iframes cannot be read regardless of attributes (CSP).`);\n}\n\nfunction removeDaemonFlag(argv: string[]): string[] {\n return argv.filter((arg) => arg !== \"--daemon\");\n}\n\nfunction resolveCurrentCliInvocation(argv: string[]): {\n command: string;\n args: string[];\n} {\n const suffixLength = argv.length + 1; // leading \"design\" command + runDesign argv\n const prefixEnd = Math.max(1, process.argv.length - suffixLength);\n const cliPrefix = process.argv.slice(1, prefixEnd);\n const entry = cliPrefix[0] ?? process.argv[1];\n if (!entry) {\n throw new Error(\"Could not resolve current CLI entrypoint for --daemon\");\n }\n if (entry.endsWith(\".ts\") || entry.endsWith(\".tsx\")) {\n return {\n command: \"tsx\",\n args: [...cliPrefix, \"design\", ...removeDaemonFlag(argv)],\n };\n }\n return {\n command: process.execPath,\n args: [...cliPrefix, \"design\", ...removeDaemonFlag(argv)],\n };\n}\n\nasync function startDetachedDesignBridge(\n argv: string[],\n manifest: DesignConnectManifest,\n previewToken?: string,\n): Promise<number> {\n if (await waitForBridgeHealth(manifest.bridgeUrl, 800)) {\n const [runningManifest, runningFingerprint] = await Promise.all([\n fetchRunningBridgeManifest(manifest.bridgeUrl, previewToken),\n fetchRunningBridgeFingerprint(manifest.bridgeUrl),\n ]);\n const fingerprintMatches =\n runningFingerprint === designConnectAppFingerprint(manifest);\n if (\n (runningManifest &&\n designConnectManifestsTargetSameApp(runningManifest, manifest)) ||\n fingerprintMatches\n ) {\n console.error(\n `Design localhost bridge already running at ${manifest.bridgeUrl}`,\n );\n console.log(JSON.stringify(runningManifest ?? manifest, null, 2));\n return 0;\n }\n\n console.error(\n [\n `Design localhost bridge already running at ${manifest.bridgeUrl} for a different app.`,\n runningManifest\n ? `Running app: ${runningManifest.devServerUrl} (${runningManifest.rootPath})`\n : \"Running bridge did not expose a compatible manifest.\",\n `Requested app: ${manifest.devServerUrl} (${manifest.rootPath})`,\n \"Stop the existing bridge or choose a different --port.\",\n ].join(\"\\n\"),\n );\n return 1;\n }\n\n const invocation = resolveCurrentCliInvocation(argv);\n const child = spawn(invocation.command, invocation.args, {\n cwd: process.cwd(),\n detached: true,\n env: process.env,\n stdio: \"ignore\",\n shell: process.platform === \"win32\",\n });\n child.unref();\n\n if (await waitForBridgeHealth(manifest.bridgeUrl)) {\n console.error(`Design localhost bridge running at ${manifest.bridgeUrl}`);\n console.log(JSON.stringify(manifest, null, 2));\n return 0;\n }\n\n console.error(\n `Timed out waiting for detached Design bridge at ${manifest.bridgeUrl}`,\n );\n return 1;\n}\n\nexport async function runDesign(argv: string[]) {\n const subcommand = argv[0];\n if (subcommand !== \"connect\") {\n if (\n subcommand === \"help\" ||\n subcommand === \"--help\" ||\n subcommand === \"-h\"\n ) {\n printHelp();\n return 0;\n }\n console.error(\"Usage: agent-native design connect [options]\");\n return 1;\n }\n\n const parsed = parseDesignConnectArgs(argv);\n if (parsed.help) {\n printHelp();\n return 0;\n }\n\n const manifest = await prepareDesignConnectManifest(parsed);\n const seedBridgeToken =\n parsed.bridgeToken || process.env[\"AGENT_NATIVE_BRIDGE_TOKEN\"] || undefined;\n const seedPreviewToken =\n parsed.previewToken ||\n process.env[\"AGENT_NATIVE_PREVIEW_TOKEN\"] ||\n (seedBridgeToken ? deriveDesignPreviewToken(seedBridgeToken) : undefined);\n const appUrl = resolveAppUrl(parsed.appUrl);\n if (parsed.daemon) {\n return startDetachedDesignBridge(argv, manifest, seedPreviewToken);\n }\n if (parsed.json || parsed.once || parsed.dryRun) {\n console.log(JSON.stringify(manifest, null, 2));\n return 0;\n }\n\n const bridge = await startDesignConnectBridge(manifest, {\n bridgeToken: seedBridgeToken,\n previewToken: seedPreviewToken,\n allowedOrigins: appUrl ? [appUrl] : [],\n });\n console.error(\"Design localhost bridge running\");\n console.error(`Bridge: ${manifest.bridgeUrl}`);\n console.error(`Manifest: ${manifest.bridgeUrl}/manifest.json`);\n console.error(`Routes: ${manifest.routeCount}`);\n console.error(`Dev URL: ${manifest.devServerUrl}`);\n\n if (seedBridgeToken) {\n // Server already stored this token on the row; bridge matches it, so no\n // self-registration needed. Zero-config path for the remote-MCP flow.\n console.error(\n \"[design connect] Using server-provided bridge token; skipping self-registration.\",\n );\n } else {\n // No seed: fall back to self-registration — POST the minted token to\n // connect-localhost. Needs an auth token in env or it 401s (the old gap).\n if (appUrl) {\n void registerConnectionWithServer(appUrl, bridge, resolveAuthToken());\n } else {\n // No token source at all — warn rather than 401 silently at edit time.\n console.error(\n \"[design connect] No bridge token or app URL resolved (pass --bridge-token, or --app-url / AGENT_NATIVE_URL); skipping self-registration — browser preview and live-edit will fail to authorize.\",\n );\n }\n }\n\n return await new Promise<number>((resolve) => {\n const stop = () => {\n bridge.server.close(() => resolve(0));\n };\n for (const signal of [\"SIGINT\", \"SIGTERM\", \"SIGHUP\"] as const) {\n process.once(signal, stop);\n }\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"design-connect.js","sourceRoot":"","sources":["../../src/cli/design-connect.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn } from \"node:child_process\";\nimport crypto from \"node:crypto\";\nimport fsSync from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport type { FileHandle } from \"node:fs/promises\";\nimport http, {\n type IncomingMessage,\n type Server,\n type ServerResponse,\n} from \"node:http\";\nimport https from \"node:https\";\nimport path from \"node:path\";\n\nconst DEFAULT_BRIDGE_PORT = 7331;\nconst ROUTE_MANIFEST_FILE = path.join(\".agent-native\", \"design-routes.json\");\nconst DEFAULT_DEV_SERVER_CANDIDATES = [\n \"http://127.0.0.1:5173\",\n \"http://localhost:5173\",\n \"http://127.0.0.1:3000\",\n \"http://localhost:3000\",\n \"http://127.0.0.1:8080\",\n \"http://localhost:8080\",\n];\n\nconst BRIDGE_OPERATIONS = [\n \"select\",\n \"resolveNodeToFile\",\n \"readFile\",\n \"applyEdit\",\n \"writeFile\",\n \"captureSnapshot\",\n \"captureState\",\n \"listFiles\",\n] as const;\n\ntype BridgeOperation = (typeof BRIDGE_OPERATIONS)[number];\n\nconst SERVER_REGISTRATION_BRIDGE_OPERATIONS = new Set<BridgeOperation>([\n \"select\",\n \"resolveNodeToFile\",\n \"readFile\",\n \"applyEdit\",\n \"writeFile\",\n \"captureSnapshot\",\n \"captureState\",\n]);\n\n/** Additive manifest capability flags advertised alongside the operation list. */\nconst MANIFEST_CAPABILITIES = {\n listFiles: true,\n readTextFiles: true,\n writeTextFiles: true,\n} as const;\n\nexport interface DesignConnectArgs {\n url?: string;\n port: number;\n root: string;\n routeManifest?: string;\n /** Optional deployed design app URL used to self-register the bridge on\n * startup. When set (or when AGENT_NATIVE_URL / DESIGN_APP_URL env vars\n * are present) the CLI POSTs to `/_agent-native/actions/connect-localhost`\n * with the real bridge token so the server can store it for grant minting. */\n appUrl?: string;\n /** Server-minted bridge token to adopt instead of minting one, so the bridge\n * matches the token already stored on the user's connection row (no\n * self-registration). Also read from AGENT_NATIVE_BRIDGE_TOKEN. */\n bridgeToken?: string;\n /** Read-only token used by Design browser previews. This is deliberately\n * distinct from `bridgeToken`, which unlocks local filesystem reads/writes.\n * When omitted it is derived one-way from bridgeToken for compatibility\n * with existing /visual-edit launch commands. */\n previewToken?: string;\n json: boolean;\n once: boolean;\n dryRun: boolean;\n daemon: boolean;\n help: boolean;\n}\n\nexport interface DesignConnectRoute {\n id: string;\n path: string;\n title: string;\n sourceFile?: string;\n sourceKind: \"react-router\" | \"html\" | \"manual\";\n screenshotUrl?: string;\n metadata?: Record<string, unknown>;\n}\n\nexport interface DesignConnectManifest {\n version: 1;\n source: \"agent-native-design-connect\";\n sourceType: \"localhost\";\n localOnly: true;\n devServerUrl: string;\n bridgeUrl: string;\n rootPath: string;\n routeManifestPath: string;\n routeManifestCreated: boolean;\n routes: DesignConnectRoute[];\n routeCount: number;\n generatedAt: string;\n capabilities: Array<{\n operation: BridgeOperation;\n status: \"available\" | \"planned\" | \"disabled\";\n reason?: string;\n }>;\n /**\n * Additive high-level capability flags beyond the low-level operation list.\n * `connect-localhost` persists this so `list-design-source-capabilities` can\n * reflect readFile/writeFile/listFiles availability for localhost sources.\n */\n manifestCapabilities: typeof MANIFEST_CAPABILITIES;\n}\n\nexport interface DesignConnectBridge {\n server: Server;\n manifest: DesignConnectManifest;\n /** Per-rootPath bridge token. Kept in-process only; never serialised into\n * the manifest JSON so it is not exposed over the network via GET /manifest.\n * The server-side grant action reads it from the running bridge instance. */\n bridgeToken: string;\n /** Read-only token accepted by manifest, route, snapshot, proxy, and editor\n * bridge-registration endpoints. Safe to hand to the Design browser, but\n * never accepted by filesystem endpoints. */\n previewToken: string;\n /** Random id minted fresh each time this bridge process boots. Also\n * returned by `/health`, `/live-edit-bridge`, and the \"unknown bridge key\"\n * 409 from `/live-edit` — a client can compare it across those responses\n * to tell a restarted bridge process apart from a genuine registration\n * bug. See the `bridgeInstanceId` doc comment in startDesignConnectBridge. */\n bridgeInstanceId: string;\n}\n\nexport interface DesignConnectBridgeOptions {\n bridgeToken?: string;\n previewToken?: string;\n /** Extra exact browser origins allowed to make CORS requests to the bridge.\n * The production Design origin and loopback development origins are always\n * recognized; custom deployments should pass their app origin here. */\n allowedOrigins?: string[];\n}\n\nconst PREVIEW_TOKEN_DOMAIN = \"agent-native-design-preview-v1\\0\";\nconst PREVIEW_SESSION_COOKIE_NAME = \"agent-native-preview-token\";\n\n/**\n * Derive a read-only preview credential from the stronger filesystem token.\n * The one-way hash keeps old `--bridge-token` launch commands compatible while\n * ensuring a leaked preview credential cannot be promoted into write access.\n */\nexport function deriveDesignPreviewToken(bridgeToken: string): string {\n return crypto\n .createHash(\"sha256\")\n .update(PREVIEW_TOKEN_DOMAIN)\n .update(bridgeToken)\n .digest(\"hex\");\n}\n\nfunction stringFlagValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n if (!value || value.startsWith(\"-\")) {\n throw new Error(`${flag} requires a value`);\n }\n return value;\n}\n\nfunction normalizeSlash(value: string) {\n return value.replace(/\\\\/g, \"/\");\n}\n\nfunction normalizeHttpUrl(value: string): string {\n const raw = value.trim();\n const withProtocol = /^[a-z]+:\\/\\//i.test(raw) ? raw : `http://${raw}`;\n const parsed = new URL(withProtocol);\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"--url must be an http(s) URL\");\n }\n parsed.hash = \"\";\n return parsed.toString().replace(/\\/$/, \"\");\n}\n\nexport function parseDesignConnectArgs(argv: string[]): DesignConnectArgs {\n const args = argv[0] === \"connect\" ? argv.slice(1) : argv;\n const parsed: DesignConnectArgs = {\n port: DEFAULT_BRIDGE_PORT,\n root: process.cwd(),\n json: false,\n once: false,\n dryRun: false,\n daemon: false,\n help: false,\n };\n\n for (let index = 0; index < args.length; index += 1) {\n const arg = args[index]!;\n if (arg === \"help\" || arg === \"--help\" || arg === \"-h\") {\n parsed.help = true;\n } else if (arg === \"--url\") {\n parsed.url = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--url=\")) {\n parsed.url = arg.slice(\"--url=\".length);\n } else if (arg === \"--port\") {\n parsed.port = Number.parseInt(stringFlagValue(args, index, arg), 10);\n index += 1;\n } else if (arg.startsWith(\"--port=\")) {\n parsed.port = Number.parseInt(arg.slice(\"--port=\".length), 10);\n } else if (arg === \"--root\") {\n parsed.root = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--root=\")) {\n parsed.root = arg.slice(\"--root=\".length);\n } else if (arg === \"--route-manifest\") {\n parsed.routeManifest = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--route-manifest=\")) {\n parsed.routeManifest = arg.slice(\"--route-manifest=\".length);\n } else if (arg === \"--app-url\") {\n parsed.appUrl = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--app-url=\")) {\n parsed.appUrl = arg.slice(\"--app-url=\".length);\n } else if (arg === \"--bridge-token\") {\n parsed.bridgeToken = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--bridge-token=\")) {\n parsed.bridgeToken = arg.slice(\"--bridge-token=\".length);\n } else if (arg === \"--preview-token\") {\n parsed.previewToken = stringFlagValue(args, index, arg);\n index += 1;\n } else if (arg.startsWith(\"--preview-token=\")) {\n parsed.previewToken = arg.slice(\"--preview-token=\".length);\n } else if (arg === \"--json\") {\n parsed.json = true;\n parsed.once = true;\n } else if (arg === \"--once\") {\n parsed.once = true;\n } else if (arg === \"--dry-run\") {\n parsed.dryRun = true;\n parsed.once = true;\n } else if (arg === \"--daemon\") {\n parsed.daemon = true;\n } else if (arg.startsWith(\"-\")) {\n throw new Error(`Unknown option: ${arg}`);\n } else {\n throw new Error(`Unexpected argument: ${arg}`);\n }\n }\n\n if (!Number.isInteger(parsed.port) || parsed.port <= 0) {\n throw new Error(\"--port must be a positive integer\");\n }\n if (parsed.daemon && (parsed.json || parsed.once || parsed.dryRun)) {\n throw new Error(\n \"--daemon cannot be combined with --json, --once, or --dry-run\",\n );\n }\n parsed.root = path.resolve(parsed.root);\n parsed.url = parsed.url ? normalizeHttpUrl(parsed.url) : undefined;\n return parsed;\n}\n\nfunction routeId(routePath: string): string {\n const normalized = routePath.trim() || \"/\";\n const slug = normalized\n .replace(/^\\/+/, \"\")\n .replace(/\\*/g, \"w\")\n .replace(/:/g, \"p\")\n .replace(/[[\\]]/g, \"\")\n .replace(/[^a-zA-Z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .toLowerCase();\n // Slugs are intentionally readable but necessarily lossy: `/foo/bar`,\n // `/foo-bar`, and `/foo_bar` all collapse to the same text, while `/` and\n // `/*` can collide with literal `/root` and `/wildcard` paths. Suffix every\n // route with a stable hash of its normalized path so URL/query states and\n // router patterns can never silently replace one another in the manifest.\n const readable =\n normalized === \"/\"\n ? \"root\"\n : /^\\/\\*+$/.test(normalized) || !slug\n ? \"wildcard\"\n : slug;\n return `route-${readable}-${stableRoutePathHash(normalized)}`;\n}\n\nfunction stableRoutePathHash(value: string): string {\n let hash = 0xcbf29ce484222325n;\n for (const character of value) {\n hash ^= BigInt(character.codePointAt(0)!);\n hash = BigInt.asUintN(64, hash * 0x100000001b3n);\n }\n return hash.toString(36);\n}\n\nfunction titleFromRoutePath(routePath: string): string {\n if (routePath === \"/\") return \"Home\";\n if (routePath === \"/*\" || routePath === \"*\") return \"Wildcard\";\n return (\n routePath\n .replace(/^\\/+/, \"\")\n .replace(/[:$]/g, \"\")\n .replace(/[-_/]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/\\b\\w/g, (char) => char.toUpperCase()) || \"Screen\"\n );\n}\n\nfunction walkFiles(dir: string, files: string[] = []): string[] {\n if (!fsSync.existsSync(dir)) return files;\n for (const entry of fsSync.readdirSync(dir, { withFileTypes: true })) {\n if (entry.name === \"node_modules\" || entry.name === \".git\") continue;\n const absolute = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walkFiles(absolute, files);\n } else {\n files.push(absolute);\n }\n }\n return files;\n}\n\nfunction routePathFromReactRouterFile(filePath: string, routesDir: string) {\n const withoutExt = normalizeSlash(path.relative(routesDir, filePath)).replace(\n /\\.[cm]?[jt]sx?$/,\n \"\",\n );\n const parts: string[] = [];\n for (const segment of withoutExt.split(\"/\")) {\n for (const token of segment.split(\".\")) {\n if (!token || token === \"route\" || token === \"index\") continue;\n if (token === \"_index\") continue;\n if (token.startsWith(\"_\")) continue;\n const pathToken = token.endsWith(\"_\") ? token.slice(0, -1) : token;\n if (pathToken === \"$\") {\n parts.push(\"*\");\n } else if (pathToken.startsWith(\"$\")) {\n const param = pathToken.slice(1) || \"param\";\n parts.push(`:${param}`);\n } else {\n parts.push(pathToken);\n }\n }\n }\n return `/${parts.join(\"/\")}`.replace(/\\/+/g, \"/\");\n}\n\nexport function discoverDesignRoutes(root: string): DesignConnectRoute[] {\n const absoluteRoot = path.resolve(root);\n const routeDirs = [\n path.join(absoluteRoot, \"app\", \"routes\"),\n path.join(absoluteRoot, \"src\", \"routes\"),\n path.join(absoluteRoot, \"pages\"),\n ].filter((dir) => fsSync.existsSync(dir));\n const routes = new Map<string, DesignConnectRoute>();\n\n for (const routeDir of routeDirs) {\n for (const file of walkFiles(routeDir)) {\n if (!/\\.[cm]?[jt]sx?$/.test(file)) continue;\n if (/\\.test\\.|\\.spec\\./.test(file)) continue;\n const pathName = routePathFromReactRouterFile(file, routeDir);\n routes.set(pathName, {\n id: routeId(pathName),\n path: pathName,\n title: titleFromRoutePath(pathName),\n sourceFile: normalizeSlash(path.relative(absoluteRoot, file)),\n sourceKind: \"react-router\",\n });\n }\n }\n\n if (routes.size === 0) {\n for (const dir of [absoluteRoot, path.join(absoluteRoot, \"public\")]) {\n for (const file of walkFiles(dir)) {\n if (!file.endsWith(\".html\")) continue;\n const rel = normalizeSlash(path.relative(dir, file));\n const pathName =\n rel === \"index.html\" ? \"/\" : `/${rel.replace(/\\.html$/, \"\")}`;\n routes.set(pathName, {\n id: routeId(pathName),\n path: pathName,\n title: titleFromRoutePath(pathName),\n sourceFile: normalizeSlash(path.relative(absoluteRoot, file)),\n sourceKind: \"html\",\n });\n }\n }\n }\n\n return [...routes.values()].sort((a, b) => {\n if (a.path === \"/\") return -1;\n if (b.path === \"/\") return 1;\n return a.path.localeCompare(b.path);\n });\n}\n\nasync function probeDevServer(url: string): Promise<boolean> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 800);\n try {\n const response = await fetch(url, {\n method: \"GET\",\n signal: controller.signal,\n });\n return response.status < 500;\n } catch {\n return false;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nasync function waitForBridgeHealth(\n bridgeUrl: string,\n timeoutMs = 5_000,\n): Promise<boolean> {\n const healthUrl = new URL(\"/health\", bridgeUrl).toString();\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 400);\n try {\n const response = await fetch(healthUrl, {\n method: \"GET\",\n signal: controller.signal,\n });\n if (response.ok) return true;\n } catch {\n // Keep polling until the detached process finishes binding the port.\n } finally {\n clearTimeout(timeout);\n }\n await new Promise((resolve) => setTimeout(resolve, 150));\n }\n return false;\n}\n\nfunction isDesignConnectManifest(\n value: unknown,\n): value is DesignConnectManifest {\n if (!value || typeof value !== \"object\") return false;\n const manifest = value as Partial<DesignConnectManifest>;\n return (\n manifest.version === 1 &&\n manifest.source === \"agent-native-design-connect\" &&\n manifest.sourceType === \"localhost\" &&\n manifest.localOnly === true &&\n typeof manifest.devServerUrl === \"string\" &&\n typeof manifest.bridgeUrl === \"string\" &&\n typeof manifest.rootPath === \"string\"\n );\n}\n\nasync function fetchRunningBridgeManifest(\n bridgeUrl: string,\n previewToken?: string,\n): Promise<DesignConnectManifest | null> {\n const manifestUrl = new URL(\"/manifest.json\", bridgeUrl);\n if (previewToken) {\n manifestUrl.searchParams.set(\"previewToken\", previewToken);\n }\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 800);\n try {\n const response = await fetch(manifestUrl, {\n method: \"GET\",\n signal: controller.signal,\n });\n if (!response.ok) return null;\n const body = (await response.json()) as unknown;\n return isDesignConnectManifest(body) ? body : null;\n } catch {\n return null;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport function designConnectManifestsTargetSameApp(\n running: Pick<DesignConnectManifest, \"devServerUrl\" | \"rootPath\">,\n requested: Pick<DesignConnectManifest, \"devServerUrl\" | \"rootPath\">,\n): boolean {\n let runningUrl = running.devServerUrl;\n let requestedUrl = requested.devServerUrl;\n try {\n runningUrl = normalizeHttpUrl(runningUrl);\n requestedUrl = normalizeHttpUrl(requestedUrl);\n } catch {\n // Fall through to direct string comparison for malformed legacy manifests.\n }\n return (\n runningUrl === requestedUrl &&\n path.resolve(running.rootPath) === path.resolve(requested.rootPath)\n );\n}\n\n/** Non-sensitive stable identifier used by /health so daemon reruns can detect\n * an already-running bridge for the same app without exposing its root path or\n * route manifest. */\nexport function designConnectAppFingerprint(\n manifest: Pick<DesignConnectManifest, \"devServerUrl\" | \"rootPath\">,\n): string {\n let devServerUrl = manifest.devServerUrl;\n try {\n devServerUrl = normalizeHttpUrl(devServerUrl);\n } catch {\n // Hash the original string for malformed legacy manifests.\n }\n return crypto\n .createHash(\"sha256\")\n .update(`${devServerUrl}\\n${path.resolve(manifest.rootPath)}`)\n .digest(\"base64url\")\n .slice(0, 24);\n}\n\nasync function fetchRunningBridgeFingerprint(\n bridgeUrl: string,\n): Promise<string | null> {\n const healthUrl = new URL(\"/health\", bridgeUrl).toString();\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 800);\n try {\n const response = await fetch(healthUrl, {\n method: \"GET\",\n signal: controller.signal,\n });\n if (!response.ok) return null;\n const body = (await response.json()) as Record<string, unknown>;\n return typeof body[\"appFingerprint\"] === \"string\"\n ? body[\"appFingerprint\"]\n : null;\n } catch {\n return null;\n } finally {\n clearTimeout(timeout);\n }\n}\n\nasync function resolveDevServerUrl(url?: string): Promise<string> {\n if (url) return normalizeHttpUrl(url);\n for (const candidate of DEFAULT_DEV_SERVER_CANDIDATES) {\n if (await probeDevServer(candidate)) return candidate;\n }\n return DEFAULT_DEV_SERVER_CANDIDATES[0]!;\n}\n\nasync function ensureRouteManifest(options: {\n root: string;\n routeManifestPath: string;\n routes: DesignConnectRoute[];\n devServerUrl: string;\n dryRun: boolean;\n}): Promise<{ path: string; created: boolean; routes: DesignConnectRoute[] }> {\n const manifestPath = path.isAbsolute(options.routeManifestPath)\n ? options.routeManifestPath\n : path.join(options.root, options.routeManifestPath);\n if (fsSync.existsSync(manifestPath)) {\n try {\n const parsed = JSON.parse(\n await fs.readFile(manifestPath, \"utf8\"),\n ) as Record<string, unknown>;\n const savedRoutes = Array.isArray(parsed.routes)\n ? parsed.routes.flatMap((value): DesignConnectRoute[] => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return [];\n }\n const route = value as Record<string, unknown>;\n if (typeof route.path !== \"string\" || !route.path.trim()) return [];\n const sourceKind =\n route.sourceKind === \"react-router\" ||\n route.sourceKind === \"html\" ||\n route.sourceKind === \"manual\"\n ? route.sourceKind\n : \"manual\";\n return [\n {\n id:\n typeof route.id === \"string\" && route.id.trim()\n ? route.id\n : routeId(route.path),\n path: route.path,\n title:\n typeof route.title === \"string\" && route.title.trim()\n ? route.title\n : titleFromRoutePath(route.path),\n sourceFile:\n typeof route.sourceFile === \"string\"\n ? route.sourceFile\n : undefined,\n sourceKind,\n screenshotUrl:\n typeof route.screenshotUrl === \"string\"\n ? route.screenshotUrl\n : undefined,\n metadata:\n route.metadata &&\n typeof route.metadata === \"object\" &&\n !Array.isArray(route.metadata)\n ? (route.metadata as Record<string, unknown>)\n : undefined,\n },\n ];\n })\n : [];\n if (savedRoutes.length > 0) {\n const savedPaths = new Set(savedRoutes.map((route) => route.path));\n return {\n path: manifestPath,\n created: false,\n // Keep manual/custom route order and metadata while still surfacing\n // newly discovered routes on subsequent bridge starts.\n routes: [\n ...savedRoutes,\n ...options.routes.filter((route) => !savedPaths.has(route.path)),\n ],\n };\n }\n } catch {\n // Never overwrite a malformed/custom file. Route discovery remains a\n // safe runtime fallback and the user can repair the manifest in place.\n }\n return { path: manifestPath, created: false, routes: options.routes };\n }\n if (!options.dryRun) {\n await fs.mkdir(path.dirname(manifestPath), { recursive: true });\n await fs.writeFile(\n manifestPath,\n `${JSON.stringify(\n {\n version: 1,\n sourceType: \"localhost\",\n devServerUrl: options.devServerUrl,\n rootPath: options.root,\n routes: options.routes,\n generatedAt: new Date().toISOString(),\n },\n null,\n 2,\n )}\\n`,\n \"utf8\",\n );\n }\n return {\n path: manifestPath,\n created: !options.dryRun,\n routes: options.routes,\n };\n}\n\nexport async function prepareDesignConnectManifest(\n options: Partial<DesignConnectArgs> & { root?: string } = {},\n): Promise<DesignConnectManifest> {\n const root = path.resolve(options.root ?? process.cwd());\n const port = options.port ?? DEFAULT_BRIDGE_PORT;\n const devServerUrl = await resolveDevServerUrl(options.url);\n const bridgeUrl = `http://127.0.0.1:${port}`;\n const discoveredRoutes = discoverDesignRoutes(root);\n const routeManifest = await ensureRouteManifest({\n root,\n routeManifestPath: options.routeManifest ?? ROUTE_MANIFEST_FILE,\n routes: discoveredRoutes,\n devServerUrl,\n dryRun: Boolean(options.dryRun),\n });\n const generatedAt = new Date().toISOString();\n const routes = routeManifest.routes;\n\n return {\n version: 1,\n source: \"agent-native-design-connect\",\n sourceType: \"localhost\",\n localOnly: true,\n devServerUrl,\n bridgeUrl,\n rootPath: root,\n routeManifestPath: routeManifest.path,\n routeManifestCreated: routeManifest.created,\n routes,\n routeCount: routes.length,\n generatedAt,\n manifestCapabilities: MANIFEST_CAPABILITIES,\n capabilities: BRIDGE_OPERATIONS.map((operation) => ({\n operation,\n status: \"available\" as const,\n reason:\n operation === \"resolveNodeToFile\"\n ? // resolveNodeToFile maps a runtime DOM node id (from the editor's\n // 'select' payload) to { file, line, component } provenance.\n // React development builds expose jsxDEV call sites through the\n // Fiber debug stack; other runtimes/builds can emit explicit DOM\n // provenance attributes — see the help text below.\n \"React development builds resolve jsxDEV call sites automatically; other runtimes can emit data-source-file / data-source-line / data-component-name attributes.\"\n : undefined,\n })),\n };\n}\n\nconst BRIDGE_CORS_HEADERS = Symbol(\"agent-native-design-bridge-cors\");\n\ntype CorsAwareResponse = ServerResponse & {\n [BRIDGE_CORS_HEADERS]?: Record<string, string>;\n};\n\nfunction isLoopbackOrigin(parsed: URL): boolean {\n const hostname = parsed.hostname.toLowerCase().replace(/^\\[|\\]$/g, \"\");\n return (\n hostname === \"localhost\" ||\n hostname === \"::1\" ||\n /^127(?:\\.\\d{1,3}){3}$/.test(hostname)\n );\n}\n\nfunction isApprovedDesignOrigin(\n rawOrigin: string,\n configuredOrigins: ReadonlySet<string>,\n): boolean {\n let parsed: URL;\n try {\n parsed = new URL(rawOrigin);\n } catch {\n return false;\n }\n if (parsed.origin !== rawOrigin) return false;\n if (configuredOrigins.has(parsed.origin)) return true;\n if (\n (parsed.protocol === \"http:\" || parsed.protocol === \"https:\") &&\n isLoopbackOrigin(parsed)\n ) {\n return true;\n }\n return (\n parsed.protocol === \"https:\" &&\n (parsed.hostname === \"design.agent-native.com\" ||\n parsed.hostname.endsWith(\".design.agent-native.com\"))\n );\n}\n\nfunction configureBridgeCors(\n req: IncomingMessage,\n res: ServerResponse,\n configuredOrigins: ReadonlySet<string>,\n): boolean {\n const origin =\n typeof req.headers.origin === \"string\" ? req.headers.origin : \"\";\n const approved = origin\n ? isApprovedDesignOrigin(origin, configuredOrigins)\n : false;\n (res as CorsAwareResponse)[BRIDGE_CORS_HEADERS] = approved\n ? {\n \"access-control-allow-origin\": origin,\n \"access-control-allow-methods\":\n \"GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS\",\n \"access-control-allow-headers\":\n \"authorization, content-type, x-bridge-token, x-design-preview-token, x-csrf-token, x-xsrf-token, x-requested-with\",\n \"access-control-allow-private-network\": \"true\",\n vary: \"Origin\",\n }\n : {};\n return approved;\n}\n\nfunction bridgeCorsHeaders(res: ServerResponse): Record<string, string> {\n return (res as CorsAwareResponse)[BRIDGE_CORS_HEADERS] ?? {};\n}\n\nfunction sendJson(\n res: ServerResponse,\n statusCode: number,\n body: Record<string, unknown>,\n) {\n res.writeHead(statusCode, {\n \"content-type\": \"application/json; charset=utf-8\",\n ...bridgeCorsHeaders(res),\n });\n res.end(`${JSON.stringify(body, null, 2)}\\n`);\n}\n\nfunction sendText(\n res: ServerResponse,\n statusCode: number,\n body: string,\n contentType: string,\n setCookieHeaders: string[] = [],\n) {\n res.writeHead(statusCode, {\n \"content-type\": contentType,\n ...(setCookieHeaders.length > 0 ? { \"set-cookie\": setCookieHeaders } : {}),\n ...bridgeCorsHeaders(res),\n });\n res.end(body);\n}\n\nfunction sendBytes(\n res: ServerResponse,\n statusCode: number,\n body: Buffer,\n headers: Headers,\n contentLength = body.length,\n setCookieHeaders: string[] = [],\n) {\n const responseHeaders: Record<string, string | string[]> = {\n ...bridgeCorsHeaders(res),\n \"content-length\": String(contentLength),\n ...(setCookieHeaders.length > 0 ? { \"set-cookie\": setCookieHeaders } : {}),\n };\n for (const name of [\n \"content-type\",\n \"cache-control\",\n \"etag\",\n \"last-modified\",\n ]) {\n const value = headers.get(name);\n if (value) responseHeaders[name] = value;\n }\n res.writeHead(statusCode, responseHeaders);\n res.end(body);\n}\n\nfunction sameOrigin(a: string, b: string): boolean {\n try {\n return new URL(a).origin === new URL(b).origin;\n } catch {\n return false;\n }\n}\n\nfunction constantTimeTokenMatches(\n providedToken: string,\n expectedToken: string,\n): boolean {\n try {\n return (\n providedToken.length === expectedToken.length &&\n crypto.timingSafeEqual(\n Buffer.from(providedToken, \"utf8\"),\n Buffer.from(expectedToken, \"utf8\"),\n )\n );\n } catch {\n return false;\n }\n}\n\nfunction readHeader(req: IncomingMessage, name: string): string {\n const value = req.headers[name];\n return typeof value === \"string\" ? value : \"\";\n}\n\nfunction readRequestCookie(req: IncomingMessage, name: string): string {\n for (const rawPair of readHeader(req, \"cookie\").split(\";\")) {\n const pair = rawPair.trim();\n const separator = pair.indexOf(\"=\");\n if (separator <= 0 || pair.slice(0, separator).trim() !== name) continue;\n return pair.slice(separator + 1).trim();\n }\n return \"\";\n}\n\nfunction previewSessionSetCookie(previewToken: string): string {\n // Partitioned SameSite=None keeps the read-only bridge credential available\n // to nested Design frames without granting an unpartitioned third-party\n // cookie. Loopback origins are potentially trustworthy in Chromium, which\n // permits Secure cookies for local development.\n return `${PREVIEW_SESSION_COOKIE_NAME}=${previewToken}; HttpOnly; Path=/; SameSite=None; Secure; Partitioned`;\n}\n\n/**\n * Preserve only browser metadata a local dev server needs to classify module\n * requests and parse ordinary same-origin app mutations. Browser cookies and\n * Authorization are forwarded only when Sec-Fetch-Site says the request came\n * from the proxied app itself; cross-site callers cannot relay them. Bridge\n * control tokens and referrers are never forwarded, and mutation origins are\n * replaced with the connected dev-server origin. Cookie-backed login also\n * uses the isolated in-memory upstream jar below so iframe cookie restrictions\n * cannot split the session across URL-backed screens.\n */\nfunction previewProxyRequestHeaders(\n req: IncomingMessage,\n devServerUrl: string,\n cookieHeader = \"\",\n): Record<string, string> {\n const headers: Record<string, string> = {};\n for (const name of [\n \"accept\",\n \"accept-language\",\n \"content-type\",\n \"sec-fetch-dest\",\n \"sec-fetch-mode\",\n \"sec-fetch-site\",\n \"x-csrf-token\",\n \"x-xsrf-token\",\n \"x-requested-with\",\n ] as const) {\n const value = readHeader(req, name);\n if (value) headers[name] = value;\n }\n const browserSameOrigin = readHeader(req, \"sec-fetch-site\") === \"same-origin\";\n const browserCookie = browserSameOrigin ? readHeader(req, \"cookie\") : \"\";\n const mergedCookie = mergePreviewCookieHeaders(cookieHeader, browserCookie);\n if (mergedCookie) headers[\"cookie\"] = mergedCookie;\n // Same-origin app code may use localStorage-backed bearer auth. Forward it\n // only from a browser request already classified as same-origin; cross-site\n // callers still authenticate to the bridge with the separate preview token,\n // which is never copied upstream.\n if (browserSameOrigin) {\n const authorization = readHeader(req, \"authorization\");\n if (authorization && authorization.length <= 16 * 1024) {\n headers[\"authorization\"] = authorization;\n }\n }\n if (req.method && ![\"GET\", \"HEAD\"].includes(req.method)) {\n headers[\"origin\"] = new URL(devServerUrl).origin;\n }\n return headers;\n}\n\nfunction mergePreviewCookieHeaders(\n jarCookieHeader: string,\n browserCookieHeader: string,\n): string {\n const values = new Map<string, string>();\n const absorb = (header: string) => {\n if (!header || Buffer.byteLength(header) > MAX_PREVIEW_COOKIE_BYTES) return;\n for (const rawPair of header.split(\";\")) {\n const pair = rawPair.trim();\n const separator = pair.indexOf(\"=\");\n if (separator <= 0) continue;\n const name = pair.slice(0, separator).trim();\n const value = pair.slice(separator + 1).trim();\n if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) continue;\n if (/^(?:x-)?agent-native-(?:bridge|preview)(?:-|$)/i.test(name)) {\n continue;\n }\n values.set(name, value);\n }\n };\n absorb(jarCookieHeader);\n // A client-readable same-origin cookie is allowed to update the jar's stale\n // value for this request. HttpOnly cookies arrive with the same value and\n // remain effectively jar-owned.\n absorb(browserCookieHeader);\n return [...values].map(([name, value]) => `${name}=${value}`).join(\"; \");\n}\n\nconst MAX_PREVIEW_SESSION_COOKIES = 128;\nconst MAX_PREVIEW_COOKIE_BYTES = 8 * 1024;\n\ntype PreviewSessionCookie = {\n name: string;\n value: string;\n path: string;\n secure: boolean;\n expiresAt?: number;\n};\n\nfunction responseSetCookieHeaders(headers: Headers): string[] {\n const withGetSetCookie = headers as Headers & {\n getSetCookie?: () => string[];\n };\n if (typeof withGetSetCookie.getSetCookie === \"function\") {\n return withGetSetCookie.getSetCookie();\n }\n const single = headers.get(\"set-cookie\");\n return single ? [single] : [];\n}\n\nfunction defaultCookiePath(url: URL): string {\n const pathname = url.pathname || \"/\";\n const lastSlash = pathname.lastIndexOf(\"/\");\n return lastSlash <= 0 ? \"/\" : pathname.slice(0, lastSlash);\n}\n\nfunction sanitizedBridgeSetCookie(raw: string): string {\n return raw\n .split(\";\")\n .filter((part) => !/^\\s*domain\\s*=/i.test(part))\n .join(\";\");\n}\n\n/**\n * Ephemeral cookie session for one connected dev-server origin. Cookies never\n * enter SQL, disk, logs, or another target origin, and disappear when the\n * local bridge exits. This keeps authenticated URL screens in one bridge\n * process on the same upstream session even when browser third-party-cookie\n * rules would otherwise isolate or reject the nested iframe cookies.\n */\nclass PreviewSessionCookieJar {\n private readonly origin: string;\n private readonly cookies = new Map<string, PreviewSessionCookie>();\n\n constructor(devServerUrl: string) {\n this.origin = new URL(devServerUrl).origin;\n }\n\n store(headers: Headers, responseUrl: string): string[] {\n const parsedUrl = new URL(responseUrl);\n if (parsedUrl.origin !== this.origin) return [];\n const browserCookies: string[] = [];\n for (const raw of responseSetCookieHeaders(headers)) {\n if (!raw || Buffer.byteLength(raw) > MAX_PREVIEW_COOKIE_BYTES) continue;\n const parts = raw.split(\";\");\n const first = parts.shift()?.trim() ?? \"\";\n const separator = first.indexOf(\"=\");\n if (separator <= 0) continue;\n const name = first.slice(0, separator).trim();\n const value = first.slice(separator + 1).trim();\n if (!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/.test(name)) continue;\n let cookiePath = defaultCookiePath(parsedUrl);\n let secure = false;\n let expiresAt: number | undefined;\n let deleteCookie = false;\n for (const attribute of parts) {\n const trimmed = attribute.trim();\n const equals = trimmed.indexOf(\"=\");\n const key = (equals < 0 ? trimmed : trimmed.slice(0, equals))\n .trim()\n .toLowerCase();\n const attributeValue =\n equals < 0 ? \"\" : trimmed.slice(equals + 1).trim();\n if (key === \"path\" && attributeValue.startsWith(\"/\")) {\n cookiePath = attributeValue;\n } else if (key === \"secure\") {\n secure = true;\n } else if (key === \"max-age\") {\n const seconds = Number(attributeValue);\n if (Number.isFinite(seconds)) {\n deleteCookie = seconds <= 0;\n expiresAt = Date.now() + seconds * 1000;\n }\n } else if (key === \"expires\" && expiresAt === undefined) {\n const parsed = Date.parse(attributeValue);\n if (Number.isFinite(parsed)) expiresAt = parsed;\n }\n }\n const mapKey = `${cookiePath}\\u0000${name}`;\n if (\n deleteCookie ||\n (expiresAt !== undefined && expiresAt <= Date.now())\n ) {\n this.cookies.delete(mapKey);\n } else {\n this.cookies.delete(mapKey);\n this.cookies.set(mapKey, {\n name,\n value,\n path: cookiePath,\n secure,\n ...(expiresAt !== undefined ? { expiresAt } : {}),\n });\n while (this.cookies.size > MAX_PREVIEW_SESSION_COOKIES) {\n const oldest = this.cookies.keys().next().value;\n if (typeof oldest !== \"string\") break;\n this.cookies.delete(oldest);\n }\n }\n browserCookies.push(sanitizedBridgeSetCookie(raw));\n }\n return browserCookies;\n }\n\n headerFor(targetUrl: string): string {\n const parsed = new URL(targetUrl);\n if (parsed.origin !== this.origin) return \"\";\n const now = Date.now();\n const matches: PreviewSessionCookie[] = [];\n for (const [key, cookie] of this.cookies) {\n if (cookie.expiresAt !== undefined && cookie.expiresAt <= now) {\n this.cookies.delete(key);\n continue;\n }\n if (\n cookie.secure &&\n parsed.protocol !== \"https:\" &&\n !isLoopbackOrigin(parsed)\n ) {\n continue;\n }\n const pathMatches =\n cookie.path === \"/\" ||\n parsed.pathname === cookie.path ||\n (cookie.path.endsWith(\"/\")\n ? parsed.pathname.startsWith(cookie.path)\n : parsed.pathname.startsWith(`${cookie.path}/`));\n if (!pathMatches) continue;\n matches.push(cookie);\n }\n matches.sort((a, b) => b.path.length - a.path.length);\n return matches.map((cookie) => `${cookie.name}=${cookie.value}`).join(\"; \");\n }\n}\n\nfunction resolvePreviewSnapshotUrl(\n devServerUrl: string,\n rawUrl: string | null,\n): string {\n const base = normalizeHttpUrl(devServerUrl);\n const parsed = new URL(rawUrl?.trim() || \"/\", `${base}/`);\n parsed.hash = \"\";\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"Snapshot URL must use http(s).\");\n }\n if (!sameOrigin(parsed.toString(), base)) {\n throw new Error(\"Snapshot URL must stay on the connected dev server.\");\n }\n return parsed.toString();\n}\n\n/**\n * Remove a literal `previewToken` query pair via raw string splitting instead\n * of `URLSearchParams`. `URLSearchParams` re-serializes the ENTIRE query\n * string on mutation, turning a valueless pair like `?url` into `?url=` even\n * when `previewToken` was never present — which silently changes which\n * codepath Vite's dev server routes the request to (e.g. `?url` vs `?url=`\n * resolve to different response bodies). Returns `search` untouched whenever\n * `previewToken` is absent, so every other proxied query string reaches the\n * dev server byte-for-byte.\n */\nfunction stripPreviewTokenQueryParam(search: string): string {\n if (!search.includes(\"previewToken\")) return search;\n const raw = search.startsWith(\"?\") ? search.slice(1) : search;\n const kept = raw\n .split(\"&\")\n .filter(\n (pair) => pair !== \"previewToken\" && !pair.startsWith(\"previewToken=\"),\n );\n return kept.length > 0 ? `?${kept.join(\"&\")}` : \"\";\n}\n\nfunction resolvePreviewProxyUrl(\n devServerUrl: string,\n requestUrl: string | undefined,\n): string {\n const base = normalizeHttpUrl(devServerUrl);\n const parsedRequest = new URL(requestUrl ?? \"/\", base);\n const parsed = new URL(\n `${parsedRequest.pathname}${parsedRequest.search}`,\n `${base}/`,\n );\n parsed.hash = \"\";\n if (!sameOrigin(parsed.toString(), base)) {\n throw new Error(\"Proxy URL must stay on the connected dev server.\");\n }\n return parsed.toString();\n}\n\nasync function fetchPreviewSnapshot(\n devServerUrl: string,\n targetUrl: string,\n cookieJar?: PreviewSessionCookieJar,\n redirects = 0,\n): Promise<{\n url: string;\n status: number;\n contentType: string;\n html: string;\n setCookieHeaders: string[];\n}> {\n if (redirects > 5) {\n throw new Error(\"Too many redirects while fetching preview snapshot.\");\n }\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n const response = await fetch(targetUrl, {\n method: \"GET\",\n redirect: \"manual\",\n signal: controller.signal,\n headers: {\n accept: \"text/html,application/xhtml+xml;q=0.9,*/*;q=0.8\",\n ...(cookieJar?.headerFor(targetUrl)\n ? { cookie: cookieJar.headerFor(targetUrl) }\n : {}),\n },\n });\n const setCookieHeaders =\n cookieJar?.store(response.headers, targetUrl) ?? [];\n const location = response.headers.get(\"location\");\n if (location && response.status >= 300 && response.status < 400) {\n const redirected = new URL(location, targetUrl);\n redirected.hash = \"\";\n if (!sameOrigin(redirected.toString(), devServerUrl)) {\n throw new Error(\"Snapshot redirect left the connected dev server.\");\n }\n return fetchPreviewSnapshot(\n devServerUrl,\n redirected.toString(),\n cookieJar,\n redirects + 1,\n );\n }\n return {\n url: response.url || targetUrl,\n status: response.status,\n contentType: response.headers.get(\"content-type\") ?? \"\",\n html: await response.text(),\n setCookieHeaders,\n };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nasync function fetchPreviewProxyResource(\n devServerUrl: string,\n targetUrl: string,\n request: {\n method: string;\n headers?: Record<string, string>;\n body?: Buffer;\n },\n cookieJar?: PreviewSessionCookieJar,\n redirects = 0,\n): Promise<{\n url: string;\n status: number;\n headers: Headers;\n body: Buffer;\n setCookieHeaders: string[];\n}> {\n if (redirects > 5) {\n throw new Error(\"Too many redirects while proxying preview resource.\");\n }\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n try {\n const response = await fetch(targetUrl, {\n method: request.method,\n redirect: \"manual\",\n signal: controller.signal,\n headers: request.headers,\n body:\n request.method === \"GET\" || request.method === \"HEAD\"\n ? undefined\n : request.body,\n });\n const setCookieHeaders =\n cookieJar?.store(response.headers, targetUrl) ?? [];\n const location = response.headers.get(\"location\");\n if (location && response.status >= 300 && response.status < 400) {\n const redirected = new URL(location, targetUrl);\n redirected.hash = \"\";\n if (!sameOrigin(redirected.toString(), devServerUrl)) {\n throw new Error(\"Proxy redirect left the connected dev server.\");\n }\n const switchToGet =\n response.status === 303 ||\n ((response.status === 301 || response.status === 302) &&\n request.method === \"POST\");\n const redirectedResponse = await fetchPreviewProxyResource(\n devServerUrl,\n redirected.toString(),\n {\n method: switchToGet ? \"GET\" : request.method,\n headers: {\n ...(request.headers ?? {}),\n ...(cookieJar?.headerFor(redirected.toString())\n ? { cookie: cookieJar.headerFor(redirected.toString()) }\n : {}),\n },\n body: switchToGet ? undefined : request.body,\n },\n cookieJar,\n redirects + 1,\n );\n return {\n ...redirectedResponse,\n setCookieHeaders: [\n ...setCookieHeaders,\n ...redirectedResponse.setCookieHeaders,\n ],\n };\n }\n return {\n url: response.url || targetUrl,\n status: response.status,\n headers: response.headers,\n body: Buffer.from(await response.arrayBuffer()),\n setCookieHeaders,\n };\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction addLiveEditBaseHref(html: string, href: string): string {\n const escapedHref = href.replace(/&/g, \"&\").replace(/\"/g, \""\");\n const baseTag = `<base href=\"${escapedHref}\">`;\n if (/<base\\b/i.test(html)) return html;\n if (/<head\\b[^>]*>/i.test(html)) {\n return html.replace(/<head\\b[^>]*>/i, (match) => `${match}${baseTag}`);\n }\n if (/<html\\b[^>]*>/i.test(html)) {\n return html.replace(\n /<html\\b[^>]*>/i,\n (match) => `${match}<head>${baseTag}</head>`,\n );\n }\n return `<!DOCTYPE html><html><head>${baseTag}<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"></head><body>${html}</body></html>`;\n}\n\n/**\n * Rewrite the iframe path to the real target route before the proxied app's\n * bundle runs. The bridge serves snapshots from its own `/live-edit` path, so a\n * client-side-routed SPA would otherwise boot at \"/live-edit\", match no route,\n * and render its 404. A synchronous inline script in `<head>` runs during parse\n * (before deferred module bundles), so `history.replaceState` lands the SPA on\n * the intended route. Assets still resolve via the injected `<base href>`.\n */\nfunction injectPreBootLocationShim(html: string, targetPath: string): string {\n const path = targetPath.trim();\n if (!path || path === \"/live-edit\") return html;\n const shim = `<script data-agent-native-live-edit-location>\n(function(){try{var p=${JSON.stringify(path)};if(p&&(location.pathname+location.search)!==p){history.replaceState(null,\"\",p);}}catch(e){}})();\n</script>`;\n if (/<head\\b[^>]*>/i.test(html)) {\n return html.replace(/<head\\b[^>]*>/i, (match) => `${match}${shim}`);\n }\n if (/<html\\b[^>]*>/i.test(html)) {\n return html.replace(\n /<html\\b[^>]*>/i,\n (match) => `${match}<head>${shim}</head>`,\n );\n }\n return `${shim}${html}`;\n}\n\nfunction injectLiveEditBridge(\n html: string,\n baseHref: string,\n script: string,\n targetPath: string,\n) {\n const withBase = injectPreBootLocationShim(\n addLiveEditBaseHref(html, baseHref),\n targetPath,\n );\n if (!script) return withBase;\n if (withBase.includes(\"</body>\")) {\n return withBase.replace(\"</body>\", `${script}</body>`);\n }\n if (withBase.includes(\"</html>\")) {\n return withBase.replace(\"</html>\", `${script}</html>`);\n }\n return `${withBase}${script}`;\n}\n\n/** Read the full request body as a UTF-8 string. */\nasync function readRequestBody(req: IncomingMessage): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk: Buffer) => chunks.push(chunk));\n req.on(\"end\", () => resolve(Buffer.concat(chunks).toString(\"utf8\")));\n req.on(\"error\", reject);\n });\n}\n\nconst MAX_PREVIEW_PROXY_REQUEST_BYTES = 8 * 1024 * 1024;\n\nclass PreviewProxyRequestTooLargeError extends Error {}\n\nasync function readPreviewProxyRequestBody(\n req: IncomingMessage,\n): Promise<Buffer> {\n const declaredLength = Number(readHeader(req, \"content-length\"));\n if (\n Number.isFinite(declaredLength) &&\n declaredLength > MAX_PREVIEW_PROXY_REQUEST_BYTES\n ) {\n throw new PreviewProxyRequestTooLargeError(\n \"Preview request body exceeds the 8 MB limit.\",\n );\n }\n return new Promise<Buffer>((resolve, reject) => {\n const chunks: Buffer[] = [];\n let size = 0;\n let tooLarge = false;\n req.on(\"data\", (chunk: Buffer) => {\n size += chunk.length;\n if (size > MAX_PREVIEW_PROXY_REQUEST_BYTES) {\n tooLarge = true;\n chunks.length = 0;\n return;\n }\n if (!tooLarge) chunks.push(chunk);\n });\n req.on(\"end\", () => {\n if (tooLarge) {\n reject(\n new PreviewProxyRequestTooLargeError(\n \"Preview request body exceeds the 8 MB limit.\",\n ),\n );\n return;\n }\n resolve(Buffer.concat(chunks));\n });\n req.on(\"error\", reject);\n });\n}\n\n/**\n * Resolve `targetDir` under `rootPath` with realpath so that symlinks and\n * traversal sequences (../../etc) cannot escape the root. Throws if the\n * resolved path does not start with the resolved root.\n *\n * This also guards against a symlink LEAF inside root (e.g.\n * `rootPath/link.css` -> `/Users/me/.ssh/id_rsa`): the parent-directory\n * realpath check alone would pass confinement because the parent is inside\n * root, letting reads/writes silently follow the symlink outside root. After\n * the parent check we additionally lstat the target itself — if it exists and\n * is a symlink, or if its realpath resolves outside `resolvedRoot`, we reject.\n */\nasync function assertPathInside(\n rootPath: string,\n targetPath: string,\n): Promise<void> {\n const resolvedRoot = await fs.realpath(rootPath).catch(() => {\n throw new Error(`Bridge root path does not exist: ${rootPath}`);\n });\n\n // Resolve the parent directory (the file itself may not exist yet for writes).\n const targetParent = path.dirname(path.resolve(rootPath, targetPath));\n const resolvedParent = await fs.realpath(targetParent).catch(async () => {\n // Parent may not exist yet; walk up until we find a real ancestor.\n let candidate = targetParent;\n for (let i = 0; i < 32; i++) {\n const up = path.dirname(candidate);\n if (up === candidate) break;\n candidate = up;\n try {\n return await fs.realpath(candidate);\n } catch {\n // keep walking\n }\n }\n throw new Error(`Cannot resolve parent directory: ${targetParent}`);\n });\n\n if (\n !resolvedParent.startsWith(resolvedRoot + path.sep) &&\n resolvedParent !== resolvedRoot\n ) {\n throw new Error(`Path traversal detected: resolved target is outside root`);\n }\n\n // Reject a symlink LEAF, even though its parent directory is confined to\n // root. A pre-existing symlink at the target path (file or directory) could\n // otherwise be followed straight out of root by the caller's subsequent\n // fs.readFile/fs.writeFile call.\n const targetAbsolute = path.resolve(rootPath, targetPath);\n const lstat = await fs.lstat(targetAbsolute).catch(() => null);\n if (lstat?.isSymbolicLink()) {\n throw new Error(\n `Path traversal detected: \"${targetPath}\" is a symlink, which is not allowed inside the connected root`,\n );\n }\n if (lstat) {\n const resolvedTarget = await fs.realpath(targetAbsolute).catch(() => null);\n if (\n resolvedTarget &&\n resolvedTarget !== resolvedRoot &&\n !resolvedTarget.startsWith(resolvedRoot + path.sep)\n ) {\n throw new Error(\n `Path traversal detected: \"${targetPath}\" resolves outside the connected root`,\n );\n }\n }\n}\n\ninterface SafeBridgeFileTarget {\n absolutePath: string;\n canonicalPath: string;\n}\n\n/**\n * Resolve a bridge file to a stable lock key without following a leaf\n * symlink. Missing parent directories are represented beneath their nearest\n * existing real ancestor, so aliases through in-root directory symlinks share\n * one mutex while first-time file creation remains supported.\n */\nasync function resolveSafeBridgeFileTarget(\n rootPath: string,\n targetPath: string,\n): Promise<SafeBridgeFileTarget> {\n await assertPathInside(rootPath, targetPath);\n const resolvedRoot = await fs.realpath(rootPath);\n const absolutePath = path.resolve(rootPath, targetPath);\n let existingAncestor = path.dirname(absolutePath);\n let resolvedAncestor: string | null = null;\n for (let depth = 0; depth < 32; depth += 1) {\n try {\n resolvedAncestor = await fs.realpath(existingAncestor);\n break;\n } catch {\n const parent = path.dirname(existingAncestor);\n if (parent === existingAncestor) break;\n existingAncestor = parent;\n }\n }\n if (!resolvedAncestor) {\n throw new Error(`Cannot resolve parent directory: ${absolutePath}`);\n }\n // Existing regular files get their own realpath as the lock key. Besides\n // resolving in-root directory aliases, this canonicalizes case on the\n // default macOS filesystem so `Button.tsx` and `button.tsx` cannot acquire\n // separate mutexes for the same inode. assertPathInside already rejected a\n // symlink leaf before this point.\n const canonicalPath =\n (await fs.realpath(absolutePath).catch(() => null)) ??\n path.resolve(\n resolvedAncestor,\n path.relative(existingAncestor, absolutePath),\n );\n if (\n canonicalPath !== resolvedRoot &&\n !canonicalPath.startsWith(resolvedRoot + path.sep)\n ) {\n throw new Error(\"Path traversal detected: resolved target is outside root\");\n }\n return { absolutePath, canonicalPath };\n}\n\nconst bridgeWriteLocks = new Map<string, Promise<void>>();\n\n/** Serialize read-check-write sequences for one canonical local file. */\nasync function withBridgeWriteLock<T>(\n canonicalPath: string,\n work: () => Promise<T>,\n): Promise<T> {\n const previous = bridgeWriteLocks.get(canonicalPath) ?? Promise.resolve();\n let release!: () => void;\n const gate = new Promise<void>((resolve) => {\n release = resolve;\n });\n const queued = previous.catch(() => undefined).then(() => gate);\n bridgeWriteLocks.set(canonicalPath, queued);\n await previous.catch(() => undefined);\n try {\n return await work();\n } finally {\n release();\n if (bridgeWriteLocks.get(canonicalPath) === queued) {\n bridgeWriteLocks.delete(canonicalPath);\n }\n }\n}\n\ninterface BridgeFileSnapshot {\n content: string;\n versionHash: string;\n mode: number;\n}\n\nfunction contentVersionHash(content: string | Buffer): string {\n return crypto.createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\n/** Read an existing regular file without ever following a leaf symlink. */\nasync function readBridgeFileSnapshot(\n absolutePath: string,\n): Promise<BridgeFileSnapshot | null> {\n const noFollow = fsSync.constants.O_NOFOLLOW ?? 0;\n let handle: FileHandle | null = null;\n try {\n handle = await fs.open(absolutePath, fsSync.constants.O_RDONLY | noFollow);\n const stat = await handle.stat();\n if (!stat.isFile()) {\n throw new Error(`Bridge target is not a regular file: ${absolutePath}`);\n }\n const bytes = await handle.readFile();\n return {\n content: bytes.toString(\"utf8\"),\n versionHash: contentVersionHash(bytes),\n mode: stat.mode & 0o777,\n };\n } catch (error: unknown) {\n const code =\n error instanceof Error && \"code\" in error\n ? (error as NodeJS.ErrnoException).code\n : undefined;\n if (code === \"ENOENT\") return null;\n throw error;\n } finally {\n await handle?.close().catch(() => undefined);\n }\n}\n\nclass BridgeVersionConflictError extends Error {\n constructor(readonly currentVersionHash?: string) {\n super(\"version conflict\");\n }\n}\n\nclass BridgePreconditionRequiredError extends Error {\n constructor() {\n super(\"expectedVersionHash is required\");\n }\n}\n\nfunction assertExpectedBridgeVersion(\n expectedVersionHash: string | undefined,\n currentVersionHash: string | undefined,\n requireExpectedVersionHash = false,\n): void {\n // Preserve compatibility: callers that omit a hash retain the existing\n // last-write-wins behavior, including creation. Compiled-source callers opt\n // into exact compare-and-swap by sending the hash returned by read-file.\n if (requireExpectedVersionHash && expectedVersionHash === undefined) {\n throw new BridgePreconditionRequiredError();\n }\n if (\n expectedVersionHash !== undefined &&\n (currentVersionHash !== undefined\n ? currentVersionHash !== expectedVersionHash\n : requireExpectedVersionHash)\n ) {\n throw new BridgeVersionConflictError(currentVersionHash);\n }\n}\n\n/**\n * Replace a file durably without exposing a partial write: create an\n * O_EXCL/O_NOFOLLOW temp sibling, fsync it, revalidate confinement and the\n * expected content hash, rename atomically, then fsync the parent directory.\n */\nasync function atomicWriteBridgeFile(args: {\n rootPath: string;\n relPath: string;\n lockedCanonicalPath: string;\n content: string;\n expectedVersionHash?: string;\n requireExpectedVersionHash?: boolean;\n originalMode?: number;\n}): Promise<string> {\n const parent = path.dirname(path.resolve(args.rootPath, args.relPath));\n await fs.mkdir(parent, { recursive: true });\n const revalidated = await resolveSafeBridgeFileTarget(\n args.rootPath,\n args.relPath,\n );\n if (revalidated.canonicalPath !== args.lockedCanonicalPath) {\n throw new Error(\"Bridge target changed while waiting for the write lock\");\n }\n\n const basename = path.basename(revalidated.absolutePath);\n const tempPath = path.join(\n parent,\n `.${basename}.agent-native-${process.pid}-${crypto.randomBytes(8).toString(\"hex\")}.tmp`,\n );\n const noFollow = fsSync.constants.O_NOFOLLOW ?? 0;\n let tempHandle: FileHandle | null = null;\n try {\n tempHandle = await fs.open(\n tempPath,\n fsSync.constants.O_CREAT |\n fsSync.constants.O_EXCL |\n fsSync.constants.O_WRONLY |\n noFollow,\n args.originalMode ?? 0o666,\n );\n await tempHandle.writeFile(args.content, \"utf8\");\n await tempHandle.sync();\n await tempHandle.close();\n tempHandle = null;\n\n // Re-check after the potentially slow temp write/fsync. This catches a\n // parent/leaf symlink swap and an external content edit before rename.\n const beforeRenameTarget = await resolveSafeBridgeFileTarget(\n args.rootPath,\n args.relPath,\n );\n if (beforeRenameTarget.canonicalPath !== args.lockedCanonicalPath) {\n throw new Error(\"Bridge target changed during atomic write\");\n }\n const current = await readBridgeFileSnapshot(\n beforeRenameTarget.absolutePath,\n );\n assertExpectedBridgeVersion(\n args.expectedVersionHash,\n current?.versionHash,\n args.requireExpectedVersionHash,\n );\n\n await fs.rename(tempPath, beforeRenameTarget.absolutePath);\n const directoryHandle = await fs.open(parent, \"r\").catch(() => null);\n if (directoryHandle) {\n try {\n await directoryHandle.sync();\n } finally {\n await directoryHandle.close();\n }\n }\n return contentVersionHash(args.content);\n } finally {\n await tempHandle?.close().catch(() => undefined);\n await fs.rm(tempPath, { force: true }).catch(() => undefined);\n }\n}\n\n/**\n * Extensions that are safe for creating a brand-new text/code file through\n * the bridge. Existing files are classified by their bytes instead, so the\n * Code workbench can edit languages and extensionless config files without a\n * permanently incomplete allowlist.\n */\nconst ALLOWED_NEW_TEXT_FILE_EXTENSIONS = new Set([\n \".html\",\n \".htm\",\n \".css\",\n \".scss\",\n \".less\",\n \".js\",\n \".jsx\",\n \".ts\",\n \".tsx\",\n \".mjs\",\n \".cjs\",\n \".json\",\n \".md\",\n \".mdx\",\n \".vue\",\n \".svelte\",\n \".astro\",\n \".txt\",\n \".yml\",\n \".yaml\",\n \".svg\",\n \".py\",\n \".rb\",\n \".php\",\n \".java\",\n \".kt\",\n \".kts\",\n \".go\",\n \".rs\",\n \".c\",\n \".h\",\n \".cc\",\n \".cpp\",\n \".hpp\",\n \".cs\",\n \".swift\",\n \".sh\",\n \".bash\",\n \".zsh\",\n \".fish\",\n \".sql\",\n \".toml\",\n \".xml\",\n \".graphql\",\n \".gql\",\n \".prisma\",\n \".properties\",\n \".ini\",\n \".conf\",\n \".env.example\",\n]);\n\nconst ALLOWED_NEW_EXTENSIONLESS_TEXT_FILES = new Set([\n \"dockerfile\",\n \"makefile\",\n \"procfile\",\n \"gemfile\",\n \"rakefile\",\n \"license\",\n \"readme\",\n]);\n\nconst BLOCKED_BINARY_WRITE_EXTENSIONS = new Set([\n \".png\",\n \".jpg\",\n \".jpeg\",\n \".gif\",\n \".webp\",\n \".ico\",\n \".woff\",\n \".woff2\",\n \".ttf\",\n \".otf\",\n \".eot\",\n \".mp3\",\n \".mp4\",\n \".mov\",\n \".webm\",\n \".zip\",\n \".gz\",\n \".tar\",\n \".pdf\",\n \".wasm\",\n \".fig\",\n \".sketch\",\n \".exe\",\n \".dll\",\n \".dylib\",\n \".so\",\n \".class\",\n \".jar\",\n]);\n\nfunction assertEditableTextFile(\n relPath: string,\n existing: BridgeFileSnapshot | null,\n): void {\n const ext = path.extname(relPath).toLowerCase();\n if (BLOCKED_BINARY_WRITE_EXTENSIONS.has(ext)) {\n throw new Error(\n `Write rejected: extension \"${ext}\" is a binary file type.`,\n );\n }\n if (existing) {\n if (existing.content.includes(\"\\0\")) {\n throw new Error(\n \"Write rejected: the existing file contains binary data.\",\n );\n }\n return;\n }\n const basename = path.basename(relPath).toLowerCase();\n if (\n !ALLOWED_NEW_TEXT_FILE_EXTENSIONS.has(ext) &&\n !ALLOWED_NEW_EXTENSIONLESS_TEXT_FILES.has(basename)\n ) {\n throw new Error(\n `Write rejected: extension \"${ext || \"(no extension)\"}\" is not recognized for a new text/code file.`,\n );\n }\n}\n\n/**\n * Blocklist for secret-looking paths. Applied to /read-file, /write-file,\n * /apply-edit, AND /list-files so secrets are never returned or served\n * through the bridge, even to a caller holding a valid write grant. Reads of\n * other dotfiles (.gitignore, .prettierrc, etc.) remain allowed.\n *\n * All comparisons are case-insensitive: macOS's default filesystem (and\n * Windows) is case-insensitive, so \".ENV\", \"ID_RSA\", or \"KEY.PEM\" refer to\n * the exact same on-disk file as their lowercase form and must be blocked\n * identically.\n */\nfunction isBlockedSecretPath(relPath: string): boolean {\n const normalized = normalizeSlash(relPath).replace(/^\\/+/, \"\").toLowerCase();\n const segments = normalized.split(\"/\").filter(Boolean);\n if (segments.some((segment) => segment === \".git\")) return true;\n const basename = segments[segments.length - 1] ?? normalized;\n if (/^\\.env/.test(basename)) return true;\n if (/\\.pem$/.test(basename)) return true;\n if (/\\.key$/.test(basename)) return true;\n if (/^id_rsa/.test(basename)) return true;\n return false;\n}\n\nfunction assertNotBlockedSecretPath(relPath: string): void {\n if (isBlockedSecretPath(relPath)) {\n throw new Error(\n `Access rejected: \"${relPath}\" matches a blocked secret-file pattern.`,\n );\n }\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n if (!needle) return 0;\n let count = 0;\n let index = haystack.indexOf(needle);\n while (index !== -1) {\n count += 1;\n if (count > 1) return count;\n index = haystack.indexOf(needle, index + 1);\n }\n return count;\n}\n\n// ── /list-files: recursive walk with .gitignore + always-ignore + size/binary\n// filtering ───────────────────────────────────────────────────────────────\n\n/** Directories always excluded from /list-files, regardless of .gitignore. */\nconst ALWAYS_IGNORED_DIR_NAMES = new Set([\n \".git\",\n \"node_modules\",\n \"dist\",\n \"build\",\n \".next\",\n \".output\",\n \".nuxt\",\n \"coverage\",\n \".cache\",\n]);\n\nconst ALWAYS_IGNORED_FILE_NAMES = new Set([\".DS_Store\"]);\n\n/** Binary-looking extensions skipped from /list-files results. */\nconst BINARY_LOOKING_EXTENSIONS = new Set([\n \".png\",\n \".jpg\",\n \".jpeg\",\n \".gif\",\n \".webp\",\n \".ico\",\n \".woff\",\n \".woff2\",\n \".ttf\",\n \".otf\",\n \".eot\",\n \".mp3\",\n \".mp4\",\n \".mov\",\n \".webm\",\n \".zip\",\n \".gz\",\n \".tar\",\n \".pdf\",\n \".wasm\",\n \".fig\",\n \".sketch\",\n]);\n\nconst LIST_FILES_MAX_ENTRIES = 20_000;\nconst LIST_FILES_MAX_BYTES = 2 * 1024 * 1024;\n\nexport interface GitignoreRule {\n /** Raw pattern as read from .gitignore, already trimmed of comments/blank lines. */\n pattern: string;\n /** True when the pattern is anchored to the root (leading \"/\"). */\n anchored: boolean;\n /** True when the pattern only matches directories (trailing \"/\"). */\n dirOnly: boolean;\n}\n\n/**\n * Parse a simple subset of .gitignore syntax: exact names, `dir/`, `*.ext`,\n * and leading-slash root-anchored patterns. This intentionally does not\n * implement full gitignore glob semantics (double-star, negation, etc.) —\n * good enough to keep obviously-ignored build output and local files out of\n * the workbench file tree.\n */\nexport function parseGitignore(contents: string): GitignoreRule[] {\n const rules: GitignoreRule[] = [];\n for (const rawLine of contents.split(/\\r?\\n/)) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\")) continue;\n if (line.startsWith(\"!\")) continue; // negation unsupported in this subset\n const anchored = line.startsWith(\"/\");\n const withoutAnchor = anchored ? line.slice(1) : line;\n const dirOnly = withoutAnchor.endsWith(\"/\");\n const pattern = dirOnly ? withoutAnchor.slice(0, -1) : withoutAnchor;\n if (!pattern) continue;\n rules.push({ pattern, anchored, dirOnly });\n }\n return rules;\n}\n\nfunction globToRegExp(pattern: string): RegExp {\n let out = \"\";\n for (const char of pattern) {\n if (char === \"*\") out += \"[^/]*\";\n else if (char === \"?\") out += \"[^/]\";\n else out += char.replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\");\n }\n return new RegExp(`^${out}$`);\n}\n\n/**\n * Test one path segment (or full relative path, for anchored patterns)\n * against a parsed gitignore rule.\n */\nfunction ruleMatches(\n rule: GitignoreRule,\n relPath: string,\n isDir: boolean,\n): boolean {\n if (rule.dirOnly && !isDir) return false;\n const regex = globToRegExp(rule.pattern);\n if (rule.anchored) {\n return regex.test(relPath);\n }\n // Unanchored: match against any path segment (basename) or the full path,\n // mirroring gitignore's \"matches at any depth\" behavior for simple patterns.\n const segments = relPath.split(\"/\");\n return segments.some((segment) => regex.test(segment)) || regex.test(relPath);\n}\n\nexport function isIgnoredByGitignore(\n rules: GitignoreRule[],\n relPath: string,\n isDir: boolean,\n): boolean {\n return rules.some((rule) => ruleMatches(rule, relPath, isDir));\n}\n\n/**\n * Pure predicate: should this file be excluded from /list-files results?\n * Combines the always-ignored directory/file names, the parsed .gitignore\n * rules, the binary-looking extension list, the secret-path blocklist, and\n * the per-file size cap. `sizeBytes` may be omitted when unknown (the always/\n * gitignore/binary/secret checks still apply).\n */\nexport function shouldExcludeFromListing(\n relPath: string,\n options: { gitignore: GitignoreRule[]; sizeBytes?: number },\n): boolean {\n const normalized = normalizeSlash(relPath).replace(/^\\/+/, \"\");\n const segments = normalized.split(\"/\").filter(Boolean);\n if (segments.some((segment) => ALWAYS_IGNORED_DIR_NAMES.has(segment))) {\n return true;\n }\n const basename = segments[segments.length - 1] ?? normalized;\n if (ALWAYS_IGNORED_FILE_NAMES.has(basename)) return true;\n if (isBlockedSecretPath(normalized)) return true;\n if (isIgnoredByGitignore(options.gitignore, normalized, false)) return true;\n // A `dir/` gitignore rule matches the file's ancestor directories too, not\n // just the file itself (e.g. \"build-output/\" must ignore\n // \"build-output/index.html\").\n for (let depth = 1; depth < segments.length; depth += 1) {\n const ancestorPath = segments.slice(0, depth).join(\"/\");\n if (isIgnoredByGitignore(options.gitignore, ancestorPath, true)) {\n return true;\n }\n }\n const ext = path.extname(basename).toLowerCase();\n if (BINARY_LOOKING_EXTENSIONS.has(ext)) return true;\n if (\n typeof options.sizeBytes === \"number\" &&\n options.sizeBytes > LIST_FILES_MAX_BYTES\n ) {\n return true;\n }\n return false;\n}\n\n/**\n * Should this directory be pruned entirely from the walk? Cheaper than\n * checking every descendant file individually once a directory itself is\n * ignored (always-ignored names, gitignore dir rules, or the .git/secret\n * blocklist).\n */\nfunction shouldPruneDirectory(\n relPath: string,\n gitignore: GitignoreRule[],\n): boolean {\n const normalized = normalizeSlash(relPath).replace(/^\\/+/, \"\");\n const segments = normalized.split(\"/\").filter(Boolean);\n const basename = segments[segments.length - 1] ?? normalized;\n if (ALWAYS_IGNORED_DIR_NAMES.has(basename)) return true;\n if (basename === \".git\") return true;\n if (isIgnoredByGitignore(gitignore, normalized, true)) return true;\n return false;\n}\n\nexport interface ListedBridgeFile {\n path: string;\n size: number;\n}\n\nexport interface ListFilesResult {\n files: ListedBridgeFile[];\n truncated: boolean;\n}\n\n/**\n * Recursively walk `rootPath`, honoring .gitignore + the always-ignore list +\n * binary/size/secret filtering, never following symlinks that would escape\n * root (delegates to `assertPathInside`'s realpath confinement per-entry).\n * Caps at `LIST_FILES_MAX_ENTRIES` and reports `truncated` when the cap is\n * hit.\n */\nasync function walkBridgeFiles(rootPath: string): Promise<ListFilesResult> {\n let gitignore: GitignoreRule[] = [];\n try {\n const raw = await fs.readFile(path.join(rootPath, \".gitignore\"), \"utf8\");\n gitignore = parseGitignore(raw);\n } catch {\n // No root .gitignore — proceed with only the always-ignore list.\n }\n\n const files: ListedBridgeFile[] = [];\n let truncated = false;\n const resolvedRoot = await fs.realpath(rootPath);\n\n async function walk(absoluteDir: string, relDir: string): Promise<void> {\n if (truncated) return;\n let entries: fsSync.Dirent[];\n try {\n entries = await fs.readdir(absoluteDir, { withFileTypes: true });\n } catch {\n return;\n }\n // Sort for deterministic output.\n entries.sort((a, b) => a.name.localeCompare(b.name));\n for (const entry of entries) {\n if (truncated) return;\n const relPath = relDir ? `${relDir}/${entry.name}` : entry.name;\n const absolutePath = path.join(absoluteDir, entry.name);\n\n if (entry.isSymbolicLink()) {\n // Never follow symlinks that escape root; resolve and re-check.\n let real: string;\n try {\n real = await fs.realpath(absolutePath);\n } catch {\n continue;\n }\n if (\n real !== resolvedRoot &&\n !real.startsWith(resolvedRoot + path.sep)\n ) {\n continue;\n }\n const stat = await fs.stat(absolutePath).catch(() => null);\n if (!stat) continue;\n if (stat.isDirectory()) {\n if (shouldPruneDirectory(relPath, gitignore)) continue;\n await walk(absolutePath, relPath);\n } else if (stat.isFile()) {\n if (\n !shouldExcludeFromListing(relPath, {\n gitignore,\n sizeBytes: stat.size,\n })\n ) {\n files.push({ path: normalizeSlash(relPath), size: stat.size });\n if (files.length >= LIST_FILES_MAX_ENTRIES) {\n truncated = true;\n return;\n }\n }\n }\n continue;\n }\n\n if (entry.isDirectory()) {\n if (shouldPruneDirectory(relPath, gitignore)) continue;\n await walk(absolutePath, relPath);\n continue;\n }\n\n if (entry.isFile()) {\n const stat = await fs.stat(absolutePath).catch(() => null);\n if (!stat) continue;\n if (\n shouldExcludeFromListing(relPath, {\n gitignore,\n sizeBytes: stat.size,\n })\n ) {\n continue;\n }\n files.push({ path: normalizeSlash(relPath), size: stat.size });\n if (files.length >= LIST_FILES_MAX_ENTRIES) {\n truncated = true;\n return;\n }\n }\n }\n }\n\n await walk(resolvedRoot, \"\");\n return { files, truncated };\n}\n\nexport async function startDesignConnectBridge(\n manifest: DesignConnectManifest,\n seedOrOptions?: string | DesignConnectBridgeOptions,\n): Promise<DesignConnectBridge> {\n // Shared secret the browser sends (x-bridge-token) to unlock live-edit/read/\n // write. Bridge and the user's connection row must agree on it. Adopt a\n // server-minted seed when given (MCP flow); otherwise mint one and rely on\n // --app-url self-registration to push it up. Kept in-process, never served.\n const options: DesignConnectBridgeOptions =\n typeof seedOrOptions === \"string\"\n ? { bridgeToken: seedOrOptions }\n : (seedOrOptions ?? {});\n const bridgeToken =\n options.bridgeToken ||\n process.env[\"AGENT_NATIVE_BRIDGE_TOKEN\"] ||\n crypto.randomBytes(32).toString(\"hex\");\n const previewToken =\n options.previewToken ||\n process.env[\"AGENT_NATIVE_PREVIEW_TOKEN\"] ||\n deriveDesignPreviewToken(bridgeToken);\n const configuredOrigins = new Set(\n (options.allowedOrigins ?? []).flatMap((raw): string[] => {\n try {\n return [new URL(raw).origin];\n } catch {\n return [];\n }\n }),\n );\n let liveEditBridgeScript = \"\";\n // One bridge process serves every URL-backed screen in an overview. The\n // editor script carries screen-specific state (notably screenId), so a\n // single global slot lets parallel iframe registrations overwrite each\n // other and boot a frame with another frame's identity. Keep keyed scripts\n // for modern clients while retaining the unkeyed slot for older clients.\n const liveEditBridgeScripts = new Map<string, string>();\n // Identifies THIS bridge process's in-memory registry, minted fresh every\n // time the bridge boots. `liveEditBridgeScripts` above only lives in\n // process memory, so a bridge restart (crash, machine sleep/wake, manual\n // restart) silently empties it: any screen that registered a bridgeKey\n // before the restart now gets a 409 \"unknown bridge key\" from `/live-edit`\n // even though nothing about that screen actually changed. Echoing this id\n // on both the registration response and the 409 lets a client tell the two\n // cases apart — \"this exact process never saw my key\" (stale/typo, id\n // matches what it already has cached) vs. \"the process restarted since I\n // registered\" (id changed, safe to transparently re-POST `/live-edit-bridge`\n // and retry) — instead of guessing from the error text or retrying forever.\n const bridgeInstanceId = crypto.randomBytes(16).toString(\"hex\");\n const previewSessionCookies = new PreviewSessionCookieJar(\n manifest.devServerUrl,\n );\n\n const server = http.createServer(\n (req: IncomingMessage, res: ServerResponse) => {\n const corsApproved = configureBridgeCors(req, res, configuredOrigins);\n if (req.method === \"OPTIONS\") {\n sendJson(\n res,\n corsApproved ? 204 : 403,\n corsApproved\n ? {}\n : { ok: false, error: \"origin is not allowed by this bridge\" },\n );\n return;\n }\n\n const requestUrl = new URL(req.url ?? \"/\", manifest.bridgeUrl);\n const pathname = requestUrl.pathname;\n const providedPreviewToken =\n readHeader(req, \"x-design-preview-token\") ||\n requestUrl.searchParams.get(\"previewToken\") ||\n readRequestCookie(req, PREVIEW_SESSION_COOKIE_NAME) ||\n \"\";\n const previewTokenValid = constantTimeTokenMatches(\n providedPreviewToken,\n previewToken,\n );\n const rejectInvalidPreviewToken = (): boolean => {\n if (previewTokenValid) return false;\n sendJson(res, 401, {\n ok: false,\n error: \"invalid or missing preview token\",\n });\n return true;\n };\n\n // ── Read-only preview routes (preview token required) ────────────────\n\n // The injected <base href> re-points the proxied app's own\n // <link rel=\"manifest\" href=\"/manifest.json\"> at the bridge, which\n // would otherwise collide with the bridge's own control-plane manifest\n // below. Browsers tag that fetch with Sec-Fetch-Dest: manifest (a\n // request-metadata header Node's fetch never sends), so existing\n // control-plane callers — the Design app and `fetchRunningBridgeManifest`\n // (used by `design connect --json` / daemon self-detection) — keep\n // hitting the bridge manifest unchanged, while the app's own manifest\n // request falls through to the ordinary authenticated proxy below.\n const isProxiedAppManifestRequest =\n (req.method === \"GET\" || req.method === \"HEAD\") &&\n pathname === \"/manifest.json\" &&\n readHeader(req, \"sec-fetch-dest\") === \"manifest\";\n if (\n !isProxiedAppManifestRequest &&\n (pathname === \"/\" || pathname === \"/manifest.json\")\n ) {\n if (rejectInvalidPreviewToken()) return;\n sendJson(res, 200, manifest as unknown as Record<string, unknown>);\n return;\n }\n if (pathname === \"/routes.json\") {\n if (rejectInvalidPreviewToken()) return;\n sendJson(res, 200, {\n version: 1,\n sourceType: \"localhost\",\n devServerUrl: manifest.devServerUrl,\n rootPath: manifest.rootPath,\n routes: manifest.routes,\n generatedAt: manifest.generatedAt,\n });\n return;\n }\n if (pathname === \"/health\") {\n sendJson(res, 200, {\n ok: true,\n source: manifest.source,\n appFingerprint: designConnectAppFingerprint(manifest),\n bridgeInstanceId,\n });\n return;\n }\n if (pathname === \"/live-edit-bridge\") {\n if (req.method !== \"POST\") {\n sendJson(res, 405, { ok: false, error: \"method not allowed\" });\n return;\n }\n if (rejectInvalidPreviewToken()) return;\n void (async () => {\n try {\n const raw = await readRequestBody(req);\n const body = JSON.parse(raw) as Record<string, unknown>;\n const script =\n typeof body[\"script\"] === \"string\" ? body[\"script\"] : \"\";\n const bridgeKey =\n typeof body[\"bridgeKey\"] === \"string\"\n ? body[\"bridgeKey\"].trim()\n : \"\";\n const installsSupportedDesignBridge =\n script.includes(\"agent-native:editor-chrome-ready\") ||\n script.includes(\"embedded-canvas-pan\");\n if (!installsSupportedDesignBridge) {\n sendJson(res, 400, {\n ok: false,\n error:\n \"script must install an approved Agent Native editor or canvas-pan bridge\",\n });\n return;\n }\n if (\n bridgeKey &&\n (!/^[a-zA-Z0-9:._-]+$/.test(bridgeKey) || bridgeKey.length > 128)\n ) {\n sendJson(res, 400, {\n ok: false,\n error: \"bridgeKey must be 1-128 safe identifier characters\",\n });\n return;\n }\n liveEditBridgeScript = script;\n if (bridgeKey) {\n liveEditBridgeScripts.delete(bridgeKey);\n liveEditBridgeScripts.set(bridgeKey, script);\n // Bound the in-memory cache. Normal editor usage has one key per\n // visible screen; 128 also leaves ample room for mode changes.\n while (liveEditBridgeScripts.size > 128) {\n const oldest = liveEditBridgeScripts.keys().next().value;\n if (typeof oldest !== \"string\") break;\n liveEditBridgeScripts.delete(oldest);\n }\n }\n sendJson(res, 200, {\n ok: true,\n bridgeInstanceId,\n ...(bridgeKey ? { bridgeKey } : {}),\n });\n } catch (err: unknown) {\n sendJson(res, 400, {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n })();\n return;\n }\n if (pathname === \"/live-edit\") {\n if (req.method !== \"GET\") {\n sendJson(res, 405, { ok: false, error: \"method not allowed\" });\n return;\n }\n if (rejectInvalidPreviewToken()) return;\n void (async () => {\n try {\n const targetUrl = resolvePreviewSnapshotUrl(\n manifest.devServerUrl,\n requestUrl.searchParams.get(\"url\") ??\n requestUrl.searchParams.get(\"path\"),\n );\n const snapshot = await fetchPreviewSnapshot(\n manifest.devServerUrl,\n targetUrl,\n previewSessionCookies,\n );\n const includeEditorBridge =\n requestUrl.searchParams.get(\"bridge\") !== \"0\";\n const requestedBridgeKey =\n requestUrl.searchParams.get(\"bridgeKey\")?.trim() ?? \"\";\n const editorBridgeScript = requestedBridgeKey\n ? (liveEditBridgeScripts.get(requestedBridgeKey) ?? \"\")\n : liveEditBridgeScript;\n if (\n includeEditorBridge &&\n requestedBridgeKey &&\n !editorBridgeScript\n ) {\n // Machine-readable `code` + echoed `bridgeKey`/`bridgeInstanceId`\n // let a client distinguish \"this bridge process restarted since\n // I last registered — safe to silently re-POST\n // /live-edit-bridge and retry\" from a genuine caller bug,\n // instead of string-matching `error` (see bridgeInstanceId's\n // doc comment above for the full rationale).\n sendJson(res, 409, {\n ok: false,\n code: \"unknown-bridge-key\",\n bridgeKey: requestedBridgeKey,\n bridgeInstanceId,\n error:\n \"The requested live-edit bridge script is not registered. Reload the Design frame to register it again.\",\n });\n return;\n }\n // The dev server route the SPA must boot on (e.g. \"/todo\"), taken\n // from the resolved snapshot target rather than the bridge's own\n // \"/live-edit\" request path.\n const targetParsed = new URL(targetUrl);\n const targetPath =\n `${targetParsed.pathname}${targetParsed.search}` || \"/\";\n const html = injectLiveEditBridge(\n snapshot.html,\n new URL(\"/\", manifest.bridgeUrl).toString(),\n includeEditorBridge ? editorBridgeScript : \"\",\n targetPath,\n );\n sendText(\n res,\n snapshot.status >= 400 ? snapshot.status : 200,\n html,\n snapshot.contentType.includes(\"html\")\n ? snapshot.contentType\n : \"text/html; charset=utf-8\",\n [\n ...snapshot.setCookieHeaders,\n previewSessionSetCookie(previewToken),\n ],\n );\n } catch (err: unknown) {\n sendJson(res, 400, {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n })();\n return;\n }\n if (pathname === \"/snapshot\") {\n if (req.method !== \"GET\") {\n sendJson(res, 405, { ok: false, error: \"method not allowed\" });\n return;\n }\n if (rejectInvalidPreviewToken()) return;\n void (async () => {\n try {\n const targetUrl = resolvePreviewSnapshotUrl(\n manifest.devServerUrl,\n requestUrl.searchParams.get(\"url\") ??\n requestUrl.searchParams.get(\"path\"),\n );\n const snapshot = await fetchPreviewSnapshot(\n manifest.devServerUrl,\n targetUrl,\n previewSessionCookies,\n );\n sendJson(res, snapshot.status >= 400 ? snapshot.status : 200, {\n ok: snapshot.status < 400,\n source: manifest.source,\n url: snapshot.url,\n status: snapshot.status,\n contentType: snapshot.contentType,\n html: snapshot.html,\n });\n } catch (err: unknown) {\n sendJson(res, 400, {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n })();\n return;\n }\n\n // ── Token-gated write endpoints (POST only) ───────────────────────────\n\n if (\n pathname === \"/read-file\" ||\n pathname === \"/write-file\" ||\n pathname === \"/apply-edit\" ||\n pathname === \"/list-files\"\n ) {\n if (req.method !== \"POST\") {\n sendJson(res, 405, { ok: false, error: \"method not allowed\" });\n return;\n }\n\n // Authenticate with constant-time comparison to prevent timing attacks.\n const providedToken = readHeader(req, \"x-bridge-token\");\n const tokenValid = constantTimeTokenMatches(providedToken, bridgeToken);\n if (!tokenValid) {\n sendJson(res, 401, {\n ok: false,\n error: \"invalid or missing bridge token\",\n });\n return;\n }\n\n // Handle asynchronously so we can use await.\n void (async () => {\n try {\n const raw = await readRequestBody(req);\n const body = JSON.parse(raw) as Record<string, unknown>;\n\n if (pathname === \"/list-files\") {\n try {\n const result = await walkBridgeFiles(manifest.rootPath);\n sendJson(res, 200, {\n ok: true,\n files: result.files,\n truncated: result.truncated,\n });\n } catch (err: unknown) {\n sendJson(res, 500, {\n ok: false,\n error: `list-files failed: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n return;\n }\n\n const relPath =\n typeof body[\"relPath\"] === \"string\" ? body[\"relPath\"] : undefined;\n\n if (!relPath) {\n sendJson(res, 400, { ok: false, error: \"relPath is required\" });\n return;\n }\n\n assertNotBlockedSecretPath(relPath);\n const initialTarget = await resolveSafeBridgeFileTarget(\n manifest.rootPath,\n relPath,\n );\n\n if (pathname === \"/read-file\") {\n // Read-file: no extension restriction (agents need to read any\n // non-secret file), but the secret-path blocklist above still\n // applies to .env*, *.pem, *.key, id_rsa*, and anything under .git/.\n const snapshot = await readBridgeFileSnapshot(\n initialTarget.absolutePath,\n );\n if (!snapshot) {\n sendJson(res, 404, { ok: false, error: \"file not found\" });\n return;\n }\n sendJson(res, 200, {\n ok: true,\n content: snapshot.content,\n versionHash: snapshot.versionHash,\n });\n return;\n }\n\n const expectedVersionHash =\n typeof body[\"expectedVersionHash\"] === \"string\"\n ? body[\"expectedVersionHash\"]\n : undefined;\n const requireExpectedVersionHash =\n body[\"requireExpectedVersionHash\"] === true;\n await withBridgeWriteLock(initialTarget.canonicalPath, async () => {\n const lockedTarget = await resolveSafeBridgeFileTarget(\n manifest.rootPath,\n relPath,\n );\n if (lockedTarget.canonicalPath !== initialTarget.canonicalPath) {\n throw new Error(\n \"Bridge target changed while waiting for the write lock\",\n );\n }\n const existing = await readBridgeFileSnapshot(\n lockedTarget.absolutePath,\n );\n assertEditableTextFile(relPath, existing);\n assertExpectedBridgeVersion(\n expectedVersionHash,\n existing?.versionHash,\n requireExpectedVersionHash,\n );\n\n if (pathname === \"/write-file\") {\n const content =\n typeof body[\"content\"] === \"string\"\n ? body[\"content\"]\n : undefined;\n if (content === undefined) {\n sendJson(res, 400, {\n ok: false,\n error: \"content is required for write-file\",\n });\n return;\n }\n const versionHash = await atomicWriteBridgeFile({\n rootPath: manifest.rootPath,\n relPath,\n lockedCanonicalPath: initialTarget.canonicalPath,\n content,\n expectedVersionHash,\n requireExpectedVersionHash,\n originalMode: existing?.mode,\n });\n sendJson(res, 200, { ok: true, relPath, versionHash });\n return;\n }\n\n // /apply-edit supports either full replace ({content}) or one\n // exact search-and-replace. Both stay within this file's lock.\n if (typeof body[\"content\"] === \"string\") {\n const versionHash = await atomicWriteBridgeFile({\n rootPath: manifest.rootPath,\n relPath,\n lockedCanonicalPath: initialTarget.canonicalPath,\n content: body[\"content\"],\n expectedVersionHash,\n requireExpectedVersionHash,\n originalMode: existing?.mode,\n });\n sendJson(res, 200, {\n ok: true,\n relPath,\n method: \"replace\",\n versionHash,\n });\n return;\n }\n\n const search =\n typeof body[\"search\"] === \"string\" ? body[\"search\"] : undefined;\n const replace =\n typeof body[\"replace\"] === \"string\"\n ? body[\"replace\"]\n : undefined;\n if (search === undefined || replace === undefined) {\n sendJson(res, 400, {\n ok: false,\n error:\n \"apply-edit requires either {content} for a full replace, or {search, replace} for a patch\",\n });\n return;\n }\n if (!existing) {\n sendJson(res, 404, {\n ok: false,\n error: \"file not found — use write-file to create new files\",\n });\n return;\n }\n if (search.length === 0) {\n sendJson(res, 400, {\n ok: false,\n error: \"search string must not be empty\",\n });\n return;\n }\n const occurrenceCount = countOccurrences(\n existing.content,\n search,\n );\n if (occurrenceCount === 0) {\n sendJson(res, 422, {\n ok: false,\n error: \"search string not found in file\",\n });\n return;\n }\n if (occurrenceCount > 1) {\n sendJson(res, 422, {\n ok: false,\n error:\n \"search string is ambiguous; it appears more than once in the file\",\n });\n return;\n }\n const updated = existing.content.replace(search, replace);\n const versionHash = await atomicWriteBridgeFile({\n rootPath: manifest.rootPath,\n relPath,\n lockedCanonicalPath: initialTarget.canonicalPath,\n content: updated,\n expectedVersionHash,\n requireExpectedVersionHash,\n originalMode: existing.mode,\n });\n sendJson(res, 200, {\n ok: true,\n relPath,\n method: \"patch\",\n versionHash,\n });\n });\n } catch (err: unknown) {\n if (err instanceof BridgePreconditionRequiredError) {\n sendJson(res, 428, {\n ok: false,\n error: \"expectedVersionHash is required\",\n });\n return;\n }\n if (err instanceof BridgeVersionConflictError) {\n sendJson(res, 409, {\n ok: false,\n error: \"version conflict\",\n currentVersionHash: err.currentVersionHash,\n });\n return;\n }\n sendJson(res, 500, {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n });\n }\n })();\n return;\n }\n\n if (\n req.method &&\n [\"GET\", \"HEAD\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(req.method)\n ) {\n // The browser's own manifest-link fetch algorithm omits credentials\n // and custom headers by spec default, so it structurally cannot carry\n // a previewToken. That is consistent with the proxied dev server,\n // which already serves this exact path with no auth of its own — so\n // this narrow, unspoofable (Sec-Fetch-Dest is a forbidden header,\n // unsettable from page JS) case is exempted from the token gate.\n if (!previewTokenValid && !isProxiedAppManifestRequest) {\n sendJson(res, 401, {\n ok: false,\n error: \"invalid or missing preview token\",\n });\n return;\n }\n void (async () => {\n try {\n const proxyRequestUrl = new URL(req.url ?? \"/\", manifest.bridgeUrl);\n const targetUrl = resolvePreviewProxyUrl(\n manifest.devServerUrl,\n `${proxyRequestUrl.pathname}${stripPreviewTokenQueryParam(proxyRequestUrl.search)}`,\n );\n const method = req.method ?? \"GET\";\n const requestBody =\n method === \"GET\" || method === \"HEAD\"\n ? undefined\n : await readPreviewProxyRequestBody(req);\n const cookieHeader = previewSessionCookies.headerFor(targetUrl);\n const proxied = await fetchPreviewProxyResource(\n manifest.devServerUrl,\n targetUrl,\n {\n method,\n headers: previewProxyRequestHeaders(\n req,\n manifest.devServerUrl,\n cookieHeader,\n ),\n body: requestBody,\n },\n previewSessionCookies,\n );\n const contentType = proxied.headers.get(\"content-type\") ?? \"\";\n const documentNavigation =\n readHeader(req, \"sec-fetch-dest\") === \"document\";\n const responseBody =\n documentNavigation && contentType.includes(\"html\")\n ? Buffer.from(\n injectLiveEditBridge(\n proxied.body.toString(\"utf8\"),\n new URL(\"/\", manifest.bridgeUrl).toString(),\n liveEditBridgeScript,\n (() => {\n const parsed = new URL(proxied.url);\n return `${parsed.pathname}${parsed.search}` || \"/\";\n })(),\n ),\n )\n : proxied.body;\n sendBytes(\n res,\n proxied.status,\n method === \"HEAD\" ? Buffer.alloc(0) : responseBody,\n proxied.headers,\n responseBody.length,\n proxied.setCookieHeaders,\n );\n } catch (err: unknown) {\n sendJson(\n res,\n err instanceof PreviewProxyRequestTooLargeError ? 413 : 400,\n {\n ok: false,\n error: err instanceof Error ? err.message : String(err),\n },\n );\n }\n })();\n return;\n }\n\n sendJson(res, 404, { ok: false, error: \"not found\" });\n },\n );\n\n // Vite's proxied /@vite/client derives its HMR socket from the document's\n // bridge origin. Tunnel WebSocket upgrades to the one connected dev-server\n // origin so Fast Refresh remains live inside URL-backed screens. The target\n // is never caller-controlled, bridge credentials are stripped, and only a\n // same-origin iframe (or an explicit preview-token caller) can open it.\n server.on(\"upgrade\", (req, clientSocket, clientHead) => {\n const requestUrl = new URL(req.url ?? \"/\", manifest.bridgeUrl);\n const providedPreviewToken =\n readHeader(req, \"x-design-preview-token\") ||\n requestUrl.searchParams.get(\"previewToken\") ||\n readRequestCookie(req, PREVIEW_SESSION_COOKIE_NAME) ||\n \"\";\n const browserOrigin = readHeader(req, \"origin\");\n const sameBridgeOrigin =\n browserOrigin === new URL(manifest.bridgeUrl).origin;\n if (!constantTimeTokenMatches(providedPreviewToken, previewToken)) {\n clientSocket.end(\n \"HTTP/1.1 401 Unauthorized\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n\",\n );\n return;\n }\n let targetUrl: URL;\n try {\n targetUrl = new URL(\n resolvePreviewProxyUrl(\n manifest.devServerUrl,\n `${requestUrl.pathname}${stripPreviewTokenQueryParam(requestUrl.search)}`,\n ),\n );\n } catch {\n clientSocket.end(\n \"HTTP/1.1 400 Bad Request\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n\",\n );\n return;\n }\n\n const upstreamHeaders = { ...req.headers };\n delete upstreamHeaders[\"x-bridge-token\"];\n delete upstreamHeaders[\"x-design-preview-token\"];\n delete upstreamHeaders[\"authorization\"];\n delete upstreamHeaders[\"cookie\"];\n upstreamHeaders.host = targetUrl.host;\n upstreamHeaders.origin = new URL(manifest.devServerUrl).origin;\n const cookie = mergePreviewCookieHeaders(\n previewSessionCookies.headerFor(targetUrl.toString()),\n sameBridgeOrigin ? readHeader(req, \"cookie\") : \"\",\n );\n if (cookie) upstreamHeaders.cookie = cookie;\n\n const requestImpl = targetUrl.protocol === \"https:\" ? https : http;\n const upstreamRequest = requestImpl.request({\n protocol: targetUrl.protocol,\n hostname: targetUrl.hostname,\n port: targetUrl.port,\n path: `${targetUrl.pathname}${targetUrl.search}`,\n method: \"GET\",\n headers: upstreamHeaders,\n });\n upstreamRequest.on(\n \"upgrade\",\n (upstreamResponse, upstreamSocket, upstreamHead) => {\n const statusLine = `HTTP/1.1 ${upstreamResponse.statusCode ?? 101} ${upstreamResponse.statusMessage || \"Switching Protocols\"}\\r\\n`;\n const headerLines: string[] = [];\n for (\n let index = 0;\n index < upstreamResponse.rawHeaders.length;\n index += 2\n ) {\n const name = upstreamResponse.rawHeaders[index];\n const value = upstreamResponse.rawHeaders[index + 1];\n if (name && value !== undefined)\n headerLines.push(`${name}: ${value}`);\n }\n clientSocket.write(`${statusLine}${headerLines.join(\"\\r\\n\")}\\r\\n\\r\\n`);\n if (clientHead.length > 0) upstreamSocket.write(clientHead);\n if (upstreamHead.length > 0) clientSocket.write(upstreamHead);\n clientSocket.once(\"close\", () => upstreamSocket.destroy());\n upstreamSocket.once(\"close\", () => clientSocket.destroy());\n upstreamSocket.pipe(clientSocket);\n clientSocket.pipe(upstreamSocket);\n },\n );\n upstreamRequest.on(\"response\", (upstreamResponse) => {\n clientSocket.end(\n `HTTP/1.1 ${upstreamResponse.statusCode ?? 502} ${upstreamResponse.statusMessage || \"WebSocket upgrade failed\"}\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n`,\n );\n upstreamResponse.resume();\n });\n upstreamRequest.on(\"error\", () => {\n if (!clientSocket.destroyed) {\n clientSocket.end(\n \"HTTP/1.1 502 Bad Gateway\\r\\nConnection: close\\r\\nContent-Length: 0\\r\\n\\r\\n\",\n );\n }\n });\n upstreamRequest.end();\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(new URL(manifest.bridgeUrl).port, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n\n return { server, manifest, bridgeToken, previewToken, bridgeInstanceId };\n}\n\n/**\n * Resolve the design app URL from an explicit value or environment variables.\n * Returns undefined when no URL is configured (registration is optional).\n */\nexport function resolveAppUrl(explicit?: string): string | undefined {\n const raw =\n explicit ||\n process.env[\"AGENT_NATIVE_URL\"] ||\n process.env[\"DESIGN_APP_URL\"] ||\n process.env[\"APP_URL\"] ||\n process.env[\"VITE_APP_URL\"] ||\n process.env[\"BETTER_AUTH_URL\"] ||\n process.env[\"VITE_BETTER_AUTH_URL\"];\n if (!raw) return undefined;\n try {\n const parsed = new URL(raw.trim());\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n return undefined;\n }\n return parsed.toString().replace(/\\/+$/, \"\");\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolve a bearer token from environment variables for authenticating the\n * self-registration POST. The CLI does not perform a device-code flow — it\n * relies on a pre-minted token supplied via env var (e.g. the same token\n * already written into the agent's MCP config).\n */\nfunction resolveAuthToken(): string | undefined {\n return (\n process.env[\"AGENT_NATIVE_TOKEN\"] ||\n process.env[\"DESIGN_ACCESS_TOKEN\"] ||\n process.env[\"ACCESS_TOKEN\"] ||\n undefined\n );\n}\n\n/**\n * POST to the design app's `connect-localhost` action endpoint to register\n * (or refresh) the bridge connection and persist the real bridge token on the\n * server row. This is a best-effort call: failures are logged but do not\n * abort the bridge process.\n *\n * @param appUrl - Deployed design app base URL (e.g. https://design.agent-native.com)\n * @param bridge - The running bridge returned by startDesignConnectBridge\n * @param authToken - Optional bearer token for the authenticated action route\n */\nexport async function registerConnectionWithServer(\n appUrl: string,\n bridge: DesignConnectBridge,\n authToken?: string,\n): Promise<void> {\n const endpoint = `${appUrl}/_agent-native/actions/connect-localhost`;\n const { manifest, bridgeToken, previewToken } = bridge;\n const payload = {\n devServerUrl: manifest.devServerUrl,\n bridgeUrl: manifest.bridgeUrl,\n rootPath: manifest.rootPath,\n capabilities: manifest.capabilities.filter((capability) =>\n SERVER_REGISTRATION_BRIDGE_OPERATIONS.has(capability.operation),\n ),\n routeManifest: {\n version: 1 as const,\n sourceType: \"localhost\" as const,\n devServerUrl: manifest.devServerUrl,\n rootPath: manifest.rootPath,\n routes: manifest.routes,\n generatedAt: manifest.generatedAt,\n },\n // Include the real bridge token so the server stores it on the connection\n // row. grant-localhost-write-consent then reads it from the row instead of\n // minting its own unrelated token, which would always produce a 401.\n bridgeToken,\n previewToken,\n status: \"connected\" as const,\n };\n\n const headers: Record<string, string> = {\n \"content-type\": \"application/json\",\n };\n if (authToken) {\n headers[\"authorization\"] = `Bearer ${authToken}`;\n }\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 15_000);\n try {\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n if (!res.ok) {\n const message = await res.text().catch(() => res.statusText);\n throw new Error(`${res.status} ${message || res.statusText}`);\n }\n } catch (error) {\n // Best-effort: network errors or auth issues are non-fatal, but make the\n // problem discoverable before the user tries \"Apply to source\".\n console.error(\n `[design connect] Could not register bridge with ${endpoint}: ${\n error instanceof Error ? error.message : String(error)\n }`,\n );\n } finally {\n clearTimeout(timeout);\n }\n}\n\nfunction printHelp() {\n console.log(`Usage:\n agent-native design connect [options]\n\nOptions:\n --url <url> Dev server URL to inspect (auto-detected if omitted)\n --port <number> Local bridge port (default ${DEFAULT_BRIDGE_PORT})\n --root <path> App/repo root for route discovery (default cwd)\n --route-manifest <path> Non-destructive route manifest output path\n --app-url <url> Deployed design app URL for self-registration\n (also reads AGENT_NATIVE_URL / DESIGN_APP_URL env)\n --bridge-token <token> Adopt a bridge token minted server-side by the\n authenticated connect-localhost / open-visual-edit\n action instead of minting one. Used by the remote-MCP\n /visual-edit flow so the bridge and the user's stored\n connection token match with no self-registration.\n (also reads AGENT_NATIVE_BRIDGE_TOKEN env)\n --preview-token <token> Adopt the paired read-only browser preview token.\n Optional when --bridge-token is present: compatible\n clients derive the same one-way token automatically.\n (also reads AGENT_NATIVE_PREVIEW_TOKEN env)\n --daemon Start the bridge detached, wait for /health, then exit\n --json Print the manifest JSON and exit\n --once Prepare/scaffold the manifest and exit\n --dry-run Print what would be exposed without writing files\n\nElement provenance (resolveNodeToFile):\n The design editor can map a selected DOM element back to its source file,\n line, and component name using one of these provenance sources:\n\n • React development builds with jsxDEV enabled (the default):\n Design reads the selected element's development-only Fiber debug stack.\n React does not emit data-source-* DOM attributes automatically.\n\n • A Babel source plugin (e.g. babel-plugin-react-source or a custom plugin):\n Emits data-source-file=\"src/Button.tsx\" data-source-line=\"12\"\n data-source-column=\"4\" data-component-name=\"Button\" on each element.\n\n • data-loc=\"src/Button.tsx:12:4\" shorthand attribute (Babel source convention):\n The bridge parses this as { sourceFile, line, column } automatically.\n\n In production React builds and other runtimes without explicit attributes,\n the editor still works but exact element provenance may be absent.\n Cross-origin localhost iframes cannot be read regardless of attributes (CSP).`);\n}\n\nfunction removeDaemonFlag(argv: string[]): string[] {\n return argv.filter((arg) => arg !== \"--daemon\");\n}\n\nfunction resolveCurrentCliInvocation(argv: string[]): {\n command: string;\n args: string[];\n} {\n const suffixLength = argv.length + 1; // leading \"design\" command + runDesign argv\n const prefixEnd = Math.max(1, process.argv.length - suffixLength);\n const cliPrefix = process.argv.slice(1, prefixEnd);\n const entry = cliPrefix[0] ?? process.argv[1];\n if (!entry) {\n throw new Error(\"Could not resolve current CLI entrypoint for --daemon\");\n }\n if (entry.endsWith(\".ts\") || entry.endsWith(\".tsx\")) {\n return {\n command: \"tsx\",\n args: [...cliPrefix, \"design\", ...removeDaemonFlag(argv)],\n };\n }\n return {\n command: process.execPath,\n args: [...cliPrefix, \"design\", ...removeDaemonFlag(argv)],\n };\n}\n\nasync function startDetachedDesignBridge(\n argv: string[],\n manifest: DesignConnectManifest,\n previewToken?: string,\n): Promise<number> {\n if (await waitForBridgeHealth(manifest.bridgeUrl, 800)) {\n const [runningManifest, runningFingerprint] = await Promise.all([\n fetchRunningBridgeManifest(manifest.bridgeUrl, previewToken),\n fetchRunningBridgeFingerprint(manifest.bridgeUrl),\n ]);\n const fingerprintMatches =\n runningFingerprint === designConnectAppFingerprint(manifest);\n if (\n (runningManifest &&\n designConnectManifestsTargetSameApp(runningManifest, manifest)) ||\n fingerprintMatches\n ) {\n console.error(\n `Design localhost bridge already running at ${manifest.bridgeUrl}`,\n );\n console.log(JSON.stringify(runningManifest ?? manifest, null, 2));\n return 0;\n }\n\n console.error(\n [\n `Design localhost bridge already running at ${manifest.bridgeUrl} for a different app.`,\n runningManifest\n ? `Running app: ${runningManifest.devServerUrl} (${runningManifest.rootPath})`\n : \"Running bridge did not expose a compatible manifest.\",\n `Requested app: ${manifest.devServerUrl} (${manifest.rootPath})`,\n \"Stop the existing bridge or choose a different --port.\",\n ].join(\"\\n\"),\n );\n return 1;\n }\n\n const invocation = resolveCurrentCliInvocation(argv);\n // A detached bridge that dies — port already taken, crash on boot, killed\n // with its process group — used to do so with stdio \"ignore\", so the failure\n // left no trace anywhere and Design silently fell back to non-editable\n // iframes. Keep its output on disk so the death is diagnosable.\n const logPath = await createDaemonLogPath(manifest.rootPath);\n const logFd = await fs.open(logPath, \"a\");\n const child = spawn(invocation.command, invocation.args, {\n cwd: process.cwd(),\n detached: true,\n env: process.env,\n stdio: [\"ignore\", logFd.fd, logFd.fd],\n shell: process.platform === \"win32\",\n });\n child.unref();\n\n if (await waitForBridgeHealth(manifest.bridgeUrl)) {\n await logFd.close();\n console.error(`Design localhost bridge running at ${manifest.bridgeUrl}`);\n console.error(`Bridge log: ${logPath}`);\n console.log(JSON.stringify(manifest, null, 2));\n return 0;\n }\n\n const tail = await readDaemonLogTail(logPath);\n await logFd.close();\n console.error(\n [\n `Timed out waiting for detached Design bridge at ${manifest.bridgeUrl}`,\n `Bridge log: ${logPath}`,\n tail ? `Last output:\\n${tail}` : \"The bridge produced no output.\",\n ].join(\"\\n\"),\n );\n return 1;\n}\n\nasync function createDaemonLogPath(rootPath: string): Promise<string> {\n const dir = path.join(rootPath, \".agent-native\");\n await fs.mkdir(dir, { recursive: true });\n return path.join(dir, \"design-connect.log\");\n}\n\nasync function readDaemonLogTail(\n logPath: string,\n maxBytes = 4000,\n): Promise<string> {\n try {\n const contents = await fs.readFile(logPath, \"utf8\");\n return contents.slice(-maxBytes).trim();\n } catch {\n // An unreadable log must not mask the timeout the caller is reporting.\n return \"\";\n }\n}\n\nexport async function runDesign(argv: string[]) {\n const subcommand = argv[0];\n if (subcommand !== \"connect\") {\n if (\n subcommand === \"help\" ||\n subcommand === \"--help\" ||\n subcommand === \"-h\"\n ) {\n printHelp();\n return 0;\n }\n console.error(\"Usage: agent-native design connect [options]\");\n return 1;\n }\n\n const parsed = parseDesignConnectArgs(argv);\n if (parsed.help) {\n printHelp();\n return 0;\n }\n\n const manifest = await prepareDesignConnectManifest(parsed);\n const seedBridgeToken =\n parsed.bridgeToken || process.env[\"AGENT_NATIVE_BRIDGE_TOKEN\"] || undefined;\n const seedPreviewToken =\n parsed.previewToken ||\n process.env[\"AGENT_NATIVE_PREVIEW_TOKEN\"] ||\n (seedBridgeToken ? deriveDesignPreviewToken(seedBridgeToken) : undefined);\n const appUrl = resolveAppUrl(parsed.appUrl);\n if (parsed.daemon) {\n return startDetachedDesignBridge(argv, manifest, seedPreviewToken);\n }\n if (parsed.json || parsed.once || parsed.dryRun) {\n console.log(JSON.stringify(manifest, null, 2));\n return 0;\n }\n\n const bridge = await startDesignConnectBridge(manifest, {\n bridgeToken: seedBridgeToken,\n previewToken: seedPreviewToken,\n allowedOrigins: appUrl ? [appUrl] : [],\n });\n console.error(\"Design localhost bridge running\");\n console.error(`Bridge: ${manifest.bridgeUrl}`);\n console.error(`Manifest: ${manifest.bridgeUrl}/manifest.json`);\n console.error(`Routes: ${manifest.routeCount}`);\n console.error(`Dev URL: ${manifest.devServerUrl}`);\n\n if (seedBridgeToken) {\n // Server already stored this token on the row; bridge matches it, so no\n // self-registration needed. Zero-config path for the remote-MCP flow.\n console.error(\n \"[design connect] Using server-provided bridge token; skipping self-registration.\",\n );\n } else {\n // No seed: fall back to self-registration — POST the minted token to\n // connect-localhost. Needs an auth token in env or it 401s (the old gap).\n if (appUrl) {\n void registerConnectionWithServer(appUrl, bridge, resolveAuthToken());\n } else {\n // No token source at all — warn rather than 401 silently at edit time.\n console.error(\n \"[design connect] No bridge token or app URL resolved (pass --bridge-token, or --app-url / AGENT_NATIVE_URL); skipping self-registration — browser preview and live-edit will fail to authorize.\",\n );\n }\n }\n\n return await new Promise<number>((resolve) => {\n const stop = () => {\n bridge.server.close(() => resolve(0));\n };\n for (const signal of [\"SIGINT\", \"SIGTERM\", \"SIGHUP\"] as const) {\n process.once(signal, stop);\n }\n });\n}\n"]}
|