@agent-native/core 0.92.10 → 0.92.11

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 (334) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +23 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/agent/production-agent.ts +181 -15
  5. package/corpus/core/src/agent/run-manager.ts +31 -4
  6. package/corpus/core/src/agent/run-store.ts +80 -0
  7. package/corpus/core/src/cli/design-connect.ts +433 -151
  8. package/corpus/core/src/cli/skills.ts +14 -0
  9. package/corpus/core/src/client/AssistantChat.tsx +25 -0
  10. package/corpus/core/src/client/MultiTabAssistantChat.tsx +40 -6
  11. package/corpus/core/src/client/agent-chat.ts +165 -1
  12. package/corpus/core/src/client/chat/index.ts +9 -1
  13. package/corpus/core/src/client/extensions/EmbeddedExtension.tsx +38 -2
  14. package/corpus/core/src/client/index.ts +5 -0
  15. package/corpus/core/src/client/rich-markdown-editor/useCollabReconcile.ts +18 -7
  16. package/corpus/core/src/collab/awareness-store.ts +23 -12
  17. package/corpus/core/src/collab/client.ts +16 -5
  18. package/corpus/core/src/collab/index.ts +4 -0
  19. package/corpus/core/src/collab/recent-edits.ts +65 -2
  20. package/corpus/core/src/index.browser.ts +1 -0
  21. package/corpus/core/src/server/agent-chat-plugin.ts +98 -11
  22. package/corpus/core/src/server/builder-design-systems.ts +30 -4
  23. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +1 -1
  24. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +12 -6
  25. package/corpus/templates/clips/AGENTS.md +4 -0
  26. package/corpus/templates/clips/actions/create-recording.ts +2 -0
  27. package/corpus/templates/clips/actions/lib/create-recording-schema.ts +5 -3
  28. package/corpus/templates/clips/actions/request-transcript.ts +102 -33
  29. package/corpus/templates/clips/app/components/library/library-grid.tsx +1 -0
  30. package/corpus/templates/clips/app/components/player/share-dialog.tsx +59 -19
  31. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +48 -4
  32. package/corpus/templates/clips/app/components/player/video-player.tsx +17 -12
  33. package/corpus/templates/clips/app/i18n/ar-SA.ts +1 -0
  34. package/corpus/templates/clips/app/i18n/de-DE.ts +1 -0
  35. package/corpus/templates/clips/app/i18n/en-US.ts +1 -0
  36. package/corpus/templates/clips/app/i18n/es-ES.ts +1 -0
  37. package/corpus/templates/clips/app/i18n/fr-FR.ts +1 -0
  38. package/corpus/templates/clips/app/i18n/hi-IN.ts +1 -0
  39. package/corpus/templates/clips/app/i18n/ja-JP.ts +1 -0
  40. package/corpus/templates/clips/app/i18n/ko-KR.ts +1 -0
  41. package/corpus/templates/clips/app/i18n/pt-BR.ts +1 -0
  42. package/corpus/templates/clips/app/i18n/zh-CN.ts +1 -0
  43. package/corpus/templates/clips/app/i18n/zh-TW.ts +1 -0
  44. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +70 -37
  45. package/corpus/templates/clips/app/routes/record.tsx +17 -4
  46. package/corpus/templates/clips/app/routes/share.$shareId.tsx +2 -0
  47. package/corpus/templates/clips/changelog/2026-07-09-desktop-popover-sits-closer-to-the-menu-bar.md +6 -0
  48. package/corpus/templates/clips/changelog/2026-07-09-desktop-recording-optimization-progress-stays-visible-until-the-clip-opens.md +6 -0
  49. package/corpus/templates/clips/changelog/2026-07-09-fixed-large-video-file-uploads-failing-before-their-resumabl.md +6 -0
  50. package/corpus/templates/clips/changelog/2026-07-09-fixed-new-video-uploads-defaulting-to-private.md +6 -0
  51. package/corpus/templates/clips/changelog/2026-07-09-long-recordings-now-get-enough-time-to-download-their-media-.md +6 -0
  52. package/corpus/templates/clips/changelog/2026-07-09-meeting-notes-no-longer-lowers-your-microphone-volume-for-ot.md +6 -0
  53. package/corpus/templates/clips/changelog/2026-07-09-on-mobile-tapping-a-playing-clip-reveals-playback-controls-w.md +6 -0
  54. package/corpus/templates/clips/changelog/2026-07-09-regenerate-any-clip-transcript-from-its-saved-recording-or-r.md +6 -0
  55. package/corpus/templates/clips/changelog/2026-07-09-slack-previews-now-show-the-clip-length-alongside-its-descri.md +6 -0
  56. package/corpus/templates/clips/desktop/src/app.tsx +12 -2
  57. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +8 -1
  58. package/corpus/templates/clips/desktop/src/lib/recorder.ts +8 -5
  59. package/corpus/templates/clips/desktop/src/lib/transcription-engine.ts +5 -5
  60. package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +3 -0
  61. package/corpus/templates/clips/desktop/src/styles.css +6 -3
  62. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +29 -11
  63. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +1 -1
  64. package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +103 -21
  65. package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +117 -39
  66. package/corpus/templates/clips/server/lib/slack-unfurls.ts +20 -1
  67. package/corpus/templates/clips/server/lib/streaming-upload-mode.ts +10 -4
  68. package/corpus/templates/clips/shared/recording-core.ts +12 -0
  69. package/corpus/templates/content/AGENTS.md +7 -6
  70. package/corpus/templates/content/actions/_document-flush.ts +132 -17
  71. package/corpus/templates/content/actions/_notion-action-utils.ts +15 -0
  72. package/corpus/templates/content/actions/create-and-link-notion-page.ts +2 -0
  73. package/corpus/templates/content/actions/link-notion-page.ts +2 -0
  74. package/corpus/templates/content/actions/pull-document.ts +5 -7
  75. package/corpus/templates/content/actions/pull-notion-page.ts +2 -0
  76. package/corpus/templates/content/actions/push-notion-page.ts +10 -0
  77. package/corpus/templates/content/actions/resolve-notion-sync-conflict.ts +2 -0
  78. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +88 -23
  79. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +32 -2
  80. package/corpus/templates/content/app/hooks/use-notion.ts +6 -6
  81. package/corpus/templates/content/app/i18n/zh-TW.ts +1 -0
  82. package/corpus/templates/content/app/i18n-data.ts +18 -0
  83. package/corpus/templates/content/changelog/2026-07-09-notion-conflict-choices-and-version-restores-preserve-docume.md +6 -0
  84. package/corpus/templates/content/server/lib/notion-sync.ts +80 -64
  85. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +29 -2
  86. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +86 -0
  87. package/corpus/templates/design/.agents/skills/export-handoff/SKILL.md +57 -0
  88. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +11 -0
  89. package/corpus/templates/design/AGENTS.md +45 -10
  90. package/corpus/templates/design/actions/add-localhost-screens.ts +66 -13
  91. package/corpus/templates/design/actions/apply-component-prop-edit.ts +45 -36
  92. package/corpus/templates/design/actions/apply-motion-edit.ts +25 -31
  93. package/corpus/templates/design/actions/apply-shader-fill.ts +29 -42
  94. package/corpus/templates/design/actions/detach-component-instance.ts +337 -0
  95. package/corpus/templates/design/actions/export-design-as-figma-svg.ts +219 -0
  96. package/corpus/templates/design/actions/generate-design.ts +79 -12
  97. package/corpus/templates/design/actions/generate-screens.ts +57 -12
  98. package/corpus/templates/design/actions/get-figma-styles.ts +115 -0
  99. package/corpus/templates/design/actions/go-to-main-component.ts +254 -0
  100. package/corpus/templates/design/actions/grant-localhost-write-consent.ts +4 -3
  101. package/corpus/templates/design/actions/import-design-source.ts +4 -31
  102. package/corpus/templates/design/actions/import-figma-clipboard.ts +134 -0
  103. package/corpus/templates/design/actions/import-figma-frame.ts +95 -0
  104. package/corpus/templates/design/actions/index-design-system-with-builder.ts +16 -1
  105. package/corpus/templates/design/actions/list-design-components.ts +104 -0
  106. package/corpus/templates/design/actions/list-figma-library-assets.ts +1 -24
  107. package/corpus/templates/design/actions/open-component-source.ts +2 -4
  108. package/corpus/templates/design/actions/present-design-variants.ts +412 -16
  109. package/corpus/templates/design/actions/preview-source-edit.ts +14 -1
  110. package/corpus/templates/design/actions/run-design-audit.ts +25 -3
  111. package/corpus/templates/design/actions/show-design-questions.ts +10 -0
  112. package/corpus/templates/design/actions/swap-component-instance.ts +544 -0
  113. package/corpus/templates/design/actions/take-design-screenshot.ts +45 -60
  114. package/corpus/templates/design/actions/write-local-file.ts +25 -1
  115. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +152 -0
  116. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1077 -58
  117. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +5 -5
  118. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +73 -21
  119. package/corpus/templates/design/app/components/design/EditPanel.tsx +16 -11
  120. package/corpus/templates/design/app/components/design/KeyboardShortcutsPanel.tsx +364 -0
  121. package/corpus/templates/design/app/components/design/LayersPanel.tsx +180 -53
  122. package/corpus/templates/design/app/components/design/LocalhostWriteConsentDialog.tsx +0 -2
  123. package/corpus/templates/design/app/components/design/MotionDock.tsx +144 -21
  124. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1152 -167
  125. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +27 -5
  126. package/corpus/templates/design/app/components/design/ReviewPanel.tsx +23 -2
  127. package/corpus/templates/design/app/components/design/TokensPanel.tsx +63 -49
  128. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1293 -54
  129. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +7 -0
  130. package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +6 -1
  131. package/corpus/templates/design/app/components/design/bridge/motion-preview.bridge.ts +23 -6
  132. package/corpus/templates/design/app/components/design/bridge/sample.bridge.ts +7 -0
  133. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +5 -0
  134. package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +14 -2
  135. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +37 -2
  136. package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open-guard.ts +25 -0
  137. package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open.ts +19 -1
  138. package/corpus/templates/design/app/components/design/code-workbench/model-registry.ts +43 -5
  139. package/corpus/templates/design/app/components/design/code-workbench/search/SearchView.tsx +27 -2
  140. package/corpus/templates/design/app/components/design/code-workbench/search/search-engine.ts +10 -1
  141. package/corpus/templates/design/app/components/design/code-workbench/store.tsx +19 -2
  142. package/corpus/templates/design/app/components/design/design-canvas/annotation-snapshot.ts +265 -0
  143. package/corpus/templates/design/app/components/design/design-canvas/annotation-submit.ts +16 -5
  144. package/corpus/templates/design/app/components/design/design-canvas/coordinate-transforms.ts +16 -2
  145. package/corpus/templates/design/app/components/design/design-canvas/embedded-frame.ts +7 -2
  146. package/corpus/templates/design/app/components/design/design-canvas/iframe-events.ts +3 -1
  147. package/corpus/templates/design/app/components/design/edit-panel/code-inspect-helpers.tsx +78 -8
  148. package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +451 -73
  149. package/corpus/templates/design/app/components/design/edit-panel/document-colors.ts +12 -4
  150. package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +398 -272
  151. package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +41 -7
  152. package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +16 -3
  153. package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +24 -4
  154. package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +222 -4
  155. package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +171 -78
  156. package/corpus/templates/design/app/components/design/edit-panel/inspector-controls.tsx +45 -5
  157. package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +299 -28
  158. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +120 -150
  159. package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +53 -1
  160. package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +284 -117
  161. package/corpus/templates/design/app/components/design/edit-panel/selection-helpers.ts +81 -0
  162. package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +19 -14
  163. package/corpus/templates/design/app/components/design/edit-panel/style-options.ts +7 -0
  164. package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +155 -0
  165. package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +268 -46
  166. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +350 -31
  167. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +13 -4
  168. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +233 -23
  169. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +72 -2
  170. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +51 -11
  171. package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +84 -11
  172. package/corpus/templates/design/app/components/design/inspector/index.ts +3 -0
  173. package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +552 -0
  174. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +157 -0
  175. package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +53 -0
  176. package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +184 -0
  177. package/corpus/templates/design/app/components/design/multi-screen/primitive-drop-target.ts +403 -26
  178. package/corpus/templates/design/app/components/design/multi-screen/types.ts +20 -1
  179. package/corpus/templates/design/app/components/design/types.ts +33 -0
  180. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +59 -7
  181. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +119 -17
  182. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +275 -63
  183. package/corpus/templates/design/app/hooks/use-question-flow.ts +14 -3
  184. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +67 -10
  185. package/corpus/templates/design/app/i18n/zh-TW.ts +91 -1
  186. package/corpus/templates/design/app/i18n-data.ts +1217 -10
  187. package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +577 -0
  188. package/corpus/templates/design/app/lib/agent-chat.ts +23 -0
  189. package/corpus/templates/design/app/lib/design-import.ts +24 -0
  190. package/corpus/templates/design/app/lib/figma-clipboard.ts +157 -0
  191. package/corpus/templates/design/app/lib/figma-svg-copy.ts +221 -0
  192. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +143 -30
  193. package/corpus/templates/design/app/pages/design-editor/collab-sync.ts +15 -0
  194. package/corpus/templates/design/app/pages/design-editor/editor-session.ts +33 -0
  195. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +38 -0
  196. package/corpus/templates/design/app/pages/design-editor/overview-annotation-context.ts +157 -0
  197. package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +62 -6
  198. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +245 -0
  199. package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +586 -0
  200. package/corpus/templates/design/app/pages/design-editor/screen-auto-layout.ts +169 -0
  201. package/corpus/templates/design/app/pages/design-editor/selection-state.ts +201 -1
  202. package/corpus/templates/design/changelog/2026-07-09-added-underline-strikethrough-and-text-case-uppercase-lowerc.md +6 -0
  203. package/corpus/templates/design/changelog/2026-07-09-annotate-now-draws-across-the-all-screens-canvas-without-swi.md +6 -0
  204. package/corpus/templates/design/changelog/2026-07-09-auto-layout-children-can-now-be-dragged-into-freeform-screen.md +6 -0
  205. package/corpus/templates/design/changelog/2026-07-09-board-shapes-now-stay-visible-and-nest-correctly-across-the-.md +6 -0
  206. package/corpus/templates/design/changelog/2026-07-09-component-source-navigation-now-opens-reliably-from-the-insp.md +6 -0
  207. package/corpus/templates/design/changelog/2026-07-09-cross-screen-local-react-layer-moves-now-hand-off-exact-sour.md +6 -0
  208. package/corpus/templates/design/changelog/2026-07-09-cross-screen-moves-undo-and-redo-now-keep-both-screens-stabl.md +6 -0
  209. package/corpus/templates/design/changelog/2026-07-09-detach-a-component-instance-into-plain-editable-eleme.md +6 -0
  210. package/corpus/templates/design/changelog/2026-07-09-dragging-layers-into-auto-layout-now-respects-ignore-auto-la.md +6 -0
  211. package/corpus/templates/design/changelog/2026-07-09-drawing-annotations-sent-to-the-agent-now-include-a-rendered.md +6 -0
  212. package/corpus/templates/design/changelog/2026-07-09-editor-sidebars-now-use-figma-matched-default-widths-for-a-r.md +6 -0
  213. package/corpus/templates/design/changelog/2026-07-09-empty-frames-and-rectangles-now-expose-full-auto-layout-cont.md +6 -0
  214. package/corpus/templates/design/changelog/2026-07-09-export-any-design-screen-as-a-real-vector-svg-for-figma-with.md +6 -0
  215. package/corpus/templates/design/changelog/2026-07-09-grid-auto-layout-now-uses-true-responsive-rows-and-columns-w.md +6 -0
  216. package/corpus/templates/design/changelog/2026-07-09-hidden-and-locked-screens-now-behave-consistently-between-la.md +6 -0
  217. package/corpus/templates/design/changelog/2026-07-09-image-fills-now-preserve-valid-urls-and-layered-fit-settings.md +6 -0
  218. package/corpus/templates/design/changelog/2026-07-09-import-figma-frames-as-pixel-accurate-design-screens-via-a-s.md +6 -0
  219. package/corpus/templates/design/changelog/2026-07-09-inspect-code-now-hides-internal-styling-metadata-and-wraps-l.md +6 -0
  220. package/corpus/templates/design/changelog/2026-07-09-inspector-blur-and-shadow-effects-now-preserve-other-effects.md +6 -0
  221. package/corpus/templates/design/changelog/2026-07-09-jump-to-a-components-other-instances-from-the-inspecto.md +6 -0
  222. package/corpus/templates/design/changelog/2026-07-09-keyboard-shortcuts-are-now-discoverable-in-a-figma-style-bot.md +6 -0
  223. package/corpus/templates/design/changelog/2026-07-09-layer-selection-now-keeps-cmd-or-ctrl-toggles-and-shift-rang.md +6 -0
  224. package/corpus/templates/design/changelog/2026-07-09-layers-dropped-into-auto-layout-now-participate-correctly-in.md +6 -0
  225. package/corpus/templates/design/changelog/2026-07-09-local-live-edit-screens-now-enter-and-leave-full-view-withou.md +6 -0
  226. package/corpus/templates/design/changelog/2026-07-09-local-preview-urls-now-live-in-the-inspector-instead-of-taki.md +6 -0
  227. package/corpus/templates/design/changelog/2026-07-09-local-react-layers-can-now-be-hidden-and-locked-from-layers-.md +6 -0
  228. package/corpus/templates/design/changelog/2026-07-09-local-react-layers-now-keep-exact-source-provenance-and-supp.md +6 -0
  229. package/corpus/templates/design/changelog/2026-07-09-local-react-visual-editing-now-loads-reliably-and-shows-live.md +6 -0
  230. package/corpus/templates/design/changelog/2026-07-09-paste-from-figma-cmd-v-now-imports-exact-editable-nodes-when.md +6 -0
  231. package/corpus/templates/design/changelog/2026-07-09-pressing-escape-after-selecting-a-screen-now-reveals-page-pr.md +6 -0
  232. package/corpus/templates/design/changelog/2026-07-09-right-click-overlapping-or-nested-objects-to-choose-the-exac.md +6 -0
  233. package/corpus/templates/design/changelog/2026-07-09-scale-edge-stretch-and-center-constraints-now-preserve-layer.md +6 -0
  234. package/corpus/templates/design/changelog/2026-07-09-screen-rows-can-now-be-reordered-in-layers-with-matching-can.md +6 -0
  235. package/corpus/templates/design/changelog/2026-07-09-screen-selection-stays-responsive-in-designs-with-hundreds-o.md +6 -0
  236. package/corpus/templates/design/changelog/2026-07-09-shift-a-now-enables-auto-layout-on-a-selected-screen-with-fl.md +6 -0
  237. package/corpus/templates/design/changelog/2026-07-09-swap-a-component-instance-for-another-from-the-libra.md +6 -0
  238. package/corpus/templates/design/changelog/2026-07-10-drawing-annotations-now-stay-available-to-retry-when-the.md +6 -0
  239. package/corpus/templates/design/e2e/global-setup.ts +3 -6
  240. package/corpus/templates/design/e2e/helpers.ts +27 -6
  241. package/corpus/templates/design/server/lib/design-to-figma-svg.ts +1412 -0
  242. package/corpus/templates/design/server/lib/figma-clipboard-match.ts +196 -0
  243. package/corpus/templates/design/server/lib/figma-node-import.ts +311 -0
  244. package/corpus/templates/design/server/lib/figma-node-to-html.ts +1334 -0
  245. package/corpus/templates/design/server/lib/figma-paste-fallback.ts +64 -0
  246. package/corpus/templates/design/server/lib/playwright-runtime.ts +78 -0
  247. package/corpus/templates/design/server/plugins/db.ts +41 -0
  248. package/corpus/templates/design/server/source-workspace.ts +64 -0
  249. package/corpus/templates/design/shared/board-file.ts +13 -2
  250. package/corpus/templates/design/shared/canvas-math.ts +231 -33
  251. package/corpus/templates/design/shared/code-layer.ts +122 -8
  252. package/corpus/templates/design/shared/component-library.ts +161 -0
  253. package/corpus/templates/design/shared/db-conflict.ts +27 -0
  254. package/corpus/templates/design/shared/design-source-capabilities.ts +2 -1
  255. package/corpus/templates/design/shared/figma-url.ts +149 -0
  256. package/corpus/templates/design/shared/pen-path.ts +16 -7
  257. package/corpus/templates/design/shared/source-mode.ts +1 -0
  258. package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +7 -19
  259. package/corpus/templates/plan/changelog/2026-07-09-canvas-panning-now-keeps-zoom-fixed-even-at-the-edges.md +6 -0
  260. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +16 -1
  261. package/corpus/templates/slides/app/context/DeckContext.tsx +311 -70
  262. package/corpus/templates/slides/changelog/2026-07-09-fixed-the-slide-rail-going-permanently-stale-during-a-long-a.md +6 -0
  263. package/dist/agent/production-agent.d.ts +79 -6
  264. package/dist/agent/production-agent.d.ts.map +1 -1
  265. package/dist/agent/production-agent.js +161 -14
  266. package/dist/agent/production-agent.js.map +1 -1
  267. package/dist/agent/run-manager.d.ts.map +1 -1
  268. package/dist/agent/run-manager.js +29 -5
  269. package/dist/agent/run-manager.js.map +1 -1
  270. package/dist/agent/run-store.d.ts +46 -0
  271. package/dist/agent/run-store.d.ts.map +1 -1
  272. package/dist/agent/run-store.js +61 -0
  273. package/dist/agent/run-store.js.map +1 -1
  274. package/dist/cli/design-connect.d.ts +6 -0
  275. package/dist/cli/design-connect.d.ts.map +1 -1
  276. package/dist/cli/design-connect.js +336 -139
  277. package/dist/cli/design-connect.js.map +1 -1
  278. package/dist/cli/skills.d.ts.map +1 -1
  279. package/dist/cli/skills.js +14 -0
  280. package/dist/cli/skills.js.map +1 -1
  281. package/dist/client/AssistantChat.d.ts +2 -0
  282. package/dist/client/AssistantChat.d.ts.map +1 -1
  283. package/dist/client/AssistantChat.js +19 -3
  284. package/dist/client/AssistantChat.js.map +1 -1
  285. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  286. package/dist/client/MultiTabAssistantChat.js +38 -18
  287. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  288. package/dist/client/agent-chat.d.ts +60 -0
  289. package/dist/client/agent-chat.d.ts.map +1 -1
  290. package/dist/client/agent-chat.js +122 -1
  291. package/dist/client/agent-chat.js.map +1 -1
  292. package/dist/client/chat/index.d.ts +1 -1
  293. package/dist/client/chat/index.d.ts.map +1 -1
  294. package/dist/client/chat/index.js +1 -1
  295. package/dist/client/chat/index.js.map +1 -1
  296. package/dist/client/extensions/EmbeddedExtension.d.ts +12 -0
  297. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  298. package/dist/client/extensions/EmbeddedExtension.js +36 -2
  299. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  300. package/dist/client/index.d.ts +1 -1
  301. package/dist/client/index.d.ts.map +1 -1
  302. package/dist/client/index.js +1 -1
  303. package/dist/client/index.js.map +1 -1
  304. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
  305. package/dist/client/rich-markdown-editor/useCollabReconcile.js +18 -6
  306. package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
  307. package/dist/collab/awareness-store.d.ts +5 -0
  308. package/dist/collab/awareness-store.d.ts.map +1 -1
  309. package/dist/collab/awareness-store.js +19 -12
  310. package/dist/collab/awareness-store.js.map +1 -1
  311. package/dist/collab/client.d.ts.map +1 -1
  312. package/dist/collab/client.js +13 -5
  313. package/dist/collab/client.js.map +1 -1
  314. package/dist/collab/index.d.ts +1 -0
  315. package/dist/collab/index.d.ts.map +1 -1
  316. package/dist/collab/index.js +1 -0
  317. package/dist/collab/index.js.map +1 -1
  318. package/dist/collab/recent-edits.d.ts +3 -1
  319. package/dist/collab/recent-edits.d.ts.map +1 -1
  320. package/dist/collab/recent-edits.js +57 -2
  321. package/dist/collab/recent-edits.js.map +1 -1
  322. package/dist/index.browser.d.ts +1 -1
  323. package/dist/index.browser.d.ts.map +1 -1
  324. package/dist/index.browser.js +1 -1
  325. package/dist/index.browser.js.map +1 -1
  326. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  327. package/dist/server/agent-chat-plugin.js +87 -10
  328. package/dist/server/agent-chat-plugin.js.map +1 -1
  329. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  330. package/dist/server/builder-design-systems.d.ts +15 -0
  331. package/dist/server/builder-design-systems.d.ts.map +1 -1
  332. package/dist/server/builder-design-systems.js +9 -4
  333. package/dist/server/builder-design-systems.js.map +1 -1
  334. package/package.json +1 -1
