@agent-native/core 0.92.9 → 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 (345) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/core/CHANGELOG.md +29 -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/deploy/build.ts +133 -5
  21. package/corpus/core/src/index.browser.ts +1 -0
  22. package/corpus/core/src/server/agent-chat-plugin.ts +98 -11
  23. package/corpus/core/src/server/builder-design-systems.ts +30 -4
  24. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +1 -1
  25. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +12 -6
  26. package/corpus/templates/clips/AGENTS.md +4 -0
  27. package/corpus/templates/clips/actions/create-recording.ts +2 -0
  28. package/corpus/templates/clips/actions/lib/create-recording-schema.ts +5 -3
  29. package/corpus/templates/clips/actions/request-transcript.ts +102 -33
  30. package/corpus/templates/clips/app/components/library/library-grid.tsx +1 -0
  31. package/corpus/templates/clips/app/components/player/share-dialog.tsx +59 -19
  32. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +48 -4
  33. package/corpus/templates/clips/app/components/player/video-player.tsx +17 -12
  34. package/corpus/templates/clips/app/i18n/ar-SA.ts +1 -0
  35. package/corpus/templates/clips/app/i18n/de-DE.ts +1 -0
  36. package/corpus/templates/clips/app/i18n/en-US.ts +1 -0
  37. package/corpus/templates/clips/app/i18n/es-ES.ts +1 -0
  38. package/corpus/templates/clips/app/i18n/fr-FR.ts +1 -0
  39. package/corpus/templates/clips/app/i18n/hi-IN.ts +1 -0
  40. package/corpus/templates/clips/app/i18n/ja-JP.ts +1 -0
  41. package/corpus/templates/clips/app/i18n/ko-KR.ts +1 -0
  42. package/corpus/templates/clips/app/i18n/pt-BR.ts +1 -0
  43. package/corpus/templates/clips/app/i18n/zh-CN.ts +1 -0
  44. package/corpus/templates/clips/app/i18n/zh-TW.ts +1 -0
  45. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +70 -37
  46. package/corpus/templates/clips/app/routes/record.tsx +17 -4
  47. package/corpus/templates/clips/app/routes/share.$shareId.tsx +2 -0
  48. package/corpus/templates/clips/changelog/2026-07-09-desktop-popover-sits-closer-to-the-menu-bar.md +6 -0
  49. package/corpus/templates/clips/changelog/2026-07-09-desktop-recording-optimization-progress-stays-visible-until-the-clip-opens.md +6 -0
  50. package/corpus/templates/clips/changelog/2026-07-09-fixed-large-video-file-uploads-failing-before-their-resumabl.md +6 -0
  51. package/corpus/templates/clips/changelog/2026-07-09-fixed-new-video-uploads-defaulting-to-private.md +6 -0
  52. package/corpus/templates/clips/changelog/2026-07-09-long-recordings-now-get-enough-time-to-download-their-media-.md +6 -0
  53. package/corpus/templates/clips/changelog/2026-07-09-meeting-notes-no-longer-lowers-your-microphone-volume-for-ot.md +6 -0
  54. package/corpus/templates/clips/changelog/2026-07-09-on-mobile-tapping-a-playing-clip-reveals-playback-controls-w.md +6 -0
  55. package/corpus/templates/clips/changelog/2026-07-09-regenerate-any-clip-transcript-from-its-saved-recording-or-r.md +6 -0
  56. package/corpus/templates/clips/changelog/2026-07-09-slack-previews-now-show-the-clip-length-alongside-its-descri.md +6 -0
  57. package/corpus/templates/clips/desktop/src/app.tsx +12 -2
  58. package/corpus/templates/clips/desktop/src/hooks/useMeetingTranscription.ts +8 -1
  59. package/corpus/templates/clips/desktop/src/lib/recorder.ts +8 -5
  60. package/corpus/templates/clips/desktop/src/lib/transcription-engine.ts +5 -5
  61. package/corpus/templates/clips/desktop/src/lib/voice-dictation.ts +3 -0
  62. package/corpus/templates/clips/desktop/src/styles.css +6 -3
  63. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +29 -11
  64. package/corpus/templates/clips/desktop/src-tauri/src/native_screen.rs +1 -1
  65. package/corpus/templates/clips/desktop/src-tauri/src/system_audio.rs +103 -21
  66. package/corpus/templates/clips/desktop/src-tauri/src/whisper_speech.rs +117 -39
  67. package/corpus/templates/clips/server/lib/slack-unfurls.ts +20 -1
  68. package/corpus/templates/clips/server/lib/streaming-upload-mode.ts +10 -4
  69. package/corpus/templates/clips/shared/recording-core.ts +12 -0
  70. package/corpus/templates/content/AGENTS.md +7 -6
  71. package/corpus/templates/content/actions/_document-flush.ts +132 -17
  72. package/corpus/templates/content/actions/_notion-action-utils.ts +15 -0
  73. package/corpus/templates/content/actions/create-and-link-notion-page.ts +2 -0
  74. package/corpus/templates/content/actions/link-notion-page.ts +2 -0
  75. package/corpus/templates/content/actions/pull-document.ts +5 -7
  76. package/corpus/templates/content/actions/pull-notion-page.ts +2 -0
  77. package/corpus/templates/content/actions/push-notion-page.ts +10 -0
  78. package/corpus/templates/content/actions/resolve-notion-sync-conflict.ts +2 -0
  79. package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +88 -23
  80. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +32 -2
  81. package/corpus/templates/content/app/hooks/use-notion.ts +6 -6
  82. package/corpus/templates/content/app/i18n/zh-TW.ts +1 -0
  83. package/corpus/templates/content/app/i18n-data.ts +18 -0
  84. package/corpus/templates/content/changelog/2026-07-09-notion-conflict-choices-and-version-restores-preserve-docume.md +6 -0
  85. package/corpus/templates/content/server/lib/notion-sync.ts +80 -64
  86. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +29 -2
  87. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +86 -0
  88. package/corpus/templates/design/.agents/skills/export-handoff/SKILL.md +57 -0
  89. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +11 -0
  90. package/corpus/templates/design/AGENTS.md +45 -10
  91. package/corpus/templates/design/actions/add-localhost-screens.ts +66 -13
  92. package/corpus/templates/design/actions/apply-component-prop-edit.ts +45 -36
  93. package/corpus/templates/design/actions/apply-motion-edit.ts +25 -31
  94. package/corpus/templates/design/actions/apply-shader-fill.ts +29 -42
  95. package/corpus/templates/design/actions/detach-component-instance.ts +337 -0
  96. package/corpus/templates/design/actions/export-design-as-figma-svg.ts +219 -0
  97. package/corpus/templates/design/actions/generate-design.ts +79 -12
  98. package/corpus/templates/design/actions/generate-screens.ts +57 -12
  99. package/corpus/templates/design/actions/get-figma-styles.ts +115 -0
  100. package/corpus/templates/design/actions/go-to-main-component.ts +254 -0
  101. package/corpus/templates/design/actions/grant-localhost-write-consent.ts +4 -3
  102. package/corpus/templates/design/actions/import-design-source.ts +4 -31
  103. package/corpus/templates/design/actions/import-figma-clipboard.ts +134 -0
  104. package/corpus/templates/design/actions/import-figma-frame.ts +95 -0
  105. package/corpus/templates/design/actions/index-design-system-with-builder.ts +16 -1
  106. package/corpus/templates/design/actions/list-design-components.ts +104 -0
  107. package/corpus/templates/design/actions/list-figma-library-assets.ts +1 -24
  108. package/corpus/templates/design/actions/open-component-source.ts +2 -4
  109. package/corpus/templates/design/actions/present-design-variants.ts +412 -16
  110. package/corpus/templates/design/actions/preview-source-edit.ts +14 -1
  111. package/corpus/templates/design/actions/run-design-audit.ts +25 -3
  112. package/corpus/templates/design/actions/show-design-questions.ts +10 -0
  113. package/corpus/templates/design/actions/swap-component-instance.ts +544 -0
  114. package/corpus/templates/design/actions/take-design-screenshot.ts +45 -60
  115. package/corpus/templates/design/actions/write-local-file.ts +25 -1
  116. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +152 -0
  117. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1077 -58
  118. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +5 -5
  119. package/corpus/templates/design/app/components/design/DesignExtensionsPanel.tsx +73 -21
  120. package/corpus/templates/design/app/components/design/EditPanel.tsx +16 -11
  121. package/corpus/templates/design/app/components/design/KeyboardShortcutsPanel.tsx +364 -0
  122. package/corpus/templates/design/app/components/design/LayersPanel.tsx +180 -53
  123. package/corpus/templates/design/app/components/design/LocalhostWriteConsentDialog.tsx +0 -2
  124. package/corpus/templates/design/app/components/design/MotionDock.tsx +144 -21
  125. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +1152 -167
  126. package/corpus/templates/design/app/components/design/QuestionFlow.tsx +27 -5
  127. package/corpus/templates/design/app/components/design/ReviewPanel.tsx +23 -2
  128. package/corpus/templates/design/app/components/design/TokensPanel.tsx +63 -49
  129. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +1293 -54
  130. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +7 -0
  131. package/corpus/templates/design/app/components/design/bridge/hit-test.bridge.ts +6 -1
  132. package/corpus/templates/design/app/components/design/bridge/motion-preview.bridge.ts +23 -6
  133. package/corpus/templates/design/app/components/design/bridge/sample.bridge.ts +7 -0
  134. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +5 -0
  135. package/corpus/templates/design/app/components/design/code-workbench/editor/MonacoHost.tsx +14 -2
  136. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +37 -2
  137. package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open-guard.ts +25 -0
  138. package/corpus/templates/design/app/components/design/code-workbench/format/format-on-open.ts +19 -1
  139. package/corpus/templates/design/app/components/design/code-workbench/model-registry.ts +43 -5
  140. package/corpus/templates/design/app/components/design/code-workbench/search/SearchView.tsx +27 -2
  141. package/corpus/templates/design/app/components/design/code-workbench/search/search-engine.ts +10 -1
  142. package/corpus/templates/design/app/components/design/code-workbench/store.tsx +19 -2
  143. package/corpus/templates/design/app/components/design/design-canvas/annotation-snapshot.ts +265 -0
  144. package/corpus/templates/design/app/components/design/design-canvas/annotation-submit.ts +16 -5
  145. package/corpus/templates/design/app/components/design/design-canvas/coordinate-transforms.ts +16 -2
  146. package/corpus/templates/design/app/components/design/design-canvas/embedded-frame.ts +7 -2
  147. package/corpus/templates/design/app/components/design/design-canvas/iframe-events.ts +3 -1
  148. package/corpus/templates/design/app/components/design/edit-panel/code-inspect-helpers.tsx +78 -8
  149. package/corpus/templates/design/app/components/design/edit-panel/component-section.tsx +451 -73
  150. package/corpus/templates/design/app/components/design/edit-panel/document-colors.ts +12 -4
  151. package/corpus/templates/design/app/components/design/edit-panel/effects-properties.tsx +398 -272
  152. package/corpus/templates/design/app/components/design/edit-panel/element-classification.ts +41 -7
  153. package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +16 -3
  154. package/corpus/templates/design/app/components/design/edit-panel/field-primitives.tsx +24 -4
  155. package/corpus/templates/design/app/components/design/edit-panel/fill-gradient-helpers.ts +222 -4
  156. package/corpus/templates/design/app/components/design/edit-panel/fill-properties.tsx +171 -78
  157. package/corpus/templates/design/app/components/design/edit-panel/inspector-controls.tsx +45 -5
  158. package/corpus/templates/design/app/components/design/edit-panel/layout-properties.tsx +299 -28
  159. package/corpus/templates/design/app/components/design/edit-panel/panel-primitives.tsx +120 -150
  160. package/corpus/templates/design/app/components/design/edit-panel/position-helpers.ts +53 -1
  161. package/corpus/templates/design/app/components/design/edit-panel/position-layout-properties.tsx +284 -117
  162. package/corpus/templates/design/app/components/design/edit-panel/selection-helpers.ts +81 -0
  163. package/corpus/templates/design/app/components/design/edit-panel/stroke-properties.tsx +19 -14
  164. package/corpus/templates/design/app/components/design/edit-panel/style-options.ts +7 -0
  165. package/corpus/templates/design/app/components/design/edit-panel/typography-helpers.ts +155 -0
  166. package/corpus/templates/design/app/components/design/edit-panel/typography-properties.tsx +268 -46
  167. package/corpus/templates/design/app/components/design/inspector/AutoLayoutMatrix.tsx +350 -31
  168. package/corpus/templates/design/app/components/design/inspector/ConstraintsWidget.tsx +13 -4
  169. package/corpus/templates/design/app/components/design/inspector/DesignColorPicker.tsx +233 -23
  170. package/corpus/templates/design/app/components/design/inspector/GradientEditor.tsx +72 -2
  171. package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +51 -11
  172. package/corpus/templates/design/app/components/design/inspector/ShaderFillsPanel.tsx +84 -11
  173. package/corpus/templates/design/app/components/design/inspector/index.ts +3 -0
  174. package/corpus/templates/design/app/components/design/keyboard-shortcuts.ts +552 -0
  175. package/corpus/templates/design/app/components/design/multi-screen/board-surface-html.ts +157 -0
  176. package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +53 -0
  177. package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +184 -0
  178. package/corpus/templates/design/app/components/design/multi-screen/primitive-drop-target.ts +403 -26
  179. package/corpus/templates/design/app/components/design/multi-screen/types.ts +20 -1
  180. package/corpus/templates/design/app/components/design/types.ts +33 -0
  181. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +59 -7
  182. package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +119 -17
  183. package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +275 -63
  184. package/corpus/templates/design/app/hooks/use-question-flow.ts +14 -3
  185. package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +67 -10
  186. package/corpus/templates/design/app/i18n/zh-TW.ts +91 -1
  187. package/corpus/templates/design/app/i18n-data.ts +1217 -10
  188. package/corpus/templates/design/app/i18n-keyboard-shortcuts.ts +577 -0
  189. package/corpus/templates/design/app/lib/agent-chat.ts +23 -0
  190. package/corpus/templates/design/app/lib/design-import.ts +24 -0
  191. package/corpus/templates/design/app/lib/figma-clipboard.ts +157 -0
  192. package/corpus/templates/design/app/lib/figma-svg-copy.ts +221 -0
  193. package/corpus/templates/design/app/pages/design-editor/code-layer-state.ts +143 -30
  194. package/corpus/templates/design/app/pages/design-editor/collab-sync.ts +15 -0
  195. package/corpus/templates/design/app/pages/design-editor/editor-session.ts +33 -0
  196. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +38 -0
  197. package/corpus/templates/design/app/pages/design-editor/overview-annotation-context.ts +157 -0
  198. package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +62 -6
  199. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +245 -0
  200. package/corpus/templates/design/app/pages/design-editor/react-semantic-handoff.ts +586 -0
  201. package/corpus/templates/design/app/pages/design-editor/screen-auto-layout.ts +169 -0
  202. package/corpus/templates/design/app/pages/design-editor/selection-state.ts +201 -1
  203. package/corpus/templates/design/changelog/2026-07-09-added-underline-strikethrough-and-text-case-uppercase-lowerc.md +6 -0
  204. package/corpus/templates/design/changelog/2026-07-09-annotate-now-draws-across-the-all-screens-canvas-without-swi.md +6 -0
  205. package/corpus/templates/design/changelog/2026-07-09-auto-layout-children-can-now-be-dragged-into-freeform-screen.md +6 -0
  206. package/corpus/templates/design/changelog/2026-07-09-board-shapes-now-stay-visible-and-nest-correctly-across-the-.md +6 -0
  207. package/corpus/templates/design/changelog/2026-07-09-component-source-navigation-now-opens-reliably-from-the-insp.md +6 -0
  208. package/corpus/templates/design/changelog/2026-07-09-cross-screen-local-react-layer-moves-now-hand-off-exact-sour.md +6 -0
  209. package/corpus/templates/design/changelog/2026-07-09-cross-screen-moves-undo-and-redo-now-keep-both-screens-stabl.md +6 -0
  210. package/corpus/templates/design/changelog/2026-07-09-detach-a-component-instance-into-plain-editable-eleme.md +6 -0
  211. package/corpus/templates/design/changelog/2026-07-09-dragging-layers-into-auto-layout-now-respects-ignore-auto-la.md +6 -0
  212. package/corpus/templates/design/changelog/2026-07-09-drawing-annotations-sent-to-the-agent-now-include-a-rendered.md +6 -0
  213. package/corpus/templates/design/changelog/2026-07-09-editor-sidebars-now-use-figma-matched-default-widths-for-a-r.md +6 -0
  214. package/corpus/templates/design/changelog/2026-07-09-empty-frames-and-rectangles-now-expose-full-auto-layout-cont.md +6 -0
  215. package/corpus/templates/design/changelog/2026-07-09-export-any-design-screen-as-a-real-vector-svg-for-figma-with.md +6 -0
  216. package/corpus/templates/design/changelog/2026-07-09-grid-auto-layout-now-uses-true-responsive-rows-and-columns-w.md +6 -0
  217. package/corpus/templates/design/changelog/2026-07-09-hidden-and-locked-screens-now-behave-consistently-between-la.md +6 -0
  218. package/corpus/templates/design/changelog/2026-07-09-image-fills-now-preserve-valid-urls-and-layered-fit-settings.md +6 -0
  219. package/corpus/templates/design/changelog/2026-07-09-import-figma-frames-as-pixel-accurate-design-screens-via-a-s.md +6 -0
  220. package/corpus/templates/design/changelog/2026-07-09-inspect-code-now-hides-internal-styling-metadata-and-wraps-l.md +6 -0
  221. package/corpus/templates/design/changelog/2026-07-09-inspector-blur-and-shadow-effects-now-preserve-other-effects.md +6 -0
  222. package/corpus/templates/design/changelog/2026-07-09-jump-to-a-components-other-instances-from-the-inspecto.md +6 -0
  223. package/corpus/templates/design/changelog/2026-07-09-keyboard-shortcuts-are-now-discoverable-in-a-figma-style-bot.md +6 -0
  224. package/corpus/templates/design/changelog/2026-07-09-layer-selection-now-keeps-cmd-or-ctrl-toggles-and-shift-rang.md +6 -0
  225. package/corpus/templates/design/changelog/2026-07-09-layers-dropped-into-auto-layout-now-participate-correctly-in.md +6 -0
  226. package/corpus/templates/design/changelog/2026-07-09-local-live-edit-screens-now-enter-and-leave-full-view-withou.md +6 -0
  227. package/corpus/templates/design/changelog/2026-07-09-local-preview-urls-now-live-in-the-inspector-instead-of-taki.md +6 -0
  228. package/corpus/templates/design/changelog/2026-07-09-local-react-layers-can-now-be-hidden-and-locked-from-layers-.md +6 -0
  229. package/corpus/templates/design/changelog/2026-07-09-local-react-layers-now-keep-exact-source-provenance-and-supp.md +6 -0
  230. package/corpus/templates/design/changelog/2026-07-09-local-react-visual-editing-now-loads-reliably-and-shows-live.md +6 -0
  231. package/corpus/templates/design/changelog/2026-07-09-paste-from-figma-cmd-v-now-imports-exact-editable-nodes-when.md +6 -0
  232. package/corpus/templates/design/changelog/2026-07-09-pressing-escape-after-selecting-a-screen-now-reveals-page-pr.md +6 -0
  233. package/corpus/templates/design/changelog/2026-07-09-right-click-overlapping-or-nested-objects-to-choose-the-exac.md +6 -0
  234. package/corpus/templates/design/changelog/2026-07-09-scale-edge-stretch-and-center-constraints-now-preserve-layer.md +6 -0
  235. package/corpus/templates/design/changelog/2026-07-09-screen-rows-can-now-be-reordered-in-layers-with-matching-can.md +6 -0
  236. package/corpus/templates/design/changelog/2026-07-09-screen-selection-stays-responsive-in-designs-with-hundreds-o.md +6 -0
  237. package/corpus/templates/design/changelog/2026-07-09-shift-a-now-enables-auto-layout-on-a-selected-screen-with-fl.md +6 -0
  238. package/corpus/templates/design/changelog/2026-07-09-swap-a-component-instance-for-another-from-the-libra.md +6 -0
  239. package/corpus/templates/design/changelog/2026-07-10-drawing-annotations-now-stay-available-to-retry-when-the.md +6 -0
  240. package/corpus/templates/design/e2e/global-setup.ts +3 -6
  241. package/corpus/templates/design/e2e/helpers.ts +27 -6
  242. package/corpus/templates/design/server/lib/design-to-figma-svg.ts +1412 -0
  243. package/corpus/templates/design/server/lib/figma-clipboard-match.ts +196 -0
  244. package/corpus/templates/design/server/lib/figma-node-import.ts +311 -0
  245. package/corpus/templates/design/server/lib/figma-node-to-html.ts +1334 -0
  246. package/corpus/templates/design/server/lib/figma-paste-fallback.ts +64 -0
  247. package/corpus/templates/design/server/lib/playwright-runtime.ts +78 -0
  248. package/corpus/templates/design/server/plugins/db.ts +41 -0
  249. package/corpus/templates/design/server/source-workspace.ts +64 -0
  250. package/corpus/templates/design/shared/board-file.ts +13 -2
  251. package/corpus/templates/design/shared/canvas-math.ts +231 -33
  252. package/corpus/templates/design/shared/code-layer.ts +122 -8
  253. package/corpus/templates/design/shared/component-library.ts +161 -0
  254. package/corpus/templates/design/shared/db-conflict.ts +27 -0
  255. package/corpus/templates/design/shared/design-source-capabilities.ts +2 -1
  256. package/corpus/templates/design/shared/figma-url.ts +149 -0
  257. package/corpus/templates/design/shared/pen-path.ts +16 -7
  258. package/corpus/templates/design/shared/source-mode.ts +1 -0
  259. package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +7 -19
  260. package/corpus/templates/plan/changelog/2026-07-09-canvas-panning-now-keeps-zoom-fixed-even-at-the-edges.md +6 -0
  261. package/corpus/templates/slides/actions/index-design-system-with-builder.ts +16 -1
  262. package/corpus/templates/slides/app/context/DeckContext.tsx +311 -70
  263. package/corpus/templates/slides/changelog/2026-07-09-fixed-the-slide-rail-going-permanently-stale-during-a-long-a.md +6 -0
  264. package/dist/agent/production-agent.d.ts +79 -6
  265. package/dist/agent/production-agent.d.ts.map +1 -1
  266. package/dist/agent/production-agent.js +161 -14
  267. package/dist/agent/production-agent.js.map +1 -1
  268. package/dist/agent/run-manager.d.ts.map +1 -1
  269. package/dist/agent/run-manager.js +29 -5
  270. package/dist/agent/run-manager.js.map +1 -1
  271. package/dist/agent/run-store.d.ts +46 -0
  272. package/dist/agent/run-store.d.ts.map +1 -1
  273. package/dist/agent/run-store.js +61 -0
  274. package/dist/agent/run-store.js.map +1 -1
  275. package/dist/cli/design-connect.d.ts +6 -0
  276. package/dist/cli/design-connect.d.ts.map +1 -1
  277. package/dist/cli/design-connect.js +336 -139
  278. package/dist/cli/design-connect.js.map +1 -1
  279. package/dist/cli/skills.d.ts.map +1 -1
  280. package/dist/cli/skills.js +14 -0
  281. package/dist/cli/skills.js.map +1 -1
  282. package/dist/client/AssistantChat.d.ts +2 -0
  283. package/dist/client/AssistantChat.d.ts.map +1 -1
  284. package/dist/client/AssistantChat.js +19 -3
  285. package/dist/client/AssistantChat.js.map +1 -1
  286. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  287. package/dist/client/MultiTabAssistantChat.js +38 -18
  288. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  289. package/dist/client/agent-chat.d.ts +60 -0
  290. package/dist/client/agent-chat.d.ts.map +1 -1
  291. package/dist/client/agent-chat.js +122 -1
  292. package/dist/client/agent-chat.js.map +1 -1
  293. package/dist/client/chat/index.d.ts +1 -1
  294. package/dist/client/chat/index.d.ts.map +1 -1
  295. package/dist/client/chat/index.js +1 -1
  296. package/dist/client/chat/index.js.map +1 -1
  297. package/dist/client/extensions/EmbeddedExtension.d.ts +12 -0
  298. package/dist/client/extensions/EmbeddedExtension.d.ts.map +1 -1
  299. package/dist/client/extensions/EmbeddedExtension.js +36 -2
  300. package/dist/client/extensions/EmbeddedExtension.js.map +1 -1
  301. package/dist/client/index.d.ts +1 -1
  302. package/dist/client/index.d.ts.map +1 -1
  303. package/dist/client/index.js +1 -1
  304. package/dist/client/index.js.map +1 -1
  305. package/dist/client/rich-markdown-editor/useCollabReconcile.d.ts.map +1 -1
  306. package/dist/client/rich-markdown-editor/useCollabReconcile.js +18 -6
  307. package/dist/client/rich-markdown-editor/useCollabReconcile.js.map +1 -1
  308. package/dist/collab/awareness-store.d.ts +5 -0
  309. package/dist/collab/awareness-store.d.ts.map +1 -1
  310. package/dist/collab/awareness-store.js +19 -12
  311. package/dist/collab/awareness-store.js.map +1 -1
  312. package/dist/collab/awareness.d.ts +2 -2
  313. package/dist/collab/awareness.d.ts.map +1 -1
  314. package/dist/collab/client.d.ts.map +1 -1
  315. package/dist/collab/client.js +13 -5
  316. package/dist/collab/client.js.map +1 -1
  317. package/dist/collab/index.d.ts +1 -0
  318. package/dist/collab/index.d.ts.map +1 -1
  319. package/dist/collab/index.js +1 -0
  320. package/dist/collab/index.js.map +1 -1
  321. package/dist/collab/recent-edits.d.ts +3 -1
  322. package/dist/collab/recent-edits.d.ts.map +1 -1
  323. package/dist/collab/recent-edits.js +57 -2
  324. package/dist/collab/recent-edits.js.map +1 -1
  325. package/dist/collab/routes.d.ts +1 -1
  326. package/dist/deploy/build.d.ts +24 -0
  327. package/dist/deploy/build.d.ts.map +1 -1
  328. package/dist/deploy/build.js +102 -5
  329. package/dist/deploy/build.js.map +1 -1
  330. package/dist/index.browser.d.ts +1 -1
  331. package/dist/index.browser.d.ts.map +1 -1
  332. package/dist/index.browser.js +1 -1
  333. package/dist/index.browser.js.map +1 -1
  334. package/dist/notifications/routes.d.ts +1 -1
  335. package/dist/observability/routes.d.ts +5 -5
  336. package/dist/progress/routes.d.ts +1 -1
  337. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  338. package/dist/server/agent-chat-plugin.js +87 -10
  339. package/dist/server/agent-chat-plugin.js.map +1 -1
  340. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  341. package/dist/server/builder-design-systems.d.ts +15 -0
  342. package/dist/server/builder-design-systems.d.ts.map +1 -1
  343. package/dist/server/builder-design-systems.js +9 -4
  344. package/dist/server/builder-design-systems.js.map +1 -1
  345. package/package.json +1 -1
