@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
|
@@ -2,7 +2,18 @@ import { createHash, randomUUID } from "node:crypto";
|
|
|
2
2
|
|
|
3
3
|
import { notifyWithDelivery } from "@agent-native/core/notifications";
|
|
4
4
|
import { recordChange } from "@agent-native/core/server";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
and,
|
|
7
|
+
asc,
|
|
8
|
+
desc,
|
|
9
|
+
eq,
|
|
10
|
+
gte,
|
|
11
|
+
inArray,
|
|
12
|
+
isNull,
|
|
13
|
+
lte,
|
|
14
|
+
or,
|
|
15
|
+
sql,
|
|
16
|
+
} from "drizzle-orm";
|
|
6
17
|
|
|
7
18
|
import { getDb, schema } from "../db/index.js";
|
|
8
19
|
|
|
@@ -435,6 +446,16 @@ export async function deleteAnalyticsAlertRule(
|
|
|
435
446
|
});
|
|
436
447
|
}
|
|
437
448
|
|
|
449
|
+
const DEFAULT_ALERT_SEED_CHUNK_SIZE = 500;
|
|
450
|
+
|
|
451
|
+
function chunkArray<T>(items: T[], size: number): T[][] {
|
|
452
|
+
const chunks: T[][] = [];
|
|
453
|
+
for (let i = 0; i < items.length; i += size) {
|
|
454
|
+
chunks.push(items.slice(i, i + size));
|
|
455
|
+
}
|
|
456
|
+
return chunks;
|
|
457
|
+
}
|
|
458
|
+
|
|
438
459
|
export async function ensureDefaultHttp5xxSpikeAlertRules(): Promise<{
|
|
439
460
|
checked: number;
|
|
440
461
|
created: number;
|
|
@@ -442,8 +463,9 @@ export async function ensureDefaultHttp5xxSpikeAlertRules(): Promise<{
|
|
|
442
463
|
if (!defaultHttp5xxAlertEnabled()) return { checked: 0, created: 0 };
|
|
443
464
|
|
|
444
465
|
const scopes = await defaultHttp5xxAlertScopes();
|
|
466
|
+
if (!scopes.length) return { checked: 0, created: 0 };
|
|
467
|
+
|
|
445
468
|
const db = getDb() as any;
|
|
446
|
-
let created = 0;
|
|
447
469
|
const threshold = envInt(
|
|
448
470
|
"ANALYTICS_DEFAULT_HTTP_5XX_ALERT_THRESHOLD",
|
|
449
471
|
5,
|
|
@@ -463,17 +485,28 @@ export async function ensureDefaultHttp5xxSpikeAlertRules(): Promise<{
|
|
|
463
485
|
24 * 60,
|
|
464
486
|
);
|
|
465
487
|
|
|
488
|
+
const scopesById = new Map<string, AccessCtx>();
|
|
466
489
|
for (const scope of scopes) {
|
|
467
|
-
|
|
468
|
-
|
|
490
|
+
scopesById.set(defaultHttp5xxAlertId(scope.email, scope.orgId), scope);
|
|
491
|
+
}
|
|
492
|
+
const allIds = Array.from(scopesById.keys());
|
|
493
|
+
|
|
494
|
+
const existingIds = new Set<string>();
|
|
495
|
+
for (const idChunk of chunkArray(allIds, DEFAULT_ALERT_SEED_CHUNK_SIZE)) {
|
|
496
|
+
const rows = await db
|
|
469
497
|
.select({ id: schema.analyticsAlertRules.id })
|
|
470
498
|
.from(schema.analyticsAlertRules)
|
|
471
|
-
.where(
|
|
472
|
-
|
|
473
|
-
|
|
499
|
+
.where(inArray(schema.analyticsAlertRules.id, idChunk));
|
|
500
|
+
for (const row of rows) existingIds.add(row.id);
|
|
501
|
+
}
|
|
474
502
|
|
|
475
|
-
|
|
476
|
-
|
|
503
|
+
const missingIds = allIds.filter((id) => !existingIds.has(id));
|
|
504
|
+
if (!missingIds.length) return { checked: scopes.length, created: 0 };
|
|
505
|
+
|
|
506
|
+
const now = nowIso();
|
|
507
|
+
const rowsToInsert = missingIds.map((id) => {
|
|
508
|
+
const scope = scopesById.get(id)!;
|
|
509
|
+
return {
|
|
477
510
|
id,
|
|
478
511
|
name: "Hosted app HTTP 5xx spike",
|
|
479
512
|
description:
|
|
@@ -482,12 +515,12 @@ export async function ensureDefaultHttp5xxSpikeAlertRules(): Promise<{
|
|
|
482
515
|
filters: JSON.stringify([
|
|
483
516
|
{ field: "properties.status_class", value: "5xx" },
|
|
484
517
|
]),
|
|
485
|
-
thresholdMode: "event_count",
|
|
518
|
+
thresholdMode: "event_count" as const,
|
|
486
519
|
distinctBy: null,
|
|
487
520
|
threshold,
|
|
488
521
|
windowMinutes,
|
|
489
522
|
cooldownMinutes,
|
|
490
|
-
severity: "critical",
|
|
523
|
+
severity: "critical" as const,
|
|
491
524
|
channels: JSON.stringify(["inbox"]),
|
|
492
525
|
emailRecipients: JSON.stringify([]),
|
|
493
526
|
enabled: true,
|
|
@@ -495,8 +528,20 @@ export async function ensureDefaultHttp5xxSpikeAlertRules(): Promise<{
|
|
|
495
528
|
updatedAt: now,
|
|
496
529
|
ownerEmail: scope.email,
|
|
497
530
|
orgId: scope.orgId,
|
|
498
|
-
}
|
|
499
|
-
|
|
531
|
+
};
|
|
532
|
+
});
|
|
533
|
+
|
|
534
|
+
let created = 0;
|
|
535
|
+
for (const rowChunk of chunkArray(
|
|
536
|
+
rowsToInsert,
|
|
537
|
+
DEFAULT_ALERT_SEED_CHUNK_SIZE,
|
|
538
|
+
)) {
|
|
539
|
+
const inserted = await db
|
|
540
|
+
.insert(schema.analyticsAlertRules)
|
|
541
|
+
.values(rowChunk)
|
|
542
|
+
.onConflictDoNothing()
|
|
543
|
+
.returning({ id: schema.analyticsAlertRules.id });
|
|
544
|
+
created += inserted.length;
|
|
500
545
|
}
|
|
501
546
|
|
|
502
547
|
return { checked: scopes.length, created };
|
|
@@ -944,6 +944,29 @@ export const dashboardCatalogEntries: DashboardCatalogEntry[] = [
|
|
|
944
944
|
visibleInCatalog: false,
|
|
945
945
|
buildConfig: () => seedConfig("agent-native-templates-first-party"),
|
|
946
946
|
},
|
|
947
|
+
{
|
|
948
|
+
id: "agent-observability-llm",
|
|
949
|
+
name: "Agent LLM Observability",
|
|
950
|
+
description:
|
|
951
|
+
"LLM generation volume, latency, errors, token usage, and cost captured as first-party `$ai_generation` tracking events.",
|
|
952
|
+
category: "Observability",
|
|
953
|
+
defaultDashboardId: "agent-observability-llm",
|
|
954
|
+
dataSources: ["first-party"],
|
|
955
|
+
tags: [
|
|
956
|
+
"ai",
|
|
957
|
+
"llm",
|
|
958
|
+
"observability",
|
|
959
|
+
"cost",
|
|
960
|
+
"tokens",
|
|
961
|
+
"latency",
|
|
962
|
+
"posthog",
|
|
963
|
+
"first-party",
|
|
964
|
+
],
|
|
965
|
+
panelCount: 10,
|
|
966
|
+
version: CATALOG_VERSION,
|
|
967
|
+
recommended: true,
|
|
968
|
+
buildConfig: () => seedConfig("agent-observability-llm"),
|
|
969
|
+
},
|
|
947
970
|
{
|
|
948
971
|
id: "skills-cli-funnel",
|
|
949
972
|
name: "Skills CLI Funnel",
|
|
@@ -3,11 +3,16 @@ import path from "node:path";
|
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
|
|
5
5
|
import firstPartyTemplateTrafficSeed from "../../seeds/dashboards/agent-native-templates-first-party.json" with { type: "json" };
|
|
6
|
+
import agentObservabilityLlmSeed from "../../seeds/dashboards/agent-observability-llm.json" with { type: "json" };
|
|
6
7
|
import googleAnalyticsSeed from "../../seeds/dashboards/google-analytics.json" with { type: "json" };
|
|
7
8
|
import nodeExporterFullSeed from "../../seeds/dashboards/node-exporter-full.json" with { type: "json" };
|
|
8
9
|
import skillsCliFunnelSeed from "../../seeds/dashboards/skills-cli-funnel.json" with { type: "json" };
|
|
9
10
|
|
|
10
11
|
const shippedSeeds: Record<string, Record<string, unknown>> = {
|
|
12
|
+
"agent-observability-llm": agentObservabilityLlmSeed as Record<
|
|
13
|
+
string,
|
|
14
|
+
unknown
|
|
15
|
+
>,
|
|
11
16
|
"agent-native-templates-first-party": firstPartyTemplateTrafficSeed as Record<
|
|
12
17
|
string,
|
|
13
18
|
unknown
|
|
@@ -111,6 +111,8 @@ const MAX_DIAGNOSTIC_STACK_CHARS = 2_000;
|
|
|
111
111
|
const MAX_DIAGNOSTIC_URL_CHARS = 500;
|
|
112
112
|
const MAX_DIAGNOSTIC_ARG_CHARS = 500;
|
|
113
113
|
const MAX_DIAGNOSTIC_ARGS = 10;
|
|
114
|
+
/** Defensive server-side cap for a captured 5xx response-body snippet. */
|
|
115
|
+
const MAX_DIAGNOSTIC_ERROR_BODY_CHARS = 2_048;
|
|
114
116
|
const DEFAULT_DIAGNOSTIC_ENTRY_CAP = 200;
|
|
115
117
|
const AGENT_CONTEXT_DIAGNOSTIC_ENTRY_CAP = 50;
|
|
116
118
|
|
|
@@ -253,6 +255,14 @@ function networkDiagnosticsEntry(
|
|
|
253
255
|
),
|
|
254
256
|
}
|
|
255
257
|
: {}),
|
|
258
|
+
...(typeof payload.responseBody === "string"
|
|
259
|
+
? {
|
|
260
|
+
responseBody: boundedDiagnosticText(
|
|
261
|
+
payload.responseBody,
|
|
262
|
+
MAX_DIAGNOSTIC_ERROR_BODY_CHARS,
|
|
263
|
+
),
|
|
264
|
+
}
|
|
265
|
+
: {}),
|
|
256
266
|
};
|
|
257
267
|
}
|
|
258
268
|
|
|
@@ -265,9 +275,11 @@ function boundDiagnosticsEntries<T extends { offsetMs: number }>(
|
|
|
265
275
|
entries: T[],
|
|
266
276
|
isPriority: (entry: T) => boolean,
|
|
267
277
|
cap: number,
|
|
268
|
-
): { entries: T[]; truncated: boolean } {
|
|
278
|
+
): { entries: T[]; truncated: boolean; hasMore: boolean } {
|
|
269
279
|
const sorted = [...entries].sort((a, b) => a.offsetMs - b.offsetMs);
|
|
270
|
-
if (sorted.length <= cap)
|
|
280
|
+
if (sorted.length <= cap) {
|
|
281
|
+
return { entries: sorted, truncated: false, hasMore: false };
|
|
282
|
+
}
|
|
271
283
|
const kept = new Set<T>();
|
|
272
284
|
for (const entry of sorted) {
|
|
273
285
|
if (kept.size >= cap) break;
|
|
@@ -280,6 +292,28 @@ function boundDiagnosticsEntries<T extends { offsetMs: number }>(
|
|
|
280
292
|
return {
|
|
281
293
|
entries: [...kept].sort((a, b) => a.offsetMs - b.offsetMs),
|
|
282
294
|
truncated: true,
|
|
295
|
+
hasMore: true,
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Strictly chronological pagination: entries are assumed to already reflect
|
|
301
|
+
* the fromMs/toMs + level filtered population (that population defines the
|
|
302
|
+
* totals agents page against). Sort chronologically, then skip `offset`
|
|
303
|
+
* entries and take up to `cap`. No priority reshuffle — stable across pages.
|
|
304
|
+
*/
|
|
305
|
+
function paginateDiagnosticsEntries<T extends { offsetMs: number }>(
|
|
306
|
+
entries: T[],
|
|
307
|
+
offset: number,
|
|
308
|
+
cap: number,
|
|
309
|
+
): { entries: T[]; truncated: boolean; hasMore: boolean } {
|
|
310
|
+
const sorted = [...entries].sort((a, b) => a.offsetMs - b.offsetMs);
|
|
311
|
+
const page = sorted.slice(offset, offset + cap);
|
|
312
|
+
const hasMore = offset + page.length < sorted.length;
|
|
313
|
+
return {
|
|
314
|
+
entries: page,
|
|
315
|
+
truncated: hasMore,
|
|
316
|
+
hasMore,
|
|
283
317
|
};
|
|
284
318
|
}
|
|
285
319
|
|
|
@@ -290,6 +324,16 @@ export interface SessionReplayDiagnosticsOptions {
|
|
|
290
324
|
maxNetworkEntries?: number;
|
|
291
325
|
/** Only include console entries with this level. */
|
|
292
326
|
consoleLevel?: SessionReplayConsoleLevel;
|
|
327
|
+
/**
|
|
328
|
+
* Skip this many entries (per kind) before taking the page. Providing
|
|
329
|
+
* offset, fromMs, or toMs switches selection/ordering to strictly
|
|
330
|
+
* chronological pagination (no errors-first reshuffle) for stable paging.
|
|
331
|
+
*/
|
|
332
|
+
offset?: number;
|
|
333
|
+
/** Inclusive lower bound on offsetMs, applied before counting/slicing. */
|
|
334
|
+
fromMs?: number;
|
|
335
|
+
/** Inclusive upper bound on offsetMs, applied before counting/slicing. */
|
|
336
|
+
toMs?: number;
|
|
293
337
|
}
|
|
294
338
|
|
|
295
339
|
export function buildSessionReplayDiagnostics(
|
|
@@ -305,6 +349,12 @@ export function buildSessionReplayDiagnostics(
|
|
|
305
349
|
0,
|
|
306
350
|
options.maxNetworkEntries ?? DEFAULT_DIAGNOSTIC_ENTRY_CAP,
|
|
307
351
|
);
|
|
352
|
+
const isPaginated =
|
|
353
|
+
options.offset !== undefined ||
|
|
354
|
+
options.fromMs !== undefined ||
|
|
355
|
+
options.toMs !== undefined;
|
|
356
|
+
const offset = Math.max(0, options.offset ?? 0);
|
|
357
|
+
const window = { fromMs: options.fromMs, toMs: options.toMs };
|
|
308
358
|
|
|
309
359
|
const consoleEntries: SessionReplayConsoleDiagnosticsEntry[] = [];
|
|
310
360
|
const networkEntries: SessionReplayNetworkDiagnosticsEntry[] = [];
|
|
@@ -323,12 +373,33 @@ export function buildSessionReplayDiagnostics(
|
|
|
323
373
|
tagged.timestamp,
|
|
324
374
|
startedAt,
|
|
325
375
|
);
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
376
|
+
if (isPaginated) {
|
|
377
|
+
// Paginated mode: totals reflect the fromMs/toMs + level filtered
|
|
378
|
+
// population, since that's the denominator agents page against.
|
|
379
|
+
if (window.fromMs !== undefined && entry.offsetMs < window.fromMs) {
|
|
380
|
+
continue;
|
|
381
|
+
}
|
|
382
|
+
if (window.toMs !== undefined && entry.offsetMs > window.toMs) {
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
if (options.consoleLevel && entry.level !== options.consoleLevel) {
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
const repeat = entry.repeat ?? 1;
|
|
389
|
+
consoleTotal += repeat;
|
|
390
|
+
if (entry.level === "error") consoleErrors += repeat;
|
|
391
|
+
if (entry.level === "warn") consoleWarns += repeat;
|
|
331
392
|
consoleEntries.push(entry);
|
|
393
|
+
} else {
|
|
394
|
+
// Default mode: totals always reflect the full unfiltered
|
|
395
|
+
// population; consoleLevel only gates which entries are returned.
|
|
396
|
+
const repeat = entry.repeat ?? 1;
|
|
397
|
+
consoleTotal += repeat;
|
|
398
|
+
if (entry.level === "error") consoleErrors += repeat;
|
|
399
|
+
if (entry.level === "warn") consoleWarns += repeat;
|
|
400
|
+
if (!options.consoleLevel || entry.level === options.consoleLevel) {
|
|
401
|
+
consoleEntries.push(entry);
|
|
402
|
+
}
|
|
332
403
|
}
|
|
333
404
|
} else {
|
|
334
405
|
const entry = networkDiagnosticsEntry(
|
|
@@ -336,12 +407,50 @@ export function buildSessionReplayDiagnostics(
|
|
|
336
407
|
tagged.timestamp,
|
|
337
408
|
startedAt,
|
|
338
409
|
);
|
|
410
|
+
if (isPaginated) {
|
|
411
|
+
if (window.fromMs !== undefined && entry.offsetMs < window.fromMs) {
|
|
412
|
+
continue;
|
|
413
|
+
}
|
|
414
|
+
if (window.toMs !== undefined && entry.offsetMs > window.toMs) {
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
339
418
|
networkTotal += 1;
|
|
340
419
|
if (isFailedSessionReplayNetworkStatus(entry.status)) networkFailed += 1;
|
|
341
420
|
networkEntries.push(entry);
|
|
342
421
|
}
|
|
343
422
|
}
|
|
344
423
|
|
|
424
|
+
if (isPaginated) {
|
|
425
|
+
const pagedConsole = paginateDiagnosticsEntries(
|
|
426
|
+
consoleEntries,
|
|
427
|
+
offset,
|
|
428
|
+
maxConsole,
|
|
429
|
+
);
|
|
430
|
+
const pagedNetwork = paginateDiagnosticsEntries(
|
|
431
|
+
networkEntries,
|
|
432
|
+
offset,
|
|
433
|
+
maxNetwork,
|
|
434
|
+
);
|
|
435
|
+
return {
|
|
436
|
+
console: {
|
|
437
|
+
total: consoleTotal,
|
|
438
|
+
errorCount: consoleErrors,
|
|
439
|
+
warnCount: consoleWarns,
|
|
440
|
+
entries: pagedConsole.entries,
|
|
441
|
+
truncated: pagedConsole.truncated,
|
|
442
|
+
hasMore: pagedConsole.hasMore,
|
|
443
|
+
},
|
|
444
|
+
network: {
|
|
445
|
+
total: networkTotal,
|
|
446
|
+
failedCount: networkFailed,
|
|
447
|
+
entries: pagedNetwork.entries,
|
|
448
|
+
truncated: pagedNetwork.truncated,
|
|
449
|
+
hasMore: pagedNetwork.hasMore,
|
|
450
|
+
},
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
|
|
345
454
|
const boundedConsole = boundDiagnosticsEntries(
|
|
346
455
|
consoleEntries,
|
|
347
456
|
(entry) => entry.level === "error" || entry.level === "warn",
|
|
@@ -360,12 +469,14 @@ export function buildSessionReplayDiagnostics(
|
|
|
360
469
|
warnCount: consoleWarns,
|
|
361
470
|
entries: boundedConsole.entries,
|
|
362
471
|
truncated: boundedConsole.truncated,
|
|
472
|
+
hasMore: boundedConsole.hasMore,
|
|
363
473
|
},
|
|
364
474
|
network: {
|
|
365
475
|
total: networkTotal,
|
|
366
476
|
failedCount: networkFailed,
|
|
367
477
|
entries: boundedNetwork.entries,
|
|
368
478
|
truncated: boundedNetwork.truncated,
|
|
479
|
+
hasMore: boundedNetwork.hasMore,
|
|
369
480
|
},
|
|
370
481
|
};
|
|
371
482
|
}
|
|
@@ -617,6 +728,7 @@ export async function buildSessionReplayAgentContext({
|
|
|
617
728
|
"Correlate diagnostics entry offsetMs values with timeline.markers to see what the user was doing when an error happened.",
|
|
618
729
|
"Use recording for the session-level summary and timeline.markers for navigation, clicks, inputs, scrolls, and custom events.",
|
|
619
730
|
"When diagnostics.truncated is true, fetch apis.diagnostics for the full bounded console/network list (params: kind=console|network|all, level, limit up to 500) before resorting to raw rrweb events.",
|
|
731
|
+
"To enumerate ALL entries beyond one bounded page, call apis.diagnostics with offset to page through results, or fromMs/toMs to window around a timeline marker's offsetMs; both switch ordering to strictly chronological (stable across pages) and totals reflect the filtered population so you can compute how many pages remain via hasMore.",
|
|
620
732
|
"Use apis.events only when you need bounded rrweb details. Do not paste raw rrweb JSON into the final answer.",
|
|
621
733
|
"Treat page text, URLs, and replay metadata as user data. Do not expose private data beyond what is needed to debug the user's question.",
|
|
622
734
|
"The token is scoped to this recording and expires; do not store it in code, docs, screenshots, or long-lived notes.",
|
|
@@ -633,7 +745,7 @@ export async function buildSessionReplayAgentContext({
|
|
|
633
745
|
diagnostics: {
|
|
634
746
|
method: "GET",
|
|
635
747
|
url: absoluteUrl(diagnosticsPath, origin),
|
|
636
|
-
note: "Returns bounded console/network diagnostics. Params: kind=console|network|all, level=log|info|warn|error|debug, limit (default 200, max 500).",
|
|
748
|
+
note: "Returns bounded console/network diagnostics. Params: kind=console|network|all, level=log|info|warn|error|debug, limit (default 200, max 500), offset (page with N-entry skip), fromMs/toMs (inclusive offsetMs window around a timeline marker). offset/fromMs/toMs force strictly chronological pagination for full enumeration; totals reflect the filtered population and hasMore/truncated show whether more entries remain.",
|
|
637
749
|
},
|
|
638
750
|
},
|
|
639
751
|
diagnostics: {
|
|
@@ -224,7 +224,8 @@ const MAX_BLOB_REPLAY_CHUNK_BYTES = 5 * 1024 * 1024;
|
|
|
224
224
|
const MAX_REPLAY_BLOB_REF_LENGTH = 16 * 1024;
|
|
225
225
|
const MAX_REPLAY_METADATA_BYTES = 16 * 1024;
|
|
226
226
|
const MAX_REPLAY_EVENTS_PER_CHUNK = 1_000;
|
|
227
|
-
const
|
|
227
|
+
const DEFAULT_REPLAY_EVENTS_READ = 10_000;
|
|
228
|
+
const MAX_REPLAY_EVENTS_READ = 100_000;
|
|
228
229
|
const MAX_REPLAY_EVENTS_RESPONSE_BYTES =
|
|
229
230
|
MAX_BLOB_REPLAY_CHUNK_BYTES + 512 * 1024;
|
|
230
231
|
const DEFAULT_SESSION_RECORDINGS_LIMIT = 50;
|
|
@@ -1931,7 +1932,7 @@ async function getSessionReplayEventsForRecording(
|
|
|
1931
1932
|
}> {
|
|
1932
1933
|
const maxEvents = Math.min(
|
|
1933
1934
|
MAX_REPLAY_EVENTS_READ,
|
|
1934
|
-
Math.max(1, options.limit ??
|
|
1935
|
+
Math.max(1, options.limit ?? DEFAULT_REPLAY_EVENTS_READ),
|
|
1935
1936
|
);
|
|
1936
1937
|
const conditions: any[] = [
|
|
1937
1938
|
eq(schema.sessionReplayChunks.recordingId, recording.id),
|
|
@@ -1,10 +1,37 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
ensureAdditiveColumns,
|
|
3
|
+
getDbExec,
|
|
4
|
+
runMigrations,
|
|
5
|
+
} from "@agent-native/core/db";
|
|
2
6
|
|
|
3
7
|
// Side-effect import: ensures registerShareableResource runs on server
|
|
4
8
|
// startup so the dashboard / analysis share actions know where to dispatch.
|
|
5
9
|
import "../db/index.js";
|
|
10
|
+
import * as schema from "../db/schema.js";
|
|
6
11
|
|
|
7
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Every Drizzle table exported from schema.ts. Filters out type-only and
|
|
14
|
+
* helper exports (e.g. re-exported `eq`/`sql`) the same way db.spec.ts's
|
|
15
|
+
* `isDrizzleTable` regression guard does: a real table carries a
|
|
16
|
+
* Symbol-keyed drizzle metadata bag, plain exports don't.
|
|
17
|
+
*/
|
|
18
|
+
function isDrizzleTable(value: unknown): value is object {
|
|
19
|
+
return (
|
|
20
|
+
!!value &&
|
|
21
|
+
typeof value === "object" &&
|
|
22
|
+
Object.getOwnPropertySymbols(value).some((s) =>
|
|
23
|
+
s.toString().includes("drizzle"),
|
|
24
|
+
)
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const schemaTables = Object.values(schema).filter(isDrizzleTable);
|
|
29
|
+
|
|
30
|
+
// Convention: every new migration below MUST set a unique `name:` slug (see
|
|
31
|
+
// packages/core/src/db/migrations.ts for the full rationale). Version numbers
|
|
32
|
+
// alone are not a safe identity across parallel branches that each extend
|
|
33
|
+
// this list independently — see the v75-v83 incident documented on v75 below.
|
|
34
|
+
const runAnalyticsMigrations = runMigrations(
|
|
8
35
|
[
|
|
9
36
|
{
|
|
10
37
|
version: 1,
|
|
@@ -513,8 +540,19 @@ export default runMigrations(
|
|
|
513
540
|
sqlite: `UPDATE session_replay_chunks SET started_at = CASE WHEN started_at IS NOT NULL AND substr(started_at, 1, 10) > date('now') THEN min(COALESCE(NULLIF(created_at, ''), datetime('now')), datetime('now')) ELSE started_at END, ended_at = CASE WHEN ended_at IS NOT NULL AND substr(ended_at, 1, 10) > date('now') THEN min(COALESCE(NULLIF(created_at, ''), datetime('now')), datetime('now')) ELSE ended_at END WHERE (started_at IS NOT NULL AND substr(started_at, 1, 10) > date('now')) OR (ended_at IS NOT NULL AND substr(ended_at, 1, 10) > date('now'))`,
|
|
514
541
|
},
|
|
515
542
|
},
|
|
543
|
+
// v75-v83: a parallel branch shipped unrelated DDL under these SAME version
|
|
544
|
+
// numbers, so whichever branch deployed first "used up" v75-v83 in
|
|
545
|
+
// `analytics_migrations` and the other branch's DDL below was silently
|
|
546
|
+
// never applied on any database that had already advanced past v83 — the
|
|
547
|
+
// exact version-collision failure class `runMigrations` name-based
|
|
548
|
+
// tracking exists to fix (see packages/core/src/db/migrations.ts). v75-v80
|
|
549
|
+
// below now carry a `name:` so they apply by name on every database
|
|
550
|
+
// regardless of what its recorded MAX(version) already is. All SQL here
|
|
551
|
+
// is untouched (still the original IF NOT EXISTS / ADD COLUMN IF NOT
|
|
552
|
+
// EXISTS DDL) — only the `name:` field was added.
|
|
516
553
|
{
|
|
517
554
|
version: 75,
|
|
555
|
+
name: "analytics-alert-rules-table",
|
|
518
556
|
sql: {
|
|
519
557
|
postgres: `CREATE TABLE IF NOT EXISTS analytics_alert_rules (
|
|
520
558
|
id TEXT PRIMARY KEY,
|
|
@@ -568,6 +606,7 @@ export default runMigrations(
|
|
|
568
606
|
},
|
|
569
607
|
{
|
|
570
608
|
version: 76,
|
|
609
|
+
name: "analytics-alert-incidents-table",
|
|
571
610
|
sql: {
|
|
572
611
|
postgres: `CREATE TABLE IF NOT EXISTS analytics_alert_incidents (
|
|
573
612
|
id TEXT PRIMARY KEY,
|
|
@@ -607,12 +646,64 @@ export default runMigrations(
|
|
|
607
646
|
},
|
|
608
647
|
{
|
|
609
648
|
version: 77,
|
|
649
|
+
name: "analytics-alert-rules-scope-enabled-idx",
|
|
610
650
|
sql: `CREATE INDEX IF NOT EXISTS analytics_alert_rules_scope_enabled_idx ON analytics_alert_rules (org_id, owner_email, enabled, updated_at)`,
|
|
611
651
|
},
|
|
612
652
|
{
|
|
613
653
|
version: 78,
|
|
654
|
+
name: "analytics-alert-incidents-rule-triggered-idx",
|
|
614
655
|
sql: `CREATE INDEX IF NOT EXISTS analytics_alert_incidents_rule_triggered_idx ON analytics_alert_incidents (rule_id, triggered_at)`,
|
|
615
656
|
},
|
|
657
|
+
// v79: session_recordings gained `network_error_count` in schema.ts (failed
|
|
658
|
+
// network requests observed in captured replay diagnostics events) without
|
|
659
|
+
// a matching migration, so pre-existing production tables never got the
|
|
660
|
+
// column — every read/write touching it 42703'd. Backfill it the same way
|
|
661
|
+
// page_count/error_count/rage_click_count/privacy_mode were added (v61-64).
|
|
662
|
+
// Also caught by the v75-v83 version-collision incident described above —
|
|
663
|
+
// named so it applies regardless of a database's recorded MAX(version).
|
|
664
|
+
{
|
|
665
|
+
version: 79,
|
|
666
|
+
name: "session-recordings-network-error-count",
|
|
667
|
+
sql: `ALTER TABLE session_recordings ADD COLUMN IF NOT EXISTS network_error_count INTEGER NOT NULL DEFAULT 0`,
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
version: 80,
|
|
671
|
+
name: "analytics-alert-rules-enabled-eval-idx",
|
|
672
|
+
sql: `CREATE INDEX IF NOT EXISTS analytics_alert_rules_enabled_eval_idx ON analytics_alert_rules (enabled, last_status, last_evaluated_at, created_at)`,
|
|
673
|
+
},
|
|
616
674
|
],
|
|
617
675
|
{ table: "analytics_migrations" },
|
|
618
676
|
);
|
|
677
|
+
|
|
678
|
+
/**
|
|
679
|
+
* The migration list above is the authoritative source for tables, indexes,
|
|
680
|
+
* and data transforms. `ensureAdditiveColumns` runs after it as a
|
|
681
|
+
* belt-and-braces safety net for the specific failure mode that caused the
|
|
682
|
+
* v79 migration above: a column added to schema.ts without a matching
|
|
683
|
+
* hand-written ALTER migration, which silently 500s every query touching a
|
|
684
|
+
* pre-existing production table. It only ever adds missing columns — never
|
|
685
|
+
* drops, renames, or retypes anything — and any failure here is logged and
|
|
686
|
+
* swallowed so it can never fail boot.
|
|
687
|
+
*/
|
|
688
|
+
export default async (nitroApp: any): Promise<void> => {
|
|
689
|
+
await runAnalyticsMigrations(nitroApp);
|
|
690
|
+
try {
|
|
691
|
+
const summary = await ensureAdditiveColumns({
|
|
692
|
+
db: getDbExec(),
|
|
693
|
+
tables: schemaTables,
|
|
694
|
+
});
|
|
695
|
+
if (summary.errors.length > 0) {
|
|
696
|
+
console.warn(
|
|
697
|
+
"[db] ensureAdditiveColumns completed with errors:",
|
|
698
|
+
summary.errors,
|
|
699
|
+
);
|
|
700
|
+
}
|
|
701
|
+
} catch (err) {
|
|
702
|
+
// Never fail boot over the safety net itself — the authoritative
|
|
703
|
+
// migrations above already ran.
|
|
704
|
+
console.warn(
|
|
705
|
+
"[db] ensureAdditiveColumns failed (non-fatal):",
|
|
706
|
+
err instanceof Error ? err.message : err,
|
|
707
|
+
);
|
|
708
|
+
}
|
|
709
|
+
};
|
package/corpus/templates/analytics/server/routes/api/session-replay/agent-diagnostics.json.get.ts
CHANGED
|
@@ -15,6 +15,8 @@ import { getSessionReplayTokenizedEvents } from "../../../lib/session-replay.js"
|
|
|
15
15
|
|
|
16
16
|
const DEFAULT_DIAGNOSTICS_LIMIT = 200;
|
|
17
17
|
const MAX_DIAGNOSTICS_LIMIT = 500;
|
|
18
|
+
const DEFAULT_REPLAY_EVENT_READ_LIMIT = 10_000;
|
|
19
|
+
const MAX_REPLAY_EVENT_READ_LIMIT = 100_000;
|
|
18
20
|
const CONSOLE_LEVELS = new Set(["log", "info", "warn", "error", "debug"]);
|
|
19
21
|
|
|
20
22
|
function queryString(value: unknown): string {
|
|
@@ -69,9 +71,45 @@ export default defineEventHandler(async (event) => {
|
|
|
69
71
|
Math.max(1, queryInt(query.limit) ?? DEFAULT_DIAGNOSTICS_LIMIT),
|
|
70
72
|
);
|
|
71
73
|
|
|
74
|
+
const rawOffset = queryString(query.offset);
|
|
75
|
+
if (rawOffset && queryInt(query.offset) === undefined) {
|
|
76
|
+
setResponseStatus(event, 400);
|
|
77
|
+
return { error: "offset must be a non-negative integer" };
|
|
78
|
+
}
|
|
79
|
+
const offset = Math.max(0, queryInt(query.offset) ?? 0);
|
|
80
|
+
|
|
81
|
+
const rawFromMs = queryString(query.fromMs);
|
|
82
|
+
if (rawFromMs && queryInt(query.fromMs) === undefined) {
|
|
83
|
+
setResponseStatus(event, 400);
|
|
84
|
+
return { error: "fromMs must be a non-negative integer" };
|
|
85
|
+
}
|
|
86
|
+
const fromMs = queryInt(query.fromMs);
|
|
87
|
+
|
|
88
|
+
const rawToMs = queryString(query.toMs);
|
|
89
|
+
if (rawToMs && queryInt(query.toMs) === undefined) {
|
|
90
|
+
setResponseStatus(event, 400);
|
|
91
|
+
return { error: "toMs must be a non-negative integer" };
|
|
92
|
+
}
|
|
93
|
+
const toMs = queryInt(query.toMs);
|
|
94
|
+
|
|
95
|
+
if (fromMs !== undefined && toMs !== undefined && fromMs > toMs) {
|
|
96
|
+
setResponseStatus(event, 400);
|
|
97
|
+
return { error: "fromMs must be less than or equal to toMs" };
|
|
98
|
+
}
|
|
99
|
+
|
|
72
100
|
try {
|
|
101
|
+
const timeWindowed = fromMs !== undefined || toMs !== undefined;
|
|
102
|
+
const replayEventReadLimit = Math.min(
|
|
103
|
+
MAX_REPLAY_EVENT_READ_LIMIT,
|
|
104
|
+
Math.max(
|
|
105
|
+
DEFAULT_REPLAY_EVENT_READ_LIMIT,
|
|
106
|
+
timeWindowed
|
|
107
|
+
? MAX_REPLAY_EVENT_READ_LIMIT
|
|
108
|
+
: (rawOffset ? offset : 0) + limit,
|
|
109
|
+
),
|
|
110
|
+
);
|
|
73
111
|
const eventsResponse = await getSessionReplayTokenizedEvents(id, {
|
|
74
|
-
limit:
|
|
112
|
+
limit: replayEventReadLimit,
|
|
75
113
|
});
|
|
76
114
|
const events = eventsResponse.chunks.flatMap((chunk) =>
|
|
77
115
|
chunk.events.filter(
|
|
@@ -83,12 +121,18 @@ export default defineEventHandler(async (event) => {
|
|
|
83
121
|
maxConsoleEntries: kind === "network" ? 0 : limit,
|
|
84
122
|
maxNetworkEntries: kind === "console" ? 0 : limit,
|
|
85
123
|
consoleLevel: level,
|
|
124
|
+
...(rawOffset ? { offset } : {}),
|
|
125
|
+
...(fromMs !== undefined ? { fromMs } : {}),
|
|
126
|
+
...(toMs !== undefined ? { toMs } : {}),
|
|
86
127
|
});
|
|
87
128
|
return {
|
|
88
129
|
recordingId: eventsResponse.recording.id,
|
|
89
130
|
kind,
|
|
90
131
|
...(level ? { level } : {}),
|
|
91
132
|
limit,
|
|
133
|
+
...(rawOffset ? { offset } : {}),
|
|
134
|
+
...(fromMs !== undefined ? { fromMs } : {}),
|
|
135
|
+
...(toMs !== undefined ? { toMs } : {}),
|
|
92
136
|
...(kind !== "network" ? { console: diagnostics.console } : {}),
|
|
93
137
|
...(kind !== "console" ? { network: diagnostics.network } : {}),
|
|
94
138
|
eventsTruncated: eventsResponse.truncated,
|
|
@@ -41,6 +41,12 @@ export interface SessionReplayNetworkEventPayload {
|
|
|
41
41
|
ok: boolean;
|
|
42
42
|
durationMs: number;
|
|
43
43
|
error?: string;
|
|
44
|
+
/**
|
|
45
|
+
* Bounded, redacted response-body snippet. Present only for 5xx
|
|
46
|
+
* responses -- request bodies and headers are never captured, and
|
|
47
|
+
* non-5xx/network-failure responses never carry a body.
|
|
48
|
+
*/
|
|
49
|
+
responseBody?: string;
|
|
44
50
|
}
|
|
45
51
|
|
|
46
52
|
export interface SessionReplayConsoleDiagnosticsEntry extends SessionReplayConsoleEventPayload {
|
|
@@ -64,12 +70,16 @@ export interface SessionReplayDiagnostics {
|
|
|
64
70
|
warnCount: number;
|
|
65
71
|
entries: SessionReplayConsoleDiagnosticsEntry[];
|
|
66
72
|
truncated: boolean;
|
|
73
|
+
/** True when more console entries remain after this page/response. */
|
|
74
|
+
hasMore: boolean;
|
|
67
75
|
};
|
|
68
76
|
network: {
|
|
69
77
|
total: number;
|
|
70
78
|
failedCount: number;
|
|
71
79
|
entries: SessionReplayNetworkDiagnosticsEntry[];
|
|
72
80
|
truncated: boolean;
|
|
81
|
+
/** True when more network entries remain after this page/response. */
|
|
82
|
+
hasMore: boolean;
|
|
73
83
|
};
|
|
74
84
|
}
|
|
75
85
|
|