@agent-native/core 0.85.7 → 0.86.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +124 -1
- package/corpus/core/README.md +0 -11
- package/corpus/core/docs/content/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/ar-SA/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/ar-SA/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/ar-SA/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/ar-SA/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/ar-SA/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/ar-SA/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/ar-SA/workspace-connections.mdx +11 -11
- package/corpus/core/docs/content/locales/de-DE/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/de-DE/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/de-DE/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/de-DE/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/de-DE/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/de-DE/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/de-DE/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/es-ES/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/es-ES/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/es-ES/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/es-ES/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/es-ES/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/es-ES/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/fr-FR/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/fr-FR/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/fr-FR/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/fr-FR/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/fr-FR/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/fr-FR/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/hi-IN/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/hi-IN/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/hi-IN/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/hi-IN/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/hi-IN/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/hi-IN/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/ja-JP/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/ja-JP/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/ja-JP/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/ja-JP/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/ja-JP/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/ja-JP/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/ko-KR/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/ko-KR/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/ko-KR/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/ko-KR/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/ko-KR/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/ko-KR/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/pt-BR/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/pt-BR/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/pt-BR/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/pt-BR/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/pt-BR/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/pt-BR/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/zh-CN/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/zh-CN/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/zh-CN/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/zh-CN/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/zh-CN/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-CN/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/cloneable-saas.mdx +0 -1
- package/corpus/core/docs/content/locales/zh-TW/plan-plugin.mdx +10 -9
- package/corpus/core/docs/content/locales/zh-TW/sharing.mdx +1 -2
- package/corpus/core/docs/content/locales/zh-TW/skills-guide.mdx +2 -3
- package/corpus/core/docs/content/locales/zh-TW/template-plan.mdx +23 -7
- package/corpus/core/docs/content/locales/zh-TW/tracking.mdx +1 -1
- package/corpus/core/docs/content/locales/zh-TW/workspace-connections.mdx +1 -1
- package/corpus/core/docs/content/plan-plugin.mdx +12 -11
- package/corpus/core/docs/content/sharing.mdx +1 -2
- package/corpus/core/docs/content/skills-guide.mdx +4 -3
- package/corpus/core/docs/content/template-plan.mdx +37 -6
- package/corpus/core/docs/content/tracking.mdx +1 -1
- package/corpus/core/docs/content/workspace-connections.mdx +1 -1
- package/corpus/core/package.json +6 -6
- package/corpus/core/src/agent/run-store.ts +1 -1
- package/corpus/core/src/chat-threads/store.ts +73 -11
- package/corpus/core/src/checkpoints/store.ts +13 -2
- package/corpus/core/src/cli/create.ts +3 -4
- package/corpus/core/src/cli/design-connect.ts +469 -9
- package/corpus/core/src/cli/index.ts +13 -0
- package/corpus/core/src/cli/plan-local.ts +281 -24
- package/corpus/core/src/cli/skills.ts +177 -21
- package/corpus/core/src/cli/templates-meta.ts +0 -13
- package/corpus/core/src/cli/visualize-repo.ts +715 -0
- package/corpus/core/src/client/AssistantChat.tsx +126 -17
- package/corpus/core/src/client/agent-chat-adapter.ts +6 -5
- package/corpus/core/src/client/app-providers.tsx +2 -2
- package/corpus/core/src/client/collab/index.ts +31 -0
- package/corpus/core/src/client/components/LiveCursorOverlay.tsx +16 -1
- package/corpus/core/src/client/components/PresenceBar.tsx +14 -1
- package/corpus/core/src/client/components/RecentEditHighlights.tsx +219 -0
- package/corpus/core/src/client/components/RemoteSelectionRings.tsx +40 -6
- package/corpus/core/src/client/index.ts +48 -0
- package/corpus/core/src/client/org/OrgSwitcher.tsx +0 -4
- package/corpus/core/src/client/rich-markdown-editor/SharedRichEditor.tsx +49 -32
- package/corpus/core/src/client/rich-markdown-editor/index.ts +6 -0
- package/corpus/core/src/client/rich-markdown-editor/surgical-apply.ts +192 -0
- package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +59 -8
- package/corpus/core/src/client/session-replay.ts +181 -15
- package/corpus/core/src/client/sse-event-processor.ts +90 -1
- package/corpus/core/src/client/use-action.ts +123 -25
- package/corpus/core/src/client/use-agent-engine-configured.ts +7 -1
- package/corpus/core/src/client/use-chat-threads.ts +18 -7
- package/corpus/core/src/client/use-db-sync.ts +104 -19
- package/corpus/core/src/client/visual-style-controls.tsx +475 -0
- package/corpus/core/src/collab/agent-presence.ts +191 -62
- package/corpus/core/src/collab/awareness.ts +83 -6
- package/corpus/core/src/collab/client.ts +89 -146
- package/corpus/core/src/collab/index.ts +34 -0
- package/corpus/core/src/collab/recent-edits.ts +171 -0
- package/corpus/core/src/collab/undo.ts +432 -0
- package/corpus/core/src/collab/ydoc-manager.ts +68 -0
- package/corpus/core/src/connections/catalog.ts +2 -3
- package/corpus/core/src/db/create-get-db.ts +86 -1
- package/corpus/core/src/db/ensure-additive-columns.ts +430 -0
- package/corpus/core/src/db/index.ts +6 -0
- package/corpus/core/src/db/migrations.ts +236 -35
- package/corpus/core/src/jobs/scheduler.ts +17 -14
- package/corpus/core/src/observability/traces.ts +182 -1
- package/corpus/core/src/org/context.ts +79 -2
- package/corpus/core/src/server/agent-chat-plugin.ts +10 -6
- package/corpus/core/src/server/auth-marketing.ts +0 -11
- package/corpus/core/src/server/auth.ts +11 -4
- package/corpus/core/src/server/collab-plugin.ts +56 -13
- package/corpus/core/src/server/design-token-utils.ts +1 -1
- package/corpus/core/src/server/fusion-app.ts +447 -0
- package/corpus/core/src/server/index.ts +13 -0
- package/corpus/core/src/server/onboarding-html.ts +3 -4
- package/corpus/core/src/server/poll-events.ts +14 -2
- package/corpus/core/src/server/poll.ts +219 -12
- package/corpus/core/src/server/schema-prompt.ts +28 -9
- package/corpus/core/src/settings/store.ts +33 -2
- package/corpus/core/src/sharing/actions/set-resource-visibility.ts +2 -0
- package/corpus/core/src/sharing/actions/share-resource.ts +3 -0
- package/corpus/core/src/sharing/actions/unshare-resource.ts +2 -0
- package/corpus/core/src/styles/agent-native.css +0 -5
- package/corpus/core/src/templates/default/.agents/skills/real-time-collab/SKILL.md +82 -19
- package/corpus/core/src/templates/default/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/core/src/templates/default/.agents/skills/storing-data/SKILL.md +8 -0
- package/corpus/core/src/templates/default/package.json +3 -3
- package/corpus/core/src/templates/workspace-core/.agents/skills/client-methods/SKILL.md +8 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +22 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +82 -19
- package/corpus/core/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +8 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -0
- package/corpus/core/src/tracking/providers.ts +22 -1
- package/corpus/templates/analytics/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +20 -5
- package/corpus/templates/analytics/.agents/skills/storing-data/SKILL.md +8 -0
- package/corpus/templates/analytics/AGENTS.md +33 -6
- package/corpus/templates/analytics/actions/navigate.ts +14 -4
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +1 -1
- package/corpus/templates/analytics/actions/view-screen.ts +57 -0
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +23 -1
- package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -0
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +21 -0
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +7 -0
- package/corpus/templates/analytics/app/i18n/zh-TW.ts +15 -1
- package/corpus/templates/analytics/app/i18n-data.ts +151 -10
- package/corpus/templates/analytics/app/pages/Agents.tsx +118 -0
- package/corpus/templates/analytics/app/pages/DataSources.tsx +11 -1
- package/corpus/templates/analytics/app/pages/sessions/SessionDevToolsPanel.tsx +76 -40
- package/corpus/templates/analytics/app/pages/sessions/session-replay-devtools.ts +5 -0
- package/corpus/templates/analytics/app/routes/agents.tsx +10 -0
- package/corpus/templates/analytics/changelog/2026-07-03-agent-admin-tools-page.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-03-agent-llm-observability-dashboard.md +6 -0
- package/corpus/templates/analytics/changelog/2026-07-03-session-recordings-now-include-response-bodies-for-5xx-error.md +6 -0
- package/corpus/templates/analytics/docs/schemas/first-party-analytics.md +34 -0
- package/corpus/templates/analytics/docs/schemas/tracked-events.md +6 -0
- package/corpus/templates/analytics/package.json +3 -3
- package/corpus/templates/analytics/seeds/dashboards/agent-observability-llm.json +173 -0
- package/corpus/templates/analytics/server/jobs/analytics-alerts.ts +23 -5
- package/corpus/templates/analytics/server/lib/analytics-alerts.ts +58 -13
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +23 -0
- package/corpus/templates/analytics/server/lib/dashboard-seeds.ts +5 -0
- package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +120 -8
- package/corpus/templates/analytics/server/lib/session-replay.ts +3 -2
- package/corpus/templates/analytics/server/plugins/db.ts +93 -2
- package/corpus/templates/analytics/server/routes/api/session-replay/agent-diagnostics.json.get.ts +45 -1
- package/corpus/templates/analytics/shared/session-replay-diagnostics.ts +10 -0
- package/corpus/templates/assets/.agents/skills/real-time-collab/SKILL.md +82 -19
- package/corpus/templates/assets/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/assets/.agents/skills/storing-data/SKILL.md +8 -0
- package/corpus/templates/assets/package.json +3 -3
- package/corpus/templates/assets/server/plugins/db.ts +63 -2
- package/corpus/templates/brain/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/brain/package.json +3 -3
- package/corpus/templates/brain/server/plugins/db.ts +75 -2
- package/corpus/templates/calendar/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/calendar/.agents/skills/storing-data/SKILL.md +8 -0
- package/corpus/templates/calendar/package.json +3 -3
- package/corpus/templates/calendar/server/plugins/db.ts +64 -2
- package/corpus/templates/chat/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/chat/package.json +3 -3
- package/corpus/templates/clips/actions/finalize-recording.ts +50 -40
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +8 -6
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +3 -3
- package/corpus/templates/clips/changelog/2026-07-03-mobile-recording-pages-keep-videos-in-a-16-9-player-with-act.md +6 -0
- package/corpus/templates/clips/package.json +3 -3
- package/corpus/templates/clips/server/lib/recording-upload-state.ts +56 -0
- package/corpus/templates/clips/server/plugins/db.ts +68 -1
- package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +27 -3
- package/corpus/templates/content/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/content/.agents/skills/storing-data/SKILL.md +8 -0
- package/corpus/templates/content/actions/edit-document.ts +48 -1
- package/corpus/templates/content/actions/list-documents.ts +101 -94
- package/corpus/templates/content/actions/search-documents.ts +19 -3
- package/corpus/templates/content/actions/update-document.ts +54 -1
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +127 -7
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +97 -2
- package/corpus/templates/content/changelog/2026-07-03-agent-document-edits-now-appear-as-a-live-collaborator-prese.md +6 -0
- package/corpus/templates/content/changelog/2026-07-03-document-search-and-list-views-load-faster-on-large-workspac.md +6 -0
- package/corpus/templates/content/package.json +3 -3
- package/corpus/templates/content/server/plugins/db.ts +57 -1
- package/corpus/templates/design/.agents/skills/full-app-build/SKILL.md +140 -0
- package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +20 -0
- package/corpus/templates/design/AGENTS.md +50 -12
- package/corpus/templates/design/actions/add-fusion-screens.ts +91 -0
- package/corpus/templates/design/actions/apply-a11y-fix.ts +5 -1
- package/corpus/templates/design/actions/apply-component-prop-edit.ts +10 -2
- package/corpus/templates/design/actions/apply-fusion-edits.ts +161 -0
- package/corpus/templates/design/actions/apply-visual-edit.ts +34 -1
- package/corpus/templates/design/actions/create-component.ts +5 -1
- package/corpus/templates/design/actions/create-fusion-app.ts +202 -0
- package/corpus/templates/design/actions/deploy-fusion-app.ts +123 -0
- package/corpus/templates/design/actions/edit-design.ts +13 -16
- package/corpus/templates/design/actions/get-fusion-deploy-status.ts +86 -0
- package/corpus/templates/design/actions/list-fusion-edits.ts +96 -0
- package/corpus/templates/design/actions/list-local-files.ts +133 -0
- package/corpus/templates/design/actions/push-fusion-app.ts +62 -0
- package/corpus/templates/design/actions/queue-fusion-edit.ts +112 -0
- package/corpus/templates/design/actions/read-local-file.ts +139 -0
- package/corpus/templates/design/actions/send-fusion-message.ts +69 -0
- package/corpus/templates/design/actions/sync-fusion-app.ts +196 -0
- package/corpus/templates/design/actions/write-local-file.ts +115 -14
- package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +12 -0
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +379 -0
- package/corpus/templates/design/app/components/design/EditPanel.tsx +149 -73
- package/corpus/templates/design/app/components/design/FusionAppBanner.tsx +328 -0
- package/corpus/templates/design/app/components/design/LayersPanel.tsx +148 -30
- package/corpus/templates/design/app/components/design/LocalhostWriteConsentDialog.tsx +1 -1
- package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +567 -6
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +7 -98
- package/corpus/templates/design/app/components/design/code-workbench/ActivityBar.tsx +85 -0
- package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +466 -0
- package/corpus/templates/design/app/components/design/code-workbench/SideBar.tsx +53 -0
- package/corpus/templates/design/app/components/design/code-workbench/commands.ts +339 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/Breadcrumbs.tsx +42 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/BufferSync.tsx +128 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/EditorTabs.tsx +363 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +268 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/StatusBar.tsx +208 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/monaco-setup.ts +61 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/monaco-theme-palette.ts +191 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/monaco-theme.ts +29 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/status-bar-lang.ts +21 -0
- package/corpus/templates/design/app/components/design/code-workbench/editor/tab-drag.ts +27 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +155 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +551 -0
- package/corpus/templates/design/app/components/design/code-workbench/explorer/file-icons.tsx +115 -0
- package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open.ts +65 -0
- package/corpus/templates/design/app/components/design/code-workbench/format/prettier-format.ts +182 -0
- package/corpus/templates/design/app/components/design/code-workbench/model-registry.ts +133 -0
- package/corpus/templates/design/app/components/design/code-workbench/quickinput/QuickInput.tsx +563 -0
- package/corpus/templates/design/app/components/design/code-workbench/quickinput/fuzzy.ts +170 -0
- package/corpus/templates/design/app/components/design/code-workbench/search/SearchView.tsx +508 -0
- package/corpus/templates/design/app/components/design/code-workbench/search/search-engine.ts +280 -0
- package/corpus/templates/design/app/components/design/code-workbench/store.tsx +734 -0
- package/corpus/templates/design/app/components/design/code-workbench/workspace/create-providers.ts +39 -0
- package/corpus/templates/design/app/components/design/code-workbench/workspace/inline-provider.ts +196 -0
- package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +177 -0
- package/corpus/templates/design/app/components/design/code-workbench/workspace/tree.ts +110 -0
- package/corpus/templates/design/app/components/design/code-workbench/workspace/types.ts +103 -0
- package/corpus/templates/design/app/components/design/code-workbench-theme.ts +68 -0
- package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +127 -10
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +52 -29
- package/corpus/templates/design/app/components/design/inspector/index.ts +9 -0
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +56 -0
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +80 -1
- package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +6 -16
- package/corpus/templates/design/app/i18n/zh-TW.ts +2 -1
- package/corpus/templates/design/app/i18n-data.ts +31 -18
- package/corpus/templates/design/app/pages/DesignEditor.tsx +1474 -175
- package/corpus/templates/design/app/pages/Index.tsx +90 -17
- package/corpus/templates/design/changelog/2026-07-03-the-ai-now-edits-like-a-collaborator-on-canvas-its-cursor-gl.md +6 -0
- package/corpus/templates/design/changelog/2026-07-03-the-code-panel-is-now-a-full-vs-code-style-editor-with-a-fil.md +6 -0
- package/corpus/templates/design/package.json +4 -3
- package/corpus/templates/design/server/db/schema.ts +31 -0
- package/corpus/templates/design/server/lib/fusion-screens.ts +246 -0
- package/corpus/templates/design/server/plugins/db.ts +89 -2
- package/corpus/templates/design/shared/collab-selection.ts +52 -0
- package/corpus/templates/design/shared/full-app.ts +126 -0
- package/corpus/templates/design/shared/pen-path.ts +296 -0
- package/corpus/templates/dispatch/package.json +3 -3
- package/corpus/templates/forms/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/forms/.agents/skills/storing-data/SKILL.md +8 -0
- package/corpus/templates/forms/package.json +3 -3
- package/corpus/templates/forms/server/plugins/db.ts +62 -2
- package/corpus/templates/macros/package.json +3 -3
- package/corpus/templates/macros/server/plugins/db.ts +63 -2
- package/corpus/templates/mail/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/mail/.agents/skills/storing-data/SKILL.md +8 -0
- package/corpus/templates/mail/package.json +3 -3
- package/corpus/templates/mail/server/lib/contact-frequency.ts +42 -15
- package/corpus/templates/mail/server/plugins/db.ts +63 -2
- package/corpus/templates/plan/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +9 -3
- package/corpus/templates/plan/.agents/skills/visualize-repo/SKILL.md +92 -0
- package/corpus/templates/plan/actions/export-visual-plan.ts +5 -0
- package/corpus/templates/plan/actions/get-local-plan-folder.ts +4 -22
- package/corpus/templates/plan/actions/get-plan-version.ts +6 -16
- package/corpus/templates/plan/actions/list-plan-versions.ts +48 -20
- package/corpus/templates/plan/actions/patch-visual-plan-source.ts +41 -1
- package/corpus/templates/plan/actions/promote-local-plan-folder.ts +4 -22
- package/corpus/templates/plan/actions/update-local-plan-comments.ts +4 -2
- package/corpus/templates/plan/actions/update-local-plan-folder.ts +4 -22
- package/corpus/templates/plan/actions/update-visual-plan.ts +60 -1
- package/corpus/templates/plan/agent-native.app-skill.json +10 -0
- package/corpus/templates/plan/app/components/editor/PlanDocumentEditor.tsx +138 -39
- package/corpus/templates/plan/app/components/editor/usePlanUndoStack.ts +165 -23
- package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +80 -4
- package/corpus/templates/plan/app/global.css +11 -9
- package/corpus/templates/plan/app/hooks/use-navigation-state.ts +10 -1
- package/corpus/templates/plan/app/hooks/use-plan-presence.ts +66 -0
- package/corpus/templates/plan/app/pages/PlansPage.tsx +215 -63
- package/corpus/templates/plan/changelog/2026-07-03-local-visual-plans-and-recaps-can-save-comments-without-sign.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-03-plan-tabs-render-nested-text-instead-of-raw-json.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-03-plans-are-now-fully-real-time-collaborative-multiple-people-.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-03-plans-open-and-refresh-faster-especially-long-lived-plans-wi.md +6 -0
- package/corpus/templates/plan/changelog/2026-07-03-undo-now-survives-agent-edits-cmd-z-keeps-working-on-your-ow.md +6 -0
- package/corpus/templates/plan/package.json +5 -3
- package/corpus/templates/plan/server/db/schema.ts +12 -0
- package/corpus/templates/plan/server/lib/local-plan-kind.ts +25 -0
- package/corpus/templates/plan/server/lib/plan-versions.ts +83 -1
- package/corpus/templates/plan/server/lib/public-action-paths.ts +0 -2
- package/corpus/templates/plan/server/plans.ts +26 -3
- package/corpus/templates/plan/server/plugins/db.ts +105 -2
- package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +8 -4
- package/corpus/templates/slides/AGENTS.md +4 -0
- package/corpus/templates/slides/actions/_agent-presence.ts +48 -0
- package/corpus/templates/slides/actions/add-slide.ts +16 -18
- package/corpus/templates/slides/actions/patch-deck.ts +4 -2
- package/corpus/templates/slides/actions/update-slide.ts +114 -77
- package/corpus/templates/slides/actions/view-screen.ts +39 -0
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +47 -3
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +32 -35
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +625 -199
- package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +342 -0
- package/corpus/templates/slides/app/components/editor/TweaksPanel.tsx +46 -96
- package/corpus/templates/slides/app/components/visual-editor/SaveStatusIndicator.tsx +8 -1
- package/corpus/templates/slides/app/context/DeckContext.tsx +589 -176
- package/corpus/templates/slides/app/hooks/use-deck-presence.ts +84 -42
- package/corpus/templates/slides/app/i18n/ar-SA.ts +46 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +46 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +46 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +46 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +46 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +46 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +46 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +46 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +46 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +46 -0
- package/corpus/templates/slides/app/i18n/zh-TW.ts +46 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +25 -13
- package/corpus/templates/slides/changelog/2026-07-03-figma-style-slide-editing.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-03-see-the-ai-working-with-you-when-the-agent-edits-a-slide-it-.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-03-undo-redo-is-now-precise-and-safe-with-collaborators-it-only.md +6 -0
- package/corpus/templates/slides/package.json +3 -3
- package/corpus/templates/slides/server/handlers/decks.ts +31 -3
- package/corpus/templates/slides/server/plugins/db.ts +65 -2
- package/corpus/templates/videos/netlify.toml +1 -12
- package/dist/agent/run-store.js +1 -1
- package/dist/agent/run-store.js.map +1 -1
- package/dist/chat-threads/store.d.ts +9 -1
- package/dist/chat-threads/store.d.ts.map +1 -1
- package/dist/chat-threads/store.js +63 -11
- package/dist/chat-threads/store.js.map +1 -1
- package/dist/checkpoints/store.d.ts.map +1 -1
- package/dist/checkpoints/store.js +10 -2
- package/dist/checkpoints/store.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +3 -5
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/design-connect.d.ts +49 -1
- package/dist/cli/design-connect.d.ts.map +1 -1
- package/dist/cli/design-connect.js +414 -9
- package/dist/cli/design-connect.js.map +1 -1
- package/dist/cli/index.js +12 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/plan-local.d.ts +24 -0
- package/dist/cli/plan-local.d.ts.map +1 -1
- package/dist/cli/plan-local.js +188 -20
- package/dist/cli/plan-local.js.map +1 -1
- package/dist/cli/skills.d.ts +3 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +173 -21
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/templates-meta.d.ts.map +1 -1
- package/dist/cli/templates-meta.js +0 -14
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/cli/visualize-repo.d.ts +49 -0
- package/dist/cli/visualize-repo.d.ts.map +1 -0
- package/dist/cli/visualize-repo.js +561 -0
- package/dist/cli/visualize-repo.js.map +1 -0
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +120 -15
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +6 -5
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/app-providers.d.ts +2 -2
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/collab/index.d.ts +4 -1
- package/dist/client/collab/index.d.ts.map +1 -1
- package/dist/client/collab/index.js +3 -0
- package/dist/client/collab/index.js.map +1 -1
- package/dist/client/components/LiveCursorOverlay.d.ts.map +1 -1
- package/dist/client/components/LiveCursorOverlay.js +11 -3
- package/dist/client/components/LiveCursorOverlay.js.map +1 -1
- package/dist/client/components/PresenceBar.d.ts.map +1 -1
- package/dist/client/components/PresenceBar.js +6 -1
- package/dist/client/components/PresenceBar.js.map +1 -1
- package/dist/client/components/RecentEditHighlights.d.ts +43 -0
- package/dist/client/components/RecentEditHighlights.d.ts.map +1 -0
- package/dist/client/components/RecentEditHighlights.js +146 -0
- package/dist/client/components/RecentEditHighlights.js.map +1 -0
- package/dist/client/components/RemoteSelectionRings.d.ts +9 -0
- package/dist/client/components/RemoteSelectionRings.d.ts.map +1 -1
- package/dist/client/components/RemoteSelectionRings.js +22 -8
- package/dist/client/components/RemoteSelectionRings.js.map +1 -1
- package/dist/client/index.d.ts +6 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
- package/dist/client/org/OrgSwitcher.js +1 -3
- package/dist/client/org/OrgSwitcher.js.map +1 -1
- package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts +8 -1
- package/dist/client/rich-markdown-editor/SharedRichEditor.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/SharedRichEditor.js +8 -2
- package/dist/client/rich-markdown-editor/SharedRichEditor.js.map +1 -1
- package/dist/client/rich-markdown-editor/index.d.ts +1 -0
- package/dist/client/rich-markdown-editor/index.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/index.js +1 -0
- package/dist/client/rich-markdown-editor/index.js.map +1 -1
- package/dist/client/rich-markdown-editor/surgical-apply.d.ts +66 -0
- package/dist/client/rich-markdown-editor/surgical-apply.d.ts.map +1 -0
- package/dist/client/rich-markdown-editor/surgical-apply.js +147 -0
- package/dist/client/rich-markdown-editor/surgical-apply.js.map +1 -0
- package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts +18 -2
- package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
- package/dist/client/rich-markdown-editor/useCollabReconcile.js +39 -8
- package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
- package/dist/client/session-replay.d.ts +10 -1
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +134 -7
- package/dist/client/session-replay.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +81 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/client/use-action.d.ts +24 -0
- package/dist/client/use-action.d.ts.map +1 -1
- package/dist/client/use-action.js +109 -27
- package/dist/client/use-action.js.map +1 -1
- package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
- package/dist/client/use-agent-engine-configured.js +7 -1
- package/dist/client/use-agent-engine-configured.js.map +1 -1
- package/dist/client/use-chat-threads.d.ts.map +1 -1
- package/dist/client/use-chat-threads.js +11 -3
- package/dist/client/use-chat-threads.js.map +1 -1
- package/dist/client/use-db-sync.d.ts +36 -0
- package/dist/client/use-db-sync.d.ts.map +1 -1
- package/dist/client/use-db-sync.js +68 -12
- package/dist/client/use-db-sync.js.map +1 -1
- package/dist/client/visual-style-controls.d.ts +79 -0
- package/dist/client/visual-style-controls.d.ts.map +1 -0
- package/dist/client/visual-style-controls.js +150 -0
- package/dist/client/visual-style-controls.js.map +1 -0
- package/dist/collab/agent-presence.d.ts +51 -5
- package/dist/collab/agent-presence.d.ts.map +1 -1
- package/dist/collab/agent-presence.js +144 -58
- package/dist/collab/agent-presence.js.map +1 -1
- package/dist/collab/awareness-store.d.ts +32 -0
- package/dist/collab/awareness-store.d.ts.map +1 -0
- package/dist/collab/awareness-store.js +0 -0
- package/dist/collab/awareness-store.js.map +1 -0
- package/dist/collab/awareness.d.ts +12 -1
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/collab/awareness.js +53 -5
- package/dist/collab/awareness.js.map +1 -1
- package/dist/collab/client.d.ts +2 -0
- package/dist/collab/client.d.ts.map +1 -1
- package/dist/collab/client.js +79 -119
- package/dist/collab/client.js.map +1 -1
- package/dist/collab/index.d.ts +3 -1
- package/dist/collab/index.d.ts.map +1 -1
- package/dist/collab/index.js +5 -1
- package/dist/collab/index.js.map +1 -1
- package/dist/collab/recent-edits.d.ts +87 -0
- package/dist/collab/recent-edits.d.ts.map +1 -0
- package/dist/collab/recent-edits.js +116 -0
- package/dist/collab/recent-edits.js.map +1 -0
- package/dist/collab/routes.d.ts +2 -2
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/collab/undo.d.ts +121 -0
- package/dist/collab/undo.d.ts.map +1 -0
- package/dist/collab/undo.js +244 -0
- package/dist/collab/undo.js.map +1 -0
- package/dist/collab/ydoc-manager.d.ts +10 -0
- package/dist/collab/ydoc-manager.d.ts.map +1 -1
- package/dist/collab/ydoc-manager.js +57 -0
- package/dist/collab/ydoc-manager.js.map +1 -1
- package/dist/connections/catalog.d.ts +2 -2
- package/dist/connections/catalog.d.ts.map +1 -1
- package/dist/connections/catalog.js +1 -1
- package/dist/connections/catalog.js.map +1 -1
- package/dist/db/create-get-db.d.ts +22 -0
- package/dist/db/create-get-db.d.ts.map +1 -1
- package/dist/db/create-get-db.js +73 -1
- package/dist/db/create-get-db.js.map +1 -1
- package/dist/db/ensure-additive-columns.d.ts +93 -0
- package/dist/db/ensure-additive-columns.d.ts.map +1 -0
- package/dist/db/ensure-additive-columns.js +355 -0
- package/dist/db/ensure-additive-columns.js.map +1 -0
- package/dist/db/index.d.ts +1 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -0
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations.d.ts +70 -0
- package/dist/db/migrations.d.ts.map +1 -1
- package/dist/db/migrations.js +196 -33
- package/dist/db/migrations.js.map +1 -1
- package/dist/jobs/scheduler.js +17 -10
- package/dist/jobs/scheduler.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/observability/routes.d.ts +2 -2
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +155 -1
- package/dist/observability/traces.js.map +1 -1
- package/dist/org/context.d.ts +7 -0
- package/dist/org/context.d.ts.map +1 -1
- package/dist/org/context.js +54 -2
- package/dist/org/context.js.map +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/secrets/routes.d.ts +9 -9
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +10 -6
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/auth-marketing.d.ts.map +1 -1
- package/dist/server/auth-marketing.js +0 -10
- package/dist/server/auth-marketing.js.map +1 -1
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +6 -4
- package/dist/server/auth.js.map +1 -1
- package/dist/server/collab-plugin.d.ts.map +1 -1
- package/dist/server/collab-plugin.js +45 -13
- package/dist/server/collab-plugin.js.map +1 -1
- package/dist/server/design-token-utils.d.ts +1 -1
- package/dist/server/design-token-utils.js +1 -1
- package/dist/server/design-token-utils.js.map +1 -1
- package/dist/server/fusion-app.d.ts +107 -0
- package/dist/server/fusion-app.d.ts.map +1 -0
- package/dist/server/fusion-app.js +371 -0
- package/dist/server/fusion-app.js.map +1 -0
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +3 -4
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/server/poll-events.d.ts +2 -0
- package/dist/server/poll-events.d.ts.map +1 -1
- package/dist/server/poll-events.js +7 -2
- package/dist/server/poll-events.js.map +1 -1
- package/dist/server/poll.d.ts +47 -3
- package/dist/server/poll.d.ts.map +1 -1
- package/dist/server/poll.js +176 -10
- package/dist/server/poll.js.map +1 -1
- package/dist/server/schema-prompt.d.ts.map +1 -1
- package/dist/server/schema-prompt.js +24 -7
- package/dist/server/schema-prompt.js.map +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/dist/settings/store.d.ts.map +1 -1
- package/dist/settings/store.js +32 -3
- package/dist/settings/store.js.map +1 -1
- package/dist/sharing/actions/set-resource-visibility.js +2 -0
- package/dist/sharing/actions/set-resource-visibility.js.map +1 -1
- package/dist/sharing/actions/share-resource.d.ts.map +1 -1
- package/dist/sharing/actions/share-resource.js +3 -0
- package/dist/sharing/actions/share-resource.js.map +1 -1
- package/dist/sharing/actions/unshare-resource.js +2 -0
- package/dist/sharing/actions/unshare-resource.js.map +1 -1
- package/dist/styles/agent-native.css +0 -5
- package/dist/templates/default/.agents/skills/real-time-collab/SKILL.md +82 -19
- package/dist/templates/default/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/dist/templates/default/.agents/skills/storing-data/SKILL.md +8 -0
- package/dist/templates/default/package.json +3 -3
- package/dist/templates/workspace-core/.agents/skills/client-methods/SKILL.md +8 -0
- package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +22 -0
- package/dist/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +82 -19
- package/dist/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/dist/templates/workspace-core/.agents/skills/storing-data/SKILL.md +8 -0
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -0
- package/dist/tracking/providers.d.ts.map +1 -1
- package/dist/tracking/providers.js +17 -1
- package/dist/tracking/providers.js.map +1 -1
- package/docs/content/cloneable-saas.mdx +0 -1
- package/docs/content/locales/ar-SA/cloneable-saas.mdx +0 -1
- package/docs/content/locales/ar-SA/plan-plugin.mdx +10 -9
- package/docs/content/locales/ar-SA/sharing.mdx +1 -2
- package/docs/content/locales/ar-SA/skills-guide.mdx +2 -3
- package/docs/content/locales/ar-SA/template-plan.mdx +23 -7
- package/docs/content/locales/ar-SA/tracking.mdx +1 -1
- package/docs/content/locales/ar-SA/workspace-connections.mdx +11 -11
- package/docs/content/locales/de-DE/cloneable-saas.mdx +0 -1
- package/docs/content/locales/de-DE/plan-plugin.mdx +10 -9
- package/docs/content/locales/de-DE/sharing.mdx +1 -2
- package/docs/content/locales/de-DE/skills-guide.mdx +2 -3
- package/docs/content/locales/de-DE/template-plan.mdx +23 -7
- package/docs/content/locales/de-DE/tracking.mdx +1 -1
- package/docs/content/locales/de-DE/workspace-connections.mdx +1 -1
- package/docs/content/locales/es-ES/cloneable-saas.mdx +0 -1
- package/docs/content/locales/es-ES/plan-plugin.mdx +10 -9
- package/docs/content/locales/es-ES/sharing.mdx +1 -2
- package/docs/content/locales/es-ES/skills-guide.mdx +2 -3
- package/docs/content/locales/es-ES/template-plan.mdx +23 -7
- package/docs/content/locales/es-ES/tracking.mdx +1 -1
- package/docs/content/locales/es-ES/workspace-connections.mdx +1 -1
- package/docs/content/locales/fr-FR/cloneable-saas.mdx +0 -1
- package/docs/content/locales/fr-FR/plan-plugin.mdx +10 -9
- package/docs/content/locales/fr-FR/sharing.mdx +1 -2
- package/docs/content/locales/fr-FR/skills-guide.mdx +2 -3
- package/docs/content/locales/fr-FR/template-plan.mdx +23 -7
- package/docs/content/locales/fr-FR/tracking.mdx +1 -1
- package/docs/content/locales/fr-FR/workspace-connections.mdx +1 -1
- package/docs/content/locales/hi-IN/cloneable-saas.mdx +0 -1
- package/docs/content/locales/hi-IN/plan-plugin.mdx +10 -9
- package/docs/content/locales/hi-IN/sharing.mdx +1 -2
- package/docs/content/locales/hi-IN/skills-guide.mdx +2 -3
- package/docs/content/locales/hi-IN/template-plan.mdx +23 -7
- package/docs/content/locales/hi-IN/tracking.mdx +1 -1
- package/docs/content/locales/hi-IN/workspace-connections.mdx +1 -1
- package/docs/content/locales/ja-JP/cloneable-saas.mdx +0 -1
- package/docs/content/locales/ja-JP/plan-plugin.mdx +10 -9
- package/docs/content/locales/ja-JP/sharing.mdx +1 -2
- package/docs/content/locales/ja-JP/skills-guide.mdx +2 -3
- package/docs/content/locales/ja-JP/template-plan.mdx +23 -7
- package/docs/content/locales/ja-JP/tracking.mdx +1 -1
- package/docs/content/locales/ja-JP/workspace-connections.mdx +1 -1
- package/docs/content/locales/ko-KR/cloneable-saas.mdx +0 -1
- package/docs/content/locales/ko-KR/plan-plugin.mdx +10 -9
- package/docs/content/locales/ko-KR/sharing.mdx +1 -2
- package/docs/content/locales/ko-KR/skills-guide.mdx +2 -3
- package/docs/content/locales/ko-KR/template-plan.mdx +23 -7
- package/docs/content/locales/ko-KR/tracking.mdx +1 -1
- package/docs/content/locales/ko-KR/workspace-connections.mdx +1 -1
- package/docs/content/locales/pt-BR/cloneable-saas.mdx +0 -1
- package/docs/content/locales/pt-BR/plan-plugin.mdx +10 -9
- package/docs/content/locales/pt-BR/sharing.mdx +1 -2
- package/docs/content/locales/pt-BR/skills-guide.mdx +2 -3
- package/docs/content/locales/pt-BR/template-plan.mdx +23 -7
- package/docs/content/locales/pt-BR/tracking.mdx +1 -1
- package/docs/content/locales/pt-BR/workspace-connections.mdx +1 -1
- package/docs/content/locales/zh-CN/cloneable-saas.mdx +0 -1
- package/docs/content/locales/zh-CN/plan-plugin.mdx +10 -9
- package/docs/content/locales/zh-CN/sharing.mdx +1 -2
- package/docs/content/locales/zh-CN/skills-guide.mdx +2 -3
- package/docs/content/locales/zh-CN/template-plan.mdx +23 -7
- package/docs/content/locales/zh-CN/tracking.mdx +1 -1
- package/docs/content/locales/zh-CN/workspace-connections.mdx +1 -1
- package/docs/content/locales/zh-TW/cloneable-saas.mdx +0 -1
- package/docs/content/locales/zh-TW/plan-plugin.mdx +10 -9
- package/docs/content/locales/zh-TW/sharing.mdx +1 -2
- package/docs/content/locales/zh-TW/skills-guide.mdx +2 -3
- package/docs/content/locales/zh-TW/template-plan.mdx +23 -7
- package/docs/content/locales/zh-TW/tracking.mdx +1 -1
- package/docs/content/locales/zh-TW/workspace-connections.mdx +1 -1
- package/docs/content/plan-plugin.mdx +12 -11
- package/docs/content/sharing.mdx +1 -2
- package/docs/content/skills-guide.mdx +4 -3
- package/docs/content/template-plan.mdx +37 -6
- package/docs/content/tracking.mdx +1 -1
- package/docs/content/workspace-connections.mdx +1 -1
- package/package.json +6 -6
- package/src/templates/default/.agents/skills/real-time-collab/SKILL.md +82 -19
- package/src/templates/default/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/src/templates/default/.agents/skills/storing-data/SKILL.md +8 -0
- package/src/templates/default/package.json +3 -3
- package/src/templates/workspace-core/.agents/skills/client-methods/SKILL.md +8 -0
- package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +22 -0
- package/src/templates/workspace-core/.agents/skills/real-time-collab/SKILL.md +82 -19
- package/src/templates/workspace-core/.agents/skills/real-time-sync/SKILL.md +15 -0
- package/src/templates/workspace-core/.agents/skills/storing-data/SKILL.md +8 -0
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +1 -0
- package/corpus/core/docs/content/locales/ar-SA/template-videos.mdx +0 -336
- package/corpus/core/docs/content/locales/de-DE/template-videos.mdx +0 -336
- package/corpus/core/docs/content/locales/es-ES/template-videos.mdx +0 -336
- package/corpus/core/docs/content/locales/fr-FR/template-videos.mdx +0 -336
- package/corpus/core/docs/content/locales/hi-IN/template-videos.mdx +0 -336
- package/corpus/core/docs/content/locales/ja-JP/template-videos.mdx +0 -336
- package/corpus/core/docs/content/locales/ko-KR/template-videos.mdx +0 -336
- package/corpus/core/docs/content/locales/pt-BR/template-videos.mdx +0 -336
- package/corpus/core/docs/content/locales/zh-CN/template-videos.mdx +0 -334
- package/corpus/core/docs/content/locales/zh-TW/template-videos.mdx +0 -334
- package/corpus/core/docs/content/template-videos.mdx +0 -332
- package/corpus/templates/design/app/components/design/CodeWorkbenchHost.tsx +0 -697
- package/corpus/templates/slides/app/components/editor/CodeEditor.tsx +0 -49
- package/corpus/templates/videos/.agents/skills/actions/SKILL.md +0 -432
- package/corpus/templates/videos/.agents/skills/animation-tracks/SKILL.md +0 -99
- package/corpus/templates/videos/.agents/skills/capture-learnings/SKILL.md +0 -76
- package/corpus/templates/videos/.agents/skills/composition-management/SKILL.md +0 -106
- package/corpus/templates/videos/.agents/skills/create-skill/SKILL.md +0 -221
- package/corpus/templates/videos/.agents/skills/delegate-to-agent/SKILL.md +0 -263
- package/corpus/templates/videos/.agents/skills/frontend-design/SKILL.md +0 -112
- package/corpus/templates/videos/.agents/skills/security/SKILL.md +0 -263
- package/corpus/templates/videos/.agents/skills/self-modifying-code/SKILL.md +0 -88
- package/corpus/templates/videos/.agents/skills/shadcn-ui/SKILL.md +0 -95
- package/corpus/templates/videos/.builder/ANIMATED_PROPERTIES.md +0 -335
- package/corpus/templates/videos/.builder/KEYFRAME_SYNC.md +0 -166
- package/corpus/templates/videos/.builder/SEAMLESS_SYNC.md +0 -211
- package/corpus/templates/videos/.builder/rules/deploy-app.mdc +0 -22
- package/corpus/templates/videos/.builder/rules/organize-ui.mdc +0 -9
- package/corpus/templates/videos/.builder/skills/remotion/SKILL.md +0 -29
- package/corpus/templates/videos/.builder/skills/remotion/rules/animations.md +0 -27
- package/corpus/templates/videos/.builder/skills/remotion/rules/assets.md +0 -43
- package/corpus/templates/videos/.builder/skills/remotion/rules/audio.md +0 -58
- package/corpus/templates/videos/.builder/skills/remotion/rules/compositions.md +0 -129
- package/corpus/templates/videos/.builder/skills/remotion/rules/fonts.md +0 -47
- package/corpus/templates/videos/.builder/skills/remotion/rules/images.md +0 -41
- package/corpus/templates/videos/.builder/skills/remotion/rules/parameters.md +0 -59
- package/corpus/templates/videos/.builder/skills/remotion/rules/sequencing.md +0 -54
- package/corpus/templates/videos/.builder/skills/remotion/rules/tailwind.md +0 -11
- package/corpus/templates/videos/.builder/skills/remotion/rules/text-animations.md +0 -18
- package/corpus/templates/videos/.builder/skills/remotion/rules/timing.md +0 -103
- package/corpus/templates/videos/.builder/skills/remotion/rules/transparent-videos.md +0 -35
- package/corpus/templates/videos/.builder/skills/remotion/rules/trimming.md +0 -38
- package/corpus/templates/videos/.builder/skills/remotion/rules/videos.md +0 -54
- package/corpus/templates/videos/.dockerignore +0 -62
- package/corpus/templates/videos/.env.example +0 -4
- package/corpus/templates/videos/.oxfmtrc.json +0 -8
- package/corpus/templates/videos/AGENTS.md +0 -46
- package/corpus/templates/videos/CHANGELOG.md +0 -10
- package/corpus/templates/videos/DEVELOPING.md +0 -143
- package/corpus/templates/videos/README.md +0 -33
- package/corpus/templates/videos/actions/analyze-brand-assets.ts +0 -151
- package/corpus/templates/videos/actions/apply-design-system.ts +0 -35
- package/corpus/templates/videos/actions/create-design-system.ts +0 -84
- package/corpus/templates/videos/actions/create-folder.ts +0 -48
- package/corpus/templates/videos/actions/db-connect.ts +0 -45
- package/corpus/templates/videos/actions/db-health.ts +0 -24
- package/corpus/templates/videos/actions/db-status.ts +0 -28
- package/corpus/templates/videos/actions/delete-composition.ts +0 -272
- package/corpus/templates/videos/actions/delete-folder.ts +0 -27
- package/corpus/templates/videos/actions/generate-animated-component.ts +0 -470
- package/corpus/templates/videos/actions/get-composition.ts +0 -36
- package/corpus/templates/videos/actions/get-design-system.ts +0 -35
- package/corpus/templates/videos/actions/import-code.ts +0 -67
- package/corpus/templates/videos/actions/import-design-project.ts +0 -42
- package/corpus/templates/videos/actions/import-document.ts +0 -125
- package/corpus/templates/videos/actions/import-from-url.ts +0 -18
- package/corpus/templates/videos/actions/import-github.ts +0 -182
- package/corpus/templates/videos/actions/list-compositions.ts +0 -32
- package/corpus/templates/videos/actions/list-design-systems.ts +0 -66
- package/corpus/templates/videos/actions/list-folders.ts +0 -61
- package/corpus/templates/videos/actions/move-composition-to-folder.ts +0 -59
- package/corpus/templates/videos/actions/navigate.ts +0 -40
- package/corpus/templates/videos/actions/rename-folder.ts +0 -41
- package/corpus/templates/videos/actions/run.ts +0 -2
- package/corpus/templates/videos/actions/save-composition.ts +0 -114
- package/corpus/templates/videos/actions/set-default-design-system.ts +0 -40
- package/corpus/templates/videos/actions/update-composition.ts +0 -81
- package/corpus/templates/videos/actions/update-design-system.ts +0 -68
- package/corpus/templates/videos/actions/validate-compositions.ts +0 -502
- package/corpus/templates/videos/actions/view-screen.ts +0 -48
- package/corpus/templates/videos/app/components/CameraControls.tsx +0 -442
- package/corpus/templates/videos/app/components/CameraToolbar.tsx +0 -437
- package/corpus/templates/videos/app/components/CloudUpgrade.tsx +0 -287
- package/corpus/templates/videos/app/components/CollabPresenceBar.tsx +0 -81
- package/corpus/templates/videos/app/components/CompSettingsEditor.tsx +0 -107
- package/corpus/templates/videos/app/components/ComponentLibrarySidebar.tsx +0 -457
- package/corpus/templates/videos/app/components/ComponentPropsPanel.tsx +0 -227
- package/corpus/templates/videos/app/components/ComponentsSidebar.tsx +0 -70
- package/corpus/templates/videos/app/components/CompositionCard.tsx +0 -147
- package/corpus/templates/videos/app/components/CurrentElementPanel.tsx +0 -835
- package/corpus/templates/videos/app/components/CursorControls.tsx +0 -664
- package/corpus/templates/videos/app/components/CursorPositioningOverlay.tsx +0 -238
- package/corpus/templates/videos/app/components/LibraryFolderRow.tsx +0 -235
- package/corpus/templates/videos/app/components/MotionCurveSelect.tsx +0 -61
- package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +0 -192
- package/corpus/templates/videos/app/components/PropsEditor.tsx +0 -210
- package/corpus/templates/videos/app/components/QuestionFlow.tsx +0 -40
- package/corpus/templates/videos/app/components/Sidebar.tsx +0 -609
- package/corpus/templates/videos/app/components/StudioHeader.tsx +0 -109
- package/corpus/templates/videos/app/components/Timeline.tsx +0 -2067
- package/corpus/templates/videos/app/components/TrackPropertiesPanel.tsx +0 -922
- package/corpus/templates/videos/app/components/TweaksPanel.tsx +0 -277
- package/corpus/templates/videos/app/components/VideoPlayer.tsx +0 -487
- package/corpus/templates/videos/app/components/design-system/DesignSystemCard.tsx +0 -134
- package/corpus/templates/videos/app/components/design-system/DesignSystemPreview.tsx +0 -176
- package/corpus/templates/videos/app/components/design-system/DesignSystemSetup.tsx +0 -707
- package/corpus/templates/videos/app/components/keyframes/KeyframeActionButtons.tsx +0 -78
- package/corpus/templates/videos/app/components/keyframes/KeyframeNavigation.tsx +0 -59
- package/corpus/templates/videos/app/components/keyframes/PropertyNumberInput.tsx +0 -56
- package/corpus/templates/videos/app/components/layout/Header.tsx +0 -64
- package/corpus/templates/videos/app/components/layout/HeaderActions.tsx +0 -84
- package/corpus/templates/videos/app/components/layout/Layout.tsx +0 -132
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +0 -180
- package/corpus/templates/videos/app/components/ui/accordion.tsx +0 -56
- package/corpus/templates/videos/app/components/ui/alert-dialog.tsx +0 -139
- package/corpus/templates/videos/app/components/ui/alert.tsx +0 -59
- package/corpus/templates/videos/app/components/ui/aspect-ratio.tsx +0 -5
- package/corpus/templates/videos/app/components/ui/avatar.tsx +0 -48
- package/corpus/templates/videos/app/components/ui/badge.tsx +0 -37
- package/corpus/templates/videos/app/components/ui/breadcrumb.tsx +0 -115
- package/corpus/templates/videos/app/components/ui/button.tsx +0 -57
- package/corpus/templates/videos/app/components/ui/calendar.tsx +0 -68
- package/corpus/templates/videos/app/components/ui/card.tsx +0 -86
- package/corpus/templates/videos/app/components/ui/carousel.tsx +0 -260
- package/corpus/templates/videos/app/components/ui/chart.tsx +0 -375
- package/corpus/templates/videos/app/components/ui/checkbox.tsx +0 -28
- package/corpus/templates/videos/app/components/ui/collapsible.tsx +0 -9
- package/corpus/templates/videos/app/components/ui/command.tsx +0 -154
- package/corpus/templates/videos/app/components/ui/context-menu.tsx +0 -202
- package/corpus/templates/videos/app/components/ui/dialog.tsx +0 -130
- package/corpus/templates/videos/app/components/ui/drawer.tsx +0 -116
- package/corpus/templates/videos/app/components/ui/dropdown-menu.tsx +0 -212
- package/corpus/templates/videos/app/components/ui/form.tsx +0 -177
- package/corpus/templates/videos/app/components/ui/hover-card.tsx +0 -27
- package/corpus/templates/videos/app/components/ui/input-otp.tsx +0 -69
- package/corpus/templates/videos/app/components/ui/input.tsx +0 -22
- package/corpus/templates/videos/app/components/ui/label.tsx +0 -24
- package/corpus/templates/videos/app/components/ui/menubar.tsx +0 -234
- package/corpus/templates/videos/app/components/ui/navigation-menu.tsx +0 -128
- package/corpus/templates/videos/app/components/ui/pagination.tsx +0 -121
- package/corpus/templates/videos/app/components/ui/popover.tsx +0 -44
- package/corpus/templates/videos/app/components/ui/progress.tsx +0 -26
- package/corpus/templates/videos/app/components/ui/radio-group.tsx +0 -42
- package/corpus/templates/videos/app/components/ui/resizable.tsx +0 -43
- package/corpus/templates/videos/app/components/ui/scroll-area.tsx +0 -46
- package/corpus/templates/videos/app/components/ui/select.tsx +0 -158
- package/corpus/templates/videos/app/components/ui/separator.tsx +0 -29
- package/corpus/templates/videos/app/components/ui/sheet.tsx +0 -160
- package/corpus/templates/videos/app/components/ui/sidebar.tsx +0 -782
- package/corpus/templates/videos/app/components/ui/skeleton.tsx +0 -15
- package/corpus/templates/videos/app/components/ui/slider.tsx +0 -26
- package/corpus/templates/videos/app/components/ui/sonner.tsx +0 -58
- package/corpus/templates/videos/app/components/ui/spinner.tsx +0 -17
- package/corpus/templates/videos/app/components/ui/switch.tsx +0 -27
- package/corpus/templates/videos/app/components/ui/table.tsx +0 -117
- package/corpus/templates/videos/app/components/ui/tabs.tsx +0 -53
- package/corpus/templates/videos/app/components/ui/textarea.tsx +0 -23
- package/corpus/templates/videos/app/components/ui/toast.tsx +0 -127
- package/corpus/templates/videos/app/components/ui/toaster.tsx +0 -33
- package/corpus/templates/videos/app/components/ui/toggle-group.tsx +0 -59
- package/corpus/templates/videos/app/components/ui/toggle.tsx +0 -43
- package/corpus/templates/videos/app/components/ui/tooltip.tsx +0 -30
- package/corpus/templates/videos/app/components/ui/use-toast.ts +0 -3
- package/corpus/templates/videos/app/config/constants.ts +0 -204
- package/corpus/templates/videos/app/contexts/CompositionContext.tsx +0 -437
- package/corpus/templates/videos/app/contexts/CurrentElementContext.tsx +0 -247
- package/corpus/templates/videos/app/contexts/PlaybackContext.tsx +0 -65
- package/corpus/templates/videos/app/contexts/TimelineContext.tsx +0 -433
- package/corpus/templates/videos/app/entry.client.tsx +0 -19
- package/corpus/templates/videos/app/entry.server.tsx +0 -10
- package/corpus/templates/videos/app/global.css +0 -171
- package/corpus/templates/videos/app/hooks/use-composition-collab.ts +0 -269
- package/corpus/templates/videos/app/hooks/use-composition-design-system.ts +0 -47
- package/corpus/templates/videos/app/hooks/use-database-compositions.ts +0 -144
- package/corpus/templates/videos/app/hooks/use-db-status.ts +0 -30
- package/corpus/templates/videos/app/hooks/use-design-systems.ts +0 -21
- package/corpus/templates/videos/app/hooks/use-folders.ts +0 -199
- package/corpus/templates/videos/app/hooks/use-mobile.tsx +0 -21
- package/corpus/templates/videos/app/hooks/use-navigation-state.ts +0 -52
- package/corpus/templates/videos/app/hooks/use-question-flow.ts +0 -14
- package/corpus/templates/videos/app/hooks/use-toast.ts +0 -188
- package/corpus/templates/videos/app/hooks/useUnsavedChanges.ts +0 -48
- package/corpus/templates/videos/app/i18n/ar-SA.ts +0 -446
- package/corpus/templates/videos/app/i18n/de-DE.ts +0 -470
- package/corpus/templates/videos/app/i18n/en-US.ts +0 -452
- package/corpus/templates/videos/app/i18n/es-ES.ts +0 -468
- package/corpus/templates/videos/app/i18n/fr-FR.ts +0 -469
- package/corpus/templates/videos/app/i18n/hi-IN.ts +0 -446
- package/corpus/templates/videos/app/i18n/index.ts +0 -34
- package/corpus/templates/videos/app/i18n/ja-JP.ts +0 -460
- package/corpus/templates/videos/app/i18n/ko-KR.ts +0 -453
- package/corpus/templates/videos/app/i18n/pt-BR.ts +0 -461
- package/corpus/templates/videos/app/i18n/zh-CN.ts +0 -437
- package/corpus/templates/videos/app/i18n/zh-TW.ts +0 -437
- package/corpus/templates/videos/app/lib/database-compositions.ts +0 -67
- package/corpus/templates/videos/app/lib/design-systems.ts +0 -234
- package/corpus/templates/videos/app/lib/tab-id.ts +0 -1
- package/corpus/templates/videos/app/lib/utils.ts +0 -1
- package/corpus/templates/videos/app/pages/ComponentLibrary.tsx +0 -134
- package/corpus/templates/videos/app/pages/ComponentLibraryView.tsx +0 -362
- package/corpus/templates/videos/app/pages/CompositionView.tsx +0 -715
- package/corpus/templates/videos/app/pages/DesignSystems.tsx +0 -180
- package/corpus/templates/videos/app/pages/Index.tsx +0 -258
- package/corpus/templates/videos/app/pages/NewComposition.tsx +0 -95
- package/corpus/templates/videos/app/pages/NotFound.tsx +0 -36
- package/corpus/templates/videos/app/remotion/CameraHost.tsx +0 -223
- package/corpus/templates/videos/app/remotion/animations/useElementAnimations.ts +0 -231
- package/corpus/templates/videos/app/remotion/componentRegistry.ts +0 -473
- package/corpus/templates/videos/app/remotion/components/AnimatedElement.tsx +0 -436
- package/corpus/templates/videos/app/remotion/components/InteractiveElement.tsx +0 -159
- package/corpus/templates/videos/app/remotion/components/InteractiveZoneEditor.tsx +0 -273
- package/corpus/templates/videos/app/remotion/compositions/BlankComposition.tsx +0 -204
- package/corpus/templates/videos/app/remotion/compositions/index.ts +0 -2
- package/corpus/templates/videos/app/remotion/createComponentCursorTrack.ts +0 -132
- package/corpus/templates/videos/app/remotion/docs/CURSOR_TRACKS.md +0 -285
- package/corpus/templates/videos/app/remotion/easingFunctions.ts +0 -255
- package/corpus/templates/videos/app/remotion/hooks/createInteractiveComposition.tsx +0 -283
- package/corpus/templates/videos/app/remotion/hooks/useCursorHistory.ts +0 -72
- package/corpus/templates/videos/app/remotion/hooks/useCursorTypeFromHover.ts +0 -35
- package/corpus/templates/videos/app/remotion/hooks/useEditableZones.tsx +0 -267
- package/corpus/templates/videos/app/remotion/hooks/useHoverAnimation.ts +0 -90
- package/corpus/templates/videos/app/remotion/hooks/useHoverAnimationSmooth.ts +0 -146
- package/corpus/templates/videos/app/remotion/hooks/useInteractiveComponent.ts +0 -711
- package/corpus/templates/videos/app/remotion/hooks/useRegisterInteractiveElement.ts +0 -56
- package/corpus/templates/videos/app/remotion/library-components/Button.tsx +0 -252
- package/corpus/templates/videos/app/remotion/library-components/Card.tsx +0 -241
- package/corpus/templates/videos/app/remotion/library-components/CodePanel.tsx +0 -1005
- package/corpus/templates/videos/app/remotion/library-components/FileItem.tsx +0 -196
- package/corpus/templates/videos/app/remotion/library-components/FolderItem.tsx +0 -199
- package/corpus/templates/videos/app/remotion/library-components/PrimaryButton.tsx +0 -177
- package/corpus/templates/videos/app/remotion/library-components/SecondaryButton.tsx +0 -167
- package/corpus/templates/videos/app/remotion/library-components/SectionHeader.tsx +0 -108
- package/corpus/templates/videos/app/remotion/library-components/TEMPLATE.tsx +0 -211
- package/corpus/templates/videos/app/remotion/library-components/index.ts +0 -10
- package/corpus/templates/videos/app/remotion/registry.ts +0 -91
- package/corpus/templates/videos/app/remotion/testing/animationTestUtils.ts +0 -366
- package/corpus/templates/videos/app/remotion/trackAnimation.ts +0 -179
- package/corpus/templates/videos/app/remotion/trackHelpers.ts +0 -110
- package/corpus/templates/videos/app/remotion/ui-components/Cursor.tsx +0 -182
- package/corpus/templates/videos/app/remotion/ui-components/InteractiveButton.tsx +0 -116
- package/corpus/templates/videos/app/remotion/ui-components/InteractiveCard.tsx +0 -126
- package/corpus/templates/videos/app/remotion/ui-components/index.ts +0 -16
- package/corpus/templates/videos/app/remotion/utils/animationHelpers.ts +0 -444
- package/corpus/templates/videos/app/remotion/utils/interactiveElements.ts +0 -235
- package/corpus/templates/videos/app/remotion/utils/springAnimation.ts +0 -76
- package/corpus/templates/videos/app/root.tsx +0 -165
- package/corpus/templates/videos/app/routes/$.tsx +0 -10
- package/corpus/templates/videos/app/routes/_index.tsx +0 -25
- package/corpus/templates/videos/app/routes/c.$compositionId.tsx +0 -10
- package/corpus/templates/videos/app/routes/components.tsx +0 -10
- package/corpus/templates/videos/app/routes/design-systems.tsx +0 -10
- package/corpus/templates/videos/app/routes/extensions.$id.$slug.tsx +0 -2
- package/corpus/templates/videos/app/routes/extensions.$id.tsx +0 -5
- package/corpus/templates/videos/app/routes/extensions._index.tsx +0 -5
- package/corpus/templates/videos/app/routes/extensions.tsx +0 -5
- package/corpus/templates/videos/app/routes/settings.tsx +0 -88
- package/corpus/templates/videos/app/routes/team.tsx +0 -11
- package/corpus/templates/videos/app/routes.ts +0 -4
- package/corpus/templates/videos/app/state.ts +0 -77
- package/corpus/templates/videos/app/types/elementAnimations.ts +0 -121
- package/corpus/templates/videos/app/types.ts +0 -200
- package/corpus/templates/videos/app/utils/compositionHelpers.ts +0 -445
- package/corpus/templates/videos/app/utils/debug.ts +0 -63
- package/corpus/templates/videos/app/utils/keyframeUtils.ts +0 -331
- package/corpus/templates/videos/app/utils/timelineCoordinates.ts +0 -79
- package/corpus/templates/videos/app/vite-env.d.ts +0 -6
- package/corpus/templates/videos/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +0 -6
- package/corpus/templates/videos/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +0 -6
- package/corpus/templates/videos/changelog/2026-06-27-traditional-chinese-copy-uses-taiwan-terminology.md +0 -6
- package/corpus/templates/videos/changelog/2026-06-28-left-sidebar-collapses-into-an-animated-icon-rail.md +0 -6
- package/corpus/templates/videos/changelog/2026-06-29-video-layouts-adapt-when-the-agent-sidebar-is-open.md +0 -6
- package/corpus/templates/videos/components.json +0 -20
- package/corpus/templates/videos/data/sync-config.json +0 -3
- package/corpus/templates/videos/docs/examples/create-composition.example.ts +0 -128
- package/corpus/templates/videos/drizzle.config.ts +0 -3
- package/corpus/templates/videos/learnings.defaults.md +0 -5
- package/corpus/templates/videos/package.json +0 -114
- package/corpus/templates/videos/public/agent-native-icon-dark.svg +0 -10
- package/corpus/templates/videos/public/agent-native-icon-light.svg +0 -10
- package/corpus/templates/videos/public/agent-native-logo-dark.svg +0 -21
- package/corpus/templates/videos/public/agent-native-logo-light.svg +0 -21
- package/corpus/templates/videos/public/favicon.svg +0 -1
- package/corpus/templates/videos/public/icon-180.svg +0 -1
- package/corpus/templates/videos/public/icon-192.svg +0 -1
- package/corpus/templates/videos/public/icon-512.svg +0 -1
- package/corpus/templates/videos/public/manifest.json +0 -21
- package/corpus/templates/videos/public/placeholder.svg +0 -1
- package/corpus/templates/videos/public/robots.txt +0 -14
- package/corpus/templates/videos/react-router.config.ts +0 -7
- package/corpus/templates/videos/server/db/index.ts +0 -37
- package/corpus/templates/videos/server/db/schema.ts +0 -55
- package/corpus/templates/videos/server/middleware/auth.ts +0 -15
- package/corpus/templates/videos/server/plugins/agent-chat.ts +0 -29
- package/corpus/templates/videos/server/plugins/auth.ts +0 -14
- package/corpus/templates/videos/server/plugins/collab.ts +0 -11
- package/corpus/templates/videos/server/plugins/core-routes.ts +0 -22
- package/corpus/templates/videos/server/plugins/db.ts +0 -160
- package/corpus/templates/videos/server/routes/[...page].get.ts +0 -5
- package/corpus/templates/videos/server/routes/[...page].head.ts +0 -1
- package/corpus/templates/videos/server/routes/api/save-composition-defaults.post.ts +0 -274
- package/corpus/templates/videos/shared/api.ts +0 -75
- package/corpus/templates/videos/ssr-entry.ts +0 -15
- package/corpus/templates/videos/tsconfig.json +0 -21
- package/corpus/templates/videos/vite.config.ts +0 -19
- package/corpus/templates/videos/vitest.config.ts +0 -16
- package/docs/content/locales/ar-SA/template-videos.mdx +0 -336
- package/docs/content/locales/de-DE/template-videos.mdx +0 -336
- package/docs/content/locales/es-ES/template-videos.mdx +0 -336
- package/docs/content/locales/fr-FR/template-videos.mdx +0 -336
- package/docs/content/locales/hi-IN/template-videos.mdx +0 -336
- package/docs/content/locales/ja-JP/template-videos.mdx +0 -336
- package/docs/content/locales/ko-KR/template-videos.mdx +0 -336
- package/docs/content/locales/pt-BR/template-videos.mdx +0 -336
- package/docs/content/locales/zh-CN/template-videos.mdx +0 -334
- package/docs/content/locales/zh-TW/template-videos.mdx +0 -334
- package/docs/content/template-videos.mdx +0 -332
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createSharedEditorExtensions,
|
|
3
3
|
useCollabReconcile,
|
|
4
|
+
usePresence,
|
|
5
|
+
useRecentEdits,
|
|
6
|
+
RecentEditHighlights,
|
|
4
7
|
RegistryBlockDataProvider,
|
|
5
8
|
useT,
|
|
9
|
+
type AttributedRecentEdit,
|
|
6
10
|
type RegistryBlockSideMapBlock,
|
|
7
11
|
type UseCollabReconcileResult,
|
|
8
12
|
} from "@agent-native/core/client";
|
|
@@ -745,7 +749,7 @@ interface VisualEditorProps {
|
|
|
745
749
|
/** Shared awareness instance for collaborative cursors/presence. */
|
|
746
750
|
awareness?: Awareness | null;
|
|
747
751
|
/** Current user info for cursor labels. */
|
|
748
|
-
user?: { name: string; color: string; email?: string };
|
|
752
|
+
user?: { name: string; color: string; email?: string; avatarUrl?: string };
|
|
749
753
|
editable?: boolean;
|
|
750
754
|
/** Local-file docs should not persist mount-time/schema normalization echoes. */
|
|
751
755
|
localFileMode?: boolean;
|
|
@@ -894,7 +898,12 @@ interface VisualEditorExtensionOptions {
|
|
|
894
898
|
documentId?: string;
|
|
895
899
|
ydoc?: YDoc | null;
|
|
896
900
|
localAwareness?: Awareness | null;
|
|
897
|
-
user?: {
|
|
901
|
+
user?: {
|
|
902
|
+
name: string;
|
|
903
|
+
color: string;
|
|
904
|
+
email?: string;
|
|
905
|
+
avatarUrl?: string;
|
|
906
|
+
} | null;
|
|
898
907
|
onImageComment?: (quotedText: string, offsetTop: number) => void;
|
|
899
908
|
onJoinTitle?: (text: string) => void;
|
|
900
909
|
resolveNotionPageLink?: (notionPageId: string) => NotionPageLink | null;
|
|
@@ -1599,6 +1608,7 @@ export function VisualEditor({
|
|
|
1599
1608
|
}: VisualEditorProps) {
|
|
1600
1609
|
const t = useT();
|
|
1601
1610
|
const [isDraggingMedia, setIsDraggingMedia] = useState(false);
|
|
1611
|
+
const wrapperRef = useRef<HTMLDivElement>(null);
|
|
1602
1612
|
const onChangeRef = useRef(onChange);
|
|
1603
1613
|
onChangeRef.current = onChange;
|
|
1604
1614
|
const onSaveContentRef = useRef(onSaveContent);
|
|
@@ -1885,7 +1895,15 @@ export function VisualEditor({
|
|
|
1885
1895
|
contentUpdatedAt,
|
|
1886
1896
|
editable,
|
|
1887
1897
|
getMarkdown: (e) => docToNfm(e.getJSON() as any),
|
|
1898
|
+
// Read-only viewers join the shared Y.Doc purely to RECEIVE live edits and
|
|
1899
|
+
// cursors; their editor content comes from the server state fetch + peer Yjs
|
|
1900
|
+
// updates, never from SQL reconcile. Any local Y.Doc write from a viewer
|
|
1901
|
+
// would be POSTed to the editor-only `/update` route (→ 403) and could
|
|
1902
|
+
// publish an author-less snapshot, so both write paths are neutered when
|
|
1903
|
+
// `!editable`: this `setContent` (used by both the seed and the reconcile
|
|
1904
|
+
// apply) no-ops, and `shouldSeed` returns false so the seed never runs.
|
|
1888
1905
|
setContent: (e, value, options) => {
|
|
1906
|
+
if (!editable) return;
|
|
1889
1907
|
const doc = nfmToDoc(value);
|
|
1890
1908
|
if (options.addToHistory === false) {
|
|
1891
1909
|
e.chain()
|
|
@@ -1903,6 +1921,7 @@ export function VisualEditor({
|
|
|
1903
1921
|
},
|
|
1904
1922
|
normalizeValue: canonicalizeNfm,
|
|
1905
1923
|
shouldSeed: ({ value, currentMarkdown, fragmentLength }) =>
|
|
1924
|
+
editable &&
|
|
1906
1925
|
shouldSeedCollaborativeContent({
|
|
1907
1926
|
content: value,
|
|
1908
1927
|
currentMarkdown,
|
|
@@ -1912,6 +1931,76 @@ export function VisualEditor({
|
|
|
1912
1931
|
});
|
|
1913
1932
|
guardsRef.current = collabState;
|
|
1914
1933
|
|
|
1934
|
+
// ─── Recent-edit highlights (Google-Docs / Figma "just edited this") ─────────
|
|
1935
|
+
//
|
|
1936
|
+
// Other participants — including the AI agent — publish a short ring of recent
|
|
1937
|
+
// edits into their awareness state. `usePresence` surfaces the remote entries,
|
|
1938
|
+
// `useRecentEdits` filters to the non-expired ones, and `RecentEditHighlights`
|
|
1939
|
+
// paints a lingering, fading glow with the editor's name/color flag. For the
|
|
1940
|
+
// agent, `edit-document` / `update-document` publish a `{ kind: "text", quote }`
|
|
1941
|
+
// descriptor, which we resolve to a viewport rect by locating the quote in the
|
|
1942
|
+
// live ProseMirror doc and measuring the span with `coordsAtPos`.
|
|
1943
|
+
const localClientId = ydoc?.clientID ?? null;
|
|
1944
|
+
const { others } = usePresence(localAwareness, localClientId);
|
|
1945
|
+
const recentEdits = useRecentEdits(others);
|
|
1946
|
+
|
|
1947
|
+
const resolveRecentEditRect = useCallback(
|
|
1948
|
+
(edit: AttributedRecentEdit): DOMRect | null => {
|
|
1949
|
+
if (!editor || editor.isDestroyed) return null;
|
|
1950
|
+
if (edit.descriptor.kind !== "text") return null;
|
|
1951
|
+
const quote =
|
|
1952
|
+
typeof edit.descriptor.quote === "string"
|
|
1953
|
+
? edit.descriptor.quote.trim()
|
|
1954
|
+
: "";
|
|
1955
|
+
if (!quote) return null;
|
|
1956
|
+
|
|
1957
|
+
// Clamp very long quotes — matching a long exact string across the doc is
|
|
1958
|
+
// brittle (whitespace/markdown differences); the leading slice is enough to
|
|
1959
|
+
// anchor the highlight to the right region.
|
|
1960
|
+
const needle = quote.slice(0, 60);
|
|
1961
|
+
|
|
1962
|
+
// Walk the doc's text, tracking absolute positions, to find the needle.
|
|
1963
|
+
const doc = editor.state.doc;
|
|
1964
|
+
let found: { from: number; to: number } | null = null;
|
|
1965
|
+
let acc = "";
|
|
1966
|
+
let accStart = -1;
|
|
1967
|
+
doc.descendants((node, pos) => {
|
|
1968
|
+
if (found) return false;
|
|
1969
|
+
if (!node.isText || typeof node.text !== "string") return true;
|
|
1970
|
+
if (accStart === -1) accStart = pos;
|
|
1971
|
+
acc += node.text;
|
|
1972
|
+
const idx = acc.indexOf(needle);
|
|
1973
|
+
if (idx !== -1) {
|
|
1974
|
+
const from = accStart + idx;
|
|
1975
|
+
found = { from, to: from + needle.length };
|
|
1976
|
+
return false;
|
|
1977
|
+
}
|
|
1978
|
+
// Keep only a tail long enough to catch a needle spanning two text nodes.
|
|
1979
|
+
if (acc.length > needle.length * 2) {
|
|
1980
|
+
const drop = acc.length - needle.length;
|
|
1981
|
+
acc = acc.slice(drop);
|
|
1982
|
+
accStart += drop;
|
|
1983
|
+
}
|
|
1984
|
+
return true;
|
|
1985
|
+
});
|
|
1986
|
+
if (!found) return null;
|
|
1987
|
+
|
|
1988
|
+
try {
|
|
1989
|
+
const { from, to } = found;
|
|
1990
|
+
const start = editor.view.coordsAtPos(from);
|
|
1991
|
+
const end = editor.view.coordsAtPos(Math.max(from, to - 1), 1);
|
|
1992
|
+
const left = Math.min(start.left, end.left);
|
|
1993
|
+
const right = Math.max(start.right, end.right);
|
|
1994
|
+
const top = Math.min(start.top, end.top);
|
|
1995
|
+
const bottom = Math.max(start.bottom, end.bottom);
|
|
1996
|
+
return new DOMRect(left, top, Math.max(1, right - left), bottom - top);
|
|
1997
|
+
} catch {
|
|
1998
|
+
return null;
|
|
1999
|
+
}
|
|
2000
|
+
},
|
|
2001
|
+
[editor],
|
|
2002
|
+
);
|
|
2003
|
+
|
|
1915
2004
|
// Side-map that feeds the shared registry-block NodeView its typed `data`,
|
|
1916
2005
|
// lazily parsed from each node's verbatim `__raw` NFM. Edits write the
|
|
1917
2006
|
// re-serialized MDX back onto the node so the existing NFM save path persists
|
|
@@ -2086,8 +2175,14 @@ export function VisualEditor({
|
|
|
2086
2175
|
|
|
2087
2176
|
return (
|
|
2088
2177
|
<div
|
|
2178
|
+
ref={wrapperRef}
|
|
2089
2179
|
className={`visual-editor-wrapper${isDraggingMedia ? " visual-editor-wrapper--dragging" : ""}`}
|
|
2090
2180
|
>
|
|
2181
|
+
<RecentEditHighlights
|
|
2182
|
+
edits={recentEdits}
|
|
2183
|
+
resolveRect={resolveRecentEditRect}
|
|
2184
|
+
containerRef={wrapperRef}
|
|
2185
|
+
/>
|
|
2091
2186
|
{editable ? (
|
|
2092
2187
|
<BubbleToolbar editor={editor} onComment={onComment} />
|
|
2093
2188
|
) : null}
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
"@radix-ui/react-toast": "^1.2.14",
|
|
76
76
|
"@radix-ui/react-toggle": "^1.1.9",
|
|
77
77
|
"@radix-ui/react-tooltip": "^1.2.7",
|
|
78
|
-
"@react-router/dev": "^8.0
|
|
79
|
-
"@react-router/fs-routes": "^8.0
|
|
78
|
+
"@react-router/dev": "^8.1.0",
|
|
79
|
+
"@react-router/fs-routes": "^8.1.0",
|
|
80
80
|
"@swc/core": "^1.13.3",
|
|
81
81
|
"@tailwindcss/typography": "^0.5.16",
|
|
82
82
|
"@tailwindcss/vite": "catalog:",
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
"oxfmt": "catalog:",
|
|
94
94
|
"react": "catalog:",
|
|
95
95
|
"react-dom": "catalog:",
|
|
96
|
-
"react-router": "^8.0
|
|
96
|
+
"react-router": "^8.1.0",
|
|
97
97
|
"sonner": "^2.0.7",
|
|
98
98
|
"tailwind-merge": "^3.5.0",
|
|
99
99
|
"tailwindcss": "catalog:",
|
|
@@ -1,6 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ensureAdditiveColumns,
|
|
3
|
+
getDbExec,
|
|
4
|
+
runMigrations,
|
|
5
|
+
} from "@agent-native/core/db";
|
|
2
6
|
|
|
3
7
|
import { repairUnseededBlocksFields } from "../../actions/_property-utils.js";
|
|
8
|
+
import * as schema from "../db/schema.js";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Every Drizzle table exported from schema.ts. Filters out type-only and
|
|
12
|
+
* helper exports the same way db.spec.ts's `isDrizzleTable` regression guard
|
|
13
|
+
* does: a real table carries a Symbol-keyed drizzle metadata bag, plain
|
|
14
|
+
* exports don't.
|
|
15
|
+
*/
|
|
16
|
+
function isDrizzleTable(value: unknown): value is object {
|
|
17
|
+
return (
|
|
18
|
+
!!value &&
|
|
19
|
+
typeof value === "object" &&
|
|
20
|
+
Object.getOwnPropertySymbols(value).some((s) =>
|
|
21
|
+
s.toString().includes("drizzle"),
|
|
22
|
+
)
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const schemaTables = Object.values(schema).filter(isDrizzleTable);
|
|
4
27
|
|
|
5
28
|
function scheduleBlocksRepairRetry(attempt = 1): void {
|
|
6
29
|
const delayMs = Math.min(30_000 * attempt, 5 * 60_000);
|
|
@@ -14,6 +37,11 @@ function scheduleBlocksRepairRetry(attempt = 1): void {
|
|
|
14
37
|
}
|
|
15
38
|
}
|
|
16
39
|
|
|
40
|
+
// Convention: every new migration below MUST set a unique `name:` slug (see
|
|
41
|
+
// packages/core/src/db/migrations.ts for the full rationale). Version numbers
|
|
42
|
+
// alone are not a safe identity across parallel branches that each extend
|
|
43
|
+
// this list independently — see the analytics db.ts v75-v83 incident this
|
|
44
|
+
// convention was introduced to prevent.
|
|
17
45
|
const runContentMigrations = runMigrations(
|
|
18
46
|
[
|
|
19
47
|
{
|
|
@@ -598,11 +626,39 @@ const runContentSourceMigrations = runMigrations(
|
|
|
598
626
|
{ table: "content_source_migrations" },
|
|
599
627
|
);
|
|
600
628
|
|
|
629
|
+
/**
|
|
630
|
+
* The migration lists above are the authoritative source for tables, indexes,
|
|
631
|
+
* and data transforms. `ensureAdditiveColumns` runs after they complete as a
|
|
632
|
+
* belt-and-braces safety net for the failure mode where a column is added to
|
|
633
|
+
* schema.ts without a matching hand-written ALTER migration, which silently
|
|
634
|
+
* 500s every query touching a pre-existing production table. It only ever
|
|
635
|
+
* adds missing columns — never drops, renames, or retypes anything — and any
|
|
636
|
+
* failure here is logged and swallowed so it can never fail boot.
|
|
637
|
+
*/
|
|
601
638
|
export default async function contentDatabasePlugin(
|
|
602
639
|
nitroApp: Parameters<typeof runContentMigrations>[0],
|
|
603
640
|
) {
|
|
604
641
|
await runContentMigrations(nitroApp);
|
|
605
642
|
await runContentSourceMigrations(nitroApp);
|
|
643
|
+
try {
|
|
644
|
+
const summary = await ensureAdditiveColumns({
|
|
645
|
+
db: getDbExec(),
|
|
646
|
+
tables: schemaTables,
|
|
647
|
+
});
|
|
648
|
+
if (summary.errors.length > 0) {
|
|
649
|
+
console.warn(
|
|
650
|
+
"[db] ensureAdditiveColumns completed with errors:",
|
|
651
|
+
summary.errors,
|
|
652
|
+
);
|
|
653
|
+
}
|
|
654
|
+
} catch (err) {
|
|
655
|
+
// Never fail boot over the safety net itself — the authoritative
|
|
656
|
+
// migrations above already ran.
|
|
657
|
+
console.warn(
|
|
658
|
+
"[db] ensureAdditiveColumns failed (non-fatal):",
|
|
659
|
+
err instanceof Error ? err.message : err,
|
|
660
|
+
);
|
|
661
|
+
}
|
|
606
662
|
// One-time, boot-time repair: seed the primary "Content" Blocks field for any
|
|
607
663
|
// legacy database that has never been seeded (blocks_seeded = 0). Idempotent —
|
|
608
664
|
// the atomic claim in seedDefaultBlocksField makes re-runs no-ops, and it
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: full-app-build
|
|
3
|
+
description: >-
|
|
4
|
+
Build and iterate on a full real app from Design, backed by a running
|
|
5
|
+
Builder Fusion cloud container instead of an inline HTML prototype. Use
|
|
6
|
+
when the user wants a real/full app end-to-end through publishing, and
|
|
7
|
+
only when FULL_APP_BUILDING_ENABLED is true.
|
|
8
|
+
metadata:
|
|
9
|
+
visibility: exported
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Full App Building
|
|
13
|
+
|
|
14
|
+
Full app building turns a Design project into a real, running app instead of
|
|
15
|
+
an inline Alpine/HTML prototype. The source of truth is a live dev server
|
|
16
|
+
inside a Builder Fusion cloud container — one Builder project branch per
|
|
17
|
+
design. Screens are URL-backed iframes of that container's dev server, the
|
|
18
|
+
same model as `/visual-edit` localhost screens (`sourceType: "fusion"`), but
|
|
19
|
+
the container runs remotely instead of on the user's machine.
|
|
20
|
+
|
|
21
|
+
## Flag Gate
|
|
22
|
+
|
|
23
|
+
This feature is gated by the code boolean `FULL_APP_BUILDING_ENABLED` in
|
|
24
|
+
`templates/design/shared/full-app.ts`, currently `false`. Check it (or trust
|
|
25
|
+
that the fusion actions are unavailable/erroring) before proposing this flow.
|
|
26
|
+
If the flag is off, tell the user full app building isn't enabled yet instead
|
|
27
|
+
of attempting the actions.
|
|
28
|
+
|
|
29
|
+
Even when the flag is on, the fusion actions require Builder credentials and
|
|
30
|
+
a configured branch project ID. When those aren't set up, actions return a
|
|
31
|
+
`not-configured` CTA instead of throwing — see **Not Configured** below.
|
|
32
|
+
|
|
33
|
+
## When To Use
|
|
34
|
+
|
|
35
|
+
Reach for full app building only when the user wants a real, working app —
|
|
36
|
+
not a prototype — and wants to go end-to-end through publishing: real
|
|
37
|
+
routing, real backend behavior, a deployable URL. For UI exploration, visual
|
|
38
|
+
review, and iteration on look/feel, stay in the normal inline design flow
|
|
39
|
+
(`design-generation`) or `/visual-edit` for connecting an existing local app.
|
|
40
|
+
Do not switch a normal design into fusion mode unless the user explicitly
|
|
41
|
+
asks for a full/real app.
|
|
42
|
+
|
|
43
|
+
## Lifecycle
|
|
44
|
+
|
|
45
|
+
1. **Create the design shell** the normal way (`create-design`), or continue
|
|
46
|
+
from an existing design.
|
|
47
|
+
2. **`create-fusion-app`** `{designId, prompt, branchName?}` creates the app
|
|
48
|
+
branch via the Builder cloud agent. Returns
|
|
49
|
+
`{status: "building", projectId, branchName, editorUrl}` once started, or
|
|
50
|
+
the not-configured CTA. One branch per design — calling it again on an
|
|
51
|
+
already-linked design returns the existing linkage instead of creating a
|
|
52
|
+
second branch.
|
|
53
|
+
3. **Poll `sync-fusion-app`** `{designId, paths?}` while the container boots.
|
|
54
|
+
It attaches to the container and reports `status: building|ready|error`.
|
|
55
|
+
Tell the user the app is building and keep polling — don't block on a
|
|
56
|
+
single call. Once `ready`, it updates `previewUrl` and upserts URL-backed
|
|
57
|
+
screens (default path `"/"` when `paths` is omitted).
|
|
58
|
+
4. **Screens appear as URL-backed artboards** in the overview canvas, same
|
|
59
|
+
as localhost screens: iframe of `previewUrl` + route, not copied HTML.
|
|
60
|
+
5. **Iterate** using the editing rules below, then push and publish when
|
|
61
|
+
ready.
|
|
62
|
+
|
|
63
|
+
## Editing Rules — the critical distinction
|
|
64
|
+
|
|
65
|
+
Fusion screens are NOT inline HTML files. **Never** edit a fusion screen's
|
|
66
|
+
markup directly and never use `generate-design`, `edit-design`, or
|
|
67
|
+
`apply-visual-edit` on it — those tools rewrite inline `design_files` rows,
|
|
68
|
+
which fusion screens don't have. Writing to the wrong layer silently does
|
|
69
|
+
nothing to the running app.
|
|
70
|
+
|
|
71
|
+
Instead:
|
|
72
|
+
|
|
73
|
+
- **`queue-fusion-edit`** `{designId, instruction, screenFileId?, target?}` —
|
|
74
|
+
queue one edit intent. Use `target` (`selector`, `path`, `url`, `nodeName`)
|
|
75
|
+
to point at the specific element/screen the user means, the same way you'd
|
|
76
|
+
describe a selection for `apply-visual-edit`. Queuing does not touch the
|
|
77
|
+
running app yet — it only records intent in `design_fusion_edits`.
|
|
78
|
+
- **`list-fusion-edits`** `{designId, status?}` — inspect the queue before
|
|
79
|
+
dispatching, e.g. to confirm what's pending or to show the user a summary.
|
|
80
|
+
- **`apply-fusion-edits`** `{designId, editIds?}` — batches all pending edits
|
|
81
|
+
(or the given `editIds`) into one prompt and dispatches it to the app's
|
|
82
|
+
in-container coding agent. This is fire-and-forget: it marks the edits
|
|
83
|
+
"sent" and returns immediately, it does not wait for the app agent to
|
|
84
|
+
finish.
|
|
85
|
+
- **`send-fusion-message`** `{designId, prompt}` — for larger freeform
|
|
86
|
+
requests that don't fit the "queue small edits, batch them" model (new
|
|
87
|
+
features, structural changes, "wire up the backend for X"), relay a
|
|
88
|
+
message straight to the app's coding agent instead of queuing edits.
|
|
89
|
+
|
|
90
|
+
After dispatching (`apply-fusion-edits` or `send-fusion-message`), tell the
|
|
91
|
+
user the change was sent to the app's agent and is being applied
|
|
92
|
+
asynchronously — it is not applied synchronously like an inline `edit-design`
|
|
93
|
+
call. Screens reflect the change once the in-container agent finishes and the
|
|
94
|
+
dev server updates; call `sync-fusion-app` again or have the user reload the
|
|
95
|
+
screen to see it land.
|
|
96
|
+
|
|
97
|
+
## Adding More Routes As Screens
|
|
98
|
+
|
|
99
|
+
Once `previewUrl` is known (after `sync-fusion-app` reports `ready`), use
|
|
100
|
+
**`add-fusion-screens`** `{designId, paths, width?, height?}` to place
|
|
101
|
+
additional routes as screens on the overview canvas — the fusion equivalent
|
|
102
|
+
of `add-localhost-screens`.
|
|
103
|
+
|
|
104
|
+
## Push And Publish Flow
|
|
105
|
+
|
|
106
|
+
1. **`push-fusion-app`** `{designId}` — pushes the branch's code to its git
|
|
107
|
+
remote. Do this before or as part of publishing so the code is durably
|
|
108
|
+
saved, not just running in the container.
|
|
109
|
+
2. **`deploy-fusion-app`** `{designId, slug?}` — reserves
|
|
110
|
+
`<slug>.builder.cloud` (derived from the design title when `slug` is
|
|
111
|
+
omitted) and triggers a deploy.
|
|
112
|
+
3. **`get-fusion-deploy-status`** `{designId}` — poll until the deploy status
|
|
113
|
+
is `live`, `failed`, or `canceled`. Report the live `deployedUrl` once it
|
|
114
|
+
resolves; report the failure reason if it doesn't.
|
|
115
|
+
|
|
116
|
+
## Not Configured
|
|
117
|
+
|
|
118
|
+
When Builder credentials or the branch project ID aren't set up, the fusion
|
|
119
|
+
actions return a `not-configured` status with a `cta` object instead of
|
|
120
|
+
throwing — mirror the guidance `migrate-inline-design-to-app` already gives:
|
|
121
|
+
surface the CTA's `label`/`description` and point the user at
|
|
122
|
+
`connect-builder-app` or the given `connectUrl` to connect Builder, then
|
|
123
|
+
retry the same fusion action. Don't silently fall back to an inline design in
|
|
124
|
+
this case — tell the user full app building needs Builder connected first.
|
|
125
|
+
|
|
126
|
+
## Timing Expectations
|
|
127
|
+
|
|
128
|
+
Set expectations up front so polling doesn't read as broken:
|
|
129
|
+
|
|
130
|
+
- Creating the app branch and booting the container can take a few minutes —
|
|
131
|
+
this is a real cloud container starting a real dev server, not an inline
|
|
132
|
+
HTML render. Keep polling `sync-fusion-app` and give the user a short
|
|
133
|
+
status update rather than going silent.
|
|
134
|
+
- Edits are asynchronous. `apply-fusion-edits` and `send-fusion-message`
|
|
135
|
+
return as soon as the prompt is dispatched, not when the app agent finishes
|
|
136
|
+
making the change. Don't promise the screen updated instantly — remind the
|
|
137
|
+
user the app's agent is working on it and the screen will reflect the
|
|
138
|
+
change once it's done and the dev server picks it up.
|
|
139
|
+
- Deploys also take real time; poll `get-fusion-deploy-status` rather than
|
|
140
|
+
assuming `deploy-fusion-app` finished the deploy synchronously.
|
|
@@ -163,6 +163,25 @@ content as the absolute URL and keep `screenMetadata[fileId]` aligned:
|
|
|
163
163
|
Do not replace localhost screens with copied `srcdoc` HTML unless the user
|
|
164
164
|
explicitly asks to freeze a snapshot.
|
|
165
165
|
|
|
166
|
+
## Local Files in the Code Tab
|
|
167
|
+
|
|
168
|
+
Once a connection is registered, the design editor's Code panel (left rail →
|
|
169
|
+
Code, or `navigate --view editor --designId <id> --leftPanel code`) shows a
|
|
170
|
+
local-files workspace root for that connection next to the design's own files.
|
|
171
|
+
It lists the connected app's text/code files through the bridge
|
|
172
|
+
(`list-local-files` / `read-local-file`); build output, `node_modules`,
|
|
173
|
+
`.git`, and secret-looking paths (`.env*`, key files) are always excluded.
|
|
174
|
+
|
|
175
|
+
- Browsing and reading need only editor access on the design plus the running
|
|
176
|
+
bridge.
|
|
177
|
+
- Saving goes through `write-local-file`: the first save opens the
|
|
178
|
+
write-consent dialog (an 8-hour, folder-scoped grant) and retries
|
|
179
|
+
automatically once granted. Only text/code files are writable; secret paths
|
|
180
|
+
are always blocked.
|
|
181
|
+
- Saves are conflict-checked against the file's on-disk version — a file that
|
|
182
|
+
changed since it was read fails with a version conflict instead of being
|
|
183
|
+
overwritten.
|
|
184
|
+
|
|
166
185
|
## Verification
|
|
167
186
|
|
|
168
187
|
- `list-localhost-connections` returns the expected connection and routes.
|
|
@@ -170,3 +189,4 @@ explicitly asks to freeze a snapshot.
|
|
|
170
189
|
- Every requested screen renders the intended localhost URL.
|
|
171
190
|
- Alt-dragging a screen copies the URL-backed frame, not an inline HTML clone.
|
|
172
191
|
- A query/path edit changes only the target screen's URL metadata and iframe.
|
|
192
|
+
- The Code tab shows a local-files root for the connection and opens its files.
|
|
@@ -156,8 +156,10 @@ patterns live in `.agents/skills/`.
|
|
|
156
156
|
current SQL-backed prototype mode. Localhost connections come from
|
|
157
157
|
`npx @agent-native/core@latest design connect` and are persisted with
|
|
158
158
|
`connect-localhost`; list them with `list-localhost-connections` before
|
|
159
|
-
creating or resolving local-code artboards. Fusion
|
|
160
|
-
|
|
159
|
+
creating or resolving local-code artboards. Fusion designs are full-app
|
|
160
|
+
designs backed by a running Builder Fusion container, created via
|
|
161
|
+
`create-fusion-app` when `FULL_APP_BUILDING_ENABLED` is on; preserve the
|
|
162
|
+
design's `fusionApp` linkage data whenever present and never invent it.
|
|
161
163
|
- Localhost route manifests are scaffolding for URL-backed Flow Canvas
|
|
162
164
|
artboards. Use `add-localhost-screens` to place routes or path/query states as
|
|
163
165
|
iframe screens in overview mode. Preserve route ids, paths, `sourceType`,
|
|
@@ -198,21 +200,31 @@ patterns live in `.agents/skills/`.
|
|
|
198
200
|
|
|
199
201
|
## Code Workspace
|
|
200
202
|
|
|
201
|
-
- The editor left rail has a wide `code`
|
|
202
|
-
`
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
203
|
+
- The editor left rail has a wide `code` panel: a VS Code-style workbench
|
|
204
|
+
(`app/components/design/code-workbench/`) with an explorer, workspace search,
|
|
205
|
+
editor tabs, quick open (⌘P), a command palette (⇧⌘P), and a status bar. Open
|
|
206
|
+
it with `navigate --view editor --designId <id> --leftPanel code` and
|
|
207
|
+
optionally pass `fileId`, `filename`, or `screen` to focus a file.
|
|
208
|
+
- The explorer shows one root per workspace source: the design's SQL-backed
|
|
209
|
+
files (`designfs://<designId>/`, backend `virtual-inline`) always, plus one
|
|
210
|
+
root per localhost connection referenced by the design's screens
|
|
211
|
+
(`list-local-files` / `read-local-file` proxy the `design connect` bridge;
|
|
212
|
+
writes go through `write-local-file` and its user-approved consent grant).
|
|
213
|
+
- Inline design files are auto-formatted with Prettier the first time they are
|
|
214
|
+
opened in the workbench and the formatted result is persisted; local files
|
|
215
|
+
are never auto-formatted.
|
|
216
|
+
- Use `list-source-files` to inspect the inline source workspace and
|
|
217
|
+
`read-source-file` for file contents; preserve its `versionHash` before
|
|
208
218
|
writing. Do not return full file content from `view-screen`; it reports only
|
|
209
219
|
active code file metadata and dirty state.
|
|
210
220
|
- Use `preview-source-edit` to show a diff without saving, then
|
|
211
221
|
`apply-source-edit` with the prior `versionHash` to save either a full replace
|
|
212
|
-
or exact replace. These actions update the same inline file state as the UI
|
|
222
|
+
or exact replace. These actions update the same inline file state as the UI;
|
|
223
|
+
agent edits show up live in open workbench buffers.
|
|
213
224
|
- Use `resolve-selection-source` when the user has a canvas element selected and
|
|
214
|
-
you need the best matching inline file location/snippet.
|
|
215
|
-
|
|
225
|
+
you need the best matching inline file location/snippet.
|
|
226
|
+
- The workbench session (open tabs, active file, sidebar layout) persists per
|
|
227
|
+
design in application state under `code-workbench:<designId>`.
|
|
216
228
|
|
|
217
229
|
## Localhost Source Actions
|
|
218
230
|
|
|
@@ -255,6 +267,31 @@ patterns live in `.agents/skills/`.
|
|
|
255
267
|
section — promote a 3+ times repeated pattern instead of inventing another
|
|
256
268
|
near-duplicate.
|
|
257
269
|
|
|
270
|
+
## Full App Building
|
|
271
|
+
|
|
272
|
+
Flag-gated (`FULL_APP_BUILDING_ENABLED` in `shared/full-app.ts`, default off)
|
|
273
|
+
and requires Builder connected. See `full-app-build` skill for the full flow.
|
|
274
|
+
|
|
275
|
+
- `create-fusion-app`: creates the app branch via the Builder cloud agent; one
|
|
276
|
+
branch per design; returns existing linkage if already created.
|
|
277
|
+
- `sync-fusion-app`: boots/attaches the container; poll while building; on
|
|
278
|
+
ready, updates `previewUrl` and upserts URL-backed screens.
|
|
279
|
+
- `add-fusion-screens`: places more routes as screens once `previewUrl` is
|
|
280
|
+
known.
|
|
281
|
+
- `queue-fusion-edit`: queues one edit intent against a fusion screen.
|
|
282
|
+
- `list-fusion-edits`: inspects the queued edits.
|
|
283
|
+
- `apply-fusion-edits`: batches pending edits into one prompt for the app's
|
|
284
|
+
in-container agent (fire-and-forget); marks them "sent".
|
|
285
|
+
- `send-fusion-message`: relays a freeform request to the app's coding agent.
|
|
286
|
+
- `push-fusion-app`: pushes the branch's code to its git remote.
|
|
287
|
+
- `deploy-fusion-app`: reserves `<slug>.builder.cloud` and triggers a deploy.
|
|
288
|
+
- `get-fusion-deploy-status`: polls deploy status until live/failed/canceled.
|
|
289
|
+
- Fusion screens are URL-backed iframes, same model as localhost screens.
|
|
290
|
+
Never inline-edit a fusion screen's HTML or use `generate-design` /
|
|
291
|
+
`edit-design` / `apply-visual-edit` on it — queue and dispatch edits
|
|
292
|
+
instead. When not configured, actions return a connect CTA like
|
|
293
|
+
`migrate-inline-design-to-app`; never throw or invent `fusionApp` data.
|
|
294
|
+
|
|
258
295
|
## App-Backed Skill Distribution
|
|
259
296
|
|
|
260
297
|
- The preferred hosted install path is
|
|
@@ -296,6 +333,7 @@ Read the relevant skill before deeper work:
|
|
|
296
333
|
- `design-generation` for creating/editing prototype HTML and variant flows.
|
|
297
334
|
- `design-systems` for tokens, brand extraction, and linked systems.
|
|
298
335
|
- `export-handoff` for HTML/PNG/SVG/ZIP/code handoff.
|
|
336
|
+
- `full-app-build` for flag-gated fusion-backed full app building.
|
|
299
337
|
- `frontend-design` and `shadcn-ui` for app UI changes.
|
|
300
338
|
- `actions`, `delegate-to-agent`, `security`, and `self-modifying-code` for
|
|
301
339
|
framework patterns.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* add-fusion-screens — place additional URL-backed screens for an already
|
|
3
|
+
* synced fusion app.
|
|
4
|
+
*
|
|
5
|
+
* Use this to add more routes/screens to the canvas once the container is
|
|
6
|
+
* ready (i.e. after sync-fusion-app has resolved a previewUrl). If the app
|
|
7
|
+
* has not been synced yet, this throws with guidance to call sync-fusion-app.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { defineAction } from "@agent-native/core";
|
|
11
|
+
import { assertAccess } from "@agent-native/core/sharing";
|
|
12
|
+
import { z } from "zod";
|
|
13
|
+
|
|
14
|
+
import { schema } from "../server/db/index.js";
|
|
15
|
+
import "../server/db/index.js"; // ensure registerShareableResource runs
|
|
16
|
+
import {
|
|
17
|
+
DEFAULT_FUSION_SCREEN_HEIGHT,
|
|
18
|
+
DEFAULT_FUSION_SCREEN_WIDTH,
|
|
19
|
+
upsertFusionScreens,
|
|
20
|
+
} from "../server/lib/fusion-screens.js";
|
|
21
|
+
import {
|
|
22
|
+
FULL_APP_BUILDING_ENABLED,
|
|
23
|
+
readFusionApp,
|
|
24
|
+
} from "../shared/full-app.js";
|
|
25
|
+
|
|
26
|
+
export default defineAction({
|
|
27
|
+
description:
|
|
28
|
+
"Add or refresh URL-backed screens on a fusion (full-app) design's " +
|
|
29
|
+
"canvas, pointing at the container's live preview URL. Requires the " +
|
|
30
|
+
"fusion app to already have a previewUrl (call sync-fusion-app first if " +
|
|
31
|
+
"not). Use this to place additional routes the app agent has built " +
|
|
32
|
+
"(e.g. '/settings', '/dashboard') as new overview screens.",
|
|
33
|
+
schema: z.object({
|
|
34
|
+
designId: z.string().describe("Design project ID backed by a fusion app."),
|
|
35
|
+
paths: z
|
|
36
|
+
.array(z.string())
|
|
37
|
+
.min(1)
|
|
38
|
+
.describe(
|
|
39
|
+
"Route paths to place as screens, e.g. ['/settings', '/dashboard'].",
|
|
40
|
+
),
|
|
41
|
+
width: z
|
|
42
|
+
.number()
|
|
43
|
+
.positive()
|
|
44
|
+
.optional()
|
|
45
|
+
.describe("Iframe viewport width. Defaults to 1280."),
|
|
46
|
+
height: z
|
|
47
|
+
.number()
|
|
48
|
+
.positive()
|
|
49
|
+
.optional()
|
|
50
|
+
.describe("Iframe viewport height. Defaults to 900."),
|
|
51
|
+
}),
|
|
52
|
+
run: async ({ designId, paths, width, height }) => {
|
|
53
|
+
if (!FULL_APP_BUILDING_ENABLED) {
|
|
54
|
+
throw new Error("Full app building is not enabled");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const access = await assertAccess("design", designId, "editor");
|
|
58
|
+
const design = access.resource as typeof schema.designs.$inferSelect;
|
|
59
|
+
const fusionApp = readFusionApp(design.data);
|
|
60
|
+
if (!fusionApp) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
"This design has no fusion app linkage. Call create-fusion-app first.",
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
if (!fusionApp.previewUrl) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
"The fusion app has no preview URL yet. Call sync-fusion-app first " +
|
|
68
|
+
"to boot the container and resolve its preview URL.",
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const { screens } = await upsertFusionScreens({
|
|
73
|
+
designId,
|
|
74
|
+
previewUrl: fusionApp.previewUrl,
|
|
75
|
+
paths,
|
|
76
|
+
width: width ?? DEFAULT_FUSION_SCREEN_WIDTH,
|
|
77
|
+
height: height ?? DEFAULT_FUSION_SCREEN_HEIGHT,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
screens: screens.map((screen) => ({
|
|
82
|
+
fileId: screen.fileId,
|
|
83
|
+
path: screen.path,
|
|
84
|
+
url: screen.url,
|
|
85
|
+
title: screen.title,
|
|
86
|
+
width: screen.width,
|
|
87
|
+
height: screen.height,
|
|
88
|
+
})),
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
});
|
|
@@ -35,6 +35,7 @@ import { z } from "zod";
|
|
|
35
35
|
|
|
36
36
|
import { getDb, schema } from "../server/db/index.js";
|
|
37
37
|
import { applyVisualEdit, type EditIntent } from "../shared/code-layer.js";
|
|
38
|
+
import { agentSelectionDescriptor } from "../shared/collab-selection.js";
|
|
38
39
|
import {
|
|
39
40
|
A11Y_FINDING_CATEGORIES,
|
|
40
41
|
A11Y_FINDING_SEVERITIES,
|
|
@@ -282,7 +283,10 @@ export default defineAction({
|
|
|
282
283
|
|
|
283
284
|
if (patch.result.target) {
|
|
284
285
|
agentUpdateSelection(file.id, {
|
|
285
|
-
selection:
|
|
286
|
+
selection: agentSelectionDescriptor(
|
|
287
|
+
patch.result.target,
|
|
288
|
+
"Fixing accessibility",
|
|
289
|
+
),
|
|
286
290
|
nodeId: patch.result.target.nodeId,
|
|
287
291
|
editingFile: file.filename,
|
|
288
292
|
designId: file.designId,
|