@@ -0,0 +1,577 @@
1
+ import type { LocaleCode } from "@agent-native/core/client";
2
+
3
+ interface KeyboardShortcutLabels {
4
+ title: string;
5
+ essential: string;
6
+ shape: string;
7
+ selection: string;
8
+ cursor: string;
9
+ transform: string;
10
+ arrange: string;
11
+ components: string;
12
+ hideUiDescription: string;
13
+ undoDescription: string;
14
+ redoDescription: string;
15
+ }
16
+
17
+ interface KeyboardKeyLabels {
18
+ or: string;
19
+ command: string;
20
+ control: string;
21
+ option: string;
22
+ alt: string;
23
+ shift: string;
24
+ arrowDown: string;
25
+ arrowLeft: string;
26
+ arrowRight: string;
27
+ arrowUp: string;
28
+ backspace: string;
29
+ delete: string;
30
+ enter: string;
31
+ tab: string;
32
+ questionMark: string;
33
+ backslash: string;
34
+ equals: string;
35
+ minus: string;
36
+ leftBracket: string;
37
+ rightBracket: string;
38
+ }
39
+
40
+ export const keyboardShortcutLabels = {
41
+ "zh-TW": {
42
+ title: "鍵盤快速鍵",
43
+ essential: "基本",
44
+ shape: "形狀",
45
+ selection: "選取",
46
+ cursor: "游標",
47
+ transform: "變形",
48
+ arrange: "排列",
49
+ components: "元件",
50
+ hideUiDescription: "立即按下以快速隱藏面板並專注於工作",
51
+ undoDescription: "逐步回復最近的設計變更",
52
+ redoDescription: "還原剛才復原的設計變更",
53
+ },
54
+ "zh-CN": {
55
+ title: "键盘快捷键",
56
+ essential: "基本",
57
+ shape: "形状",
58
+ selection: "选择",
59
+ cursor: "光标",
60
+ transform: "变换",
61
+ arrange: "排列",
62
+ components: "组件",
63
+ hideUiDescription: "立即按下以快速隐藏面板并专注于工作",
64
+ undoDescription: "逐步撤销最近的设计更改",
65
+ redoDescription: "恢复刚刚撤销的设计更改",
66
+ },
67
+ "es-ES": {
68
+ title: "Atajos de teclado",
69
+ essential: "Esenciales",
70
+ shape: "Formas",
71
+ selection: "Selección",
72
+ cursor: "Cursor",
73
+ transform: "Transformar",
74
+ arrange: "Organizar",
75
+ components: "Componentes",
76
+ hideUiDescription:
77
+ "Púlsalo ahora para ocultar los paneles y concentrarte en tu trabajo",
78
+ undoDescription: "Retrocede por el cambio de diseño más reciente",
79
+ redoDescription: "Restaura el cambio de diseño que acabas de deshacer",
80
+ },
81
+ "fr-FR": {
82
+ title: "Raccourcis clavier",
83
+ essential: "Essentiels",
84
+ shape: "Formes",
85
+ selection: "Sélection",
86
+ cursor: "Curseur",
87
+ transform: "Transformer",
88
+ arrange: "Organiser",
89
+ components: "Composants",
90
+ hideUiDescription:
91
+ "Appuyez maintenant pour masquer les panneaux et vous concentrer sur votre travail",
92
+ undoDescription: "Revenez sur votre dernière modification de design",
93
+ redoDescription:
94
+ "Restaurez la modification de design que vous venez d’annuler",
95
+ },
96
+ "de-DE": {
97
+ title: "Tastenkürzel",
98
+ essential: "Grundlagen",
99
+ shape: "Formen",
100
+ selection: "Auswahl",
101
+ cursor: "Zeiger",
102
+ transform: "Transformieren",
103
+ arrange: "Anordnen",
104
+ components: "Komponenten",
105
+ hideUiDescription:
106
+ "Drücke jetzt, um die Bereiche auszublenden und dich auf deine Arbeit zu konzentrieren",
107
+ undoDescription: "Mache die letzte Designänderung rückgängig",
108
+ redoDescription:
109
+ "Stelle die soeben rückgängig gemachte Designänderung wieder her",
110
+ },
111
+ "ja-JP": {
112
+ title: "キーボードショートカット",
113
+ essential: "基本",
114
+ shape: "シェイプ",
115
+ selection: "選択",
116
+ cursor: "カーソル",
117
+ transform: "変形",
118
+ arrange: "配置",
119
+ components: "コンポーネント",
120
+ hideUiDescription: "今すぐ押してパネルを隠し、作業に集中できます",
121
+ undoDescription: "直前のデザイン変更を元に戻します",
122
+ redoDescription: "元に戻したデザイン変更を復元します",
123
+ },
124
+ "ko-KR": {
125
+ title: "키보드 단축키",
126
+ essential: "필수",
127
+ shape: "도형",
128
+ selection: "선택",
129
+ cursor: "커서",
130
+ transform: "변형",
131
+ arrange: "정렬",
132
+ components: "컴포넌트",
133
+ hideUiDescription: "지금 눌러 패널을 빠르게 숨기고 작업에 집중하세요",
134
+ undoDescription: "가장 최근 디자인 변경을 되돌립니다",
135
+ redoDescription: "방금 실행 취소한 디자인 변경을 복원합니다",
136
+ },
137
+ "pt-BR": {
138
+ title: "Atalhos de teclado",
139
+ essential: "Essenciais",
140
+ shape: "Formas",
141
+ selection: "Seleção",
142
+ cursor: "Cursor",
143
+ transform: "Transformar",
144
+ arrange: "Organizar",
145
+ components: "Componentes",
146
+ hideUiDescription:
147
+ "Pressione agora para ocultar os painéis e focar no seu trabalho",
148
+ undoDescription: "Desfaça a alteração de design mais recente",
149
+ redoDescription:
150
+ "Restaure a alteração de design que você acabou de desfazer",
151
+ },
152
+ "hi-IN": {
153
+ title: "कीबोर्ड शॉर्टकट",
154
+ essential: "आवश्यक",
155
+ shape: "आकृति",
156
+ selection: "चयन",
157
+ cursor: "कर्सर",
158
+ transform: "रूपांतरण",
159
+ arrange: "व्यवस्थित करें",
160
+ components: "कॉम्पोनेंट",
161
+ hideUiDescription: "पैनल तुरंत छिपाकर अपने काम पर ध्यान देने के लिए इसे अभी दबाएँ",
162
+ undoDescription: "सबसे हाल के डिज़ाइन बदलाव को वापस करें",
163
+ redoDescription: "अभी वापस किए गए डिज़ाइन बदलाव को फिर से लागू करें",
164
+ },
165
+ "ar-SA": {
166
+ title: "اختصارات لوحة المفاتيح",
167
+ essential: "أساسي",
168
+ shape: "الأشكال",
169
+ selection: "التحديد",
170
+ cursor: "المؤشر",
171
+ transform: "التحويل",
172
+ arrange: "الترتيب",
173
+ components: "المكونات",
174
+ hideUiDescription: "اضغطه الآن لإخفاء اللوحات بسرعة والتركيز على عملك",
175
+ undoDescription: "تراجع عن أحدث تغيير في التصميم",
176
+ redoDescription: "استعد تغيير التصميم الذي تراجعت عنه للتو",
177
+ },
178
+ } satisfies Record<Exclude<LocaleCode, "en-US">, KeyboardShortcutLabels>;
179
+
180
+ export const keyboardKeyLabels = {
181
+ "zh-TW": {
182
+ or: "或",
183
+ command: "Command 鍵",
184
+ control: "Control 鍵",
185
+ option: "Option 鍵",
186
+ alt: "Alt 鍵",
187
+ shift: "Shift 鍵",
188
+ arrowDown: "下方向鍵",
189
+ arrowLeft: "左方向鍵",
190
+ arrowRight: "右方向鍵",
191
+ arrowUp: "上方向鍵",
192
+ backspace: "退格鍵",
193
+ delete: "刪除鍵",
194
+ enter: "Enter 鍵",
195
+ tab: "Tab 鍵",
196
+ questionMark: "問號",
197
+ backslash: "反斜線",
198
+ equals: "等號",
199
+ minus: "減號",
200
+ leftBracket: "左方括號",
201
+ rightBracket: "右方括號",
202
+ },
203
+ "zh-CN": {
204
+ or: "或",
205
+ command: "Command 键",
206
+ control: "Control 键",
207
+ option: "Option 键",
208
+ alt: "Alt 键",
209
+ shift: "Shift 键",
210
+ arrowDown: "向下箭头键",
211
+ arrowLeft: "向左箭头键",
212
+ arrowRight: "向右箭头键",
213
+ arrowUp: "向上箭头键",
214
+ backspace: "退格键",
215
+ delete: "删除键",
216
+ enter: "Enter 键",
217
+ tab: "Tab 键",
218
+ questionMark: "问号",
219
+ backslash: "反斜杠",
220
+ equals: "等号",
221
+ minus: "减号",
222
+ leftBracket: "左方括号",
223
+ rightBracket: "右方括号",
224
+ },
225
+ "es-ES": {
226
+ or: "o",
227
+ command: "Comando",
228
+ control: "Control",
229
+ option: "Opción",
230
+ alt: "Alt",
231
+ shift: "Mayús",
232
+ arrowDown: "Flecha abajo",
233
+ arrowLeft: "Flecha izquierda",
234
+ arrowRight: "Flecha derecha",
235
+ arrowUp: "Flecha arriba",
236
+ backspace: "Retroceso",
237
+ delete: "Suprimir",
238
+ enter: "Intro",
239
+ tab: "Tabulador",
240
+ questionMark: "Signo de interrogación",
241
+ backslash: "Barra invertida",
242
+ equals: "Igual",
243
+ minus: "Menos",
244
+ leftBracket: "Corchete izquierdo",
245
+ rightBracket: "Corchete derecho",
246
+ },
247
+ "fr-FR": {
248
+ or: "ou",
249
+ command: "Commande",
250
+ control: "Contrôle",
251
+ option: "Option",
252
+ alt: "Alt",
253
+ shift: "Majuscule",
254
+ arrowDown: "Flèche vers le bas",
255
+ arrowLeft: "Flèche vers la gauche",
256
+ arrowRight: "Flèche vers la droite",
257
+ arrowUp: "Flèche vers le haut",
258
+ backspace: "Retour arrière",
259
+ delete: "Supprimer",
260
+ enter: "Entrée",
261
+ tab: "Tabulation",
262
+ questionMark: "Point d’interrogation",
263
+ backslash: "Barre oblique inverse",
264
+ equals: "Égal",
265
+ minus: "Moins",
266
+ leftBracket: "Crochet gauche",
267
+ rightBracket: "Crochet droit",
268
+ },
269
+ "de-DE": {
270
+ or: "oder",
271
+ command: "Befehl",
272
+ control: "Steuerung",
273
+ option: "Wahltaste",
274
+ alt: "Alt",
275
+ shift: "Umschalt",
276
+ arrowDown: "Pfeil nach unten",
277
+ arrowLeft: "Pfeil nach links",
278
+ arrowRight: "Pfeil nach rechts",
279
+ arrowUp: "Pfeil nach oben",
280
+ backspace: "Rücktaste",
281
+ delete: "Entfernen",
282
+ enter: "Eingabetaste",
283
+ tab: "Tabulatortaste",
284
+ questionMark: "Fragezeichen",
285
+ backslash: "Umgekehrter Schrägstrich",
286
+ equals: "Gleichheitszeichen",
287
+ minus: "Minuszeichen",
288
+ leftBracket: "Linke eckige Klammer",
289
+ rightBracket: "Rechte eckige Klammer",
290
+ },
291
+ "ja-JP": {
292
+ or: "または",
293
+ command: "Commandキー",
294
+ control: "Controlキー",
295
+ option: "Optionキー",
296
+ alt: "Altキー",
297
+ shift: "Shiftキー",
298
+ arrowDown: "下矢印キー",
299
+ arrowLeft: "左矢印キー",
300
+ arrowRight: "右矢印キー",
301
+ arrowUp: "上矢印キー",
302
+ backspace: "Backspaceキー",
303
+ delete: "Deleteキー",
304
+ enter: "Enterキー",
305
+ tab: "Tabキー",
306
+ questionMark: "疑問符",
307
+ backslash: "バックスラッシュ",
308
+ equals: "等号",
309
+ minus: "マイナス",
310
+ leftBracket: "左角括弧",
311
+ rightBracket: "右角括弧",
312
+ },
313
+ "ko-KR": {
314
+ or: "또는",
315
+ command: "Command 키",
316
+ control: "Control 키",
317
+ option: "Option 키",
318
+ alt: "Alt 키",
319
+ shift: "Shift 키",
320
+ arrowDown: "아래쪽 화살표 키",
321
+ arrowLeft: "왼쪽 화살표 키",
322
+ arrowRight: "오른쪽 화살표 키",
323
+ arrowUp: "위쪽 화살표 키",
324
+ backspace: "백스페이스 키",
325
+ delete: "Delete 키",
326
+ enter: "Enter 키",
327
+ tab: "Tab 키",
328
+ questionMark: "물음표",
329
+ backslash: "백슬래시",
330
+ equals: "등호",
331
+ minus: "빼기 기호",
332
+ leftBracket: "왼쪽 대괄호",
333
+ rightBracket: "오른쪽 대괄호",
334
+ },
335
+ "pt-BR": {
336
+ or: "ou",
337
+ command: "Comando",
338
+ control: "Control",
339
+ option: "Opção",
340
+ alt: "Alt",
341
+ shift: "Shift",
342
+ arrowDown: "Seta para baixo",
343
+ arrowLeft: "Seta para a esquerda",
344
+ arrowRight: "Seta para a direita",
345
+ arrowUp: "Seta para cima",
346
+ backspace: "Backspace",
347
+ delete: "Excluir",
348
+ enter: "Enter",
349
+ tab: "Tab",
350
+ questionMark: "Ponto de interrogação",
351
+ backslash: "Barra invertida",
352
+ equals: "Igual",
353
+ minus: "Menos",
354
+ leftBracket: "Colchete esquerdo",
355
+ rightBracket: "Colchete direito",
356
+ },
357
+ "hi-IN": {
358
+ or: "या",
359
+ command: "Command कुंजी",
360
+ control: "Control कुंजी",
361
+ option: "Option कुंजी",
362
+ alt: "Alt कुंजी",
363
+ shift: "Shift कुंजी",
364
+ arrowDown: "नीचे तीर कुंजी",
365
+ arrowLeft: "बायाँ तीर कुंजी",
366
+ arrowRight: "दायाँ तीर कुंजी",
367
+ arrowUp: "ऊपर तीर कुंजी",
368
+ backspace: "Backspace कुंजी",
369
+ delete: "Delete कुंजी",
370
+ enter: "Enter कुंजी",
371
+ tab: "Tab कुंजी",
372
+ questionMark: "प्रश्न चिह्न",
373
+ backslash: "बैकस्लैश",
374
+ equals: "बराबर चिह्न",
375
+ minus: "ऋण चिह्न",
376
+ leftBracket: "बायाँ कोष्ठक",
377
+ rightBracket: "दायाँ कोष्ठक",
378
+ },
379
+ "ar-SA": {
380
+ or: "أو",
381
+ command: "مفتاح Command",
382
+ control: "مفتاح Control",
383
+ option: "مفتاح Option",
384
+ alt: "مفتاح Alt",
385
+ shift: "مفتاح Shift",
386
+ arrowDown: "مفتاح السهم لأسفل",
387
+ arrowLeft: "مفتاح السهم لليسار",
388
+ arrowRight: "مفتاح السهم لليمين",
389
+ arrowUp: "مفتاح السهم لأعلى",
390
+ backspace: "مفتاح Backspace",
391
+ delete: "مفتاح Delete",
392
+ enter: "مفتاح Enter",
393
+ tab: "مفتاح Tab",
394
+ questionMark: "علامة الاستفهام",
395
+ backslash: "الشرطة المائلة العكسية",
396
+ equals: "علامة يساوي",
397
+ minus: "علامة الطرح",
398
+ leftBracket: "القوس المربع الأيسر",
399
+ rightBracket: "القوس المربع الأيمن",
400
+ },
401
+ } satisfies Record<Exclude<LocaleCode, "en-US">, KeyboardKeyLabels>;
402
+
403
+ interface KeyboardMessagesSource {
404
+ editPanel: {
405
+ properties: string;
406
+ sections: {
407
+ layout: string;
408
+ autoLayout: string;
409
+ fill: string;
410
+ stroke: string;
411
+ codeConfidence: string;
412
+ };
413
+ labels: { align: string };
414
+ alignOptions: { start: string; center: string; end: string };
415
+ textDecorations: { underline: string; strikethrough: string };
416
+ };
417
+ designEditor: {
418
+ leftRail: { tools: string; assets: string };
419
+ modes: { edit: string; draw: string };
420
+ tools: Record<
421
+ | "move"
422
+ | "frame"
423
+ | "text"
424
+ | "pen"
425
+ | "hand"
426
+ | "scale"
427
+ | "rect"
428
+ | "ellipse"
429
+ | "line"
430
+ | "arrow",
431
+ string
432
+ >;
433
+ undo: string;
434
+ redo: string;
435
+ view: string;
436
+ zoom: string;
437
+ zoomIn: string;
438
+ zoomOut: string;
439
+ fitToScreen: string;
440
+ pinComment: string;
441
+ downloadPng: string;
442
+ close: string;
443
+ componentInstances: { detach: string };
444
+ };
445
+ layersPanel: {
446
+ title: string;
447
+ screens: string;
448
+ searchPlaceholder: string;
449
+ copy: string;
450
+ pasteHere: string;
451
+ pasteToReplace: string;
452
+ duplicate: string;
453
+ delete: string;
454
+ rename: string;
455
+ flipHorizontal: string;
456
+ flipVertical: string;
457
+ bringForward: string;
458
+ bringToFront: string;
459
+ sendBackward: string;
460
+ sendToBack: string;
461
+ group: string;
462
+ ungroup: string;
463
+ frameSelection: string;
464
+ };
465
+ }
466
+
467
+ export function attachLocalizedKeyboardShortcuts<
468
+ T extends KeyboardMessagesSource,
469
+ >(
470
+ messages: T,
471
+ labels: KeyboardShortcutLabels,
472
+ keyLabels: KeyboardKeyLabels,
473
+ ): T {
474
+ const d = messages.designEditor;
475
+ const layers = messages.layersPanel;
476
+ const edit = messages.editPanel;
477
+ return {
478
+ ...messages,
479
+ designEditor: {
480
+ ...d,
481
+ keyboardShortcuts: {
482
+ title: labels.title,
483
+ close: `${d.close}: ${labels.title}`,
484
+ codeContext: edit.sections.codeConfidence,
485
+ screenContext: layers.screens,
486
+ keys: keyLabels,
487
+ descriptions: {
488
+ toggleUi: labels.hideUiDescription,
489
+ undo: labels.undoDescription,
490
+ redo: labels.redoDescription,
491
+ },
492
+ categories: {
493
+ essential: labels.essential,
494
+ tools: d.leftRail.tools,
495
+ view: d.view,
496
+ zoom: d.zoom,
497
+ text: d.tools.text,
498
+ shape: labels.shape,
499
+ selection: labels.selection,
500
+ cursor: labels.cursor,
501
+ edit: d.modes.edit,
502
+ transform: labels.transform,
503
+ arrange: labels.arrange,
504
+ components: labels.components,
505
+ layout: edit.sections.layout,
506
+ },
507
+ commands: {
508
+ showShortcuts: labels.title,
509
+ undo: d.undo,
510
+ redo: d.redo,
511
+ moveTool: d.tools.move,
512
+ frameTool: d.tools.frame,
513
+ textTool: d.tools.text,
514
+ penTool: d.tools.pen,
515
+ handTool: d.tools.hand,
516
+ scaleTool: d.tools.scale,
517
+ commentTool: d.pinComment,
518
+ drawTool: d.modes.draw,
519
+ showLayers: layers.title,
520
+ showAssets: d.leftRail.assets,
521
+ toggleUi: d.view,
522
+ toggleComments: d.pinComment,
523
+ zoomIn: d.zoomIn,
524
+ zoomOut: d.zoomOut,
525
+ zoomReset: `${d.zoom} 100%`,
526
+ zoomFit: d.fitToScreen,
527
+ zoomSelection: `${d.zoom}: ${labels.selection}`,
528
+ underline: edit.textDecorations.underline,
529
+ strikethrough: edit.textDecorations.strikethrough,
530
+ rectangle: d.tools.rect,
531
+ ellipse: d.tools.ellipse,
532
+ line: d.tools.line,
533
+ arrow: d.tools.arrow,
534
+ selectAll: labels.selection,
535
+ selectParent: `${labels.selection}: ${layers.title}`,
536
+ enterSelection: labels.selection,
537
+ nextSibling: `${labels.selection} →`,
538
+ previousSibling: `← ${labels.selection}`,
539
+ nextScreen: `${layers.screens} →`,
540
+ previousScreen: `← ${layers.screens}`,
541
+ nudge: d.tools.move,
542
+ nudgeLarge: `${d.tools.move} 10`,
543
+ copy: layers.copy,
544
+ copyPng: `${layers.copy} PNG`,
545
+ cut: layers.delete,
546
+ paste: layers.pasteHere,
547
+ pasteOver: layers.pasteToReplace,
548
+ copyProperties: `${layers.copy}: ${edit.properties}`,
549
+ pasteProperties: `${layers.pasteHere}: ${edit.properties}`,
550
+ pasteReplace: layers.pasteToReplace,
551
+ duplicate: layers.duplicate,
552
+ delete: layers.delete,
553
+ rename: layers.rename,
554
+ find: layers.searchPlaceholder,
555
+ flipHorizontal: layers.flipHorizontal,
556
+ flipVertical: layers.flipVertical,
557
+ swapFillStroke: `${edit.sections.fill} / ${edit.sections.stroke}`,
558
+ bringForward: layers.bringForward,
559
+ sendBackward: layers.sendBackward,
560
+ bringFront: layers.bringToFront,
561
+ sendBack: layers.sendToBack,
562
+ alignLeft: `${edit.labels.align}: ${edit.alignOptions.start}`,
563
+ alignRight: `${edit.labels.align}: ${edit.alignOptions.end}`,
564
+ alignTop: `${edit.labels.align}: ${edit.alignOptions.start}`,
565
+ alignBottom: `${edit.labels.align}: ${edit.alignOptions.end}`,
566
+ tidy: edit.sections.autoLayout,
567
+ createComponent: labels.components,
568
+ detachInstance: d.componentInstances.detach,
569
+ group: layers.group,
570
+ ungroup: layers.ungroup,
571
+ frameSelection: layers.frameSelection,
572
+ autoLayout: edit.sections.autoLayout,
573
+ },
574
+ },
575
+ },
576
+ } as T;
577
+ }
@@ -1,6 +1,8 @@
1
1
  import {
2
2
  sendToAgentChat,
3
+ sendToAgentChatAndConfirm,
3
4
  type AgentChatMessage,
5
+ type SendToAgentChatAndConfirmResult,
4
6
  } from "@agent-native/core/client";
