@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
@@ -12,6 +12,12 @@ import {
12
12
  } from "h3";
13
13
  import { nanoid } from "nanoid";
14
14
 
15
+ import {
16
+ MAX_UPLOAD_BYTES,
17
+ MAX_UPLOAD_MB,
18
+ TOTAL_BODY_LIMIT,
19
+ } from "../lib/request-body-limits.js";
20
+
15
21
  function isServerlessRuntime(env: NodeJS.ProcessEnv = process.env): boolean {
16
22
  return Boolean(
17
23
  env.NETLIFY ||
@@ -176,12 +182,8 @@ export const uploadFiles = defineEventHandler(async (event) => {
176
182
  }
177
183
 
178
184
  const MAX_FILES = 20;
179
- const MAX_FILE_SIZE = 50 * 1024 * 1024;
180
- // Total-body pre-flight: reject before buffering if Content-Length is clearly
181
- // over the theoretical max (MAX_FILES × MAX_FILE_SIZE each, plus overhead).
182
- // Content-Length can be spoofed but cheaply eliminates accidental oversized
183
- // uploads without allocating any memory for the body first.
184
- const TOTAL_BODY_LIMIT = MAX_FILES * MAX_FILE_SIZE;
185
+ // Content-Length can be spoofed, so the parsed-byte check below is the real
186
+ // limit; this only avoids buffering an obviously oversized body first.
185
187
  const contentLength = Number(
186
188
  getRequestHeader(event, "content-length") ?? "0",
187
189
  );
@@ -203,10 +205,12 @@ export const uploadFiles = defineEventHandler(async (event) => {
203
205
  return { error: `Too many files (max ${MAX_FILES})` };
204
206
  }
205
207
 
206
- const oversized = fileParts.find((p) => p.data.length > MAX_FILE_SIZE);
207
- if (oversized) {
208
+ const totalBytes = fileParts.reduce((sum, p) => sum + p.data.length, 0);
209
+ if (totalBytes > MAX_UPLOAD_BYTES) {
208
210
  setResponseStatus(event, 413);
209
- return { error: "File too large (max 50 MB per file)" };
211
+ return {
212
+ error: `Attachments are too large (max ${MAX_UPLOAD_MB} MB total)`,
213
+ };
210
214
  }
211
215
 
212
216
  const results = await Promise.allSettled<InternalUploadedFileResult>(
@@ -1,3 +1,4 @@
1
- /** Shared request/decoder caps for the experimental untrusted `.fig` path. */
1
+ /** Decoder caps for the experimental untrusted `.fig` path. The wire cap that
2
+ * bounds what can actually be uploaded lives in `request-body-limits.ts`. */
2
3
  export const MAX_FIG_FILE_BYTES = 50 * 1024 * 1024;
3
4
  export const MAX_FIG_DECOMPRESSED_BYTES = 96 * 1024 * 1024;
@@ -294,7 +294,7 @@ function mimeTypeForExt(ext: string): string {
294
294
  /**
295
295
  * Decode a `.fig` and index its embedded images by SHA-1 hash. Decode once per
296
296
  * upload and reuse the index across screens — a multi-screen hydration must not
297
- * re-parse the whole (up to 50 MB) file per screen.
297
+ * re-parse the whole file per screen.
298
298
  */
299
299
  export function indexFigImages(figBytes: Buffer): Map<string, DecodedFigImage> {
300
300
  const byHash = new Map<string, DecodedFigImage>();
@@ -304,7 +304,7 @@ async function mirrorFigmaImageUrls(
304
304
  }
305
305
  if (!uploaded?.url || /^(?:data|blob):/i.test(uploaded.url)) {
306
306
  throw new Error(
307
- "Figma import needs durable file storage for rendered images. Connect Builder.io in Settings > File uploads, or configure S3, R2, GCS, or another file upload provider, then try again. No image bytes were stored in SQL.",
307
+ "Figma import needs durable file storage for rendered images. Connect Builder.io (free tier available) in Settings > File uploads, or configure S3, R2, GCS, or another file upload provider, then try again. No image bytes were stored in SQL.",
308
308
  );
309
309
  }
310
310
  return [url, uploaded.url] as const;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Netlify base64-encodes the body into a 6 MB function payload, so uploads need
3
+ * ~33% headroom; above this the platform 413s with an empty body before any
4
+ * handler runs, and raising the number here cannot help.
5
+ */
6
+ export const MAX_UPLOAD_BYTES = 4 * 1024 * 1024;
7
+ export const MAX_UPLOAD_MB = MAX_UPLOAD_BYTES / 1024 / 1024;
8
+
9
+ /** Multipart boundaries and field headers carried on top of the file bytes. */
10
+ export const MULTIPART_OVERHEAD_BYTES = 64 * 1024;
11
+ export const TOTAL_BODY_LIMIT = MAX_UPLOAD_BYTES + MULTIPART_OVERHEAD_BYTES;
@@ -58,6 +58,87 @@ export function parseCanvasFrameGeometryById(
58
58
  );
59
59
  }
60
60
 
61
+ /** Design-data maps whose per-entry dimension keys must be persisted as JSON
62
+ * numbers. Every reader treats a non-number as absent, so accepting `"800"`
63
+ * would silently drop the write instead of resizing anything. */
64
+ const NUMERIC_DESIGN_DATA_ENTRY_KEYS: Record<string, ReadonlySet<string>> = {
65
+ canvasFrames: new Set(CANVAS_FRAME_GEOMETRY_KEYS),
66
+ screenMetadata: new Set(["width", "height"]),
67
+ localhostScreens: new Set(["width", "height"]),
68
+ };
69
+
70
+ function describeRejectedValue(value: unknown): string {
71
+ if (value === null) return "null";
72
+ if (typeof value === "string") return `the string ${JSON.stringify(value)}`;
73
+ if (typeof value === "number") return `the non-finite number ${value}`;
74
+ if (Array.isArray(value)) return "an array";
75
+ return `a ${typeof value}`;
76
+ }
77
+
78
+ function numericValueError(
79
+ map: string,
80
+ key: string,
81
+ value: unknown,
82
+ ): string | null {
83
+ if (typeof value === "number" && Number.isFinite(value)) return null;
84
+ return (
85
+ `Design ${map} "${key}" must be a finite JSON number, received ${describeRejectedValue(value)}. ` +
86
+ `Write dimensions and positions as numbers (800), not strings ("800" or "800px"); ` +
87
+ `use a delete operation to clear one.`
88
+ );
89
+ }
90
+
91
+ function numericEntryError(
92
+ map: string,
93
+ entry: unknown,
94
+ numericKeys: ReadonlySet<string>,
95
+ ): string | null {
96
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) return null;
97
+ for (const [key, value] of Object.entries(entry)) {
98
+ if (!numericKeys.has(key)) continue;
99
+ const error = numericValueError(map, key, value);
100
+ if (error) return error;
101
+ }
102
+ return null;
103
+ }
104
+
105
+ /**
106
+ * Message describing why a path-addressed design-data write carries a
107
+ * non-numeric dimension, or null when the write is acceptable.
108
+ *
109
+ * Callers must reject on a message rather than coercing: the readers below
110
+ * drop non-numbers, so a coerced write and an ignored one are indistinguishable
111
+ * to whoever asked for the resize.
112
+ */
113
+ export function numericDesignDataWriteError(
114
+ path: readonly string[],
115
+ value: unknown,
116
+ ): string | null {
117
+ const map = path[0];
118
+ const numericKeys = map ? NUMERIC_DESIGN_DATA_ENTRY_KEYS[map] : undefined;
119
+ if (!map || !numericKeys) return null;
120
+
121
+ if (path.length === 1) {
122
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
123
+ return null;
124
+ }
125
+ for (const entry of Object.values(value)) {
126
+ const error = numericEntryError(map, entry, numericKeys);
127
+ if (error) return error;
128
+ }
129
+ return null;
130
+ }
131
+
132
+ if (path.length === 2) return numericEntryError(map, value, numericKeys);
133
+
134
+ const key = path[2]!;
135
+ if (!numericKeys.has(key)) return null;
136
+ if (path.length > 3) {
137
+ return `Design ${map} "${key}" is a single number and has no nested values.`;
138
+ }
139
+ return numericValueError(map, key, value);
140
+ }
141
+
61
142
  /** Y a new group must start at to clear existing frames, or 0 when the board is
62
143
  * empty. Placing at y=0 unconditionally stacks each new group on the last. */
63
144
  export function nextFreeCanvasRowY(
@@ -162,7 +162,9 @@ export const INLINE_DEFAULT_CAPABILITIES: DesignSourceCapabilities = {
162
162
  diffPatch: available(),
163
163
  captureSnapshot: available(),
164
164
  captureState: available(),
165
- indexComponents: unavailable("Connect Builder to index real components"),
165
+ indexComponents: unavailable(
166
+ "Connect Builder (free tier available) to index real components",
167
+ ),
166
168
  indexTokens: available(),
167
169
  writeTokens: unavailable("Token source write-back requires a real app"),
168
170
  previewMotion: available(),
@@ -221,24 +223,38 @@ export const LOCALHOST_DEFAULT_CAPABILITIES: DesignSourceCapabilities = {
221
223
  * returns `true` and a branch project is configured.
222
224
  */
223
225
  export const FUSION_DISCONNECTED_CAPABILITIES: DesignSourceCapabilities = {
224
- readFile: planned("Connect Builder to enable file reads on fusion sources"),
225
- writeFile: unavailable("Connect Builder to enable source writes"),
226
- applyEdit: unavailable("Connect Builder to enable source edits"),
226
+ readFile: planned(
227
+ "Connect Builder (free tier available) to enable file reads on fusion sources",
228
+ ),
229
+ writeFile: unavailable(
230
+ "Connect Builder (free tier available) to enable source writes",
231
+ ),
232
+ applyEdit: unavailable(
233
+ "Connect Builder (free tier available) to enable source edits",
234
+ ),
227
235
  resolveNodeToFile: available(),
228
236
  previewPatch: available(),
229
237
  diffPatch: available(),
230
238
  captureSnapshot: available(),
231
239
  captureState: available(),
232
- indexComponents: unavailable("Connect Builder to index real components"),
240
+ indexComponents: unavailable(
241
+ "Connect Builder (free tier available) to index real components",
242
+ ),
233
243
  indexTokens: available(),
234
- writeTokens: unavailable("Connect Builder to enable token write-back"),
244
+ writeTokens: unavailable(
245
+ "Connect Builder (free tier available) to enable token write-back",
246
+ ),
235
247
  previewMotion: available(),
236
248
  writeMotion: planned(
237
249
  "Motion write-back to real source requires bridge hardening",
238
250
  ),
239
- branch: unavailable("Connect Builder to create branches"),
240
- deployPreview: unavailable("Connect Builder to deploy previews"),
241
- deploy: unavailable("Connect Builder to deploy"),
251
+ branch: unavailable(
252
+ "Connect Builder (free tier available) to create branches",
253
+ ),
254
+ deployPreview: unavailable(
255
+ "Connect Builder (free tier available) to deploy previews",
256
+ ),
257
+ deploy: unavailable("Connect Builder (free tier available) to deploy"),
242
258
  };
243
259
 
244
260
  /**
@@ -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:
@@ -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
 
@@ -0,0 +1,99 @@
1
+ # Visual Direction Reference
2
+
3
+ Use this reference when a new app or workspace needs a visual point of view and
4
+ does not already have an established brand system. It adapts the useful parts
5
+ of Impeccable's workflow: understand the product, name the surface mode, deal
6
+ several coherent directions, commit to one, and audit the result for defaults
7
+ that became the design by accident.
8
+
9
+ ## The direction contract
10
+
11
+ Before writing UI, capture these decisions in the app's `DESIGN.md`:
12
+
13
+ | Decision | What to record |
14
+ | -------------------- | ------------------------------------------------------------------- |
15
+ | Product mode | `operate`, `read`, `persuade`, or `experience` |
16
+ | Audience and cadence | Who uses it, how often, and under what conditions |
17
+ | Visual world | A short name and the feeling it creates |
18
+ | Palette family | The semantic accent family and neutral undertone |
19
+ | Type treatment | Sans-first, editorial contrast, or display-led emphasis |
20
+ | Composition | Dense console, focused workbench, document, canvas, or guided steps |
21
+ | Shape language | Quiet corners, crisp geometry, or soft utility surfaces |
22
+ | Anti-references | Defaults this app must not drift toward |
23
+
24
+ `DESIGN.md` is a portable design contract, not a license to bypass the app's
25
+ tokens or component system. If the app already has a brand system, document it
26
+ and preserve it. If it does not, choose a direction before styling.
27
+
28
+ ## Palette families
29
+
30
+ Use one family as an accent and keep the rest of the system semantic and quiet.
31
+ These are starting points, not a fixed theme library:
32
+
33
+ | Family | Good fit | Typical character |
34
+ | ---------------- | ------------------------------------------- | --------------------------------- |
35
+ | Ink / graphite | Admin, security, sensitive review | Serious, low-noise, high contrast |
36
+ | Cobalt / sky | Planning, collaboration, scheduling | Clear, trustworthy, alert |
37
+ | Pine / teal | Automation, systems, finance, data | Calm, capable, grounded |
38
+ | Indigo / violet | Slides, creative tools, research | Exploratory, focused, expressive |
39
+ | Plum / berry | Publishing, knowledge, editorial work | Distinctive, thoughtful, human |
40
+ | Coral / rose | Communication, people, customer workflows | Warm, direct, social |
41
+ | Ochre / citron | Lightweight planning or energetic utilities | Optimistic, sparing, directional |
42
+ | Paper / charcoal | Long-form reading, exports, approvals | Tactile, restrained, legible |
43
+
44
+ Do not make warm beige plus terracotta the universal fallback. Do not rotate
45
+ through saturated colors mechanically. Choose the family that supports the
46
+ workflow, then verify contrast, dark mode, focus states, destructive states,
47
+ and the sidebar boundary.
48
+
49
+ ## Variation without chaos
50
+
51
+ Vary at least two independent axes when sibling apps share a workspace:
52
+
53
+ - accent family or neutral undertone;
54
+ - information density and page composition;
55
+ - type contrast and display treatment;
56
+ - radius and border language;
57
+ - navigation emphasis and use of whitespace.
58
+
59
+ Keep shared behavior, semantic token names, accessibility, and AgentSidebar
60
+ placement consistent. The goal is a family of products, not five unrelated
61
+ themes and not five copies of the same starter.
62
+
63
+ For a batch of apps, keep a small direction ledger in the workspace
64
+ `DESIGN.md` or the handoff. Record each app's mode, direction, and palette
65
+ family, then choose a new family or a clearly different composition for the
66
+ next app unless an existing brand requires reuse. Never copy a sibling's
67
+ `global.css` palette block or treat the last app's accent as the generator
68
+ default.
69
+
70
+ ## Review vocabulary
71
+
72
+ Make one named intervention at a time so the agent can reason about the
73
+ change:
74
+
75
+ - `distill` - remove copy, controls, cards, and chrome that do not serve the
76
+ next decision;
77
+ - `typeset` - repair hierarchy, measure, line length, and emphasis;
78
+ - `colorize` - establish a restrained semantic palette and contrast states;
79
+ - `layout` - repair grouping, density, alignment, and responsive composition;
80
+ - `polish` - resolve the small visual inconsistencies after the structure is
81
+ right;
82
+ - `audit` - check slop, accessibility, responsive behavior, and visual drift.
83
+
84
+ Do not average several directions into a generic compromise. Deal two or three
85
+ coherent options when the brief is open, select one, and encode the decision in
86
+ tokens and `DESIGN.md`.
87
+
88
+ ## Anti-slop audit
89
+
90
+ Before handoff, inspect the first viewport and ask:
91
+
92
+ - Did the app inherit the neighboring app's palette or hero layout without a
93
+ product reason?
94
+ - Are there equal-weight cards, status chips, helper paragraphs, or controls
95
+ that should be removed or disclosed?
96
+ - Does the typography fit the product mode instead of decorating the shell?
97
+ - Is the AgentSidebar distinct but quiet, with the domain page still primary?
98
+ - Are focus, loading, empty, error, dark, and narrow-width states part of the
99
+ same design direction?
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 1,
3
+ "onboarding": {
4
+ "firstRun": {
5
+ "development": "off",
6
+ "production": "connect-and-integrations"
7
+ }
8
+ },
9
+ "doctor": {
10
+ "failOnBuild": false
11
+ }
12
+ }
@@ -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:
@@ -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