@agent-native/core 0.80.7 → 0.80.9

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 (302) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +18 -0
  3. package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +6 -0
  4. package/corpus/core/docs/content/locales/de-DE/template-design.mdx +8 -0
  5. package/corpus/core/docs/content/locales/es-ES/template-design.mdx +10 -2
  6. package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +10 -2
  7. package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +7 -0
  8. package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +7 -0
  9. package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +7 -0
  10. package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +9 -2
  11. package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +6 -0
  12. package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +6 -0
  13. package/corpus/core/docs/content/template-design.mdx +9 -2
  14. package/corpus/core/package.json +1 -1
  15. package/corpus/core/src/cli/mcp.ts +10 -0
  16. package/corpus/core/src/cli/skills.ts +58 -12
  17. package/corpus/core/src/client/AssistantChat.tsx +70 -27
  18. package/corpus/core/src/client/analytics.ts +3 -1
  19. package/corpus/core/src/client/error-format.ts +25 -0
  20. package/corpus/core/src/client/extensions/ExtensionViewer.tsx +13 -11
  21. package/corpus/core/src/client/guided-questions.tsx +32 -4
  22. package/corpus/core/src/client/onboarding/OnboardingPanel.tsx +33 -1
  23. package/corpus/core/src/client/resources/BuiltinCapabilityDetail.tsx +8 -0
  24. package/corpus/core/src/client/resources/use-builtin-capabilities.ts +4 -2
  25. package/corpus/core/src/client/session-replay.ts +34 -0
  26. package/corpus/core/src/client/sharing/ShareButton.tsx +106 -21
  27. package/corpus/core/src/coding-tools/index.ts +1 -1
  28. package/corpus/core/src/mcp/index.ts +2 -0
  29. package/corpus/core/src/mcp/screen-memory-stdio.ts +290 -0
  30. package/corpus/core/src/mcp-client/builtin-capabilities.ts +13 -1
  31. package/corpus/core/src/mcp-client/index.ts +9 -0
  32. package/corpus/core/src/mcp-client/screen-memory-local.ts +461 -0
  33. package/corpus/core/src/onboarding/types.ts +7 -0
  34. package/corpus/core/src/server/agent-chat-plugin.ts +25 -0
  35. package/corpus/core/src/server/agents-bundle.ts +35 -7
  36. package/corpus/core/src/styles/agent-native.css +5 -0
  37. package/corpus/core/src/templates/default/app/global.css +35 -35
  38. package/corpus/templates/analytics/AGENTS.md +6 -0
  39. package/corpus/templates/analytics/actions/github-repo-files.ts +9 -0
  40. package/corpus/templates/analytics/app/components/layout/Layout.tsx +4 -4
  41. package/corpus/templates/analytics/app/global.css +144 -40
  42. package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +1 -1
  43. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/ChartCard.tsx +1 -1
  44. package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +1 -1
  45. package/corpus/templates/analytics/app/pages/sessions/SessionDetailPage.tsx +4 -4
  46. package/corpus/templates/analytics/app/pages/sessions/SessionsPage.tsx +9 -9
  47. package/corpus/templates/analytics/changelog/2026-06-29-agents-can-search-and-read-connected-github-repositories-whe.md +6 -0
  48. package/corpus/templates/analytics/changelog/2026-06-29-sessions-and-explorer-layouts-adapt-when-the-agent-sidebar-is.md +6 -0
  49. package/corpus/templates/assets/app/components/layout/Layout.tsx +3 -1
  50. package/corpus/templates/assets/app/components/library/LibraryPresetGrid.tsx +1 -1
  51. package/corpus/templates/assets/app/global.css +99 -35
  52. package/corpus/templates/assets/app/routes/asset.$id.tsx +2 -2
  53. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +4 -4
  54. package/corpus/templates/assets/app/routes/library.tsx +4 -4
  55. package/corpus/templates/assets/changelog/2026-06-29-asset-library-and-detail-layouts-adapt-when-the-agent-sidebar.md +6 -0
  56. package/corpus/templates/brain/app/components/layout/Layout.tsx +1 -1
  57. package/corpus/templates/brain/app/global.css +63 -35
  58. package/corpus/templates/brain/app/routes/search.tsx +1 -1
  59. package/corpus/templates/brain/app/routes/settings.tsx +1 -1
  60. package/corpus/templates/brain/app/routes/sources.tsx +2 -2
  61. package/corpus/templates/brain/changelog/2026-06-29-search-settings-and-source-layouts-adapt-when-the-agent-sidebar.md +6 -0
  62. package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +4 -4
  63. package/corpus/templates/calendar/app/components/calendar/FindTimePanel.tsx +3 -2
  64. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +4 -2
  65. package/corpus/templates/calendar/app/global.css +69 -35
  66. package/corpus/templates/calendar/changelog/2026-06-29-event-and-find-time-layouts-adapt-when-the-agent-sidebar-is.md +6 -0
  67. package/corpus/templates/chat/app/components/layout/Layout.tsx +1 -1
  68. package/corpus/templates/chat/app/global.css +35 -35
  69. package/corpus/templates/chat/changelog/2026-06-29-chat-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  70. package/corpus/templates/clips/AGENTS.md +13 -0
  71. package/corpus/templates/clips/actions/get-screen-memory-status.ts +12 -0
  72. package/corpus/templates/clips/actions/query-screen-memory-context.ts +29 -0
  73. package/corpus/templates/clips/actions/view-screen.ts +2 -2
  74. package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
  75. package/corpus/templates/clips/app/global.css +47 -35
  76. package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +3 -3
  77. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +45 -18
  78. package/corpus/templates/clips/changelog/2026-06-29-meeting-detail-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  79. package/corpus/templates/clips/changelog/2026-06-29-screen-memory-keeps-a-local-rolling-screen-buffer-for-agent-context.md +5 -0
  80. package/corpus/templates/clips/changelog/2026-06-29-video-chat-is-easier-to-find-on-recording-pages-and-s3-setup.md +6 -0
  81. package/corpus/templates/clips/chrome-extension/src/styles.css +39 -39
  82. package/corpus/templates/clips/desktop/src/app.tsx +290 -1
  83. package/corpus/templates/clips/desktop/src/shared/config.ts +83 -0
  84. package/corpus/templates/clips/desktop/src/styles.css +67 -52
  85. package/corpus/templates/clips/desktop/src-tauri/src/config.rs +50 -0
  86. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +17 -0
  87. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +13 -13
  88. package/corpus/templates/clips/desktop/src-tauri/src/screen_memory.rs +990 -0
  89. package/corpus/templates/clips/server/plugins/onboarding.ts +2 -0
  90. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +69 -16
  91. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +3 -3
  92. package/corpus/templates/content/app/components/layout/Layout.tsx +1 -1
  93. package/corpus/templates/content/app/global.css +29 -15
  94. package/corpus/templates/content/changelog/2026-06-29-database-gallery-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  95. package/corpus/templates/content/changelog/2026-06-29-read-only-pages-no-longer-try-to-autosave-or-open-editor-onl.md +6 -0
  96. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +25 -20
  97. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +8 -0
  98. package/corpus/templates/design/.agents/skills/export-handoff/SKILL.md +8 -0
  99. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +13 -0
  100. package/corpus/templates/design/AGENTS.md +24 -14
  101. package/corpus/templates/design/CODE_NATIVE_DESIGN_STUDIO_IMPLEMENTATION_PLAN.md +1054 -0
  102. package/corpus/templates/design/actions/apply-visual-edit.ts +24 -4
  103. package/corpus/templates/design/actions/edit-design.ts +6 -3
  104. package/corpus/templates/design/actions/export-coding-handoff.ts +12 -4
  105. package/corpus/templates/design/actions/generate-design.ts +6 -21
  106. package/corpus/templates/design/actions/generate-screens.ts +48 -5
  107. package/corpus/templates/design/actions/get-design.ts +1 -0
  108. package/corpus/templates/design/actions/present-design-variants.ts +355 -30
  109. package/corpus/templates/design/actions/update-design.ts +47 -10
  110. package/corpus/templates/design/actions/update-file.ts +33 -8
  111. package/corpus/templates/design/actions/view-screen.ts +89 -31
  112. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +389 -71
  113. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +1 -1
  114. package/corpus/templates/design/app/components/design/EditPanel.tsx +596 -95
  115. package/corpus/templates/design/app/components/design/LayersPanel.tsx +428 -221
  116. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1197 -228
  117. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +94 -217
  118. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +28 -14
  119. package/corpus/templates/design/app/components/design/index.ts +0 -1
  120. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +228 -170
  121. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +140 -13
  122. package/corpus/templates/design/app/components/design/inspector/ExportSettingsPanel.tsx +39 -8
  123. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +4 -2
  124. package/corpus/templates/design/app/components/design/inspector/ImageFillControls.tsx +75 -5
  125. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +37 -12
  126. package/corpus/templates/design/app/components/design/inspector/index.ts +1 -0
  127. package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +17 -4
  128. package/corpus/templates/design/app/components/design/types.ts +9 -0
  129. package/corpus/templates/design/app/components/layout/Layout.tsx +23 -5
  130. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +448 -259
  131. package/corpus/templates/design/app/global.css +77 -49
  132. package/corpus/templates/design/app/hooks/use-question-flow.ts +2 -2
  133. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +8 -1
  134. package/corpus/templates/design/app/i18n/zh-TW.ts +4 -0
  135. package/corpus/templates/design/app/i18n-data.ts +55 -3
  136. package/corpus/templates/design/app/pages/DesignEditor.tsx +2783 -658
  137. package/corpus/templates/design/app/root.tsx +1 -1
  138. package/corpus/templates/design/changelog/2026-06-29-agent-edits-to-a-design-are-no-longer-occasionally-dropped-o.md +6 -0
  139. package/corpus/templates/design/changelog/2026-06-29-box-shadow-and-gradient-colors-keep-named-css-colors-like-re.md +6 -0
  140. package/corpus/templates/design/changelog/2026-06-29-containers-no-longer-block-selecting-nested-elements-and-nor.md +6 -0
  141. package/corpus/templates/design/changelog/2026-06-29-cut-cmd-ctrl-x-now-removes-the-selected-element-to-the-clipb.md +6 -0
  142. package/corpus/templates/design/changelog/2026-06-29-deleting-with-multiple-layers-selected-in-the-layers-panel-n.md +6 -0
  143. package/corpus/templates/design/changelog/2026-06-29-design-agents-now-generate-and-refine-variants-from-stronger.md +6 -0
  144. package/corpus/templates/design/changelog/2026-06-29-design-inspector-controls-now-match-figmas-softer-dark-chrome.md +6 -0
  145. package/corpus/templates/design/changelog/2026-06-29-design-questions-now-appear-as-a-cleaner-canvas-intake-with-.md +6 -0
  146. package/corpus/templates/design/changelog/2026-06-29-design-variant-directions-now-appear-as-board-screens-with-chat-buttons.md +5 -0
  147. package/corpus/templates/design/changelog/2026-06-29-duplicating-a-screen-now-gives-the-copy-its-own-layer-ids-so.md +6 -0
  148. package/corpus/templates/design/changelog/2026-06-29-element-selection-no-longer-snaps-back-to-the-previous-layer.md +6 -0
  149. package/corpus/templates/design/changelog/2026-06-29-frame-resize-measurements-now-stay-beside-the-cursor-while-d.md +6 -0
  150. package/corpus/templates/design/changelog/2026-06-29-hiding-and-re-showing-a-gradient-fill-now-preserves-each-sto.md +6 -0
  151. package/corpus/templates/design/changelog/2026-06-29-inspector-number-fields-have-cleaner-tooltips-and-draggable-.md +6 -0
  152. package/corpus/templates/design/changelog/2026-06-29-layer-locking-layer-nesting-generated-question-intake-and-im.md +6 -0
  153. package/corpus/templates/design/changelog/2026-06-29-layer-names-in-the-sidebar-can-scroll-horizontally-instead-o.md +6 -0
  154. package/corpus/templates/design/changelog/2026-06-29-layer-nesting-in-the-sidebar-now-uses-tighter-spacing-so-nam.md +6 -0
  155. package/corpus/templates/design/changelog/2026-06-29-layers-no-longer-repeat-document-wrapper-rows-when-a-screen-.md +6 -0
  156. package/corpus/templates/design/changelog/2026-06-29-overview-previews-now-keep-element-hover-and-selection-tied-.md +6 -0
  157. package/corpus/templates/design/changelog/2026-06-29-picking-a-design-direction-now-submits-to-the-agent-right-aw.md +6 -0
  158. package/corpus/templates/design/changelog/2026-06-29-pressing-escape-now-cancels-a-stuck-screen-drag-in-the-overv.md +6 -0
  159. package/corpus/templates/design/changelog/2026-06-29-screen-overview-is-easier-to-find-and-named-screens-open-dir.md +6 -0
  160. package/corpus/templates/design/changelog/2026-06-29-screen-overview-only-highlights-screens-when-the-frame-or-ti.md +6 -0
  161. package/corpus/templates/design/changelog/2026-06-29-screen-overview-previews-now-resize-to-match-the-selected-de.md +6 -0
  162. package/corpus/templates/design/changelog/2026-06-29-screen-overview-selection-now-uses-a-pointer-cursor-instead-.md +6 -0
  163. package/corpus/templates/design/changelog/2026-06-29-screen-overview-selection-outlines-now-stay-locked-to-the-se.md +6 -0
  164. package/corpus/templates/design/changelog/2026-06-29-screen-overview-zoom-now-reports-real-screen-scale-separatel.md +6 -0
  165. package/corpus/templates/design/changelog/2026-06-29-screen-overview-zooming-feels-smoother-and-selection-outline.md +6 -0
  166. package/corpus/templates/design/changelog/2026-06-29-screen-overview-zooming-now-stays-on-the-overview-canvas-ins.md +6 -0
  167. package/corpus/templates/design/changelog/2026-06-29-selecting-a-nested-layer-from-all-screens-now-keeps-you-in-a.md +6 -0
  168. package/corpus/templates/design/changelog/2026-06-29-share-now-groups-link-sharing-exports-and-agent-handoff.md +6 -0
  169. package/corpus/templates/design/changelog/2026-06-29-style-changes-that-set-several-properties-at-once-fixed-size.md +6 -0
  170. package/corpus/templates/design/changelog/2026-06-29-the-design-editor-loading-skeleton-now-uses-a-softer-charcoa.md +6 -0
  171. package/corpus/templates/design/changelog/2026-06-29-the-device-preview-menu-now-sits-next-to-the-preview-button-.md +6 -0
  172. package/corpus/templates/design/changelog/2026-06-29-the-editor-no-longer-crashes-when-a-screen-ends-up-with-dupl.md +6 -0
  173. package/corpus/templates/design/changelog/2026-06-29-the-inspector-stays-read-only-while-an-empty-design-is-still.md +6 -0
  174. package/corpus/templates/design/changelog/2026-06-29-the-missing-design-view-now-matches-the-rest-of-the-editor-c.md +6 -0
  175. package/corpus/templates/design/changelog/2026-06-29-the-pen-tool-icon-and-tool-option-menus-better-match-the-edi.md +6 -0
  176. package/corpus/templates/design/changelog/2026-06-29-typography-controls-now-keep-the-font-name-visible-and-move-.md +6 -0
  177. package/corpus/templates/design/e2e/README.md +4 -3
  178. package/corpus/templates/design/e2e/global-setup.ts +24 -23
  179. package/corpus/templates/design/e2e/helpers.ts +122 -11
  180. package/corpus/templates/design/playwright.config.ts +19 -4
  181. package/corpus/templates/design/server/lib/coding-handoff.ts +126 -2
  182. package/corpus/templates/design/server/plugins/core-routes.ts +1 -2
  183. package/corpus/templates/design/server/routes/api/design-handoff/[id].zip.get.ts +86 -0
  184. package/corpus/templates/design/shared/code-layer.ts +125 -22
  185. package/corpus/templates/design/shared/color-utils.ts +159 -0
  186. package/corpus/templates/design/shared/generation-session.ts +42 -0
  187. package/corpus/templates/dispatch/app/global.css +79 -35
  188. package/corpus/templates/dispatch/app/routes/integrations.tsx +8 -7
  189. package/corpus/templates/dispatch/changelog/2026-06-29-integration-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  190. package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -2
  191. package/corpus/templates/forms/app/global.css +64 -35
  192. package/corpus/templates/forms/app/pages/FormsListPage.tsx +2 -2
  193. package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +3 -3
  194. package/corpus/templates/forms/changelog/2026-06-29-form-list-and-insight-layouts-adapt-when-the-agent-sidebar.md +6 -0
  195. package/corpus/templates/macros/app/components/layout/AppLayout.tsx +3 -1
  196. package/corpus/templates/macros/app/global.css +25 -9
  197. package/corpus/templates/macros/changelog/2026-06-29-macro-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  198. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +6 -2
  199. package/corpus/templates/mail/app/global.css +42 -36
  200. package/corpus/templates/mail/app/pages/InboxPage.tsx +1 -1
  201. package/corpus/templates/mail/changelog/2026-06-29-the-contact-panel-now-adapts-to-the-available-mail-pane-width.md +6 -0
  202. package/corpus/templates/plan/app/components/layout/Layout.tsx +3 -1
  203. package/corpus/templates/plan/app/components/plan/DocumentArea.tsx +6 -7
  204. package/corpus/templates/plan/app/global.css +74 -42
  205. package/corpus/templates/plan/changelog/2026-06-29-plan-document-blocks-adapt-to-the-available-document-width.md +6 -0
  206. package/corpus/templates/plan/changelog/2026-06-29-plan-titles-and-summaries-can-be-edited-inline-without-focus.md +6 -0
  207. package/corpus/templates/slides/app/components/layout/Layout.tsx +3 -1
  208. package/corpus/templates/slides/app/global.css +49 -33
  209. package/corpus/templates/slides/changelog/2026-06-29-slide-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  210. package/corpus/templates/videos/app/components/layout/Layout.tsx +3 -1
  211. package/corpus/templates/videos/app/global.css +35 -35
  212. package/corpus/templates/videos/changelog/2026-06-29-video-layouts-adapt-when-the-agent-sidebar-is-open.md +6 -0
  213. package/dist/cli/mcp.d.ts.map +1 -1
  214. package/dist/cli/mcp.js +10 -0
  215. package/dist/cli/mcp.js.map +1 -1
  216. package/dist/cli/skills.d.ts.map +1 -1
  217. package/dist/cli/skills.js +58 -12
  218. package/dist/cli/skills.js.map +1 -1
  219. package/dist/client/AssistantChat.d.ts.map +1 -1
  220. package/dist/client/AssistantChat.js +54 -24
  221. package/dist/client/AssistantChat.js.map +1 -1
  222. package/dist/client/analytics.d.ts.map +1 -1
  223. package/dist/client/analytics.js +2 -1
  224. package/dist/client/analytics.js.map +1 -1
  225. package/dist/client/error-format.d.ts.map +1 -1
  226. package/dist/client/error-format.js +17 -0
  227. package/dist/client/error-format.js.map +1 -1
  228. package/dist/client/extensions/ExtensionViewer.d.ts.map +1 -1
  229. package/dist/client/extensions/ExtensionViewer.js +3 -4
  230. package/dist/client/extensions/ExtensionViewer.js.map +1 -1
  231. package/dist/client/guided-questions.d.ts +4 -0
  232. package/dist/client/guided-questions.d.ts.map +1 -1
  233. package/dist/client/guided-questions.js +16 -7
  234. package/dist/client/guided-questions.js.map +1 -1
  235. package/dist/client/onboarding/OnboardingPanel.js +26 -1
  236. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  237. package/dist/client/resources/BuiltinCapabilityDetail.d.ts.map +1 -1
  238. package/dist/client/resources/BuiltinCapabilityDetail.js +1 -1
  239. package/dist/client/resources/BuiltinCapabilityDetail.js.map +1 -1
  240. package/dist/client/resources/use-builtin-capabilities.d.ts +1 -1
  241. package/dist/client/resources/use-builtin-capabilities.d.ts.map +1 -1
  242. package/dist/client/resources/use-builtin-capabilities.js +2 -1
  243. package/dist/client/resources/use-builtin-capabilities.js.map +1 -1
  244. package/dist/client/session-replay.d.ts.map +1 -1
  245. package/dist/client/session-replay.js +31 -0
  246. package/dist/client/session-replay.js.map +1 -1
  247. package/dist/client/sharing/ShareButton.d.ts +14 -0
  248. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  249. package/dist/client/sharing/ShareButton.js +36 -7
  250. package/dist/client/sharing/ShareButton.js.map +1 -1
  251. package/dist/coding-tools/index.js +1 -1
  252. package/dist/coding-tools/index.js.map +1 -1
  253. package/dist/collab/routes.d.ts +1 -1
  254. package/dist/mcp/index.d.ts +2 -0
  255. package/dist/mcp/index.d.ts.map +1 -1
  256. package/dist/mcp/index.js +1 -0
  257. package/dist/mcp/index.js.map +1 -1
  258. package/dist/mcp/screen-memory-stdio.d.ts +6 -0
  259. package/dist/mcp/screen-memory-stdio.d.ts.map +1 -0
  260. package/dist/mcp/screen-memory-stdio.js +213 -0
  261. package/dist/mcp/screen-memory-stdio.js.map +1 -0
  262. package/dist/mcp-client/builtin-capabilities.d.ts +1 -1
  263. package/dist/mcp-client/builtin-capabilities.d.ts.map +1 -1
  264. package/dist/mcp-client/builtin-capabilities.js +10 -0
  265. package/dist/mcp-client/builtin-capabilities.js.map +1 -1
  266. package/dist/mcp-client/index.d.ts +1 -0
  267. package/dist/mcp-client/index.d.ts.map +1 -1
  268. package/dist/mcp-client/index.js +1 -0
  269. package/dist/mcp-client/index.js.map +1 -1
  270. package/dist/mcp-client/screen-memory-local.d.ts +61 -0
  271. package/dist/mcp-client/screen-memory-local.d.ts.map +1 -0
  272. package/dist/mcp-client/screen-memory-local.js +336 -0
  273. package/dist/mcp-client/screen-memory-local.js.map +1 -0
  274. package/dist/onboarding/types.d.ts +7 -0
  275. package/dist/onboarding/types.d.ts.map +1 -1
  276. package/dist/onboarding/types.js.map +1 -1
  277. package/dist/resources/handlers.d.ts +2 -2
  278. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  279. package/dist/server/agent-chat-plugin.js +26 -0
  280. package/dist/server/agent-chat-plugin.js.map +1 -1
  281. package/dist/server/agents-bundle.d.ts.map +1 -1
  282. package/dist/server/agents-bundle.js +22 -7
  283. package/dist/server/agents-bundle.js.map +1 -1
  284. package/dist/server/transcribe-voice.d.ts +1 -1
  285. package/dist/styles/agent-native.css +5 -0
  286. package/dist/templates/default/app/global.css +35 -35
  287. package/docs/content/locales/ar-SA/template-design.mdx +6 -0
  288. package/docs/content/locales/de-DE/template-design.mdx +8 -0
  289. package/docs/content/locales/es-ES/template-design.mdx +10 -2
  290. package/docs/content/locales/fr-FR/template-design.mdx +10 -2
  291. package/docs/content/locales/hi-IN/template-design.mdx +7 -0
  292. package/docs/content/locales/ja-JP/template-design.mdx +7 -0
  293. package/docs/content/locales/ko-KR/template-design.mdx +7 -0
  294. package/docs/content/locales/pt-BR/template-design.mdx +9 -2
  295. package/docs/content/locales/zh-CN/template-design.mdx +6 -0
  296. package/docs/content/locales/zh-TW/template-design.mdx +6 -0
  297. package/docs/content/template-design.mdx +9 -2
  298. package/package.json +1 -1
  299. package/src/templates/default/app/global.css +35 -35
  300. package/corpus/templates/design/app/components/design/VariantGrid.tsx +0 -189
  301. package/corpus/templates/design/app/components/design/VariantHandoffCard.tsx +0 -115
  302. package/corpus/templates/design/app/hooks/use-variant-flow.ts +0 -258