@@ -60,6 +60,7 @@ const ALLOWED_EXTENSIONS = new Set([
60
60
  ".yaml",
61
61
  ".svg",
62
62
  ]);
63
+ const SHA256_VERSION_HASH = /^[a-f0-9]{64}$/i;
63
64
 
64
65
  /**
65
66
  * Secret-looking paths are never writable, regardless of extension. All
@@ -207,6 +208,14 @@ export default defineAction({
207
208
  "version-conflict error if the file changed on disk since that " +
208
209
  "hash was read.",
209
210
  ),
211
+ requireExpectedVersionHash: z
212
+ .boolean()
213
+ .optional()
214
+ .describe(
215
+ "Set true for semantic/compiled-source edits. The bridge rejects the " +
216
+ "write unless expectedVersionHash is present and still exact. Leave " +
217
+ "false only for legacy writes or deliberate new-file creation.",
218
+ ),
210
219
  }),
211
220
  run: async ({
212
221
  designId,
@@ -215,6 +224,7 @@ export default defineAction({
215
224
  content,
216
225
  patch,
217
226
  expectedVersionHash,
227
+ requireExpectedVersionHash,
218
228
  }) => {
219
229
  // --- Gate 1: access ---
220
230
  await assertAccess("design", designId, "editor");
@@ -246,6 +256,14 @@ export default defineAction({
246
256
  "content and patch are mutually exclusive. Provide one or the other.",
247
257
  );
248
258
  }
259
+ if (
260
+ requireExpectedVersionHash &&
261
+ (!expectedVersionHash || !SHA256_VERSION_HASH.test(expectedVersionHash))
262
+ ) {
263
+ throw new Error(
264
+ "A SHA-256 expectedVersionHash is required when requireExpectedVersionHash is true. Re-read the file through the current local Design bridge before retrying.",
265
+ );
266
+ }
249
267
 
250
268
  // --- Resolve bridge URL + current token ---
251
269
  const db = getDb();
@@ -289,7 +307,12 @@ export default defineAction({
289
307
  const res = await fetch(`${bridgeUrl}/write-file`, {
290
308
  method: "POST",
291
309
  headers,
292
- body: JSON.stringify({ relPath, content, expectedVersionHash }),
310
+ body: JSON.stringify({
311
+ relPath,
312
+ content,
313
+ expectedVersionHash,
314
+ requireExpectedVersionHash,
315
+ }),
293
316
  });
294
317
  if (!res.ok) {
295
318
  if (res.status === 409) {
@@ -321,6 +344,7 @@ export default defineAction({
321
344
  search: patch!.search,
322
345
  replace: patch!.replace,
323
346
  expectedVersionHash,
347
+ requireExpectedVersionHash,
324
348
  }),
325
349
  });
326
350
  if (!applyRes.ok) {
@@ -1,3 +1,10 @@
1
+ import {
2
+ IconComponents,
3
+ IconFrame,
4
+ IconPhoto,
5
+ IconTypography,
6
+ IconVector,
7
+ } from "@tabler/icons-react";
1
8
  import {
2
9
  forwardRef,
3
10
  useCallback,
@@ -22,6 +29,8 @@ import {
22
29
  } from "@/components/ui/context-menu";
23
30
  import { cn } from "@/lib/utils";
24
31
 
32
+ import type { CanvasLayerHitCandidate } from "./types";
33
+
25
34
  // LIVE-VERIFIED (real Figma, UI3) canvas context menus:
26
35
  //
27
36
  // WITH a selection:
@@ -51,6 +60,15 @@ import { cn } from "@/lib/utils";
51
60
  // back-compat. App-specific extras with no Figma equivalent (e.g. "Edit
52
61
  // screen") are appended at the very bottom, below one more separator, so the
53
62
  // Figma-muscle-memory zone above stays byte-identical to the real menu.
63
+ //
64
+ // NOTE — instance-only cluster (Go to main component / Swap instance /
65
+ // Detach instance): added for component-instance selections, gated behind
66
+ // `isComponentInstance` so it renders nothing for existing callers (fully
67
+ // backward compatible). Real Figma groups these together for an instance
68
+ // selection, but this exact placement (right after Add auto layout / Create
69
+ // component) was NOT independently re-verified against a live Figma session
70
+ // in this pass — reposition if a future LIVE-VERIFIED sweep finds a
71
+ // different spot.
54
72
  export type CanvasContextMenuAction =
55
73
  | "paste-here"
56
74
  | "select-all"
@@ -73,6 +91,9 @@ export type CanvasContextMenuAction =
73
91
  | "frame-selection"
74
92
  | "add-auto-layout"
75
93
  | "create-component"
94
+ | "go-to-main-component"
95
+ | "swap-instance"
96
+ | "detach-instance"
76
97
  | "rename"
77
98
  | "toggle-lock"
78
99
  | "toggle-hide"
@@ -112,6 +133,7 @@ export type CanvasContextMenuActionHandler = (
112
133
  ) => void;
113
134
 
114
135
  export interface CanvasContextMenuLabels {
136
+ selectLayer: string;
115
137
  pasteHere: string;
116
138
  selectAll: string;
117
139
  zoomToFit: string;
@@ -134,6 +156,9 @@ export interface CanvasContextMenuLabels {
134
156
  frameSelection: string;
135
157
  addAutoLayout: string;
136
158
  createComponent: string;
159
+ goToMainComponent: string;
160
+ swapInstance: string;
161
+ detachInstance: string;
137
162
  rename: string;
138
163
  lock: string;
139
164
  unlock: string;
@@ -177,6 +202,9 @@ export interface CanvasContextMenuShortcuts {
177
202
  frameSelection: string;
178
203
  addAutoLayout: string;
179
204
  createComponent: string;
205
+ goToMainComponent: string;
206
+ swapInstance: string;
207
+ detachInstance: string;
180
208
  rename: string;
181
209
  toggleLock: string;
182
210
  toggleHide: string;
@@ -199,6 +227,8 @@ export interface CanvasContextMenuProps {
199
227
  className?: string;
200
228
  contentClassName?: string;
201
229
  selectedCount?: number;
230
+ layerCandidates?: readonly CanvasLayerHitCandidate[];
231
+ onSelectLayer?: (candidate: CanvasLayerHitCandidate) => void;
202
232
  hasClipboard?: boolean;
203
233
  hasPropsClipboard?: boolean;
204
234
  hasAnimationClipboard?: boolean;
@@ -228,6 +258,14 @@ export interface CanvasContextMenuProps {
228
258
  canFrameSelection?: boolean;
229
259
  canAddAutoLayout?: boolean;
230
260
  canCreateComponent?: boolean;
261
+ // Whether the current selection IS a component instance — gates the
262
+ // whole Go to main component / Swap instance / Detach instance cluster on
263
+ // (rather than showing them permanently disabled for non-instance
264
+ // selections, since real Figma doesn't show this cluster at all then).
265
+ isComponentInstance?: boolean;
266
+ canGoToMainComponent?: boolean;
267
+ canSwapInstance?: boolean;
268
+ canDetachInstance?: boolean;
231
269
  // L12: this menu is target-agnostic — it has no built-in notion of "design
232
270
  // title" vs "layer". Rename is enabled by default for a single selection
233
271
  // (see the canRename default below) and fires through the onRename
@@ -288,6 +326,9 @@ export interface CanvasContextMenuProps {
288
326
  onFrameSelection?: CanvasContextMenuActionHandler;
289
327
  onAddAutoLayout?: CanvasContextMenuActionHandler;
290
328
  onCreateComponent?: CanvasContextMenuActionHandler;
329
+ onGoToMainComponent?: CanvasContextMenuActionHandler;
330
+ onSwapInstance?: CanvasContextMenuActionHandler;
331
+ onDetachInstance?: CanvasContextMenuActionHandler;
291
332
  // L12: fired when the Rename item is selected (details.selectedCount tells
292
333
  // the caller how many things are selected). The caller decides what
293
334
  // "rename" means for the current target — e.g. calling a LayersPanel
@@ -315,6 +356,7 @@ export interface CanvasContextMenuProps {
315
356
  }
316
357
 
317
358
  const DEFAULT_LABELS: CanvasContextMenuLabels = {
359
+ selectLayer: "Select layer",
318
360
  pasteHere: "Paste here",
319
361
  selectAll: "Select all",
320
362
  zoomToFit: "Zoom to fit",
@@ -337,6 +379,9 @@ const DEFAULT_LABELS: CanvasContextMenuLabels = {
337
379
  frameSelection: "Frame selection",
338
380
  addAutoLayout: "Add auto layout",
339
381
  createComponent: "Create component",
382
+ goToMainComponent: "Go to main component",
383
+ swapInstance: "Swap instance",
384
+ detachInstance: "Detach instance",
340
385
  rename: "Rename",
341
386
  lock: "Lock",
342
387
  unlock: "Unlock",
@@ -380,6 +425,9 @@ const DEFAULT_SHORTCUTS: CanvasContextMenuShortcuts = {
380
425
  frameSelection: "⌥⌘G",
381
426
  addAutoLayout: "⇧A",
382
427
  createComponent: "⌥⌘K",
428
+ goToMainComponent: "",
429
+ swapInstance: "",
430
+ detachInstance: "⌥⌘B",
383
431
  rename: "⌘R",
384
432
  toggleLock: "⇧⌘L",
385
433
  toggleHide: "⇧⌘H",
@@ -426,6 +474,8 @@ export const CanvasContextMenu = forwardRef<
426
474
  className,
427
475
  contentClassName,
428
476
  selectedCount = 0,
477
+ layerCandidates = [],
478
+ onSelectLayer,
429
479
  hasClipboard = false,
430
480
  hasPropsClipboard = false,
431
481
  hasAnimationClipboard = false,
@@ -444,6 +494,10 @@ export const CanvasContextMenu = forwardRef<
444
494
  canFrameSelection = selectedCount > 0,
445
495
  canAddAutoLayout = selectedCount > 0,
446
496
  canCreateComponent = selectedCount > 0,
497
+ isComponentInstance = false,
498
+ canGoToMainComponent = isComponentInstance,
499
+ canSwapInstance = isComponentInstance,
500
+ canDetachInstance = isComponentInstance,
447
501
  canRename = selectedCount === 1,
448
502
  canToggleLocked = selectedCount > 0,
449
503
  canToggleHidden = selectedCount > 0,
@@ -479,6 +533,9 @@ export const CanvasContextMenu = forwardRef<
479
533
  onFrameSelection,
480
534
  onAddAutoLayout,
481
535
  onCreateComponent,
536
+ onGoToMainComponent,
537
+ onSwapInstance,
538
+ onDetachInstance,
482
539
  onRename,
483
540
  onToggleLocked,
484
541
  onToggleHidden,
@@ -559,6 +616,9 @@ export const CanvasContextMenu = forwardRef<
559
616
  "frame-selection": onFrameSelection,
560
617
  "add-auto-layout": onAddAutoLayout,
561
618
  "create-component": onCreateComponent,
619
+ "go-to-main-component": onGoToMainComponent,
620
+ "swap-instance": onSwapInstance,
621
+ "detach-instance": onDetachInstance,
562
622
  rename: onRename,
563
623
  "toggle-lock": onToggleLocked,
564
624
  "toggle-hide": onToggleHidden,
@@ -585,9 +645,11 @@ export const CanvasContextMenu = forwardRef<
585
645
  onCopyAsSvg,
586
646
  onCopyProps,
587
647
  onCreateComponent,
648
+ onDetachInstance,
588
649
  onFlipHorizontal,
589
650
  onFlipVertical,
590
651
  onFrameSelection,
652
+ onGoToMainComponent,
591
653
  onGroup,
592
654
  onPaste,
593
655
  onPasteAnimation,
@@ -598,6 +660,7 @@ export const CanvasContextMenu = forwardRef<
598
660
  onRename,
599
661
  onSendBackward,
600
662
  onSendToBack,
663
+ onSwapInstance,
601
664
  onToggleComments,
602
665
  onToggleHidden,
603
666
  onToggleLocked,
@@ -674,6 +737,32 @@ export const CanvasContextMenu = forwardRef<
674
737
  className={cn(MENU_CONTENT_CLASS, contentClassName)}
675
738
  style={manualContentStyle}
676
739
  >
740
+ {layerCandidates.length > 0 && onSelectLayer ? (
741
+ <>
742
+ <ContextMenuGroup>
743
+ <ContextMenuSub>
744
+ <ContextMenuSubTrigger className={MENU_SUB_TRIGGER_CLASS}>
745
+ {labels.selectLayer}
746
+ </ContextMenuSubTrigger>
747
+ <ContextMenuSubContent
748
+ className={cn(MENU_CONTENT_CLASS, "w-56")}
749
+ >
750
+ {layerCandidates.map((candidate) => (
751
+ <CanvasLayerCandidateItem
752
+ key={candidate.key}
753
+ candidate={candidate}
754
+ onSelect={() => {
755
+ onSelectLayer(candidate);
756
+ handleOpenChange(false);
757
+ }}
758
+ />
759
+ ))}
760
+ </ContextMenuSubContent>
761
+ </ContextMenuSub>
762
+ </ContextMenuGroup>
763
+ <CanvasMenuSeparator />
764
+ </>
765
+ ) : null}
677
766
  {hasSelection ? (
678
767
  <>
679
768
  {/* LIVE-VERIFIED Figma "with selection" canvas menu. */}
