@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.
Files changed (446) hide show
  1. package/agent-native.eject.json +2 -0
  2. package/corpus/README.md +1 -1
  3. package/corpus/templates/analytics/.agents/skills/agent-native-docs/SKILL.md +23 -3
  4. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  5. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +15 -0
  6. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +23 -2
  7. package/corpus/templates/analytics/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  8. package/corpus/templates/analytics/AGENTS.md +2 -2
  9. package/corpus/templates/analytics/actions/get-first-party-analytics-health.ts +65 -0
  10. package/corpus/templates/analytics/actions/provider-api-catalog.ts +3 -6
  11. package/corpus/templates/analytics/actions/provider-api-docs.ts +3 -6
  12. package/corpus/templates/analytics/actions/provider-api-request.ts +3 -6
  13. package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +3 -3
  14. package/corpus/templates/analytics/agent-native.json +12 -0
  15. package/corpus/templates/analytics/app/i18n-data.ts +162 -0
  16. package/corpus/templates/analytics/app/pages/DataSources.tsx +126 -1
  17. package/corpus/templates/analytics/changelog/2026-08-05-analytics-now-flags-neon-pressure-and-guides-high-volume-tra.md +6 -0
  18. package/corpus/templates/analytics/changelog/2026-08-05-first-party-analytics-uses-compact-rollups-for-faster-usage-.md +6 -0
  19. package/corpus/templates/analytics/server/db/schema.ts +52 -0
  20. package/corpus/templates/analytics/server/lib/credential-keys.ts +3 -0
  21. package/corpus/templates/analytics/server/lib/first-party-analytics-health.ts +397 -0
  22. package/corpus/templates/analytics/server/lib/first-party-analytics-rollups.ts +182 -0
  23. package/corpus/templates/analytics/server/lib/first-party-analytics.ts +86 -15
  24. package/corpus/templates/analytics/server/lib/provider-api.ts +20 -1
  25. package/corpus/templates/analytics/server/lib/replay-storage.ts +1 -1
  26. package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
  27. package/corpus/templates/analytics/server/plugins/db.ts +60 -0
  28. package/corpus/templates/assets/.agents/skills/agent-native-docs/SKILL.md +23 -3
  29. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  30. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +23 -2
  31. package/corpus/templates/assets/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  32. package/corpus/templates/assets/agent-native.json +12 -0
  33. package/corpus/templates/assets/server/lib/generation.ts +8 -8
  34. package/corpus/templates/assets/server/lib/storage.ts +1 -1
  35. package/corpus/templates/assets/server/plugins/onboarding.ts +1 -1
  36. package/corpus/templates/brain/.agents/skills/agent-native-docs/SKILL.md +23 -3
  37. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  38. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +23 -2
  39. package/corpus/templates/brain/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  40. package/corpus/templates/brain/agent-native.json +12 -0
  41. package/corpus/templates/calendar/.agents/skills/agent-native-docs/SKILL.md +23 -3
  42. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  43. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +23 -2
  44. package/corpus/templates/calendar/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  45. package/corpus/templates/calendar/agent-native.json +12 -0
  46. package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +23 -3
  47. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  48. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +23 -2
  49. package/corpus/templates/chat/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  50. package/corpus/templates/chat/AGENTS.md +3 -0
  51. package/corpus/templates/chat/DESIGN.md +28 -0
  52. package/corpus/templates/chat/agent-native.json +12 -0
  53. package/corpus/templates/clips/.agents/skills/agent-native-docs/SKILL.md +23 -3
  54. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  55. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +23 -2
  56. package/corpus/templates/clips/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  57. package/corpus/templates/clips/actions/cleanup-transcript.ts +2 -2
  58. package/corpus/templates/clips/actions/delete-recording-permanent.ts +3 -0
  59. package/corpus/templates/clips/actions/get-playback-position.ts +68 -0
  60. package/corpus/templates/clips/actions/import-loom-recording.ts +2 -2
  61. package/corpus/templates/clips/actions/save-playback-position.ts +80 -0
  62. package/corpus/templates/clips/actions/set-thumbnail.ts +1 -1
  63. package/corpus/templates/clips/agent-native.json +12 -0
  64. package/corpus/templates/clips/app/components/player/video-player.tsx +54 -5
  65. package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +65 -18
  66. package/corpus/templates/clips/app/hooks/use-playback-position.ts +188 -0
  67. package/corpus/templates/clips/app/hooks/use-view-tracking.ts +6 -24
  68. package/corpus/templates/clips/app/i18n/en-US.ts +4 -0
  69. package/corpus/templates/clips/app/lib/playback-position.ts +99 -0
  70. package/corpus/templates/clips/app/lib/viewer-session.ts +29 -0
  71. package/corpus/templates/clips/changelog/2026-08-05-clip-buffering-now-uses-buffering-copy-after-playback.md +6 -0
  72. package/corpus/templates/clips/changelog/2026-08-05-clips-remembers-your-playback-position-when-you-reopen-a-cli.md +6 -0
  73. package/corpus/templates/clips/desktop/package.json +1 -0
  74. package/corpus/templates/clips/desktop/src/app.tsx +70 -6
  75. package/corpus/templates/clips/desktop/src/components/AlertDialog.tsx +131 -0
  76. package/corpus/templates/clips/desktop/src/styles.css +129 -0
  77. package/corpus/templates/clips/learnings.defaults.md +1 -1
  78. package/corpus/templates/clips/server/db/schema.ts +18 -0
  79. package/corpus/templates/clips/server/lib/public-agent-context.ts +1 -1
  80. package/corpus/templates/clips/server/lib/video-storage.ts +1 -1
  81. package/corpus/templates/clips/server/plugins/db.ts +15 -0
  82. package/corpus/templates/clips/server/routes/api/media/index.post.ts +1 -1
  83. package/corpus/templates/content/.agents/skills/agent-native-docs/SKILL.md +23 -3
  84. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  85. package/corpus/templates/content/.agents/skills/document-editing/references/databases.md +13 -0
  86. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +23 -2
  87. package/corpus/templates/content/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  88. package/corpus/templates/content/AGENTS.md +1 -0
  89. package/corpus/templates/content/actions/_content-database-mutation-lock.ts +41 -0
  90. package/corpus/templates/content/actions/_content-database-row-migration.ts +569 -0
  91. package/corpus/templates/content/actions/_database-source-utils.ts +82 -36
  92. package/corpus/templates/content/actions/_database-utils.ts +5 -0
  93. package/corpus/templates/content/actions/_delete-content-space.ts +25 -11
  94. package/corpus/templates/content/actions/add-database-item.ts +60 -42
  95. package/corpus/templates/content/actions/attach-content-database-source.ts +2 -0
  96. package/corpus/templates/content/actions/configure-document-property.ts +99 -104
  97. package/corpus/templates/content/actions/delete-content-database.ts +19 -7
  98. package/corpus/templates/content/actions/delete-document-property.ts +47 -58
  99. package/corpus/templates/content/actions/delete-document.ts +390 -167
  100. package/corpus/templates/content/actions/disconnect-content-database-source.ts +41 -24
  101. package/corpus/templates/content/actions/duplicate-database-item.ts +63 -31
  102. package/corpus/templates/content/actions/duplicate-database-items.ts +86 -43
  103. package/corpus/templates/content/actions/duplicate-document-property.ts +37 -14
  104. package/corpus/templates/content/actions/migrate-content-database-rows.ts +830 -0
  105. package/corpus/templates/content/actions/move-database-item.ts +14 -0
  106. package/corpus/templates/content/actions/permanently-delete-document.ts +27 -6
  107. package/corpus/templates/content/actions/remove-database-items.ts +13 -0
  108. package/corpus/templates/content/actions/reorder-document-property.ts +45 -46
  109. package/corpus/templates/content/actions/set-document-property.ts +68 -28
  110. package/corpus/templates/content/actions/submit-content-database-form.ts +49 -0
  111. package/corpus/templates/content/actions/transcribe-media.ts +1 -1
  112. package/corpus/templates/content/agent-native.json +12 -0
  113. package/corpus/templates/content/app/components/editor/image-upload.ts +2 -2
  114. package/corpus/templates/content/app/i18n-data.ts +1 -1
  115. package/corpus/templates/content/changelog/2026-08-01-content-can-reorganize-every-row-in-an-existing-database-as-.md +6 -0
  116. package/corpus/templates/content/parity/matrix.md +1 -1
  117. package/corpus/templates/content/parity/matrix.ts +4 -2
  118. package/corpus/templates/content/server/db/schema.ts +30 -0
  119. package/corpus/templates/content/server/plugins/db.ts +24 -0
  120. package/corpus/templates/content/server/plugins/onboarding.ts +2 -2
  121. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +23 -3
  122. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  123. package/corpus/templates/crm/agent-native.json +12 -0
  124. package/corpus/templates/design/.agents/skills/agent-native-docs/SKILL.md +23 -3
  125. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  126. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +2 -0
  127. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +23 -2
  128. package/corpus/templates/design/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  129. package/corpus/templates/design/CODE_NATIVE_DESIGN_STUDIO_IMPLEMENTATION_PLAN.md +2 -2
  130. package/corpus/templates/design/DESIGN-STUDIO-PLAN.md +2 -2
  131. package/corpus/templates/design/actions/apply-design-token-edit.ts +1 -1
  132. package/corpus/templates/design/actions/capture-design-state.ts +1 -1
  133. package/corpus/templates/design/actions/connect-builder-app.ts +2 -2
  134. package/corpus/templates/design/actions/create-design-branch.ts +1 -1
  135. package/corpus/templates/design/actions/create-fusion-app.ts +3 -3
  136. package/corpus/templates/design/actions/deploy-design-preview.ts +1 -1
  137. package/corpus/templates/design/actions/generate-design.ts +3 -2
  138. package/corpus/templates/design/actions/get-component-details.ts +1 -1
  139. package/corpus/templates/design/actions/get-design-branch-diff.ts +1 -1
  140. package/corpus/templates/design/actions/index-components.ts +3 -3
  141. package/corpus/templates/design/actions/index-design-system-with-builder.ts +1 -1
  142. package/corpus/templates/design/actions/migrate-inline-design-to-app.ts +3 -3
  143. package/corpus/templates/design/actions/open-component-source.ts +1 -1
  144. package/corpus/templates/design/actions/update-design.ts +96 -14
  145. package/corpus/templates/design/agent-native.json +12 -0
  146. package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +7 -2
  147. package/corpus/templates/design/app/components/design/FigmaHydrationDialog.tsx +11 -2
  148. package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +1 -1
  149. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -1
  150. package/corpus/templates/design/app/i18n-data.ts +53 -22
  151. package/corpus/templates/design/app/lib/design-file-upload.ts +2 -3
  152. package/corpus/templates/design/app/lib/upload-limits.ts +4 -0
  153. package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +1 -1
  154. package/corpus/templates/design/changelog/2026-08-05-chat-attachments-now-warn-before-upload-when-they-exceed-the.md +6 -0
  155. package/corpus/templates/design/changelog/2026-08-05-figma-fig-uploads-now-show-a-clear-4-mb-limit-up-front-inste.md +6 -0
  156. package/corpus/templates/design/scripts/qa-figma-stress-import.ts +1 -1
  157. package/corpus/templates/design/server/handlers/import-design-file.ts +9 -5
  158. package/corpus/templates/design/server/handlers/uploads.ts +13 -9
  159. package/corpus/templates/design/server/lib/fig-file-limits.ts +2 -1
  160. package/corpus/templates/design/server/lib/figma-image-hydration.ts +1 -1
  161. package/corpus/templates/design/server/lib/figma-node-import.ts +1 -1
  162. package/corpus/templates/design/server/lib/request-body-limits.ts +11 -0
  163. package/corpus/templates/design/shared/canvas-frames.ts +81 -0
  164. package/corpus/templates/design/shared/design-source-capabilities.ts +25 -9
  165. package/corpus/templates/dispatch/.agents/skills/agent-native-docs/SKILL.md +23 -3
  166. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  167. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +23 -2
  168. package/corpus/templates/dispatch/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  169. package/corpus/templates/dispatch/agent-native.json +12 -0
  170. package/corpus/templates/factory/.agents/skills/agent-native-docs/SKILL.md +23 -3
  171. package/corpus/templates/factory/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  172. package/corpus/templates/factory/.agents/skills/frontend-design/SKILL.md +23 -2
  173. package/corpus/templates/factory/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  174. package/corpus/templates/factory/agent-native.json +12 -0
  175. package/corpus/templates/forms/.agents/skills/agent-native-docs/SKILL.md +23 -3
  176. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  177. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +23 -2
  178. package/corpus/templates/forms/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  179. package/corpus/templates/forms/actions/export-responses.ts +1 -1
  180. package/corpus/templates/forms/agent-native.json +12 -0
  181. package/corpus/templates/macros/.agents/skills/agent-native-docs/SKILL.md +23 -3
  182. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  183. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +23 -2
  184. package/corpus/templates/macros/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  185. package/corpus/templates/macros/agent-native.json +12 -0
  186. package/corpus/templates/mail/.agents/skills/agent-native-docs/SKILL.md +23 -3
  187. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  188. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +23 -2
  189. package/corpus/templates/mail/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  190. package/corpus/templates/mail/agent-native.json +12 -0
  191. package/corpus/templates/mail/app/i18n/en-US.ts +1 -1
  192. package/corpus/templates/mail/server/lib/media-upload.ts +1 -1
  193. package/corpus/templates/plan/.agents/skills/agent-native-docs/SKILL.md +23 -3
  194. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  195. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +23 -2
  196. package/corpus/templates/plan/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  197. package/corpus/templates/plan/agent-native.json +12 -0
  198. package/corpus/templates/plan/server/lib/plan-assets.ts +1 -1
  199. package/corpus/templates/slides/.agents/skills/agent-native-docs/SKILL.md +23 -3
  200. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  201. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +23 -2
  202. package/corpus/templates/slides/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  203. package/corpus/templates/slides/actions/generate-image-api.ts +1 -1
  204. package/corpus/templates/slides/actions/generate-slides-ai.ts +1 -1
  205. package/corpus/templates/slides/actions/import-file.ts +2 -2
  206. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +1 -1
  207. package/corpus/templates/slides/agent-native.json +12 -0
  208. package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +1 -1
  209. package/corpus/templates/slides/app/i18n/en-US.ts +2 -2
  210. package/corpus/templates/slides/app/lib/deck-sorting.ts +19 -0
  211. package/corpus/templates/slides/app/lib/image-drop-to-agent.ts +1 -1
  212. package/corpus/templates/slides/app/pages/Index.tsx +7 -2
  213. package/corpus/templates/slides/changelog/2026-08-05-decks-are-now-sorted-by-most-recently-updated.md +6 -0
  214. package/corpus/templates/slides/server/handlers/assets.ts +1 -1
  215. package/corpus/templates/slides/server/handlers/uploads.ts +1 -1
  216. package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +23 -3
  217. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  218. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +23 -2
  219. package/corpus/templates/tasks/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  220. package/corpus/templates/tasks/agent-native.json +12 -0
  221. package/dist/action.d.ts +6 -0
  222. package/dist/agent/engine/builder-engine.js +2 -2
  223. package/dist/agent/engine/credential-errors.d.ts +1 -1
  224. package/dist/agent/engine/credential-errors.js +2 -2
  225. package/dist/agent/production-agent.js +3 -2
  226. package/dist/brand-kit/fig/index.js +1 -1
  227. package/dist/cli/agent.js +45 -3
  228. package/dist/cli/code-agent-executor.js +2 -1
  229. package/dist/cli/create.d.ts +9 -1
  230. package/dist/cli/create.js +94 -1
  231. package/dist/cli/doctor.d.ts +8 -11
  232. package/dist/cli/doctor.js +92 -24
  233. package/dist/cli/index.js +6 -5
  234. package/dist/client/AgentAskPopover.d.ts +3 -1
  235. package/dist/client/AgentAskPopover.js +2 -2
  236. package/dist/client/AgentPanel.js +9 -3
  237. package/dist/client/AssistantChat.js +54 -33
  238. package/dist/client/MultiTabAssistantChat.js +1 -1
  239. package/dist/client/RouteTransitionIndicator.d.ts +7 -0
  240. package/dist/client/RouteTransitionIndicator.js +31 -0
  241. package/dist/client/agent-engine-key.js +1 -1
  242. package/dist/client/app-providers.js +11 -2
  243. package/dist/client/chat/message-components.js +1 -1
  244. package/dist/client/chat/run-recovery.js +1 -1
  245. package/dist/client/chat/tool-call-display.d.ts +3 -1
  246. package/dist/client/chat/tool-call-display.js +4 -3
  247. package/dist/client/chat-model-groups.d.ts +6 -0
  248. package/dist/client/chat-model-groups.js +11 -0
  249. package/dist/client/error-format.js +1 -1
  250. package/dist/client/i18n.js +1 -1
  251. package/dist/client/onboarding/FirstRunOnboarding.d.ts +5 -1
  252. package/dist/client/onboarding/FirstRunOnboarding.js +29 -13
  253. package/dist/client/onboarding/first-run-enabled.d.ts +6 -1
  254. package/dist/client/onboarding/first-run-enabled.js +33 -3
  255. package/dist/client/onboarding/use-onboarding.js +16 -11
  256. package/dist/client/require-session.js +13 -4
  257. package/dist/client/resources/mcp-integration-catalog.js +26 -0
  258. package/dist/client/resources/mcp-integration-logos.js +4 -0
  259. package/dist/client/route-warmup.js +56 -10
  260. package/dist/client/settings/AccountSettingsCard.js +78 -3
  261. package/dist/client/settings/SettingsPanel.js +1 -1
  262. package/dist/client/settings/VoiceTranscriptionSection.js +2 -2
  263. package/dist/client/settings/useBuilderStatus.js +1 -1
  264. package/dist/client/setup-connections/useBuilderConnectCardController.js +1 -1
  265. package/dist/client/ui/index.d.ts +1 -0
  266. package/dist/client/ui/index.js +1 -0
  267. package/dist/client/uploads/upload-editor-image.js +1 -1
  268. package/dist/client/use-chat-threads.js +3 -0
  269. package/dist/client/use-session.d.ts +11 -0
  270. package/dist/client/use-session.js +34 -6
  271. package/dist/collab/routes.d.ts +2 -2
  272. package/dist/config.d.ts +48 -0
  273. package/dist/config.js +111 -0
  274. package/dist/db/migrations.js +5 -0
  275. package/dist/eject/provider-api-definitions.d.ts +1 -1
  276. package/dist/eject/provider-api-definitions.js +1 -0
  277. package/dist/eject/remote-mcp-presets.js +1 -0
  278. package/dist/extensions/web-search-tool.js +2 -2
  279. package/dist/file-upload/actions/upload-image.js +1 -1
  280. package/dist/file-upload/registry.js +1 -1
  281. package/dist/guards/index.d.ts +3 -0
  282. package/dist/guards/index.js +2 -0
  283. package/dist/guards/no-empty-migrations.d.ts +14 -0
  284. package/dist/guards/no-empty-migrations.js +126 -0
  285. package/dist/index.browser.d.ts +1 -0
  286. package/dist/index.browser.js +3 -0
  287. package/dist/index.d.ts +1 -0
  288. package/dist/index.js +1 -0
  289. package/dist/localization/default-messages.d.ts +24 -0
  290. package/dist/localization/default-messages.js +26 -2
  291. package/dist/notifications/routes.d.ts +6 -6
  292. package/dist/onboarding/app-profile.js +1 -1
  293. package/dist/onboarding/plugin.d.ts +2 -0
  294. package/dist/onboarding/plugin.js +29 -2
  295. package/dist/progress/routes.d.ts +1 -1
  296. package/dist/provider-api/actions/custom-provider-registration.d.ts +16 -16
  297. package/dist/provider-api/actions/provider-api.d.ts +13 -13
  298. package/dist/provider-api/index.d.ts +4 -4
  299. package/dist/provider-api/index.js +35 -0
  300. package/dist/resources/handlers.d.ts +1 -1
  301. package/dist/resources/handlers.js +1 -1
  302. package/dist/scripts/docs/framework-search.d.ts +9 -0
  303. package/dist/scripts/docs/framework-search.js +239 -0
  304. package/dist/scripts/docs/index.js +1 -0
  305. package/dist/scripts/docs/search.d.ts +10 -0
  306. package/dist/scripts/docs/search.js +1 -1
  307. package/dist/scripts/docs/source-search.d.ts +10 -2
  308. package/dist/scripts/docs/source-search.js +108 -41
  309. package/dist/search-utils/index.d.ts +11 -0
  310. package/dist/search-utils/index.js +72 -0
  311. package/dist/server/action-change.d.ts +6 -0
  312. package/dist/server/action-change.js +28 -14
  313. package/dist/server/action-discovery.js +9 -0
  314. package/dist/server/action-routes.js +1 -0
  315. package/dist/server/agent-chat/browser-team-tools.js +1 -1
  316. package/dist/server/agent-chat/script-entries.js +43 -2
  317. package/dist/server/auth-login-mode.d.ts +8 -0
  318. package/dist/server/auth-login-mode.js +17 -0
  319. package/dist/server/auth.js +100 -15
  320. package/dist/server/better-auth-instance.d.ts +36 -0
  321. package/dist/server/better-auth-instance.js +25 -3
  322. package/dist/server/builder-design-systems.js +1 -1
  323. package/dist/server/core-routes-plugin.js +17 -14
  324. package/dist/server/credential-provider.js +3 -3
  325. package/dist/server/email-templates.d.ts +7 -0
  326. package/dist/server/email-templates.js +24 -0
  327. package/dist/server/email.d.ts +17 -0
  328. package/dist/server/email.js +22 -1
  329. package/dist/server/framework-request-handler.js +6 -0
  330. package/dist/server/onboarding-html.d.ts +2 -0
  331. package/dist/server/onboarding-html.js +169 -8
  332. package/dist/server/realtime-token.d.ts +1 -1
  333. package/dist/server/realtime-voice.js +1 -1
  334. package/dist/server/sentry.d.ts +1 -1
  335. package/dist/server/transcribe-voice.js +3 -3
  336. package/dist/shared/first-run-onboarding.d.ts +1 -0
  337. package/dist/shared/first-run-onboarding.js +1 -0
  338. package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +23 -3
  339. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  340. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +23 -2
  341. package/dist/templates/chat/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  342. package/dist/templates/chat/AGENTS.md +3 -0
  343. package/dist/templates/chat/DESIGN.md +28 -0
  344. package/dist/templates/chat/agent-native.json +12 -0
  345. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +23 -3
  346. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  347. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +23 -2
  348. package/dist/templates/default/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  349. package/dist/templates/default/AGENTS.md +4 -0
  350. package/dist/templates/default/DESIGN.md +30 -0
  351. package/dist/templates/default/agent-native.json +9 -0
  352. package/dist/templates/default/app/i18n/ar-SA.ts +2 -2
  353. package/dist/templates/default/app/i18n/de-DE.ts +2 -2
  354. package/dist/templates/default/app/i18n/en-US.ts +2 -2
  355. package/dist/templates/default/app/i18n/es-ES.ts +2 -2
  356. package/dist/templates/default/app/i18n/fr-FR.ts +2 -2
  357. package/dist/templates/default/app/i18n/hi-IN.ts +2 -2
  358. package/dist/templates/default/app/i18n/ja-JP.ts +2 -2
  359. package/dist/templates/default/app/i18n/ko-KR.ts +2 -2
  360. package/dist/templates/default/app/i18n/pt-BR.ts +2 -2
  361. package/dist/templates/default/app/i18n/zh-CN.ts +2 -2
  362. package/dist/templates/default/app/i18n/zh-TW.ts +1 -1
  363. package/dist/templates/default/package.json +1 -0
  364. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +23 -3
  365. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  366. package/dist/templates/headless/agent-native.json +9 -0
  367. package/dist/templates/headless/package.json +2 -0
  368. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +23 -3
  369. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  370. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +23 -2
  371. package/dist/templates/workspace-core/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  372. package/dist/templates/workspace-core/AGENTS.md +3 -0
  373. package/dist/templates/workspace-core/DESIGN.md +35 -0
  374. package/dist/templates/workspace-root/AGENTS.md +3 -0
  375. package/dist/templates/workspace-root/DESIGN.md +35 -0
  376. package/dist/templates/workspace-root/agent-native.json +9 -0
  377. package/dist/templates/workspace-root/package.json +3 -0
  378. package/dist/transcription/builder-transcription.js +1 -1
  379. package/dist/user-profile/actions/change-password.d.ts +8 -0
  380. package/dist/user-profile/actions/change-password.js +24 -0
  381. package/dist/user-profile/actions/get-auth-methods.d.ts +6 -0
  382. package/dist/user-profile/actions/get-auth-methods.js +23 -0
  383. package/dist/user-profile/actions/set-password.d.ts +7 -0
  384. package/dist/user-profile/actions/set-password.js +23 -0
  385. package/dist/vite/client.d.ts +8 -1
  386. package/dist/vite/client.js +63 -12
  387. package/dist/vite/index.d.ts +1 -0
  388. package/dist/vite/index.js +1 -0
  389. package/docs/AGENTS.md +7 -2
  390. package/docs/SKILL.md +7 -5
  391. package/docs/content/agent-native-config.mdx +165 -0
  392. package/docs/content/agent-native-toolkit.mdx +1 -1
  393. package/docs/content/deployment.mdx +7 -2
  394. package/docs/content/doctor.mdx +21 -13
  395. package/docs/content/environment-variables.mdx +158 -0
  396. package/docs/content/file-uploads.mdx +1 -1
  397. package/docs/content/getting-started.mdx +1 -1
  398. package/docs/content/key-concepts.mdx +1 -1
  399. package/docs/content/multi-app-workspace.mdx +1 -1
  400. package/docs/content/template-clips-ai-and-editing.mdx +6 -6
  401. package/docs/content/template-clips-developers.mdx +3 -3
  402. package/docs/content/toolkit-settings.mdx +1 -1
  403. package/docs/content/voice-input.mdx +4 -4
  404. package/package.json +6 -2
  405. package/src/eject/provider-api-definitions.ts +1 -0
  406. package/src/eject/remote-mcp-presets.ts +1 -0
  407. package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +23 -3
  408. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  409. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +23 -2
  410. package/src/templates/chat/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  411. package/src/templates/chat/AGENTS.md +3 -0
  412. package/src/templates/chat/DESIGN.md +28 -0
  413. package/src/templates/chat/agent-native.json +12 -0
  414. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +23 -3
  415. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  416. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +23 -2
  417. package/src/templates/default/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  418. package/src/templates/default/AGENTS.md +4 -0
  419. package/src/templates/default/DESIGN.md +30 -0
  420. package/src/templates/default/agent-native.json +9 -0
  421. package/src/templates/default/app/i18n/ar-SA.ts +2 -2
  422. package/src/templates/default/app/i18n/de-DE.ts +2 -2
  423. package/src/templates/default/app/i18n/en-US.ts +2 -2
  424. package/src/templates/default/app/i18n/es-ES.ts +2 -2
  425. package/src/templates/default/app/i18n/fr-FR.ts +2 -2
  426. package/src/templates/default/app/i18n/hi-IN.ts +2 -2
  427. package/src/templates/default/app/i18n/ja-JP.ts +2 -2
  428. package/src/templates/default/app/i18n/ko-KR.ts +2 -2
  429. package/src/templates/default/app/i18n/pt-BR.ts +2 -2
  430. package/src/templates/default/app/i18n/zh-CN.ts +2 -2
  431. package/src/templates/default/app/i18n/zh-TW.ts +1 -1
  432. package/src/templates/default/package.json +1 -0
  433. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +23 -3
  434. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  435. package/src/templates/headless/agent-native.json +9 -0
  436. package/src/templates/headless/package.json +2 -0
  437. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +23 -3
  438. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +16 -0
  439. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +23 -2
  440. package/src/templates/workspace-core/.agents/skills/frontend-design/references/visual-direction.md +99 -0
  441. package/src/templates/workspace-core/AGENTS.md +3 -0
  442. package/src/templates/workspace-core/DESIGN.md +35 -0
  443. package/src/templates/workspace-root/AGENTS.md +3 -0
  444. package/src/templates/workspace-root/DESIGN.md +35 -0
  445. package/src/templates/workspace-root/agent-native.json +9 -0
  446. 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
- void handleStartRecording({ ignoreActiveRecorder: true });
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&apos;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={handleStartRecording}
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={handleStartRecording}
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 a read-only
45
- `docs-search` tool with the same `query`, `slug`, and `list` options, plus a
46
- read-only `source-search` tool with `query`, `path`, and `list`.
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 (ban Inter and you reach for Roboto; ban purple gradients and you reach for Space Grotesk + a teal accent on every screen). Commit to one named direction, pair any reference with the reason it fits ("Linear: the quiet confidence of its spacing" a bare "Linear" collapses back to the average), and match implementation effort to the vision: maximalist wants elaborate motion and effects, minimal wants restraint and precise spacing. 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.
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