5
7
 
6
8
  export const DESIGN_CHAT_STORAGE_KEY = "design";
@@ -11,3 +13,24 @@ export function sendToDesignAgentChat(opts: AgentChatMessage): string {
11
13
  chatTarget: "local",
12
14
  });
13
15
  }
16
+
17
+ /**
18
+ * Ack-confirmed variant of `sendToDesignAgentChat`. Resolves once the
19
+ * message either became a visible chat turn (`delivered: true`) or was
20
+ * definitively rejected/timed out (`delivered: false`) — use this wherever
21
+ * the caller owns state (draw overlay strokes, queued comment pins) that
22
+ * must not be discarded on a silent drop. See the `design-canvas/
23
+ * annotation-submit.ts` docblock for the contract this backs.
24
+ */
25
+ export function sendToDesignAgentChatAndConfirm(
26
+ opts: AgentChatMessage,
27
+ options?: { timeoutMs?: number },
28
+ ): Promise<SendToAgentChatAndConfirmResult> {
29
+ return sendToAgentChatAndConfirm(
30
+ {
31
+ ...opts,
32
+ chatTarget: "local",
33
+ },
34
+ options,
35
+ );
36
+ }
@@ -1,10 +1,34 @@
1
1
  import type { PortableStyleSnapshot } from "@/components/design/types";