@@ -839,6 +928,39 @@ export const CanvasContextMenu = forwardRef<
839
928
  />
840
929
  </ContextMenuGroup>
841
930
 
931
+ {isComponentInstance ? (
932
+ <>
933
+ <CanvasMenuSeparator />
934
+ <ContextMenuGroup>
935
+ <CanvasMenuItem
936
+ hidden={isHiddenAction("go-to-main-component")}
937
+ disabled={
938
+ !canRun("go-to-main-component", canGoToMainComponent)
939
+ }
940
+ label={labels.goToMainComponent}
941
+ shortcut={shortcuts.goToMainComponent}
942
+ onSelect={(event) =>
943
+ runAction("go-to-main-component", event)
944
+ }
945
+ />
946
+ <CanvasMenuItem
947
+ hidden={isHiddenAction("swap-instance")}
948
+ disabled={!canRun("swap-instance", canSwapInstance)}
949
+ label={labels.swapInstance}
950
+ shortcut={shortcuts.swapInstance}
951
+ onSelect={(event) => runAction("swap-instance", event)}
952
+ />
953
+ <CanvasMenuItem
954
+ hidden={isHiddenAction("detach-instance")}
955
+ disabled={!canRun("detach-instance", canDetachInstance)}
956
+ label={labels.detachInstance}
957
+ shortcut={shortcuts.detachInstance}
958
+ onSelect={(event) => runAction("detach-instance", event)}
959
+ />
960
+ </ContextMenuGroup>
961
+ </>
962
+ ) : null}
963
+
842
964
  <CanvasMenuSeparator />