@@ -53,6 +53,8 @@ export default async (nitroApp: any): Promise<void> => {
53
53
  "AWS S3, Cloudflare R2, DigitalOcean Spaces, MinIO, or any S3-compatible service.",
54
54
  payload: {
55
55
  writeScope: "workspace",
56
+ saveTo: "scoped-secrets",
57
+ secretDescription: "Clips S3-compatible storage",
56
58
  fields: [
57
59
  {
58
60
  key: "S3_ENDPOINT",
@@ -157,10 +157,19 @@ interface DocumentEditorBodyProps {
157
157
  type PendingDocumentSave = {
158
158
  title: string;
159
159
  content: string;
160
- save: (title: string, content: string) => unknown | Promise<unknown>;
160
+ save: (
161
+ title: string,
162
+ content: string,
163
+ options?: DocumentSaveOptions,
164
+ ) => unknown | Promise<unknown>;
165
+ canEditWhenQueued: boolean;
161
166
  timeout: ReturnType<typeof setTimeout>;
162
167
  };
163
168
 
169
+ type DocumentSaveOptions = {
170
+ allowQueuedSave?: boolean;
171
+ };
172
+
164
173
  type DocumentSaveResult = {
165
174
  contentPersisted: boolean;
166
175
  };
@@ -274,6 +283,8 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
274
283
  const updateDocument = useUpdateDocument();
275
284
  const queryClient = useQueryClient();
276
285
  const canEdit = document.canEdit ?? true;
286
+ const canEditRef = useRef(canEdit);
287
+ canEditRef.current = canEdit;
277
288
  // The block render context (asset/upload resolvers, inline markdown reader,
278
289
  // panel popover) is stable for the editor's lifetime. Created once here and
279
290
  // provided alongside the content block registry so every registry block in the
@@ -324,6 +335,15 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
324
335
  document.updatedAt ?? null,
325
336
  );
326
337
  documentUpdatedAtRef.current = document.updatedAt ?? null;
338
+ const handleBackgroundSaveError = useCallback(
339
+ (error: unknown) => {
340
+ toast.error(t("empty.genericError"), {
341
+ description:
342
+ error instanceof Error ? error.message : t("empty.genericError"),
343
+ });
344
+ },
345
+ [t],
346
+ );
327
347
  const titleFocusedRef = useRef(false);
328
348
  const scrollContainerRef = useRef<HTMLDivElement>(null);
329
349
  const titleInputRef = useRef<HTMLTextAreaElement>(null);
@@ -375,7 +395,8 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
375
395
  }
376
396
  : undefined;
377
397
 
378
- // Collaborative editing stable Y.Doc per document, always-on
398
+ // Collaborative editing is write-only for now. Viewers get the SQL snapshot
399
+ // and skip collab endpoints that reject non-editor access.
379
400
  const {
380
401
  ydoc,
381
402
  awareness,
@@ -384,7 +405,7 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
384
405
  agentActive,
385
406
  agentPresent,
386
407
  } = useCollaborativeDoc({
387
- docId: isLocalFileDocument ? "" : documentId,
408
+ docId: canEdit && !isLocalFileDocument ? documentId : "",
388
409
  requestSource: TAB_ID,
389
410
  user: currentUser,
390
411
  });
@@ -566,11 +587,16 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
566
587
  }, [document, isLinkedLocalSourceDocument, localTitle, localContent]);
567
588
 
568
589
  const persistDocumentUpdates = useCallback(
569
- async (updates: {
570
- title?: string;
571
- content?: string;
572
- icon?: string | null;
573
- }): Promise<Document> => {
590
+ async (
591
+ updates: {
592
+ title?: string;
593
+ content?: string;
594
+ icon?: string | null;
595
+ },
596
+ options: DocumentSaveOptions = {},
597
+ ): Promise<Document> => {
598
+ if (!options.allowQueuedSave && !canEditRef.current) return document;
599
+
574
600
  const localSource = document.source;
575
601
  const isLinkedLocalSource = canWriteLinkedLocalSource(
576
602
  documentId,
@@ -629,7 +655,11 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
629
655
  );
630
656
 
631
657
  const saveDocumentImmediately = useCallback(
632
- async (title: string, content: string): Promise<DocumentSaveResult> => {
658
+ async (
659
+ title: string,
660
+ content: string,
661
+ options: DocumentSaveOptions = {},
662
+ ): Promise<DocumentSaveResult> => {
633
663
  // Never clobber a newer server version (e.g. an agent edit we haven't
634
664
  // reconciled into the editor yet) with the editor's current — possibly
635
665
  // stale — content. Guard per-field using the field's own watermark.
@@ -653,7 +683,7 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
653
683
  return { contentPersisted: !contentChanged };
654
684
  }
655
685
 
656
- const saved = await persistDocumentUpdates(updates);
686
+ const saved = await persistDocumentUpdates(updates, options);
657
687
  // Adopt the server updatedAt per saved field.
658
688
  const savedAt = saved?.updatedAt ?? new Date().toISOString();
659
689
  if (updates.title !== undefined) {
@@ -700,25 +730,38 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
700
730
  queryClient,
701
731
  ],
702
732
  );
733
+ const flushPendingDocumentSave = useCallback(
734
+ (pending: PendingDocumentSave) => {
735
+ if (!pending.canEditWhenQueued) return;
736
+ void Promise.resolve(
737
+ pending.save(pending.title, pending.content, {
738
+ allowQueuedSave: true,
739
+ }),
740
+ ).catch(handleBackgroundSaveError);
741
+ },
742
+ [handleBackgroundSaveError],
743
+ );
703
744
  const debouncedSave = useCallback(
704
745
  (title: string, content: string) => {
746
+ if (!canEditRef.current) return;
705
747
  if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
706
748
  const pending: PendingDocumentSave = {
707
749
  title,
708
750
  content,
709
751
  save: saveDocumentImmediately,
752
+ canEditWhenQueued: canEditRef.current,
710
753
  timeout: setTimeout(() => {
711
754
  if (pendingDocumentSaveRef.current === pending) {
712
755
  pendingDocumentSaveRef.current = null;
713
756
  }
714
757
  saveTimeoutRef.current = null;
715
- void pending.save(pending.title, pending.content);
758
+ flushPendingDocumentSave(pending);
716
759
  }, 500),
717
760
  };
718
761
  pendingDocumentSaveRef.current = pending;
719
762
  saveTimeoutRef.current = pending.timeout;
720
763
  },
721
- [saveDocumentImmediately],
764
+ [flushPendingDocumentSave, saveDocumentImmediately],
722
765
  );
723
766
 
724
767
  useEffect(() => {
@@ -728,9 +771,19 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
728
771
  clearTimeout(pending.timeout);
729
772
  saveTimeoutRef.current = null;
730
773
  pendingDocumentSaveRef.current = null;
731
- void pending.save(pending.title, pending.content);
774
+ flushPendingDocumentSave(pending);
732
775
  };
733
- }, [documentId]);
776
+ }, [documentId, flushPendingDocumentSave]);
777
+
778
+ useEffect(() => {
779
+ if (canEdit) return;
780
+ const pending = pendingDocumentSaveRef.current;
781
+ if (!pending) return;
782
+ clearTimeout(pending.timeout);
783
+ saveTimeoutRef.current = null;
784
+ pendingDocumentSaveRef.current = null;
785
+ flushPendingDocumentSave(pending);
786
+ }, [canEdit, documentId, flushPendingDocumentSave]);
734
787
 
735
788
  // Collab-aware ingest flush: the `pull-document` action writes a one-shot
736
789
  // `flush-request-<id>` app-state key when an external agent wants to ingest
@@ -846,7 +899,7 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
846
899
  const [hoveredThreadId, setHoveredThreadId] = useState<string | null>(null);
847
900
  const activeThreadId = hoveredThreadId ?? selectedThreadId;
848
901
  const { data: threads, isLoading: commentsLoading } = useComments(
849
- isLocalFileDocument ? null : documentId,
902
+ canEdit && !isLocalFileDocument ? documentId : null,
850
903
  );
851
904
  const hasComments =
852
905
  !isLocalFileDocument &&
@@ -1061,7 +1114,7 @@ function DocumentEditorBody({ documentId, document }: DocumentEditorBodyProps) {
1061
1114
  onSelect={(emoji) => {
1062
1115
  void (async () => {
1063
1116
  await persistDocumentUpdates({ icon: emoji });
1064
- })();
1117
+ })().catch(handleBackgroundSaveError);
1065
1118
  }}
1066
1119
  />
1067
1120
  ) : document.icon ? (
@@ -7354,7 +7354,7 @@ function DatabaseGalleryView({
7354
7354
  {dbText("loadingGallery")}
7355
7355
  </div>
7356
7356
  ) : (
7357
- <div className="grid gap-3 px-1 py-3 sm:grid-cols-2 lg:grid-cols-3">
7357
+ <div className="content-database-gallery-grid grid gap-3 px-1 py-3">
7358
7358
  {databaseViewHasNoMatchingPages(
7359
7359
  items.length,
7360
7360
  hasSearch,
@@ -7455,7 +7455,7 @@ function DatabaseGroupedGallerySection({
7455
7455
  onCollapsedChange={onCollapsedChange}
7456
7456
  />
7457
7457
  {!collapsed ? (
7458
- <div className="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
7458
+ <div className="content-database-gallery-grid grid gap-3">
7459
7459
  {group.items.map((item, index) => (
7460
7460
  <DatabaseGalleryCard
7461
7461
  key={`${group.id}-${item.id}`}
@@ -7936,7 +7936,7 @@ function DatabaseDateViewNoDateSection({
7936
7936
  {items.length}
7937
7937
  </span>
7938
7938
  </div>
7939
- <div className="grid gap-1 sm:grid-cols-2 lg:grid-cols-3">
7939
+ <div className="content-database-calendar-undated-grid grid gap-1">
7940
7940
  {items.map((item) => (
7941
7941
  <DatabaseCalendarCard
7942
7942
  key={item.id}
@@ -162,7 +162,7 @@ export function Layout({ children }: LayoutProps) {
162
162
  browserTabId={getBrowserTabId()}
163
163
  >
164
164
  <main
165
- className="relative flex min-w-0 min-h-0 flex-1 flex-col overflow-x-hidden"
165
+ className="agent-native-app-main relative flex min-w-0 min-h-0 flex-1 flex-col overflow-x-hidden"
166
166
  style={
167
167
  {
168
168
  "--content-sidebar-width": `${contentSidebarWidth}px`,
@@ -58,42 +58,42 @@
58
58
 
59
59
  /* ===== Dark Mode ===== */
60
60
  .dark {
61
- --background: 220 6% 6%;
61
+ --background: 0 0% 13%;
62
62
  --foreground: 0 0% 90%;
63
63
 
64
- --card: 220 5% 6%;
64
+ --card: 0 0% 15%;
65
65
  --card-foreground: 0 0% 90%;
66
66
 
67
- --popover: 220 5% 6%;
67
+ --popover: 0 0% 15%;
68
68
  --popover-foreground: 0 0% 90%;
69
69
 
70
70
  --primary: 0 0% 90%;
71
- --primary-foreground: 220 6% 6%;
71
+ --primary-foreground: 0 0% 10%;
72
72
 
73
- --secondary: 220 4% 12%;
73
+ --secondary: 0 0% 18%;
74
74
  --secondary-foreground: 0 0% 90%;
75
75
 
76
- --muted: 220 4% 10%;
77
- --muted-foreground: 220 4% 60%;
76
+ --muted: 0 0% 16%;
77
+ --muted-foreground: 0 0% 60%;
78
78
 
79
- --accent: 220 4% 13%;
79
+ --accent: 0 0% 18%;
80
80
  --accent-foreground: 0 0% 90%;
81
81
 
82
82
  --destructive: 0 62% 50%;
83
83
  --destructive-foreground: 0 0% 100%;
84
84
 
85
- --border: 220 4% 14%;
86
- --input: 220 4% 14%;
85
+ --border: 0 0% 24%;
86
+ --input: 0 0% 24%;
87
87
  --ring: 0 0% 50%;
88
88
 
89
89
  /* Sidebar dark */
90
- --sidebar-background: 220 6% 4%;
91
- --sidebar-foreground: 220 4% 60%;
90
+ --sidebar-background: 0 0% 10%;
91
+ --sidebar-foreground: 0 0% 60%;
92
92
  --sidebar-primary: 0 0% 75%;
93
- --sidebar-primary-foreground: 220 6% 6%;
94
- --sidebar-accent: 220 4% 10%;
93
+ --sidebar-primary-foreground: 0 0% 10%;
94
+ --sidebar-accent: 0 0% 16%;
95
95
  --sidebar-accent-foreground: 0 0% 90%;
96
- --sidebar-border: 220 4% 10%;
96
+ --sidebar-border: 0 0% 20%;
97
97
  --sidebar-ring: 0 0% 60%;
98
98
  --sidebar-muted: 0 0% 50%;
99
99
  }
@@ -141,6 +141,20 @@
141
141
  fill: var(--notion-logo-mark);
142
142
  }
143
143
 
144
+ @container agent-native-main (min-width: 560px) {
145
+ .content-database-calendar-undated-grid,
146
+ .content-database-gallery-grid {
147
+ grid-template-columns: repeat(2, minmax(0, 1fr));
148
+ }
149
+ }
150
+
151
+ @container agent-native-main (min-width: 900px) {
152
+ .content-database-calendar-undated-grid,
153
+ .content-database-gallery-grid {
154
+ grid-template-columns: repeat(3, minmax(0, 1fr));
155
+ }
156
+ }
157
+
144
158
  /* ===== Scrollbar ===== */
145
159
  @layer utilities {
146
160
  .scrollbar-thin::-webkit-scrollbar {
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-29
4
+ ---
5
+
6
+ Database gallery layouts now adapt cleanly when the agent sidebar narrows the app.
@@ -0,0 +1,6 @@
1
+ ---
2
+ type: fixed
3
+ date: 2026-06-29
4
+ ---
5
+
6
+ Read-only pages no longer try to autosave or open editor-only realtime connections.
@@ -1,3 +1,11 @@
1
+ ---
2
+ name: design-generation
3
+ description: >-
4
+ Generate or refine complete interactive HTML prototypes in Design. Use when
5
+ creating screens, variants, Alpine/Tailwind prototypes, tweaks, or visual
6
+ refinements from a prompt or selected design.
7
+ ---
8
+
1
9
  # Design Generation
2
10
 
3
11
  How to generate complete, interactive HTML prototypes using Alpine.js + Tailwind CSS (via CDN). This is the core skill for the design agent.
@@ -90,8 +98,10 @@ pnpm action show-design-questions \
90
98
  ### Phase 2 — Generate side-by-side variations (2-5, three by default)
91
99
 
92
100
  For new designs, default to **three** variations (`present-design-variants`
93
- accepts 2-5; three is the sweet spot). In normal app-agent flows, write
94
- candidates to `application-state/design-variants`:
101
+ accepts 2-5; three is the sweet spot). Call `present-design-variants` for both
102
+ first-party and external MCP-host flows. It saves each candidate as a normal
103
+ overview-board screen, then renders an inline chat choice with one button per
104
+ screen name.
95
105
 
96
106
  ```json
97
107
  {
@@ -107,24 +117,12 @@ candidates to `application-state/design-variants`:
107
117
 
108
118
  Each `content` is a complete, self-contained document (Alpine.js + Tailwind via CDN, full `<head>`, CSS variables in `:root`). Variations should be **stylistically/structurally distinct** — different typography schools, layout grammars, color moods — never just color swaps. Label them with concrete style names ("Editorial Serif", not "Variant A").
109
119
 
110
- The framework persists the chosen content as `index.html` automatically when the user clicks "Use this one" — do NOT call `generate-design` while the picker is open.
111
-
112
- When the caller is an external MCP host (ChatGPT, Claude, Claude Code, Codex,
113
- Dispatch), call `present-design-variants` instead of writing
114
- `application-state` directly. Pass the existing `designId`, a concise prompt
115
- caption, and 2-5 complete HTML variants (three by default). The action opens
116
- the same editor variant picker as the first-party app and keeps the workflow
117
- visible inside MCP Apps. After that, wait for the user's pick before refining.
118
-
119
- For inline MCP-app hosts (ChatGPT / Claude / Claude Desktop main chat) the pick
120
- rides the chat bridge automatically — no copy/paste. But if the Design app opens
121
- as a browser link instead of inline (CLI hosts like Codex / Claude Code, where
122
- the deep link carries `handoff=chat`), the user picks a direction there and the
123
- editor shows a copyable handoff summary (auto-copied to the clipboard) — ask
124
- them to paste it back into chat so you can continue from the chosen direction.
125
- The user can also simply name the pick in words (e.g. "use variant A" / "the
126
- editorial one") instead of pasting — honor either. The
127
- `present-design-variants` result's `fallbackInstructions` describe this.
120
+ Wait for the user's pick before refining. Once they choose, keep the selected
121
+ screen, delete the unchosen variant screens with `delete-file`, and continue
122
+ from the kept screen. If inline chat choice buttons are unavailable in the host,
123
+ ask the user to tell you the preferred screen name. Do not ask them to paste HTML
124
+ or a generated handoff summary; the variants are already real screens on the
125
+ board.
128
126
 
129
127
  ### Phase 3 — Save with `generate-design` (when not using variants)
130
128
 
@@ -142,6 +140,13 @@ pnpm action generate-design \
142
140
 
143
141
  `generate-design` accepts a `--tweaks` array — pass 3-6 of the most impactful knobs bound to CSS custom properties the design's `:root` block actually defines. Surface controls users will actually want to adjust (accent color, density, radius, dark-mode toggle, font choice). Don't ship a generic preset; let the design's structure pick the knobs.
144
142
 
143
+ ### Phase 5 — Review before calling it ready
144
+
145
+ Open the generated screen or overview and inspect it like a design review:
146
+ hierarchy, overflow, mobile fit, contrast, keyboard focus, empty/loading/error
147
+ states for app UI, and whether the copy/content still sounds real. Fix obvious
148
+ issues before reporting the design as ready.
149
+
145
150
  ## HTML Structure Requirements
146
151
 
147
152
  ### Mandatory Elements
@@ -1,3 +1,11 @@
1
+ ---
2
+ name: design-systems
3
+ description: >-
4
+ Manage and apply Design app brand systems. Use when creating, importing,
5
+ linking, inspecting, or following design-system tokens, assets, fonts, logos,
6
+ and custom instructions.
7
+ ---
8
+
1
9
  # Design Systems
2
10
 
3
11
  Design systems store brand identity tokens (colors, fonts, spacing, logos) that are applied to all designs in a project.
@@ -1,3 +1,11 @@
1
+ ---
2
+ name: export-handoff
3
+ description: >-
4
+ Export Design work and produce developer handoff materials. Use when the user
5
+ wants HTML, PNG, SVG, ZIP/code exports, implementation notes, or a coding
6
+ handoff for a selected design.
7
+ ---
8
+
1
9
  # Export and Handoff
2
10
 
3
11
  How to export designs and generate handoff documentation for developers converting prototypes to production code.
@@ -3,6 +3,8 @@ name: visual-edit
3
3
  description: >-
4
4
  Open a running local app in Design overview mode as URL-backed iframe screens
5
5
  for visual editing, flow review, duplication, and route-state exploration.
6
+ Use when the user asks to inspect, compare, or edit a real local app visually
7
+ in Design.
6
8
  metadata:
7
9
  visibility: exported
8
10
  ---
@@ -32,6 +34,17 @@ iframe-backed screens on the infinite canvas.
32
34
  and create one screen per URL/path. Shorthand like
33
35
  `localhost:1234/onboarding/1` means `http://localhost:1234/onboarding/1`.
34
36
 
37
+ ## Review Quality
38
+
39
+ - Treat the running app as the truth. Preserve its component language, tokens,
40
+ route state, and real content unless the user explicitly asks for a new visual
41
+ direction.
42
+ - Use multiple URL states to reveal meaningful UX moments: empty/loading/error
43
+ states, focused panels, modals, responsive breakpoints, and completed flow
44
+ steps when those matter to the review.
45
+ - For visual edits, compare before/after at the relevant viewport sizes and
46
+ check key hover/focus/scroll states when the app exposes them.
47
+
35
48
  ## Required Local Bridge
36
49
 
37
50
  From the target app repo, make sure its dev server is running, then run the
@@ -25,6 +25,13 @@ patterns live in `.agents/skills/`.
25
25
  selected file is not already clear from context.
26
26
  - Generated files must be complete, standalone HTML unless the user asks for a
27
27
  different export format. They should render in the iframe without a build step.
28
+ - For design generation, ground the work in a concrete audience, primary job,
29
+ and visual thesis before writing. For existing products, inspect current
30
+ screens, linked design systems, tokens, and component language before
31
+ inventing a new direction. Use realistic content/copy and one signature choice
32
+ per direction; avoid lorem ipsum, generic SaaS filler, and decorative
33
+ placeholders. Include expected responsive/accessibility states and visually
34
+ inspect the result before calling it ready.
28
35
  - For raster image generation, restyling, or editing existing screenshots/photos,
29
36
  use the available first-party Assets MCP tool such as `generate-asset` instead
30
37
  of placeholders or generic stock imagery. When the Assets picker returns a
@@ -97,9 +104,10 @@ patterns live in `.agents/skills/`.
97
104
  generated CSS selectors as a compatibility fallback only. For localhost React
98
105
  screens, resolve through build-time source/debug metadata (stable generated
99
106
  ids, component name, file, and line) before falling back to selectors.
100
- - For multi-variant work, write candidates incrementally so the UI can preview
101
- progress. External MCP hosts should use `present-design-variants` so the same
102
- picker opens inline instead of writing `application_state` directly.
107
+ - For multi-variant work, use `present-design-variants` so every candidate is
108
+ saved as a normal overview-board screen and the user gets one inline chat
109
+ button per screen name. After the user picks, delete the unchosen variant
110
+ screens before continuing from the kept screen.
103
111
  - Use framework sharing actions for design and design-system visibility/grants.
104
112
  - `/visual-edit` is a public entry route and public `/design/:id` links may
105
113
  render read-only public designs without a session. Do not open anonymous write
@@ -127,11 +135,15 @@ patterns live in `.agents/skills/`.
127
135
  - `navigate` moves the UI and is auto-deleted after the client consumes it.
128
136
  - `design-selection` includes active screen, selected element, overview mode,
129
137
  inspector tab, zoom, and screen list for the current tab.
130
- - `design-generation-session:<designId>` contains visible multi-screen
131
- generation frames created by `generate-screens`.
138
+ - `design-generation-session:<designId>` contains agent-facing multi-screen
139
+ generation planning state created by `generate-screens` (canvas region
140
+ assignments and per-frame instructions consumed by `generate-design` and
141
+ `view-screen`; not rendered as canvas overlays).
132
142
  - `show-design-questions` opens focused pre-generation questions in the main
133
143
  design canvas (`show-questions` application state).
134
- - `design-variants` contains in-progress candidates for the variant picker.
144
+ - `guided-questions` may contain a one-click chat choice for the current
145
+ variant set. Variants themselves are normal design files with `canvasFrames`
146
+ and `screenMetadata`.
135
147
 
136
148
  ## Code Layers
137
149
 
@@ -179,14 +191,12 @@ patterns live in `.agents/skills/`.
179
191
  and open the editor in overview mode.
180
192
  - For human-in-the-loop UI exploration, create a design shell, call
181
193
  `present-design-variants` with 2-5 complete HTML directions (three by
182
- default), wait for the user to pick one, then use `get-design-snapshot` and
183
- `generate-design` for follow-up refinements.
184
- - Inline MCP-app hosts (ChatGPT / Claude / Claude Desktop main chat) carry the
185
- pick back over the chat bridge automatically. If the Design app instead opens
186
- as a browser link (CLI hosts like Codex / Claude Code, deep link carries
187
- `handoff=chat`), the user picks there and the editor shows a copyable summary
188
- (also in `present-design-variants` result `fallbackInstructions`) — ask them
189
- to paste it back into chat so you can continue from the chosen direction.
194
+ default), wait for the user to pick one in chat, delete the other generated
195
+ variant screens with `delete-file`, then use `get-design-snapshot` and
196
+ `generate-design` or `edit-design` for follow-up refinements.
197
+ - If inline chat choice buttons are unavailable, the user can tell you the
198
+ preferred screen name. Do not show a separate variant picker or ask them to
199
+ paste a copyable handoff summary.
190
200
 
191
201
  ## Skills
192
202