2
2
 
3
+ export interface FigmaFidelityReport {
4
+ exactCount: number;
5
+ approximated: Array<{
6
+ nodeId: string;
7
+ nodeName?: string;
8
+ nodeType?: string;
9
+ notes: string[];
10
+ }>;
11
+ imageFallbacks: Array<{
12
+ nodeId: string;
13
+ nodeName?: string;
14
+ nodeType?: string;
15
+ notes: string[];
16
+ }>;
17
+ }
18
+
3
19
  export interface ImportResult {
4
20
  designId?: string;
5
21
  files?: Array<{ id: string; filename: string }>;
6
22
  warnings?: string[];
7
23
  error?: string;
24
+ /** Set by import-figma-clipboard: which path actually produced the screen(s). */
25
+ strategy?: "restNodes" | "htmlFallback";
26
+ /** Set by import-figma-clipboard when it fell back because no Figma token is configured. */
27
+ figmaApiKeyMissing?: boolean;
28
+ /** Set by import-figma-clipboard when it fell back: why the REST match didn't happen. */
29
+ matchStatus?: "matched" | "ambiguous" | "none" | "error";
30
+ fidelityReport?: FigmaFidelityReport;
31
+ guidance?: string;
8
32
  }
9
33
 
10
34
  export const VISUAL_EDIT_CONNECT_COMMAND =