843
965
 
844
966
  <ContextMenuGroup>
@@ -936,6 +1058,36 @@ export const CanvasContextMenu = forwardRef<
936
1058
  );
937
1059
  });
938
1060
 
1061
+ function CanvasLayerCandidateItem({
1062
+ candidate,
1063
+ onSelect,
1064
+ }: {
1065
+ candidate: CanvasLayerHitCandidate;
1066
+ onSelect: () => void;
1067
+ }) {
1068
+ const tag = candidate.info.tagName.toLowerCase();
1069
+ const Icon = candidate.info.componentName
1070
+ ? IconComponents
1071
+ : /^(h[1-6]|p|span|label|input|textarea)$/.test(tag)
1072
+ ? IconTypography
1073
+ : /^(img|picture|video)$/.test(tag)
1074
+ ? IconPhoto
1075
+ : /^(svg|path|circle|ellipse|polygon|line)$/.test(tag)
1076
+ ? IconVector
1077
+ : tag === "button" || tag === "a"
1078
+ ? IconComponents
1079
+ : IconFrame;
1080
+ return (
1081
+ <ContextMenuItem
1082
+ className={cn(MENU_ITEM_CLASS, "gap-2")}
1083
+ onSelect={onSelect}
1084
+ >
1085
+ <Icon className="size-3.5 shrink-0 text-muted-foreground" />
1086
+ <span className="min-w-0 truncate">{candidate.label}</span>
1087
+ </ContextMenuItem>
1088
+ );
1089
+ }
1090
+
939
1091
  function CanvasMenuItem({
940
1092
  hidden,
941
1093
  disabled,