@agent-native/core 0.137.7 → 0.138.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/agent-native.eject.json +2 -0
- package/corpus/README.md +1 -1
- package/corpus/templates/analytics/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +15 -0
- package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/analytics/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/analytics/AGENTS.md +2 -2
- package/corpus/templates/analytics/actions/get-first-party-analytics-health.ts +65 -0
- package/corpus/templates/analytics/actions/provider-api-catalog.ts +3 -6
- package/corpus/templates/analytics/actions/provider-api-docs.ts +3 -6
- package/corpus/templates/analytics/actions/provider-api-request.ts +3 -6
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +3 -3
- package/corpus/templates/analytics/agent-native.json +12 -0
- package/corpus/templates/analytics/app/i18n-data.ts +162 -0
- package/corpus/templates/analytics/app/pages/DataSources.tsx +126 -1
- package/corpus/templates/analytics/changelog/2026-08-05-analytics-now-flags-neon-pressure-and-guides-high-volume-tra.md +6 -0
- package/corpus/templates/analytics/changelog/2026-08-05-first-party-analytics-uses-compact-rollups-for-faster-usage-.md +6 -0
- package/corpus/templates/analytics/server/db/schema.ts +52 -0
- package/corpus/templates/analytics/server/lib/credential-keys.ts +3 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics-health.ts +397 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics-rollups.ts +182 -0
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +86 -15
- package/corpus/templates/analytics/server/lib/provider-api.ts +20 -1
- package/corpus/templates/analytics/server/lib/replay-storage.ts +1 -1
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
- package/corpus/templates/analytics/server/plugins/db.ts +60 -0
- package/corpus/templates/assets/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/assets/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/assets/agent-native.json +12 -0
- package/corpus/templates/assets/server/lib/generation.ts +8 -8
- package/corpus/templates/assets/server/lib/storage.ts +1 -1
- package/corpus/templates/assets/server/plugins/onboarding.ts +1 -1
- package/corpus/templates/brain/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/brain/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/brain/agent-native.json +12 -0
- package/corpus/templates/calendar/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/calendar/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/calendar/agent-native.json +12 -0
- package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/chat/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/chat/AGENTS.md +3 -0
- package/corpus/templates/chat/DESIGN.md +28 -0
- package/corpus/templates/chat/agent-native.json +12 -0
- package/corpus/templates/clips/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/clips/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/clips/actions/cleanup-transcript.ts +2 -2
- package/corpus/templates/clips/actions/delete-recording-permanent.ts +3 -0
- package/corpus/templates/clips/actions/get-playback-position.ts +68 -0
- package/corpus/templates/clips/actions/import-loom-recording.ts +2 -2
- package/corpus/templates/clips/actions/save-playback-position.ts +80 -0
- package/corpus/templates/clips/actions/set-thumbnail.ts +1 -1
- package/corpus/templates/clips/agent-native.json +12 -0
- package/corpus/templates/clips/app/components/player/video-player.tsx +54 -5
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +65 -18
- package/corpus/templates/clips/app/hooks/use-playback-position.ts +188 -0
- package/corpus/templates/clips/app/hooks/use-view-tracking.ts +6 -24
- package/corpus/templates/clips/app/i18n/en-US.ts +4 -0
- package/corpus/templates/clips/app/lib/playback-position.ts +99 -0
- package/corpus/templates/clips/app/lib/viewer-session.ts +29 -0
- package/corpus/templates/clips/changelog/2026-08-05-clip-buffering-now-uses-buffering-copy-after-playback.md +6 -0
- package/corpus/templates/clips/changelog/2026-08-05-clips-remembers-your-playback-position-when-you-reopen-a-cli.md +6 -0
- package/corpus/templates/clips/desktop/package.json +1 -0
- package/corpus/templates/clips/desktop/src/app.tsx +70 -6
- package/corpus/templates/clips/desktop/src/components/AlertDialog.tsx +131 -0
- package/corpus/templates/clips/desktop/src/styles.css +129 -0
- package/corpus/templates/clips/learnings.defaults.md +1 -1
- package/corpus/templates/clips/server/db/schema.ts +18 -0
- package/corpus/templates/clips/server/lib/public-agent-context.ts +1 -1
- package/corpus/templates/clips/server/lib/video-storage.ts +1 -1
- package/corpus/templates/clips/server/plugins/db.ts +15 -0
- package/corpus/templates/clips/server/routes/api/media/index.post.ts +1 -1
- package/corpus/templates/content/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/content/.agents/skills/document-editing/references/databases.md +13 -0
- package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/content/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/content/AGENTS.md +1 -0
- package/corpus/templates/content/actions/_content-database-mutation-lock.ts +41 -0
- package/corpus/templates/content/actions/_content-database-row-migration.ts +569 -0
- package/corpus/templates/content/actions/_database-source-utils.ts +82 -36
- package/corpus/templates/content/actions/_database-utils.ts +5 -0
- package/corpus/templates/content/actions/_delete-content-space.ts +25 -11
- package/corpus/templates/content/actions/add-database-item.ts +60 -42
- package/corpus/templates/content/actions/attach-content-database-source.ts +2 -0
- package/corpus/templates/content/actions/configure-document-property.ts +99 -104
- package/corpus/templates/content/actions/delete-content-database.ts +19 -7
- package/corpus/templates/content/actions/delete-document-property.ts +47 -58
- package/corpus/templates/content/actions/delete-document.ts +390 -167
- package/corpus/templates/content/actions/disconnect-content-database-source.ts +41 -24
- package/corpus/templates/content/actions/duplicate-database-item.ts +63 -31
- package/corpus/templates/content/actions/duplicate-database-items.ts +86 -43
- package/corpus/templates/content/actions/duplicate-document-property.ts +37 -14
- package/corpus/templates/content/actions/migrate-content-database-rows.ts +830 -0
- package/corpus/templates/content/actions/move-database-item.ts +14 -0
- package/corpus/templates/content/actions/permanently-delete-document.ts +27 -6
- package/corpus/templates/content/actions/remove-database-items.ts +13 -0
- package/corpus/templates/content/actions/reorder-document-property.ts +45 -46
- package/corpus/templates/content/actions/set-document-property.ts +68 -28
- package/corpus/templates/content/actions/submit-content-database-form.ts +49 -0
- package/corpus/templates/content/actions/transcribe-media.ts +1 -1
- package/corpus/templates/content/agent-native.json +12 -0
- package/corpus/templates/content/app/components/editor/image-upload.ts +2 -2
- package/corpus/templates/content/app/i18n-data.ts +1 -1
- package/corpus/templates/content/changelog/2026-08-01-content-can-reorganize-every-row-in-an-existing-database-as-.md +6 -0
- package/corpus/templates/content/parity/matrix.md +1 -1
- package/corpus/templates/content/parity/matrix.ts +4 -2
- package/corpus/templates/content/server/db/schema.ts +30 -0
- package/corpus/templates/content/server/plugins/db.ts +24 -0
- package/corpus/templates/content/server/plugins/onboarding.ts +2 -2
- package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/crm/agent-native.json +12 -0
- package/corpus/templates/design/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +2 -0
- package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/design/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/design/CODE_NATIVE_DESIGN_STUDIO_IMPLEMENTATION_PLAN.md +2 -2
- package/corpus/templates/design/DESIGN-STUDIO-PLAN.md +2 -2
- package/corpus/templates/design/actions/apply-design-token-edit.ts +1 -1
- package/corpus/templates/design/actions/capture-design-state.ts +1 -1
- package/corpus/templates/design/actions/connect-builder-app.ts +2 -2
- package/corpus/templates/design/actions/create-design-branch.ts +1 -1
- package/corpus/templates/design/actions/create-fusion-app.ts +3 -3
- package/corpus/templates/design/actions/deploy-design-preview.ts +1 -1
- package/corpus/templates/design/actions/generate-design.ts +3 -2
- package/corpus/templates/design/actions/get-component-details.ts +1 -1
- package/corpus/templates/design/actions/get-design-branch-diff.ts +1 -1
- package/corpus/templates/design/actions/index-components.ts +3 -3
- package/corpus/templates/design/actions/index-design-system-with-builder.ts +1 -1
- package/corpus/templates/design/actions/migrate-inline-design-to-app.ts +3 -3
- package/corpus/templates/design/actions/open-component-source.ts +1 -1
- package/corpus/templates/design/actions/update-design.ts +96 -14
- package/corpus/templates/design/agent-native.json +12 -0
- package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +7 -2
- package/corpus/templates/design/app/components/design/FigmaHydrationDialog.tsx +11 -2
- package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +1 -1
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -1
- package/corpus/templates/design/app/i18n-data.ts +53 -22
- package/corpus/templates/design/app/lib/design-file-upload.ts +2 -3
- package/corpus/templates/design/app/lib/upload-limits.ts +4 -0
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +1 -1
- package/corpus/templates/design/changelog/2026-08-05-chat-attachments-now-warn-before-upload-when-they-exceed-the.md +6 -0
- package/corpus/templates/design/changelog/2026-08-05-figma-fig-uploads-now-show-a-clear-4-mb-limit-up-front-inste.md +6 -0
- package/corpus/templates/design/scripts/qa-figma-stress-import.ts +1 -1
- package/corpus/templates/design/server/handlers/import-design-file.ts +9 -5
- package/corpus/templates/design/server/handlers/uploads.ts +13 -9
- package/corpus/templates/design/server/lib/fig-file-limits.ts +2 -1
- package/corpus/templates/design/server/lib/figma-image-hydration.ts +1 -1
- package/corpus/templates/design/server/lib/figma-node-import.ts +1 -1
- package/corpus/templates/design/server/lib/request-body-limits.ts +11 -0
- package/corpus/templates/design/shared/canvas-frames.ts +81 -0
- package/corpus/templates/design/shared/design-source-capabilities.ts +25 -9
- package/corpus/templates/dispatch/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/dispatch/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/dispatch/agent-native.json +12 -0
- package/corpus/templates/factory/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/factory/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/factory/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/factory/agent-native.json +12 -0
- package/corpus/templates/forms/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/forms/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/forms/actions/export-responses.ts +1 -1
- package/corpus/templates/forms/agent-native.json +12 -0
- package/corpus/templates/macros/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/macros/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/macros/agent-native.json +12 -0
- package/corpus/templates/mail/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/mail/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/mail/agent-native.json +12 -0
- package/corpus/templates/mail/app/i18n/en-US.ts +1 -1
- package/corpus/templates/mail/server/lib/media-upload.ts +1 -1
- package/corpus/templates/plan/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/plan/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/plan/agent-native.json +12 -0
- package/corpus/templates/plan/server/lib/plan-assets.ts +1 -1
- package/corpus/templates/slides/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/slides/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/slides/actions/generate-image-api.ts +1 -1
- package/corpus/templates/slides/actions/generate-slides-ai.ts +1 -1
- package/corpus/templates/slides/actions/import-file.ts +2 -2
- package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
- package/corpus/templates/slides/agent-native.json +12 -0
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +1 -1
- package/corpus/templates/slides/app/i18n/en-US.ts +2 -2
- package/corpus/templates/slides/app/lib/deck-sorting.ts +19 -0
- package/corpus/templates/slides/app/lib/image-drop-to-agent.ts +1 -1
- package/corpus/templates/slides/app/pages/Index.tsx +7 -2
- package/corpus/templates/slides/changelog/2026-08-05-decks-are-now-sorted-by-most-recently-updated.md +6 -0
- package/corpus/templates/slides/server/handlers/assets.ts +1 -1
- package/corpus/templates/slides/server/handlers/uploads.ts +1 -1
- package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +23 -2
- package/corpus/templates/tasks/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/corpus/templates/tasks/agent-native.json +12 -0
- package/dist/action.d.ts +6 -0
- package/dist/agent/engine/builder-engine.js +2 -2
- package/dist/agent/engine/credential-errors.d.ts +1 -1
- package/dist/agent/engine/credential-errors.js +2 -2
- package/dist/agent/production-agent.js +3 -2
- package/dist/brand-kit/fig/index.js +1 -1
- package/dist/cli/agent.js +45 -3
- package/dist/cli/code-agent-executor.js +2 -1
- package/dist/cli/create.d.ts +9 -1
- package/dist/cli/create.js +94 -1
- package/dist/cli/doctor.d.ts +8 -11
- package/dist/cli/doctor.js +92 -24
- package/dist/cli/index.js +6 -5
- package/dist/client/AgentAskPopover.d.ts +3 -1
- package/dist/client/AgentAskPopover.js +2 -2
- package/dist/client/AgentPanel.js +9 -3
- package/dist/client/AssistantChat.js +54 -33
- package/dist/client/MultiTabAssistantChat.js +1 -1
- package/dist/client/RouteTransitionIndicator.d.ts +7 -0
- package/dist/client/RouteTransitionIndicator.js +31 -0
- package/dist/client/agent-engine-key.js +1 -1
- package/dist/client/app-providers.js +11 -2
- package/dist/client/chat/message-components.js +1 -1
- package/dist/client/chat/run-recovery.js +1 -1
- package/dist/client/chat/tool-call-display.d.ts +3 -1
- package/dist/client/chat/tool-call-display.js +4 -3
- package/dist/client/chat-model-groups.d.ts +6 -0
- package/dist/client/chat-model-groups.js +11 -0
- package/dist/client/error-format.js +1 -1
- package/dist/client/i18n.js +1 -1
- package/dist/client/onboarding/FirstRunOnboarding.d.ts +5 -1
- package/dist/client/onboarding/FirstRunOnboarding.js +29 -13
- package/dist/client/onboarding/first-run-enabled.d.ts +6 -1
- package/dist/client/onboarding/first-run-enabled.js +33 -3
- package/dist/client/onboarding/use-onboarding.js +16 -11
- package/dist/client/require-session.js +13 -4
- package/dist/client/resources/mcp-integration-catalog.js +26 -0
- package/dist/client/resources/mcp-integration-logos.js +4 -0
- package/dist/client/route-warmup.js +56 -10
- package/dist/client/settings/AccountSettingsCard.js +78 -3
- package/dist/client/settings/SettingsPanel.js +1 -1
- package/dist/client/settings/VoiceTranscriptionSection.js +2 -2
- package/dist/client/settings/useBuilderStatus.js +1 -1
- package/dist/client/setup-connections/useBuilderConnectCardController.js +1 -1
- package/dist/client/ui/index.d.ts +1 -0
- package/dist/client/ui/index.js +1 -0
- package/dist/client/uploads/upload-editor-image.js +1 -1
- package/dist/client/use-chat-threads.js +3 -0
- package/dist/client/use-session.d.ts +11 -0
- package/dist/client/use-session.js +34 -6
- package/dist/collab/routes.d.ts +2 -2
- package/dist/config.d.ts +48 -0
- package/dist/config.js +111 -0
- package/dist/db/migrations.js +5 -0
- package/dist/eject/provider-api-definitions.d.ts +1 -1
- package/dist/eject/provider-api-definitions.js +1 -0
- package/dist/eject/remote-mcp-presets.js +1 -0
- package/dist/extensions/web-search-tool.js +2 -2
- package/dist/file-upload/actions/upload-image.js +1 -1
- package/dist/file-upload/registry.js +1 -1
- package/dist/guards/index.d.ts +3 -0
- package/dist/guards/index.js +2 -0
- package/dist/guards/no-empty-migrations.d.ts +14 -0
- package/dist/guards/no-empty-migrations.js +126 -0
- package/dist/index.browser.d.ts +1 -0
- package/dist/index.browser.js +3 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/localization/default-messages.d.ts +24 -0
- package/dist/localization/default-messages.js +26 -2
- package/dist/notifications/routes.d.ts +6 -6
- package/dist/onboarding/app-profile.js +1 -1
- package/dist/onboarding/plugin.d.ts +2 -0
- package/dist/onboarding/plugin.js +29 -2
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +16 -16
- package/dist/provider-api/actions/provider-api.d.ts +13 -13
- package/dist/provider-api/index.d.ts +4 -4
- package/dist/provider-api/index.js +35 -0
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/resources/handlers.js +1 -1
- package/dist/scripts/docs/framework-search.d.ts +9 -0
- package/dist/scripts/docs/framework-search.js +239 -0
- package/dist/scripts/docs/index.js +1 -0
- package/dist/scripts/docs/search.d.ts +10 -0
- package/dist/scripts/docs/search.js +1 -1
- package/dist/scripts/docs/source-search.d.ts +10 -2
- package/dist/scripts/docs/source-search.js +108 -41
- package/dist/search-utils/index.d.ts +11 -0
- package/dist/search-utils/index.js +72 -0
- package/dist/server/action-change.d.ts +6 -0
- package/dist/server/action-change.js +28 -14
- package/dist/server/action-discovery.js +9 -0
- package/dist/server/action-routes.js +1 -0
- package/dist/server/agent-chat/browser-team-tools.js +1 -1
- package/dist/server/agent-chat/script-entries.js +43 -2
- package/dist/server/auth-login-mode.d.ts +8 -0
- package/dist/server/auth-login-mode.js +17 -0
- package/dist/server/auth.js +100 -15
- package/dist/server/better-auth-instance.d.ts +36 -0
- package/dist/server/better-auth-instance.js +25 -3
- package/dist/server/builder-design-systems.js +1 -1
- package/dist/server/core-routes-plugin.js +17 -14
- package/dist/server/credential-provider.js +3 -3
- package/dist/server/email-templates.d.ts +7 -0
- package/dist/server/email-templates.js +24 -0
- package/dist/server/email.d.ts +17 -0
- package/dist/server/email.js +22 -1
- package/dist/server/framework-request-handler.js +6 -0
- package/dist/server/onboarding-html.d.ts +2 -0
- package/dist/server/onboarding-html.js +169 -8
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/server/realtime-voice.js +1 -1
- package/dist/server/sentry.d.ts +1 -1
- package/dist/server/transcribe-voice.js +3 -3
- package/dist/shared/first-run-onboarding.d.ts +1 -0
- package/dist/shared/first-run-onboarding.js +1 -0
- package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +23 -2
- package/dist/templates/chat/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/dist/templates/chat/AGENTS.md +3 -0
- package/dist/templates/chat/DESIGN.md +28 -0
- package/dist/templates/chat/agent-native.json +12 -0
- package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +23 -2
- package/dist/templates/default/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/dist/templates/default/AGENTS.md +4 -0
- package/dist/templates/default/DESIGN.md +30 -0
- package/dist/templates/default/agent-native.json +9 -0
- package/dist/templates/default/app/i18n/ar-SA.ts +2 -2
- package/dist/templates/default/app/i18n/de-DE.ts +2 -2
- package/dist/templates/default/app/i18n/en-US.ts +2 -2
- package/dist/templates/default/app/i18n/es-ES.ts +2 -2
- package/dist/templates/default/app/i18n/fr-FR.ts +2 -2
- package/dist/templates/default/app/i18n/hi-IN.ts +2 -2
- package/dist/templates/default/app/i18n/ja-JP.ts +2 -2
- package/dist/templates/default/app/i18n/ko-KR.ts +2 -2
- package/dist/templates/default/app/i18n/pt-BR.ts +2 -2
- package/dist/templates/default/app/i18n/zh-CN.ts +2 -2
- package/dist/templates/default/app/i18n/zh-TW.ts +1 -1
- package/dist/templates/default/package.json +1 -0
- package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/dist/templates/headless/agent-native.json +9 -0
- package/dist/templates/headless/package.json +2 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +23 -2
- package/dist/templates/workspace-core/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/dist/templates/workspace-core/AGENTS.md +3 -0
- package/dist/templates/workspace-core/DESIGN.md +35 -0
- package/dist/templates/workspace-root/AGENTS.md +3 -0
- package/dist/templates/workspace-root/DESIGN.md +35 -0
- package/dist/templates/workspace-root/agent-native.json +9 -0
- package/dist/templates/workspace-root/package.json +3 -0
- package/dist/transcription/builder-transcription.js +1 -1
- package/dist/user-profile/actions/change-password.d.ts +8 -0
- package/dist/user-profile/actions/change-password.js +24 -0
- package/dist/user-profile/actions/get-auth-methods.d.ts +6 -0
- package/dist/user-profile/actions/get-auth-methods.js +23 -0
- package/dist/user-profile/actions/set-password.d.ts +7 -0
- package/dist/user-profile/actions/set-password.js +23 -0
- package/dist/vite/client.d.ts +8 -1
- package/dist/vite/client.js +63 -12
- package/dist/vite/index.d.ts +1 -0
- package/dist/vite/index.js +1 -0
- package/docs/AGENTS.md +7 -2
- package/docs/SKILL.md +7 -5
- package/docs/content/agent-native-config.mdx +165 -0
- package/docs/content/agent-native-toolkit.mdx +1 -1
- package/docs/content/deployment.mdx +7 -2
- package/docs/content/doctor.mdx +21 -13
- package/docs/content/environment-variables.mdx +158 -0
- package/docs/content/file-uploads.mdx +1 -1
- package/docs/content/getting-started.mdx +1 -1
- package/docs/content/key-concepts.mdx +1 -1
- package/docs/content/multi-app-workspace.mdx +1 -1
- package/docs/content/template-clips-ai-and-editing.mdx +6 -6
- package/docs/content/template-clips-developers.mdx +3 -3
- package/docs/content/toolkit-settings.mdx +1 -1
- package/docs/content/voice-input.mdx +4 -4
- package/package.json +6 -2
- package/src/eject/provider-api-definitions.ts +1 -0
- package/src/eject/remote-mcp-presets.ts +1 -0
- package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +23 -2
- package/src/templates/chat/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/src/templates/chat/AGENTS.md +3 -0
- package/src/templates/chat/DESIGN.md +28 -0
- package/src/templates/chat/agent-native.json +12 -0
- package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/src/templates/default/.agents/skills/frontend-design/SKILL.md +23 -2
- package/src/templates/default/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/src/templates/default/AGENTS.md +4 -0
- package/src/templates/default/DESIGN.md +30 -0
- package/src/templates/default/agent-native.json +9 -0
- package/src/templates/default/app/i18n/ar-SA.ts +2 -2
- package/src/templates/default/app/i18n/de-DE.ts +2 -2
- package/src/templates/default/app/i18n/en-US.ts +2 -2
- package/src/templates/default/app/i18n/es-ES.ts +2 -2
- package/src/templates/default/app/i18n/fr-FR.ts +2 -2
- package/src/templates/default/app/i18n/hi-IN.ts +2 -2
- package/src/templates/default/app/i18n/ja-JP.ts +2 -2
- package/src/templates/default/app/i18n/ko-KR.ts +2 -2
- package/src/templates/default/app/i18n/pt-BR.ts +2 -2
- package/src/templates/default/app/i18n/zh-CN.ts +2 -2
- package/src/templates/default/app/i18n/zh-TW.ts +1 -1
- package/src/templates/default/package.json +1 -0
- package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/src/templates/headless/agent-native.json +9 -0
- package/src/templates/headless/package.json +2 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +23 -3
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
- package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +23 -2
- package/src/templates/workspace-core/.agents/skills/frontend-design/references/visual-direction.md +99 -0
- package/src/templates/workspace-core/AGENTS.md +3 -0
- package/src/templates/workspace-core/DESIGN.md +35 -0
- package/src/templates/workspace-root/AGENTS.md +3 -0
- package/src/templates/workspace-root/DESIGN.md +35 -0
- package/src/templates/workspace-root/agent-native.json +9 -0
- package/src/templates/workspace-root/package.json +3 -0
|
@@ -35,6 +35,16 @@ import {
|
|
|
35
35
|
useState,
|
|
36
36
|
} from "react";
|
|
37
37
|
|
|
38
|
+
import {
|
|
39
|
+
AlertDialog,
|
|
40
|
+
AlertDialogAction,
|
|
41
|
+
AlertDialogCancel,
|
|
42
|
+
AlertDialogContent,
|
|
43
|
+
AlertDialogDescription,
|
|
44
|
+
AlertDialogFooter,
|
|
45
|
+
AlertDialogHeader,
|
|
46
|
+
AlertDialogTitle,
|
|
47
|
+
} from "./components/AlertDialog";
|
|
38
48
|
import { FeedbackButton } from "./components/FeedbackButton";
|
|
39
49
|
import {
|
|
40
50
|
CamIcon,
|
|
@@ -873,6 +883,9 @@ export function App() {
|
|
|
873
883
|
loadBool(CAM_ON_KEY, false),
|
|
874
884
|
);
|
|
875
885
|
const [micOn, setMicOn] = useState<boolean>(() => loadBool(MIC_ON_KEY, true));
|
|
886
|
+
const [micOffConfirmOpen, setMicOffConfirmOpen] = useState(false);
|
|
887
|
+
const pendingStartOptionsRef =
|
|
888
|
+
useRef<Parameters<typeof handleStartRecording>[0]>(undefined);
|
|
876
889
|
const [systemAudioOn, setSystemAudioOn] = useState<boolean>(() =>
|
|
877
890
|
loadBool(SYSTEM_AUDIO_KEY, true),
|
|
878
891
|
);
|
|
@@ -3051,6 +3064,26 @@ export function App() {
|
|
|
3051
3064
|
// include a function that is recreated every render.
|
|
3052
3065
|
handleStartRecordingRef.current = handleStartRecording;
|
|
3053
3066
|
|
|
3067
|
+
// Gates every start-recording gesture (button, global shortcut, permission
|
|
3068
|
+
// retry) on the mic toggle. When the mic is off we hold the actual
|
|
3069
|
+
// getDisplayMedia/getUserMedia call until the user confirms in
|
|
3070
|
+
// micOffConfirmOpen — the confirm button's own click supplies the user
|
|
3071
|
+
// activation handleStartRecording needs, same as the direct gesture would.
|
|
3072
|
+
function beginRecording(
|
|
3073
|
+
options?: Parameters<typeof handleStartRecording>[0],
|
|
3074
|
+
beginOptions?: { revealPopoverIfMicOff?: boolean },
|
|
3075
|
+
) {
|
|
3076
|
+
if (!micOn) {
|
|
3077
|
+
pendingStartOptionsRef.current = options;
|
|
3078
|
+
if (beginOptions?.revealPopoverIfMicOff) {
|
|
3079
|
+
invoke("show_popover").catch(() => {});
|
|
3080
|
+
}
|
|
3081
|
+
setMicOffConfirmOpen(true);
|
|
3082
|
+
return;
|
|
3083
|
+
}
|
|
3084
|
+
void handleStartRecording(options);
|
|
3085
|
+
}
|
|
3086
|
+
|
|
3054
3087
|
recordShortcutHandlerRef.current = () => {
|
|
3055
3088
|
if (recorder) {
|
|
3056
3089
|
emit("clips:recorder-stop").catch(() => {});
|
|
@@ -3078,7 +3111,10 @@ export function App() {
|
|
|
3078
3111
|
return;
|
|
3079
3112
|
}
|
|
3080
3113
|
|
|
3081
|
-
|
|
3114
|
+
beginRecording(
|
|
3115
|
+
{ ignoreActiveRecorder: true },
|
|
3116
|
+
{ revealPopoverIfMicOff: true },
|
|
3117
|
+
);
|
|
3082
3118
|
};
|
|
3083
3119
|
|
|
3084
3120
|
useEffect(() => {
|
|
@@ -3903,9 +3939,7 @@ export function App() {
|
|
|
3903
3939
|
disabled={
|
|
3904
3940
|
localRecordingMode === "off" && videoStorageStatus === "checking"
|
|
3905
3941
|
}
|
|
3906
|
-
onClick={() =>
|
|
3907
|
-
void handleStartRecording();
|
|
3908
|
-
}}
|
|
3942
|
+
onClick={() => beginRecording()}
|
|
3909
3943
|
>
|
|
3910
3944
|
{localRecordingMode === "off" && videoStorageStatus === "checking"
|
|
3911
3945
|
? "Checking storage..."
|
|
@@ -3914,6 +3948,36 @@ export function App() {
|
|
|
3914
3948
|
: "Start local recording"}
|
|
3915
3949
|
</button>
|
|
3916
3950
|
) : null}
|
|
3951
|
+
|
|
3952
|
+
<AlertDialog
|
|
3953
|
+
open={micOffConfirmOpen}
|
|
3954
|
+
onOpenChange={(open) => {
|
|
3955
|
+
setMicOffConfirmOpen(open);
|
|
3956
|
+
if (!open) pendingStartOptionsRef.current = undefined;
|
|
3957
|
+
}}
|
|
3958
|
+
>
|
|
3959
|
+
<AlertDialogContent>
|
|
3960
|
+
<AlertDialogHeader>
|
|
3961
|
+
<AlertDialogTitle>Record without a microphone?</AlertDialogTitle>
|
|
3962
|
+
<AlertDialogDescription>
|
|
3963
|
+
Your mic is off, so this recording won't capture any audio.
|
|
3964
|
+
Turn it on before starting if you want narration.
|
|
3965
|
+
</AlertDialogDescription>
|
|
3966
|
+
</AlertDialogHeader>
|
|
3967
|
+
<AlertDialogFooter>
|
|
3968
|
+
<AlertDialogAction
|
|
3969
|
+
onClick={() => {
|
|
3970
|
+
const options = pendingStartOptionsRef.current;
|
|
3971
|
+
pendingStartOptionsRef.current = undefined;
|
|
3972
|
+
void handleStartRecording(options);
|
|
3973
|
+
}}
|
|
3974
|
+
>
|
|
3975
|
+
Start anyway
|
|
3976
|
+
</AlertDialogAction>
|
|
3977
|
+
<AlertDialogCancel>Cancel</AlertDialogCancel>
|
|
3978
|
+
</AlertDialogFooter>
|
|
3979
|
+
</AlertDialogContent>
|
|
3980
|
+
</AlertDialog>
|
|
3917
3981
|
{recError ? (
|
|
3918
3982
|
recError === MACOS_UPDATE_RESTART_MESSAGE ? (
|
|
3919
3983
|
<UpdateRestartBanner message={recError} />
|
|
@@ -3928,14 +3992,14 @@ export function App() {
|
|
|
3928
3992
|
? ["screen"]
|
|
3929
3993
|
: permissionPanesForRecording(mode, cameraOn, micOn)
|
|
3930
3994
|
}
|
|
3931
|
-
onRetry={
|
|
3995
|
+
onRetry={() => beginRecording()}
|
|
3932
3996
|
/>
|
|
3933
3997
|
) : recError === MACOS_SPEECH_PERMISSION_MESSAGE ? (
|
|
3934
3998
|
<PermissionRecoveryBanner
|
|
3935
3999
|
kind="speech"
|
|
3936
4000
|
message={recError}
|
|
3937
4001
|
panes={["speech", "microphone"]}
|
|
3938
|
-
onRetry={
|
|
4002
|
+
onRetry={() => beginRecording()}
|
|
3939
4003
|
/>
|
|
3940
4004
|
) : isStorageSetupFailureMessage(recError) ? (
|
|
3941
4005
|
<StorageConnectionBanner
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* shadcn-style AlertDialog for the Tauri tray app.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors shadcn/ui's alert-dialog API, but styled with the desktop app's
|
|
8
|
+
* plain-CSS theme tokens instead of Tailwind — this app has no Tailwind/
|
|
9
|
+
* shadcn build. Deliberately skips Radix's `Portal`: the popover window is
|
|
10
|
+
* sized to fit `.app`'s measured content (see `resize_popover`) and clipped
|
|
11
|
+
* to its own rounded corners, so a body-portaled overlay would render past
|
|
12
|
+
* the window's actual bounds. Overlay/Content use `position: absolute`
|
|
13
|
+
* instead of `fixed` so they stay inside `.app`'s rounded, clipped bounds.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const AlertDialog = AlertDialogPrimitive.Root;
|
|
17
|
+
const AlertDialogTrigger = AlertDialogPrimitive.Trigger;
|
|
18
|
+
|
|
19
|
+
const AlertDialogOverlay = React.forwardRef<
|
|
20
|
+
React.ElementRef<typeof AlertDialogPrimitive.Overlay>,
|
|
21
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Overlay>
|
|
22
|
+
>(({ className, ...props }, ref) => (
|
|
23
|
+
<AlertDialogPrimitive.Overlay
|
|
24
|
+
ref={ref}
|
|
25
|
+
className={["alert-dialog-overlay", className].filter(Boolean).join(" ")}
|
|
26
|
+
{...props}
|
|
27
|
+
/>
|
|
28
|
+
));
|
|
29
|
+
AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
|
|
30
|
+
|
|
31
|
+
const AlertDialogContent = React.forwardRef<
|
|
32
|
+
React.ElementRef<typeof AlertDialogPrimitive.Content>,
|
|
33
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Content>
|
|
34
|
+
>(({ className, ...props }, ref) => (
|
|
35
|
+
<>
|
|
36
|
+
<AlertDialogOverlay />
|
|
37
|
+
<AlertDialogPrimitive.Content
|
|
38
|
+
ref={ref}
|
|
39
|
+
className={["alert-dialog-content", className].filter(Boolean).join(" ")}
|
|
40
|
+
{...props}
|
|
41
|
+
/>
|
|
42
|
+
</>
|
|
43
|
+
));
|
|
44
|
+
AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
|
|
45
|
+
|
|
46
|
+
function AlertDialogHeader({
|
|
47
|
+
className,
|
|
48
|
+
...props
|
|
49
|
+
}: React.HTMLAttributes<HTMLDivElement>) {
|
|
50
|
+
return (
|
|
51
|
+
<div
|
|
52
|
+
className={["alert-dialog-header", className].filter(Boolean).join(" ")}
|
|
53
|
+
{...props}
|
|
54
|
+
/>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function AlertDialogFooter({
|
|
59
|
+
className,
|
|
60
|
+
...props
|
|
61
|
+
}: React.HTMLAttributes<HTMLDivElement>) {
|
|
62
|
+
return (
|
|
63
|
+
<div
|
|
64
|
+
className={["alert-dialog-footer", className].filter(Boolean).join(" ")}
|
|
65
|
+
{...props}
|
|
66
|
+
/>
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const AlertDialogTitle = React.forwardRef<
|
|
71
|
+
React.ElementRef<typeof AlertDialogPrimitive.Title>,
|
|
72
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Title>
|
|
73
|
+
>(({ className, ...props }, ref) => (
|
|
74
|
+
<AlertDialogPrimitive.Title
|
|
75
|
+
ref={ref}
|
|
76
|
+
className={["alert-dialog-title", className].filter(Boolean).join(" ")}
|
|
77
|
+
{...props}
|
|
78
|
+
/>
|
|
79
|
+
));
|
|
80
|
+
AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
|
|
81
|
+
|
|
82
|
+
const AlertDialogDescription = React.forwardRef<
|
|
83
|
+
React.ElementRef<typeof AlertDialogPrimitive.Description>,
|
|
84
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Description>
|
|
85
|
+
>(({ className, ...props }, ref) => (
|
|
86
|
+
<AlertDialogPrimitive.Description
|
|
87
|
+
ref={ref}
|
|
88
|
+
className={["alert-dialog-description", className]
|
|
89
|
+
.filter(Boolean)
|
|
90
|
+
.join(" ")}
|
|
91
|
+
{...props}
|
|
92
|
+
/>
|
|
93
|
+
));
|
|
94
|
+
AlertDialogDescription.displayName =
|
|
95
|
+
AlertDialogPrimitive.Description.displayName;
|
|
96
|
+
|
|
97
|
+
const AlertDialogAction = React.forwardRef<
|
|
98
|
+
React.ElementRef<typeof AlertDialogPrimitive.Action>,
|
|
99
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Action>
|
|
100
|
+
>(({ className, ...props }, ref) => (
|
|
101
|
+
<AlertDialogPrimitive.Action
|
|
102
|
+
ref={ref}
|
|
103
|
+
className={["primary", className].filter(Boolean).join(" ")}
|
|
104
|
+
{...props}
|
|
105
|
+
/>
|
|
106
|
+
));
|
|
107
|
+
AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
|
|
108
|
+
|
|
109
|
+
const AlertDialogCancel = React.forwardRef<
|
|
110
|
+
React.ElementRef<typeof AlertDialogPrimitive.Cancel>,
|
|
111
|
+
React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Cancel>
|
|
112
|
+
>(({ className, ...props }, ref) => (
|
|
113
|
+
<AlertDialogPrimitive.Cancel
|
|
114
|
+
ref={ref}
|
|
115
|
+
className={["secondary", className].filter(Boolean).join(" ")}
|
|
116
|
+
{...props}
|
|
117
|
+
/>
|
|
118
|
+
));
|
|
119
|
+
AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
|
|
120
|
+
|
|
121
|
+
export {
|
|
122
|
+
AlertDialog,
|
|
123
|
+
AlertDialogTrigger,
|
|
124
|
+
AlertDialogContent,
|
|
125
|
+
AlertDialogHeader,
|
|
126
|
+
AlertDialogFooter,
|
|
127
|
+
AlertDialogTitle,
|
|
128
|
+
AlertDialogDescription,
|
|
129
|
+
AlertDialogAction,
|
|
130
|
+
AlertDialogCancel,
|
|
131
|
+
};
|
|
@@ -156,6 +156,7 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
156
156
|
content exceeds the restored popover height. Only the content region may
|
|
157
157
|
scroll; the window shell and bottom destinations stay put. */
|
|
158
158
|
.app-recorder {
|
|
159
|
+
position: relative;
|
|
159
160
|
gap: 0;
|
|
160
161
|
padding: 0;
|
|
161
162
|
overflow: hidden;
|
|
@@ -2612,6 +2613,134 @@ body[data-clips-route="recording-pill"] #root {
|
|
|
2612
2613
|
}
|
|
2613
2614
|
}
|
|
2614
2615
|
|
|
2616
|
+
/* ------------------------------------------------------------------------- */
|
|
2617
|
+
/* Alert dialog */
|
|
2618
|
+
/* ------------------------------------------------------------------------- */
|
|
2619
|
+
|
|
2620
|
+
/* `position: absolute`, not `fixed` — see AlertDialog.tsx: this must stay
|
|
2621
|
+
inside `.app-recorder`'s clipped, rounded bounds rather than the raw
|
|
2622
|
+
(square-cornered) Tauri window. */
|
|
2623
|
+
.alert-dialog-overlay {
|
|
2624
|
+
position: absolute;
|
|
2625
|
+
inset: 0;
|
|
2626
|
+
z-index: 70;
|
|
2627
|
+
/* guard:allow-raw-color — modal scrim is theme-invariant black, same as shadcn's own bg-black/80 overlay */
|
|
2628
|
+
background: rgba(0, 0, 0, 0.45);
|
|
2629
|
+
}
|
|
2630
|
+
|
|
2631
|
+
.alert-dialog-overlay[data-state="open"] {
|
|
2632
|
+
animation: alert-dialog-overlay-in 120ms ease-out;
|
|
2633
|
+
}
|
|
2634
|
+
|
|
2635
|
+
.alert-dialog-overlay[data-state="closed"] {
|
|
2636
|
+
animation: alert-dialog-overlay-out 100ms ease-in;
|
|
2637
|
+
}
|
|
2638
|
+
|
|
2639
|
+
.alert-dialog-content {
|
|
2640
|
+
position: absolute;
|
|
2641
|
+
z-index: 71;
|
|
2642
|
+
left: 50%;
|
|
2643
|
+
top: 50%;
|
|
2644
|
+
transform: translate(-50%, -50%);
|
|
2645
|
+
width: calc(100% - 32px);
|
|
2646
|
+
max-width: 320px;
|
|
2647
|
+
border-radius: var(--radius);
|
|
2648
|
+
border: 1px solid var(--border);
|
|
2649
|
+
background: var(--bg);
|
|
2650
|
+
box-shadow: var(--shadow-md);
|
|
2651
|
+
padding: 16px;
|
|
2652
|
+
display: flex;
|
|
2653
|
+
flex-direction: column;
|
|
2654
|
+
gap: 14px;
|
|
2655
|
+
}
|
|
2656
|
+
|
|
2657
|
+
.alert-dialog-content[data-state="open"] {
|
|
2658
|
+
animation: alert-dialog-content-in 120ms ease-out;
|
|
2659
|
+
}
|
|
2660
|
+
|
|
2661
|
+
.alert-dialog-content[data-state="closed"] {
|
|
2662
|
+
animation: alert-dialog-content-out 100ms ease-in;
|
|
2663
|
+
}
|
|
2664
|
+
|
|
2665
|
+
.alert-dialog-header {
|
|
2666
|
+
display: flex;
|
|
2667
|
+
flex-direction: column;
|
|
2668
|
+
gap: 6px;
|
|
2669
|
+
}
|
|
2670
|
+
|
|
2671
|
+
.alert-dialog-title {
|
|
2672
|
+
font-size: 14px;
|
|
2673
|
+
font-weight: 600;
|
|
2674
|
+
color: var(--fg);
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2677
|
+
.alert-dialog-description {
|
|
2678
|
+
font-size: 12px;
|
|
2679
|
+
line-height: 1.5;
|
|
2680
|
+
color: var(--fg-muted);
|
|
2681
|
+
}
|
|
2682
|
+
|
|
2683
|
+
.alert-dialog-footer {
|
|
2684
|
+
display: flex;
|
|
2685
|
+
flex-direction: row-reverse;
|
|
2686
|
+
gap: 8px;
|
|
2687
|
+
}
|
|
2688
|
+
|
|
2689
|
+
.alert-dialog-footer .primary,
|
|
2690
|
+
.alert-dialog-footer .secondary {
|
|
2691
|
+
width: auto;
|
|
2692
|
+
flex: 1;
|
|
2693
|
+
height: 36px;
|
|
2694
|
+
padding: 0 12px;
|
|
2695
|
+
border-radius: var(--radius-sm);
|
|
2696
|
+
font-size: 13px;
|
|
2697
|
+
white-space: nowrap;
|
|
2698
|
+
}
|
|
2699
|
+
|
|
2700
|
+
@keyframes alert-dialog-overlay-in {
|
|
2701
|
+
from {
|
|
2702
|
+
opacity: 0;
|
|
2703
|
+
}
|
|
2704
|
+
|
|
2705
|
+
to {
|
|
2706
|
+
opacity: 1;
|
|
2707
|
+
}
|
|
2708
|
+
}
|
|
2709
|
+
|
|
2710
|
+
@keyframes alert-dialog-overlay-out {
|
|
2711
|
+
from {
|
|
2712
|
+
opacity: 1;
|
|
2713
|
+
}
|
|
2714
|
+
|
|
2715
|
+
to {
|
|
2716
|
+
opacity: 0;
|
|
2717
|
+
}
|
|
2718
|
+
}
|
|
2719
|
+
|
|
2720
|
+
@keyframes alert-dialog-content-in {
|
|
2721
|
+
from {
|
|
2722
|
+
opacity: 0;
|
|
2723
|
+
transform: translate(-50%, -50%) scale(0.96);
|
|
2724
|
+
}
|
|
2725
|
+
|
|
2726
|
+
to {
|
|
2727
|
+
opacity: 1;
|
|
2728
|
+
transform: translate(-50%, -50%) scale(1);
|
|
2729
|
+
}
|
|
2730
|
+
}
|
|
2731
|
+
|
|
2732
|
+
@keyframes alert-dialog-content-out {
|
|
2733
|
+
from {
|
|
2734
|
+
opacity: 1;
|
|
2735
|
+
transform: translate(-50%, -50%) scale(1);
|
|
2736
|
+
}
|
|
2737
|
+
|
|
2738
|
+
to {
|
|
2739
|
+
opacity: 0;
|
|
2740
|
+
transform: translate(-50%, -50%) scale(0.96);
|
|
2741
|
+
}
|
|
2742
|
+
}
|
|
2743
|
+
|
|
2615
2744
|
.setup-toggle-row {
|
|
2616
2745
|
display: flex;
|
|
2617
2746
|
align-items: center;
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
## Meetings & Dictate
|
|
25
25
|
|
|
26
26
|
- When a user says **"meeting"** they mean a Meetings tab entry, not a Clips recording — _unless_ the recording is linked to a meeting (i.e. `recordings.meeting_id` is non-null), in which case both interpretations are valid and worth mentioning.
|
|
27
|
-
- When suggesting how to enable transcript improvements (cleanup, summary, action items), **lead with Builder.io Connect** — it's the easiest path and requires no key. Mention a BYOK `GEMINI_API_KEY` only as a secondary fallback. The cleanup pipeline does not use direct Groq or OpenAI keys by default; it prefers Luna through Builder or OpenAI, with Gemini as the fallback.
|
|
27
|
+
- When suggesting how to enable transcript improvements (cleanup, summary, action items), **lead with Builder.io Connect** — its free tier is available, it's the easiest path, and it requires no key. Mention a BYOK `GEMINI_API_KEY` only as a secondary fallback. The cleanup pipeline does not use direct Groq or OpenAI keys by default; it prefers Luna through Builder or OpenAI, with Gemini as the fallback.
|
|
28
28
|
- **Per-attendee action items require attendees to actually speak in the recorded audio.** With mic + system audio capture (Meetings default) both sides are heard and tagged by source. With mic-only capture (and all Dictate dictations), remote attendees may be silent in the transcript — call this out before promising attendee-level coverage.
|
|
29
29
|
|
|
30
30
|
## Platform requirements
|
|
@@ -404,6 +404,24 @@ export const recordingViews = table("recording_views", {
|
|
|
404
404
|
viewedAt: text("viewed_at").notNull().default(now()),
|
|
405
405
|
});
|
|
406
406
|
|
|
407
|
+
export const recordingPlaybackPositions = table(
|
|
408
|
+
"recording_playback_positions",
|
|
409
|
+
{
|
|
410
|
+
id: text("id").primaryKey(),
|
|
411
|
+
recordingId: text("recording_id").notNull(),
|
|
412
|
+
viewerKey: text("viewer_key").notNull(),
|
|
413
|
+
viewerEmail: text("viewer_email"),
|
|
414
|
+
positionMs: integer("position_ms").notNull().default(0),
|
|
415
|
+
updatedAt: text("updated_at").notNull().default(now()),
|
|
416
|
+
createdAt: text("created_at").notNull().default(now()),
|
|
417
|
+
},
|
|
418
|
+
(position) => ({
|
|
419
|
+
recordingPlaybackPositionUnique: uniqueIndex(
|
|
420
|
+
"recording_playback_positions_recording_viewer_key_unique_idx",
|
|
421
|
+
).on(position.recordingId, position.viewerKey),
|
|
422
|
+
}),
|
|
423
|
+
);
|
|
424
|
+
|
|
407
425
|
// Agent views — one row per (clip, agent, time bucket). Deliberately separate
|
|
408
426
|
// from `recording_viewers` / `recording_views` so no human-view count can ever
|
|
409
427
|
// pick agents up by forgetting a filter: the human tables stay agent-free.
|
|
@@ -506,7 +506,7 @@ export function transcriptStatusInstructions(
|
|
|
506
506
|
|
|
507
507
|
if (status === "failed" && lowerReason.includes("credits exhausted")) {
|
|
508
508
|
return [
|
|
509
|
-
"Transcription failed because Builder transcription credits are exhausted. Tell the user to upgrade or connect Builder.io credits. Clips uses the browser/macOS native transcript first and Builder transcription on the original recording when native capture is unavailable.",
|
|
509
|
+
"Transcription failed because Builder transcription credits are exhausted. Tell the user to upgrade or connect Builder.io credits (free tier available). Clips uses the browser/macOS native transcript first and Builder transcription on the original recording when native capture is unavailable.",
|
|
510
510
|
];
|
|
511
511
|
}
|
|
512
512
|
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "@agent-native/core/server";
|
|
6
6
|
|
|
7
7
|
export const STORAGE_SETUP_REQUIRED_REASON =
|
|
8
|
-
"Video storage is not connected yet. Connect Builder.io or configure S3-compatible storage to upload clips.";
|
|
8
|
+
"Video storage is not connected yet. Connect Builder.io (free tier available) or configure S3-compatible storage to upload clips.";
|
|
9
9
|
|
|
10
10
|
function appDatabaseUrl(): string {
|
|
11
11
|
const appName = process.env.APP_NAME?.toUpperCase().replace(/-/g, "_");
|
|
@@ -931,6 +931,21 @@ const migrations = runMigrations(
|
|
|
931
931
|
// guard:allow-unscoped — startup migration normalizes a legacy placeholder across all rows.
|
|
932
932
|
sql: `UPDATE recording_agent_views SET agent_label = NULL WHERE agent_label = 'Agent'`,
|
|
933
933
|
},
|
|
934
|
+
{
|
|
935
|
+
version: 58,
|
|
936
|
+
name: "recording-playback-positions",
|
|
937
|
+
sql: `CREATE TABLE IF NOT EXISTS recording_playback_positions (
|
|
938
|
+
id TEXT PRIMARY KEY,
|
|
939
|
+
recording_id TEXT NOT NULL,
|
|
940
|
+
viewer_key TEXT NOT NULL,
|
|
941
|
+
viewer_email TEXT,
|
|
942
|
+
position_ms INTEGER NOT NULL DEFAULT 0,
|
|
943
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
944
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
945
|
+
);
|
|
946
|
+
CREATE UNIQUE INDEX IF NOT EXISTS recording_playback_positions_recording_viewer_key_unique_idx
|
|
947
|
+
ON recording_playback_positions (recording_id, viewer_key)`,
|
|
948
|
+
},
|
|
934
949
|
],
|
|
935
950
|
{ table: "clips_migrations" },
|
|
936
951
|
);
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
const MAX_BYTES = 5 * 1024 * 1024;
|
|
27
27
|
|
|
28
28
|
const STORAGE_SETUP_REQUIRED_REASON =
|
|
29
|
-
"File storage is not connected yet. Connect Builder.io or configure S3-compatible storage in Settings → File uploads, then retry.";
|
|
29
|
+
"File storage is not connected yet. Connect Builder.io (free tier available) or configure S3-compatible storage in Settings → File uploads, then retry.";
|
|
30
30
|
|
|
31
31
|
function randId(): string {
|
|
32
32
|
const chars =
|
|
@@ -31,6 +31,26 @@ the framework monorepo checkout.
|
|
|
31
31
|
|
|
32
32
|
From a generated app directory:
|
|
33
33
|
|
|
34
|
+
```bash
|
|
35
|
+
pnpm action framework-search --pattern "defineAction"
|
|
36
|
+
pnpm action framework-search --pattern "templates/*/actions/*.ts" --mode glob --scope source
|
|
37
|
+
pnpm action framework-search --pattern "Agent(?:Panel|Sidebar)" --mode regex --scope source
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Use `framework-search` first when a question may cross the docs and source
|
|
41
|
+
boundary. It searches the version-matched framework docs, runtime-visible
|
|
42
|
+
skills, readable Core or Toolkit package source, and first-party template
|
|
43
|
+
corpus in one bounded read-only call. Use `scope: docs` or `scope: source` to
|
|
44
|
+
narrow it, then use the existing focused readers for the page or file you need.
|
|
45
|
+
|
|
46
|
+
The same tool is available in the headless `pnpm agent` loop and every built-in
|
|
47
|
+
app agent. Its default substring mode is safest for ordinary questions; use
|
|
48
|
+
`glob` for wildcard paths, `sql-like` for `%` and `_` wildcards, and `regex`
|
|
49
|
+
for precise structural matches. Results are bounded, so refine the pattern or
|
|
50
|
+
path instead of treating a truncated result as exhaustive.
|
|
51
|
+
|
|
52
|
+
From a generated app directory, the lower-level readers remain available:
|
|
53
|
+
|
|
34
54
|
```bash
|
|
35
55
|
pnpm action docs-search --query "<feature>"
|
|
36
56
|
pnpm action docs-search --slug <slug>
|
|
@@ -41,9 +61,9 @@ pnpm action source-search --path templates/chat/actions/hello.ts
|
|
|
41
61
|
pnpm action source-search --list
|
|
42
62
|
```
|
|
43
63
|
|
|
44
|
-
The headless `pnpm agent` loop and built-in app agent also expose
|
|
45
|
-
`
|
|
46
|
-
|
|
64
|
+
The headless `pnpm agent` loop and built-in app agent also expose read-only
|
|
65
|
+
`framework-search`, `docs-search`, and `source-search` tools. Use the unified
|
|
66
|
+
tool for discovery, then the focused tools for full page or file reads.
|
|
47
67
|
|
|
48
68
|
If the action runner is unavailable, search the package directly:
|
|
49
69
|
|
|
@@ -65,6 +65,22 @@ Contextual agent UI is not a reason to expose every option at once. Start with
|
|
|
65
65
|
the domain task's primary action, reveal review or configuration only when the
|
|
66
66
|
current state needs it, and let the sidebar carry conversational depth.
|
|
67
67
|
|
|
68
|
+
## Visual Direction And Workspace Variety
|
|
69
|
+
|
|
70
|
+
Shared workspace behavior should be consistent without forcing every app into
|
|
71
|
+
the same visual skin. Keep shell and component tokens semantic, then let each
|
|
72
|
+
app declare a named direction in `DESIGN.md` before styling. A new app should
|
|
73
|
+
choose its palette family and composition from the product context, compare
|
|
74
|
+
nearby apps, and avoid inheriting their accent by default. Use the
|
|
75
|
+
`frontend-design` visual-direction reference for mode, palette, type, density,
|
|
76
|
+
shape, anti-references, and the `distill` / `typeset` / `colorize` / `layout` /
|
|
77
|
+
`polish` / `audit` review vocabulary.
|
|
78
|
+
|
|
79
|
+
Do not make warm beige plus terracotta the workspace fallback. Preserve a
|
|
80
|
+
workspace-level brand when one exists; otherwise keep shared chrome neutral and
|
|
81
|
+
allow app-owned accents to distinguish products while retaining accessible
|
|
82
|
+
semantic states and the shared AgentSidebar contract.
|
|
83
|
+
|
|
68
84
|
## Discover Before Building
|
|
69
85
|
|
|
70
86
|
Before creating an app-local version of repeated workspace or agent UI:
|
|
@@ -234,6 +234,19 @@ Use `create-content-database`, `create-inline-content-database`,
|
|
|
234
234
|
`duplicate-document-property`, and `delete-document-property`; do not edit
|
|
235
235
|
property rows or view config via raw SQL when an action can do it.
|
|
236
236
|
|
|
237
|
+
For a bounded migration that must rewrite every existing row body while adding
|
|
238
|
+
new property definitions and values, use `migrate-content-database-rows` rather
|
|
239
|
+
than looping the single-row actions. Its `validate` phase is read-only; `apply`
|
|
240
|
+
commits the complete plan with an idempotency receipt or writes nothing. Read
|
|
241
|
+
the database and every row independently after apply, then call its separate
|
|
242
|
+
`verify` phase with the saved post-apply digest. Only a verified receipt may
|
|
243
|
+
`finalize` the exact legacy property IDs stored in that receipt. `rollback` is
|
|
244
|
+
available before finalize only while the saved post-apply digest still matches,
|
|
245
|
+
so it never overwrites a later edit. The bounded migration accepts ordinary
|
|
246
|
+
databases without attached Sources; source-backed and system databases retain
|
|
247
|
+
their dedicated synchronization actions. If flushing a live row editor changes
|
|
248
|
+
its persisted revision, read the rows again and build a fresh plan.
|
|
249
|
+
|
|
237
250
|
When targeting more than one database row, call `duplicate-database-items` or
|
|
238
251
|
`remove-database-items` once with a native JSON array of `itemIds` or
|
|
239
252
|
`documentIds`. Do not loop `duplicate-database-item` or `delete-document` for
|
|
@@ -34,6 +34,22 @@ Before coding, decide:
|
|
|
34
34
|
|
|
35
35
|
Then implement working code that is cohesive, accessible, responsive, and polished in small details: typography, spacing, copy, motion, empty states, loading states, focus states, and error states.
|
|
36
36
|
|
|
37
|
+
## Visual Direction Contract
|
|
38
|
+
|
|
39
|
+
Before styling a new app or workspace surface, define its product mode,
|
|
40
|
+
audience, visual world, palette family, type treatment, composition, shape
|
|
41
|
+
language, and anti-references in `DESIGN.md`. Read
|
|
42
|
+
`references/visual-direction.md` for the direction families and review
|
|
43
|
+
vocabulary. This is the Impeccable-inspired design contract for Agent-Native
|
|
44
|
+
apps: understand the product, name the mode, deal a few coherent directions,
|
|
45
|
+
commit to one, and audit the result instead of averaging back to a starter.
|
|
46
|
+
|
|
47
|
+
Preserve an existing brand system and component library. When no brand exists,
|
|
48
|
+
choose a deliberate direction based on the domain and compare sibling apps
|
|
49
|
+
before selecting its accent family. Shared behavior and semantic token names
|
|
50
|
+
should stay consistent; palette, density, composition, type contrast, and
|
|
51
|
+
shape language should not be identical by default.
|
|
52
|
+
|
|
37
53
|
## Minimalism And Progressive Disclosure
|
|
38
54
|
|
|
39
55
|
Default to Apple/Linear-level restraint: make the primary workflow obvious, then remove everything that does not help that workflow right now. A polished UI often has fewer visible controls, fewer borders, fewer labels, and fewer explanatory surfaces than the first reasonable implementation.
|
|
@@ -81,13 +97,13 @@ passed this requirement yet.
|
|
|
81
97
|
operational apps, make a clear sans-serif hierarchy the default; reserve a
|
|
82
98
|
serif or editorial face for a deliberate content preview or brand moment,
|
|
83
99
|
not the whole application shell.
|
|
84
|
-
- **Color and theme**: Use semantic tokens and CSS variables. Avoid one-note palettes and default purple/blue gradients unless the brand demands them.
|
|
100
|
+
- **Color and theme**: Use semantic tokens and CSS variables. Avoid one-note palettes, default warm beige/terracotta, and default purple/blue gradients unless the brand demands them. New apps should choose a product-fitting accent family rather than inherit the previous app's color.
|
|
85
101
|
- **Motion**: Prefer purposeful transitions and small state changes. Use CSS transitions/keyframes unless the app already uses a motion library. Never `transition-all` — list the properties that actually change (e.g. `transition-[opacity,transform]`). Use the shared easing tokens defined in `packages/core/src/styles/agent-native.css` instead of hand-typing curves: `var(--ease-drawer)` (260ms, drawers/app chrome), `var(--ease-collapse)` (200ms, expand/collapse), `var(--ease-out-strong)` (snappy entrances) — in Tailwind, `ease-[var(--ease-collapse)]`. Enter/exit with ease-out, never `ease-in`. Overlays that zoom in must set the Radix origin var (e.g. `origin-[--radix-popover-content-transform-origin]`). Animate `transform`/`opacity`, not width/height/padding/box-shadow. Gate looping or large-movement animations with `motion-reduce:`. Command palettes and keyboard-triggered actions get no animation.
|
|
86
102
|
- **Composition**: Match the workflow. Operational apps should be dense and scannable; marketing or portfolio pages can be more immersive.
|
|
87
103
|
- **Visual assets**: Websites, games, and object-focused pages need real or generated media when images help users understand the subject.
|
|
88
104
|
- **Responsive fit**: Text must not overflow buttons, cards, tabs, sidebars, or fixed-format tools. Use stable dimensions for boards, grids, toolbars, and counters.
|
|
89
105
|
|
|
90
|
-
**Beat convergence, not just defaults.** You sample toward the "on-distribution" center, so naming what to avoid is not enough: every "don't" needs a "do", or you converge on the next safe option
|
|
106
|
+
**Beat convergence, not just defaults.** You sample toward the "on-distribution" center, so naming what to avoid is not enough: every "don't" needs a "do", or you converge on the next safe option. Commit to one named direction, pair any reference with the reason it fits, and match implementation effort to the vision. If the brief is open, consider two or three coherent visual worlds, then commit to one instead of averaging them. When building on an existing app, inspect its tokens/type/components first and treat any drift back to a default as a missing token to pin, not something to re-prompt.
|
|
91
107
|
|
|
92
108
|
## Agent-Native UI Rules
|
|
93
109
|
|
|
@@ -164,6 +180,9 @@ as an operator would use it repeatedly:
|
|
|
164
180
|
- For review flows, stack the source/original first and the generated or safe
|
|
165
181
|
result second by default. Use side-by-side comparison only when the content
|
|
166
182
|
is short enough to scan without excessive horizontal reading.
|
|
183
|
+
- Compare the result with sibling apps. Shared toolkit behavior should feel
|
|
184
|
+
consistent, but a repeated palette, hero composition, type pairing, and
|
|
185
|
+
radius language without a product reason is visual drift, not consistency.
|
|
167
186
|
- Check the result at the target desktop width and a narrow width. If the first
|
|
168
187
|
viewport feels like documentation instead of a tool, subtract again.
|
|
169
188
|
|
|
@@ -216,6 +235,8 @@ For substantial frontend work:
|
|
|
216
235
|
5. When registering or changing a company adapter, run
|
|
217
236
|
`@agent-native/toolkit/conformance`, including mixed-overlay focus,
|
|
218
237
|
`portalContainer`, and z-index stacking checks.
|
|
238
|
+
6. For a new app or a visual redesign, review `DESIGN.md` against the rendered
|
|
239
|
+
surface and run the anti-slop audit in `references/visual-direction.md`.
|
|
219
240
|
|
|
220
241
|
## Related Skills
|
|
221
242
|
|