@agent-native/core 0.69.0 → 0.70.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +109 -0
- package/corpus/core/docs/design/durable-agent-runs.md +217 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/action.ts +89 -0
- package/corpus/core/src/agent/model-config.ts +0 -2
- package/corpus/core/src/agent/run-loop-with-resume.ts +48 -0
- package/corpus/core/src/changelog/parse.ts +245 -0
- package/corpus/core/src/cli/changelog.ts +199 -0
- package/corpus/core/src/cli/index.ts +19 -0
- package/corpus/core/src/cli/recap.ts +24 -1
- package/corpus/core/src/cli/skills.ts +74 -47
- package/corpus/core/src/client/AgentPanel.tsx +5 -3
- package/corpus/core/src/client/AssistantChat.tsx +8 -0
- package/corpus/core/src/client/CommandMenu.tsx +183 -75
- package/corpus/core/src/client/agent-chat-adapter.ts +44 -7
- package/corpus/core/src/client/analytics.ts +181 -0
- package/corpus/core/src/client/changelog/Changelog.tsx +321 -0
- package/corpus/core/src/client/client-surface.ts +41 -0
- package/corpus/core/src/client/composer/TiptapComposer.tsx +123 -12
- package/corpus/core/src/client/feedback-context.ts +4 -0
- package/corpus/core/src/client/index.ts +12 -0
- package/corpus/core/src/client/mcp-apps/McpAppRenderer.tsx +54 -0
- package/corpus/core/src/client/settings/useBuilderStatus.ts +82 -20
- package/corpus/core/src/client/sse-event-processor.ts +7 -1
- package/corpus/core/src/mcp/build-server.ts +57 -1
- package/corpus/core/src/mcp/embed-app.ts +197 -7
- package/corpus/core/src/mcp/oauth-route.ts +109 -13
- package/corpus/core/src/server/attribution.ts +211 -0
- package/corpus/core/src/server/auth.ts +6 -0
- package/corpus/core/src/server/better-auth-instance.ts +49 -5
- package/corpus/core/src/server/builder-browser.ts +27 -1
- package/corpus/core/src/server/core-routes-plugin.ts +136 -0
- package/corpus/core/src/server/google-oauth.ts +19 -6
- package/corpus/core/src/server/onboarding-html.ts +35 -0
- package/corpus/core/src/shared/mcp-embed-headers.ts +1 -1
- package/corpus/core/src/styles/agent-conversation.css +21 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +72 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +22 -0
- package/corpus/templates/analytics/AGENTS.md +8 -1
- package/corpus/templates/analytics/CHANGELOG.md +10 -0
- package/corpus/templates/analytics/actions/install-dashboard-template.ts +99 -4
- package/corpus/templates/analytics/actions/open-traffic-dashboard.ts +1 -1
- package/corpus/templates/analytics/actions/update-dashboard.ts +39 -8
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +30 -3
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +180 -144
- package/corpus/templates/analytics/app/components/layout/Header.tsx +2 -3
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +221 -215
- package/corpus/templates/analytics/app/hooks/use-navigation-state.ts +6 -6
- package/corpus/templates/analytics/app/lib/demo-dashboard-path.ts +1 -1
- package/corpus/templates/analytics/app/lib/last-opened.ts +2 -1
- package/corpus/templates/analytics/app/pages/Settings.tsx +4 -0
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +3 -3
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +2 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +32 -2
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +101 -99
- package/corpus/templates/analytics/app/pages/overview/OverviewPage.tsx +1 -1
- package/corpus/templates/analytics/app/routes/adhoc.$id.tsx +18 -5
- package/corpus/templates/analytics/app/routes/catalog.tsx +1 -1
- package/corpus/templates/analytics/app/routes/dashboards.$id.tsx +9 -0
- package/corpus/templates/analytics/app/routes/traffic.tsx +1 -1
- package/corpus/templates/analytics/changelog/2026-06-23-long-dashboard-and-analysis-names-in-the-sidebar-now-truncat.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-23-open-any-dashboard-chart-full-screen-in-a-modal-from-the-pan.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-23-the-dashboards-and-analyses-sidebar-settings-buttons-now-sta.md +6 -0
- package/corpus/templates/analytics/seeds/dashboards/agent-native-templates-first-party.json +145 -0
- package/corpus/templates/analytics/server/db/index.ts +1 -1
- package/corpus/templates/analytics/server/lib/dashboard-catalog.ts +9 -2
- package/corpus/templates/analytics/server/lib/demo-dashboards.ts +1 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +2 -2
- package/corpus/templates/analytics/server/plugins/core-routes.ts +6 -6
- package/corpus/templates/assets/CHANGELOG.md +10 -0
- package/corpus/templates/assets/actions/generate-image.ts +24 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/assets/app/global.css +17 -1
- package/corpus/templates/assets/app/root.tsx +7 -1
- package/corpus/templates/assets/app/routes/_index.tsx +94 -14
- package/corpus/templates/assets/app/routes/settings.tsx +6 -0
- package/corpus/templates/assets/changelog/2026-06-23-chat-dates-in-the-sidebar-no-longer-wrap-onto-two-lines.md +6 -0
- package/corpus/templates/assets/changelog/2026-06-23-clicking-image-video-or-refine-on-the-start-screen-now-drops.md +6 -0
- package/corpus/templates/assets/changelog/2026-06-23-pick-your-image-generation-model-right-from-the-chat-model-m.md +6 -0
- package/corpus/templates/brain/CHANGELOG.md +10 -0
- package/corpus/templates/brain/app/root.tsx +7 -1
- package/corpus/templates/brain/app/routes/settings.tsx +8 -1
- package/corpus/templates/calendar/CHANGELOG.md +10 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +4 -0
- package/corpus/templates/calendar/app/root.tsx +7 -1
- package/corpus/templates/chat/CHANGELOG.md +10 -0
- package/corpus/templates/chat/app/root.tsx +7 -1
- package/corpus/templates/clips/CHANGELOG.md +10 -0
- package/corpus/templates/clips/app/components/library/library-grid.tsx +1 -20
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +33 -7
- package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +8 -0
- package/corpus/templates/clips/app/components/player/video-player.tsx +150 -20
- package/corpus/templates/clips/app/components/recorder/countdown-overlay.tsx +72 -48
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +7 -11
- package/corpus/templates/clips/app/components/recorder/recorder-engine.ts +31 -0
- package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +71 -0
- package/corpus/templates/clips/app/lib/countdown-audio-cue.ts +35 -17
- package/corpus/templates/clips/app/root.tsx +7 -1
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +15 -1
- package/corpus/templates/clips/app/routes/record.tsx +78 -5
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +86 -5
- package/corpus/templates/clips/changelog/2026-06-23-clips-shared-in-slack-no-longer-show-a-could-not-start-playb.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-made-the-play-button-on-shared-and-embedded-clips-scale-with.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-public-clip-share-links-now-show-whether-they-ll-play-inline.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-removed-select-button-from-library-hover-a-clip-to-select-it.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-screen-camera-recordings-now-keep-the-presenter-s-face-in-th.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-shared-video-links-now-play-for-anyone-without-signing-in.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-skip-or-cancel-the-recording-countdown-with-buttons-beside-t.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-the-desktop-camera-bubble-now-looks-sharp-the-instant-it-ope.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-the-desktop-recording-widget-now-grows-downward-only-when-yo.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-23-the-recording-start-sound-is-now-a-softer-more-modern-chime.md +6 -0
- package/corpus/templates/clips/chrome-extension/public/manifest.json +17 -8
- package/corpus/templates/clips/chrome-extension/src/background.ts +769 -180
- package/corpus/templates/clips/chrome-extension/src/content-script.ts +177 -0
- package/corpus/templates/clips/chrome-extension/src/offscreen.ts +466 -329
- package/corpus/templates/clips/chrome-extension/src/overlay.css +377 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.html +12 -0
- package/corpus/templates/clips/chrome-extension/src/overlay.ts +330 -0
- package/corpus/templates/clips/chrome-extension/src/permission.html +227 -0
- package/corpus/templates/clips/chrome-extension/src/permission.ts +105 -0
- package/corpus/templates/clips/chrome-extension/src/popup.html +3 -0
- package/corpus/templates/clips/chrome-extension/src/popup.ts +50 -2
- package/corpus/templates/clips/chrome-extension/src/styles.css +50 -0
- package/corpus/templates/clips/chrome-extension/vite.config.ts +3 -0
- package/corpus/templates/clips/desktop/src/lib/audio-cue.ts +41 -24
- package/corpus/templates/clips/desktop/src/lib/bubble-webrtc.ts +119 -2
- package/corpus/templates/clips/desktop/src/lib/recorder.ts +20 -0
- package/corpus/templates/clips/desktop/src/main.tsx +3 -0
- package/corpus/templates/clips/desktop/src/overlays/countdown.tsx +21 -2
- package/corpus/templates/clips/desktop/src/overlays/region-record-border.tsx +76 -0
- package/corpus/templates/clips/desktop/src/styles.css +119 -2
- package/corpus/templates/clips/desktop/src-tauri/capabilities/default.json +2 -1
- package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +140 -1
- package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +2 -0
- package/corpus/templates/clips/desktop/src-tauri/src/util.rs +4 -1
- package/corpus/templates/clips/server/routes/api/video/[recordingId].get.ts +85 -6
- package/corpus/templates/clips/shared/share-attribution.ts +79 -0
- package/corpus/templates/content/AGENTS.md +20 -3
- package/corpus/templates/content/CHANGELOG.md +10 -0
- package/corpus/templates/content/actions/_database-utils.ts +15 -0
- package/corpus/templates/content/actions/_property-utils.ts +371 -4
- package/corpus/templates/content/actions/configure-document-property.ts +35 -1
- package/corpus/templates/content/actions/create-content-database.ts +5 -1
- package/corpus/templates/content/actions/delete-document-property.ts +52 -2
- package/corpus/templates/content/actions/duplicate-document-property.ts +34 -17
- package/corpus/templates/content/actions/reorder-document-property.ts +79 -0
- package/corpus/templates/content/actions/set-document-property.ts +39 -0
- package/corpus/templates/content/app/components/editor/DocumentBlockFields.tsx +806 -0
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +226 -68
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +59 -30
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +25 -1
- package/corpus/templates/content/app/components/editor/blockFieldSaveController.ts +180 -0
- package/corpus/templates/content/app/components/editor/blockFieldSaveRegistry.ts +179 -0
- package/corpus/templates/content/app/components/editor/previewDocumentSaveController.ts +244 -0
- package/corpus/templates/content/app/components/editor/previewDocumentSaveRegistry.ts +132 -0
- package/corpus/templates/content/app/global.css +9 -0
- package/corpus/templates/content/app/hooks/use-document-properties.ts +21 -0
- package/corpus/templates/content/app/root.tsx +7 -1
- package/corpus/templates/content/server/db/schema.ts +30 -0
- package/corpus/templates/content/server/plugins/db.ts +87 -0
- package/corpus/templates/content/shared/api.ts +7 -0
- package/corpus/templates/content/shared/properties.ts +109 -0
- package/corpus/templates/design/CHANGELOG.md +10 -0
- package/corpus/templates/design/actions/generate-design.ts +4 -0
- package/corpus/templates/design/app/root.tsx +7 -1
- package/corpus/templates/design/app/routes/settings.tsx +10 -2
- package/corpus/templates/dispatch/CHANGELOG.md +10 -0
- package/corpus/templates/dispatch/app/root.tsx +7 -1
- package/corpus/templates/forms/.agents/skills/form-responses/SKILL.md +10 -0
- package/corpus/templates/forms/CHANGELOG.md +10 -0
- package/corpus/templates/forms/actions/export-responses.ts +6 -0
- package/corpus/templates/forms/actions/list-responses.ts +2 -0
- package/corpus/templates/forms/actions/response-insights.ts +2 -0
- package/corpus/templates/forms/app/pages/ResponsesPage.tsx +138 -1
- package/corpus/templates/forms/app/root.tsx +7 -1
- package/corpus/templates/forms/changelog/2026-06-23-response-tables-now-show-the-page-each-submission-came-from-.md +6 -0
- package/corpus/templates/forms/changelog/2026-06-23-response-tables-now-show-whether-feedback-came-from-the-web-.md +6 -0
- package/corpus/templates/forms/server/db/schema.ts +7 -0
- package/corpus/templates/forms/server/handlers/submissions.ts +19 -2
- package/corpus/templates/forms/server/lib/integrations.ts +76 -2
- package/corpus/templates/forms/server/plugins/db.ts +20 -0
- package/corpus/templates/forms/shared/types.ts +12 -0
- package/corpus/templates/macros/CHANGELOG.md +10 -0
- package/corpus/templates/macros/app/root.tsx +7 -1
- package/corpus/templates/mail/CHANGELOG.md +10 -0
- package/corpus/templates/mail/app/components/layout/CommandPalette.tsx +3 -0
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +27 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/SKILL.md +31 -17
- package/corpus/templates/plan/.agents/skills/visual-plan/references/wireframe.md +7 -4
- package/corpus/templates/plan/.agents/skills/visual-recap/SKILL.md +34 -24
- package/corpus/templates/plan/.agents/skills/visual-recap/references/wireframe.md +7 -4
- package/corpus/templates/plan/AGENTS.md +4 -0
- package/corpus/templates/plan/CHANGELOG.md +10 -0
- package/corpus/templates/plan/actions/view-screen.ts +5 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +98 -1
- package/corpus/templates/plan/app/components/plan/wireframe/html-artboard.css +3 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +107 -7
- package/corpus/templates/plan/app/root.tsx +7 -1
- package/corpus/templates/plan/changelog/2026-06-23-large-diagrams-in-a-plan-now-scroll-within-their-block-inste.md +6 -0
- package/corpus/templates/plan/shared/share-attribution.ts +72 -0
- package/corpus/templates/slides/CHANGELOG.md +10 -0
- package/corpus/templates/slides/app/root.tsx +7 -1
- package/corpus/templates/videos/CHANGELOG.md +4 -151
- package/corpus/templates/videos/app/root.tsx +7 -1
- package/dist/action.js +87 -0
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/builder-engine.d.ts +1 -1
- package/dist/agent/engine/builder-engine.d.ts.map +1 -1
- package/dist/agent/model-config.d.ts +2 -2
- package/dist/agent/model-config.d.ts.map +1 -1
- package/dist/agent/model-config.js +0 -2
- package/dist/agent/model-config.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts +13 -0
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +44 -0
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/changelog/parse.d.ts +70 -0
- package/dist/changelog/parse.d.ts.map +1 -0
- package/dist/changelog/parse.js +200 -0
- package/dist/changelog/parse.js.map +1 -0
- package/dist/cli/changelog.d.ts +4 -0
- package/dist/cli/changelog.d.ts.map +1 -0
- package/dist/cli/changelog.js +166 -0
- package/dist/cli/changelog.js.map +1 -0
- package/dist/cli/index.js +18 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/recap.d.ts.map +1 -1
- package/dist/cli/recap.js +22 -1
- package/dist/cli/recap.js.map +1 -1
- package/dist/cli/skills.d.ts +3 -3
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +74 -47
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +5 -3
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +6 -1
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js +2 -2
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/CommandMenu.d.ts +17 -1
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +49 -13
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +43 -6
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/analytics.d.ts +18 -0
- package/dist/client/analytics.d.ts.map +1 -1
- package/dist/client/analytics.js +177 -0
- package/dist/client/analytics.js.map +1 -1
- package/dist/client/changelog/Changelog.d.ts +47 -0
- package/dist/client/changelog/Changelog.d.ts.map +1 -0
- package/dist/client/changelog/Changelog.js +138 -0
- package/dist/client/changelog/Changelog.js.map +1 -0
- package/dist/client/client-surface.d.ts +17 -0
- package/dist/client/client-surface.d.ts.map +1 -0
- package/dist/client/client-surface.js +24 -0
- package/dist/client/client-surface.js.map +1 -0
- package/dist/client/composer/TiptapComposer.d.ts +26 -1
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +27 -5
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/client/feedback-context.d.ts +3 -0
- package/dist/client/feedback-context.d.ts.map +1 -1
- package/dist/client/feedback-context.js +2 -0
- package/dist/client/feedback-context.js.map +1 -1
- package/dist/client/index.d.ts +3 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +3 -1
- package/dist/client/index.js.map +1 -1
- package/dist/client/mcp-apps/McpAppRenderer.d.ts +1 -0
- package/dist/client/mcp-apps/McpAppRenderer.d.ts.map +1 -1
- package/dist/client/mcp-apps/McpAppRenderer.js +42 -1
- package/dist/client/mcp-apps/McpAppRenderer.js.map +1 -1
- package/dist/client/settings/useBuilderStatus.d.ts +2 -0
- package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
- package/dist/client/settings/useBuilderStatus.js +58 -10
- package/dist/client/settings/useBuilderStatus.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +7 -1
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/mcp/build-server.d.ts +21 -0
- package/dist/mcp/build-server.d.ts.map +1 -1
- package/dist/mcp/build-server.js +43 -1
- package/dist/mcp/build-server.js.map +1 -1
- package/dist/mcp/embed-app.d.ts.map +1 -1
- package/dist/mcp/embed-app.js +197 -7
- package/dist/mcp/embed-app.js.map +1 -1
- package/dist/mcp/oauth-route.d.ts.map +1 -1
- package/dist/mcp/oauth-route.js +95 -12
- package/dist/mcp/oauth-route.js.map +1 -1
- package/dist/server/attribution.d.ts +83 -0
- package/dist/server/attribution.d.ts.map +1 -0
- package/dist/server/attribution.js +178 -0
- package/dist/server/attribution.js.map +1 -0
- package/dist/server/auth.d.ts.map +1 -1
- package/dist/server/auth.js +7 -0
- package/dist/server/auth.js.map +1 -1
- package/dist/server/better-auth-instance.d.ts +9 -1
- package/dist/server/better-auth-instance.d.ts.map +1 -1
- package/dist/server/better-auth-instance.js +32 -2
- package/dist/server/better-auth-instance.js.map +1 -1
- package/dist/server/builder-browser.d.ts +4 -0
- package/dist/server/builder-browser.d.ts.map +1 -1
- package/dist/server/builder-browser.js +20 -1
- package/dist/server/builder-browser.js.map +1 -1
- package/dist/server/core-routes-plugin.d.ts +25 -0
- package/dist/server/core-routes-plugin.d.ts.map +1 -1
- package/dist/server/core-routes-plugin.js +101 -0
- package/dist/server/core-routes-plugin.js.map +1 -1
- package/dist/server/google-oauth.d.ts.map +1 -1
- package/dist/server/google-oauth.js +16 -2
- package/dist/server/google-oauth.js.map +1 -1
- package/dist/server/onboarding-html.d.ts.map +1 -1
- package/dist/server/onboarding-html.js +35 -0
- package/dist/server/onboarding-html.js.map +1 -1
- package/dist/shared/mcp-embed-headers.js +1 -1
- package/dist/shared/mcp-embed-headers.js.map +1 -1
- package/dist/styles/agent-conversation.css +21 -0
- package/dist/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
- package/dist/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +72 -0
- package/dist/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- package/docs/design/durable-agent-runs.md +217 -0
- package/package.json +1 -1
- package/src/templates/workspace-core/.agents/skills/changelog/SKILL.md +111 -0
- package/src/templates/workspace-core/.agents/skills/reliable-mutations/SKILL.md +72 -0
- package/src/templates/workspace-core/.agents/skills/tracking/SKILL.md +46 -14
- package/corpus/templates/analytics/app/pages/About.tsx +0 -108
- package/corpus/templates/analytics/app/routes/about.tsx +0 -9
- /package/corpus/templates/analytics/app/routes/{dashboards.tsx → dashboards._index.tsx} +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Viral attribution contract for shared/public Plan links.
|
|
3
|
+
*
|
|
4
|
+
* Public plan/recap URLs self-attribute so the signup funnel can be measured
|
|
5
|
+
* even when `document.referrer` is empty (desktop app, Slack, native clients,
|
|
6
|
+
* etc.). The framework captures first-touch from these params into a cookie and
|
|
7
|
+
* enriches the `signup` event; Plan's job is to (a) tag the share/public URLs it
|
|
8
|
+
* mints and (b) emit funnel events when a logged-out visitor views a public plan
|
|
9
|
+
* and clicks a sign-up CTA.
|
|
10
|
+
*
|
|
11
|
+
* Contract strings are centralized here so the minting side (share popover /
|
|
12
|
+
* copy-link) and the measuring side (public plan view) cannot drift apart. The
|
|
13
|
+
* framework also derives `plan_share` from public plan paths (`/p/`, `/plan/`,
|
|
14
|
+
* `/plans/`, `/recaps/`, `/share-plan/`) as a fallback when the param is lost.
|
|
15
|
+
*
|
|
16
|
+
* Privacy: `via` must be a non-PII stable id (the owner's user id), never an
|
|
17
|
+
* email. Omit `via` rather than leak PII into a public URL or event.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/** Fixed referral source for plan shares. */
|
|
21
|
+
export const PLAN_SHARE_REF = "plan_share";
|
|
22
|
+
|
|
23
|
+
/** Surface tag included on plan share funnel events. */
|
|
24
|
+
export const PLAN_SHARE_SURFACE = "plan";
|
|
25
|
+
|
|
26
|
+
/** Query param names that carry attribution. */
|
|
27
|
+
export const REF_PARAM = "ref";
|
|
28
|
+
export const VIA_PARAM = "via";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Append `ref=plan_share` (and `via=<ownerId>` when a non-PII owner id is known)
|
|
32
|
+
* to an absolute share/public plan URL, preserving any existing query params.
|
|
33
|
+
* Returns the input unchanged when it isn't a parseable absolute URL.
|
|
34
|
+
*/
|
|
35
|
+
export function withPlanShareAttribution(
|
|
36
|
+
url: string | undefined,
|
|
37
|
+
ownerId?: string | null,
|
|
38
|
+
): string | undefined {
|
|
39
|
+
if (!url) return url;
|
|
40
|
+
try {
|
|
41
|
+
const parsed = new URL(url);
|
|
42
|
+
parsed.searchParams.set(REF_PARAM, PLAN_SHARE_REF);
|
|
43
|
+
const owner = (ownerId ?? "").trim();
|
|
44
|
+
if (owner) parsed.searchParams.set(VIA_PARAM, owner);
|
|
45
|
+
return parsed.toString();
|
|
46
|
+
} catch {
|
|
47
|
+
return url;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type ShareAttribution = {
|
|
52
|
+
ref: string | undefined;
|
|
53
|
+
via: string | undefined;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Read `ref`/`via` from a query string (e.g. `window.location.search`). Falls
|
|
58
|
+
* back to `ref=plan_share` so downstream attribution stays meaningful even when
|
|
59
|
+
* the visitor arrived via a link that lost the param. Never throws.
|
|
60
|
+
*/
|
|
61
|
+
export function readPlanShareAttribution(search: string): ShareAttribution {
|
|
62
|
+
let ref: string | undefined;
|
|
63
|
+
let via: string | undefined;
|
|
64
|
+
try {
|
|
65
|
+
const params = new URLSearchParams(search ?? "");
|
|
66
|
+
ref = params.get(REF_PARAM) ?? undefined;
|
|
67
|
+
via = params.get(VIA_PARAM) ?? undefined;
|
|
68
|
+
} catch {
|
|
69
|
+
// Ignore malformed query strings — fall through to the default below.
|
|
70
|
+
}
|
|
71
|
+
return { ref: ref || PLAN_SHARE_REF, via: via || undefined };
|
|
72
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable user-facing changes to Agent-Native Slides are documented here. Open it any
|
|
4
|
+
time from the command menu (Cmd+K → "What's new").
|
|
5
|
+
|
|
6
|
+
## 2026-06-23
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- See what's new right inside Agent-Native Slides — a changelog now lives in the command menu (Cmd+K).
|
|
@@ -28,6 +28,7 @@ import { useQueryClient } from "@tanstack/react-query";
|
|
|
28
28
|
import type { LinksFunction } from "react-router";
|
|
29
29
|
import stylesheet from "./global.css?url";
|
|
30
30
|
import { configureTracking } from "@agent-native/core/client";
|
|
31
|
+
import changelog from "../CHANGELOG.md?raw";
|
|
31
32
|
import { getThemeInitScript } from "@agent-native/core/client";
|
|
32
33
|
import { TAB_ID } from "@/lib/tab-id";
|
|
33
34
|
configureTracking({
|
|
@@ -162,7 +163,12 @@ function AppContent() {
|
|
|
162
163
|
|
|
163
164
|
return (
|
|
164
165
|
<>
|
|
165
|
-
<CommandMenu
|
|
166
|
+
<CommandMenu
|
|
167
|
+
open={cmdkOpen}
|
|
168
|
+
onOpenChange={setCmdkOpen}
|
|
169
|
+
changelog={changelog}
|
|
170
|
+
changelogKey="slides"
|
|
171
|
+
>
|
|
166
172
|
<CommandMenu.Group heading="Presentations">
|
|
167
173
|
<CommandMenu.Item onSelect={() => {}}>Search decks</CommandMenu.Item>
|
|
168
174
|
</CommandMenu.Group>
|
|
@@ -1,157 +1,10 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
All notable user-facing changes to Agent-Native Videos are documented here. Open it any
|
|
4
|
+
time from the command menu (Cmd+K → "What's new").
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
- **Extracted Animation Logic to Reusable Pure Function**
|
|
8
|
-
- Created `app/remotion/animations/useElementAnimations.ts` (202 lines)
|
|
9
|
-
- Exported `calculateElementAnimations()` - pure function (not hook)
|
|
10
|
-
- Removed 130 lines of animation logic from InteractiveCardGrid
|
|
11
|
-
- Centralized all animation calculations in testable function
|
|
12
|
-
- Can be called inside loops (no Rules of Hooks violations)
|
|
13
|
-
- Other compositions can now reuse animation system instantly
|
|
14
|
-
- Reduced InteractiveCardGrid from 400+ to 320 lines
|
|
15
|
-
- Simpler and faster than hook-based approach
|
|
16
|
-
|
|
17
|
-
- **Centralized Configuration Constants**
|
|
18
|
-
- Created `app/config/constants.ts` (204 lines)
|
|
19
|
-
- Eliminated all magic numbers across codebase
|
|
20
|
-
- Organized by domain: ANIMATION_CONFIG, CURSOR_CONFIG, CARD_CONFIG, UI_CONFIG, etc.
|
|
21
|
-
- Type-safe with `as const`
|
|
22
|
-
- Well-documented with inline comments
|
|
23
|
-
|
|
24
|
-
- **Code Quality Improvements**
|
|
25
|
-
- Max function length: 87 lines → 42 lines
|
|
26
|
-
- Animation logic now testable in isolation
|
|
27
|
-
- Proper type guards with centralized validation
|
|
28
|
-
- Cleaner separation of concerns
|
|
29
|
-
|
|
30
|
-
**Impact**: Architecture grade improved from C+ to A-
|
|
6
|
+
## 2026-06-23
|
|
31
7
|
|
|
32
8
|
### Added
|
|
33
9
|
|
|
34
|
-
-
|
|
35
|
-
- Added `backgroundColor` and `borderColor` to animation property options
|
|
36
|
-
- Implemented color interpolation function for smooth color transitions
|
|
37
|
-
- Color picker UI with native browser color input
|
|
38
|
-
- Colors animate from each element's base color to target color (preserves multicolor designs)
|
|
39
|
-
|
|
40
|
-
- **Click Animation Return-to-Hover**: Click animations now properly animate back
|
|
41
|
-
- Implemented "there-and-back" animation (0→1→0 progress mapping)
|
|
42
|
-
- Doubles animation duration to accommodate forward and return transitions
|
|
43
|
-
- Smooth easing applied to both directions
|
|
44
|
-
|
|
45
|
-
- **Timeline Visual Enhancements**
|
|
46
|
-
- Changed cursor keyframe click indicator dot from grey/white to yellow (#facc15)
|
|
47
|
-
- Improved visual distinction for click events in timeline
|
|
48
|
-
|
|
49
|
-
### Changed
|
|
50
|
-
|
|
51
|
-
- **Playback Speed System**: Simplified from adaptive to manual control
|
|
52
|
-
- Removed adaptive playback rate compensation based on FPS measurement
|
|
53
|
-
- Added manual playback speed dropdown (0.25× to 2×)
|
|
54
|
-
- Moved speed selector to VideoPlayer bottom controls (next to Frame counter)
|
|
55
|
-
- Removed playback speed from Timeline component
|
|
56
|
-
|
|
57
|
-
- **Composition Creation Workflow**: Restored AI-powered generation
|
|
58
|
-
- Rewrote `NewCompositionPopover` with full agent chat integration
|
|
59
|
-
- Added file attachment support (images, videos, SVGs via data URLs)
|
|
60
|
-
- Implemented postMessage API for parent window communication
|
|
61
|
-
- Added event listener for `builder.agentChat.chatRunning` completion detection
|
|
62
|
-
- Slug-based URL generation with conflict resolution (`/c/comp-title`, `/c/comp-title-2`)
|
|
63
|
-
- Navigate to `/c/new` on submission for AI generation
|
|
64
|
-
|
|
65
|
-
- **Properties Panel Improvements**
|
|
66
|
-
- Removed composition name input from Properties > Properties section (non-editable)
|
|
67
|
-
- Hidden "x" unit label to avoid confusion with delete button (kept "px", "deg", etc.)
|
|
68
|
-
- Moved "Add Property" section above property list (below Motion Curve)
|
|
69
|
-
- Swapped + button to left side of dropdown
|
|
70
|
-
- Added Enter key support to add properties from dropdown
|
|
71
|
-
- Changed focus ring color to red-400 for consistency
|
|
72
|
-
- Removed hex code display next to color picker (visible in native picker)
|
|
73
|
-
|
|
74
|
-
- **Animation System Architecture**
|
|
75
|
-
- Updated `AnimationKeyframe.value` type to support `number | string` for colors
|
|
76
|
-
- Color animations only apply when `hoverProgress > 0` or `clickProgress > 0`
|
|
77
|
-
- Each element's base color extracted and used as animation starting point
|
|
78
|
-
- Hover and click animations support mixed numeric and color properties
|
|
79
|
-
|
|
80
|
-
### Fixed
|
|
81
|
-
|
|
82
|
-
- Browser cache issues causing stale code errors
|
|
83
|
-
- Fixed `ReferenceError: adaptivePlaybackRate is not defined`
|
|
84
|
-
- Fixed `ReferenceError: onCreateComposition is not defined`
|
|
85
|
-
- Solution: Dev server restart to clear Vite cache
|
|
86
|
-
|
|
87
|
-
- Color animation not preserving element colors
|
|
88
|
-
- Cards were all turning blue when backgroundColor animation added
|
|
89
|
-
- Fixed by interpolating from each card's unique base color instead of fixed start color
|
|
90
|
-
- Only applies color animations during active hover/click (preserves idle state)
|
|
91
|
-
|
|
92
|
-
- Click animations jumping back to hover state
|
|
93
|
-
- Animations were not tweening back, causing abrupt transitions
|
|
94
|
-
- Implemented smooth 0→1→0 progress curve with doubled duration
|
|
95
|
-
|
|
96
|
-
### Technical Details
|
|
97
|
-
|
|
98
|
-
#### Color Interpolation Implementation
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
// New function in elementAnimations.ts
|
|
102
|
-
export function interpolateColor(
|
|
103
|
-
color1: string,
|
|
104
|
-
color2: string,
|
|
105
|
-
progress: number,
|
|
106
|
-
): string;
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
- Parses hex colors to RGB components
|
|
110
|
-
- Linear interpolation per channel
|
|
111
|
-
- Returns hex color string
|
|
112
|
-
|
|
113
|
-
#### Animation Progress Mapping
|
|
114
|
-
|
|
115
|
-
```typescript
|
|
116
|
-
// Click animation: 0→1→0 curve
|
|
117
|
-
const rawProgress = framesSinceClick / clickDuration; // 0→2
|
|
118
|
-
clickProgress = rawProgress <= 1 ? rawProgress : 2 - rawProgress; // 0→1→0
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
#### Files Modified
|
|
122
|
-
|
|
123
|
-
- `app/components/VideoPlayer.tsx` - Simplified playback rate
|
|
124
|
-
- `app/components/Timeline.tsx` - Removed playback UI, changed dot color
|
|
125
|
-
- `app/pages/CompositionView.tsx` - Playback rate state management
|
|
126
|
-
- `app/components/NewCompositionPopover.tsx` - Complete rewrite for agent chat integration
|
|
127
|
-
- `app/components/Sidebar.tsx` - Updated props, removed name input
|
|
128
|
-
- `app/components/PropsEditor.tsx` - Removed composition name field
|
|
129
|
-
- `app/components/CurrentElementPanel.tsx` - Color properties, UI improvements
|
|
130
|
-
- `app/types/elementAnimations.ts` - Color support, interpolation
|
|
131
|
-
- `app/remotion/compositions/InteractiveCardGrid.tsx` - Color animation logic
|
|
132
|
-
|
|
133
|
-
#### Files Created
|
|
134
|
-
|
|
135
|
-
- `app/remotion/animations/useElementAnimations.ts` (209 lines) - **Reusable animation hook**
|
|
136
|
-
- `app/config/constants.ts` (204 lines) - **Centralized configuration**
|
|
137
|
-
- `app/utils/compositionHelpers.ts` (378 lines) - Helper functions library
|
|
138
|
-
- `app/utils/debug.ts` (104 lines) - Production-safe logging utility
|
|
139
|
-
- `scripts/create-composition.ts` (127 lines) - Example composition script
|
|
140
|
-
- `COMPOSITION_GUIDE.md` (787 lines) - Comprehensive API reference
|
|
141
|
-
- `QUICK_START.md` (498 lines) - Beginner-friendly guide
|
|
142
|
-
- `README.md` (209 lines) - Project overview
|
|
143
|
-
- `CHANGELOG.md`, `CODE_REVIEW.md`, `TODO.md`, `PR_DESCRIPTION.md`, `SESSION_SUMMARY.md`
|
|
144
|
-
|
|
145
|
-
### Developer Experience
|
|
146
|
-
|
|
147
|
-
- Native `<select>` supports type-to-search for properties
|
|
148
|
-
- Arrow keys navigate property options
|
|
149
|
-
- Enter key adds selected property
|
|
150
|
-
- Color picker shows hex values natively
|
|
151
|
-
- Improved visual hierarchy in properties panel
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## Notes
|
|
156
|
-
|
|
157
|
-
All changes maintain backward compatibility with existing compositions. Color animation feature is additive and optional.
|
|
10
|
+
- See what's new right inside Agent-Native Videos — a changelog now lives in the command menu (Cmd+K).
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
configureTracking,
|
|
21
21
|
getThemeInitScript,
|
|
22
22
|
} from "@agent-native/core/client";
|
|
23
|
+
import changelog from "../CHANGELOG.md?raw";
|
|
23
24
|
configureTracking({
|
|
24
25
|
getDefaultProps: (_name, properties) => ({
|
|
25
26
|
...properties,
|
|
@@ -83,7 +84,12 @@ function AppContent() {
|
|
|
83
84
|
|
|
84
85
|
return (
|
|
85
86
|
<>
|
|
86
|
-
<CommandMenu
|
|
87
|
+
<CommandMenu
|
|
88
|
+
open={cmdkOpen}
|
|
89
|
+
onOpenChange={setCmdkOpen}
|
|
90
|
+
changelog={changelog}
|
|
91
|
+
changelogKey="videos"
|
|
92
|
+
>
|
|
87
93
|
<CommandMenu.Group heading="Videos">
|
|
88
94
|
<CommandMenu.Item onSelect={() => {}}>
|
|
89
95
|
Search compositions
|
package/dist/action.js
CHANGED
|
@@ -332,6 +332,92 @@ function zodDefToJsonSchema(def) {
|
|
|
332
332
|
// ---------------------------------------------------------------------------
|
|
333
333
|
// Runtime validation wrapper
|
|
334
334
|
// ---------------------------------------------------------------------------
|
|
335
|
+
const NO_COERCE = Symbol("no-coerce");
|
|
336
|
+
/**
|
|
337
|
+
* Coerce a single stringified value to one of the JSON-schema types the field
|
|
338
|
+
* expects. Returns NO_COERCE when nothing safe applies, so the caller leaves
|
|
339
|
+
* the original value untouched and the normal validation error still surfaces.
|
|
340
|
+
*/
|
|
341
|
+
function coerceStringToSchemaType(raw, types) {
|
|
342
|
+
const trimmed = raw.trim();
|
|
343
|
+
if (types.includes("boolean")) {
|
|
344
|
+
if (trimmed === "true")
|
|
345
|
+
return true;
|
|
346
|
+
if (trimmed === "false")
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
if ((types.includes("array") &&
|
|
350
|
+
trimmed.startsWith("[") &&
|
|
351
|
+
trimmed.endsWith("]")) ||
|
|
352
|
+
(types.includes("object") &&
|
|
353
|
+
trimmed.startsWith("{") &&
|
|
354
|
+
trimmed.endsWith("}"))) {
|
|
355
|
+
try {
|
|
356
|
+
const parsed = JSON.parse(trimmed);
|
|
357
|
+
if (types.includes("array") && Array.isArray(parsed))
|
|
358
|
+
return parsed;
|
|
359
|
+
if (types.includes("object") &&
|
|
360
|
+
parsed &&
|
|
361
|
+
typeof parsed === "object" &&
|
|
362
|
+
!Array.isArray(parsed)) {
|
|
363
|
+
return parsed;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
// fall through — leave the original so validation reports the real error
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if ((types.includes("number") || types.includes("integer")) &&
|
|
371
|
+
trimmed !== "" &&
|
|
372
|
+
Number.isFinite(Number(trimmed))) {
|
|
373
|
+
const n = Number(trimmed);
|
|
374
|
+
if (types.includes("number") || Number.isInteger(n))
|
|
375
|
+
return n;
|
|
376
|
+
}
|
|
377
|
+
return NO_COERCE;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Defensively coerce gateway-stringified tool arguments to the types the schema
|
|
381
|
+
* expects. Some model gateways (notably Builder's Gemini-backed gateway) hand
|
|
382
|
+
* back structured tool-call arguments as JSON strings — an array param arrives
|
|
383
|
+
* as `"[{...}]"`, a boolean as `"true"`. Standard Schema (zod) `validate` does
|
|
384
|
+
* not coerce, so these fail validation and the agent thrashes retrying shapes
|
|
385
|
+
* (and can hang). We only touch a string value when the schema expects a
|
|
386
|
+
* non-string type and the string parses cleanly to it; anything ambiguous
|
|
387
|
+
* (schema also allows string) or unparseable is left as-is. Operates on
|
|
388
|
+
* top-level properties only — once an array/object param is parsed, its nested
|
|
389
|
+
* members are already native and validate normally.
|
|
390
|
+
*/
|
|
391
|
+
function coerceGatewayStringifiedArgs(args, parameters) {
|
|
392
|
+
const properties = parameters?.properties;
|
|
393
|
+
if (!properties)
|
|
394
|
+
return args;
|
|
395
|
+
if (!args || typeof args !== "object" || Array.isArray(args))
|
|
396
|
+
return args;
|
|
397
|
+
let out = null;
|
|
398
|
+
for (const [key, raw] of Object.entries(args)) {
|
|
399
|
+
if (typeof raw !== "string")
|
|
400
|
+
continue;
|
|
401
|
+
const spec = properties[key];
|
|
402
|
+
if (!spec)
|
|
403
|
+
continue;
|
|
404
|
+
const types = Array.isArray(spec.type)
|
|
405
|
+
? spec.type
|
|
406
|
+
: spec.type
|
|
407
|
+
? [spec.type]
|
|
408
|
+
: [];
|
|
409
|
+
// No declared type, or the field legitimately accepts a string → leave it.
|
|
410
|
+
if (types.length === 0 || types.includes("string"))
|
|
411
|
+
continue;
|
|
412
|
+
const coerced = coerceStringToSchemaType(raw, types);
|
|
413
|
+
if (coerced === NO_COERCE)
|
|
414
|
+
continue;
|
|
415
|
+
if (!out)
|
|
416
|
+
out = { ...args };
|
|
417
|
+
out[key] = coerced;
|
|
418
|
+
}
|
|
419
|
+
return out ?? args;
|
|
420
|
+
}
|
|
335
421
|
/**
|
|
336
422
|
* Wrap an action's run function with schema validation.
|
|
337
423
|
* Invalid inputs get a clear error message (including what was actually passed)
|
|
@@ -339,6 +425,7 @@ function zodDefToJsonSchema(def) {
|
|
|
339
425
|
*/
|
|
340
426
|
function wrapWithValidation(schema, run, toolParameters) {
|
|
341
427
|
return async (args, ctx) => {
|
|
428
|
+
args = coerceGatewayStringifiedArgs(args, toolParameters);
|
|
342
429
|
const result = await schema["~standard"].validate(args);
|
|
343
430
|
if (result.issues) {
|
|
344
431
|
// Split issues into "missing required field" vs other validation errors
|