@agent-native/core 0.92.11 → 0.93.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (777) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +45 -0
  3. package/corpus/core/docs/content/automation-connectors.mdx +80 -0
  4. package/corpus/core/docs/content/extensions.mdx +8 -0
  5. package/corpus/core/docs/content/locales/ar-SA/extensions.mdx +8 -0
  6. package/corpus/core/docs/content/locales/ar-SA/messaging.mdx +84 -15
  7. package/corpus/core/docs/content/locales/ar-SA/template-clips.mdx +1 -0
  8. package/corpus/core/docs/content/locales/ar-SA/template-design.mdx +1 -0
  9. package/corpus/core/docs/content/locales/de-DE/extensions.mdx +10 -0
  10. package/corpus/core/docs/content/locales/de-DE/messaging.mdx +92 -15
  11. package/corpus/core/docs/content/locales/de-DE/template-clips.mdx +1 -0
  12. package/corpus/core/docs/content/locales/de-DE/template-design.mdx +1 -0
  13. package/corpus/core/docs/content/locales/es-ES/extensions.mdx +10 -0
  14. package/corpus/core/docs/content/locales/es-ES/messaging.mdx +91 -15
  15. package/corpus/core/docs/content/locales/es-ES/template-clips.mdx +1 -0
  16. package/corpus/core/docs/content/locales/es-ES/template-design.mdx +1 -0
  17. package/corpus/core/docs/content/locales/fr-FR/extensions.mdx +10 -0
  18. package/corpus/core/docs/content/locales/fr-FR/messaging.mdx +91 -15
  19. package/corpus/core/docs/content/locales/fr-FR/template-clips.mdx +1 -0
  20. package/corpus/core/docs/content/locales/fr-FR/template-design.mdx +1 -0
  21. package/corpus/core/docs/content/locales/hi-IN/extensions.mdx +8 -0
  22. package/corpus/core/docs/content/locales/hi-IN/messaging.mdx +81 -15
  23. package/corpus/core/docs/content/locales/hi-IN/template-clips.mdx +1 -0
  24. package/corpus/core/docs/content/locales/hi-IN/template-design.mdx +1 -0
  25. package/corpus/core/docs/content/locales/ja-JP/extensions.mdx +9 -0
  26. package/corpus/core/docs/content/locales/ja-JP/messaging.mdx +81 -15
  27. package/corpus/core/docs/content/locales/ja-JP/template-clips.mdx +1 -0
  28. package/corpus/core/docs/content/locales/ja-JP/template-design.mdx +1 -0
  29. package/corpus/core/docs/content/locales/ko-KR/extensions.mdx +8 -0
  30. package/corpus/core/docs/content/locales/ko-KR/messaging.mdx +80 -15
  31. package/corpus/core/docs/content/locales/ko-KR/template-clips.mdx +1 -0
  32. package/corpus/core/docs/content/locales/ko-KR/template-design.mdx +1 -0
  33. package/corpus/core/docs/content/locales/pt-BR/extensions.mdx +9 -0
  34. package/corpus/core/docs/content/locales/pt-BR/messaging.mdx +88 -15
  35. package/corpus/core/docs/content/locales/pt-BR/template-clips.mdx +1 -0
  36. package/corpus/core/docs/content/locales/pt-BR/template-design.mdx +1 -0
  37. package/corpus/core/docs/content/locales/zh-CN/extensions.mdx +6 -0
  38. package/corpus/core/docs/content/locales/zh-CN/messaging.mdx +78 -15
  39. package/corpus/core/docs/content/locales/zh-CN/template-clips.mdx +1 -0
  40. package/corpus/core/docs/content/locales/zh-CN/template-design.mdx +1 -0
  41. package/corpus/core/docs/content/locales/zh-TW/extensions.mdx +6 -0
  42. package/corpus/core/docs/content/locales/zh-TW/messaging.mdx +78 -15
  43. package/corpus/core/docs/content/locales/zh-TW/template-clips.mdx +1 -0
  44. package/corpus/core/docs/content/locales/zh-TW/template-design.mdx +1 -0
  45. package/corpus/core/docs/content/messaging.mdx +227 -45
  46. package/corpus/core/docs/content/template-clips.mdx +3 -0
  47. package/corpus/core/docs/content/template-design.mdx +4 -0
  48. package/corpus/core/package.json +5 -1
  49. package/corpus/core/src/a2a/artifact-response.ts +131 -2
  50. package/corpus/core/src/a2a/client.ts +10 -0
  51. package/corpus/core/src/a2a/handlers.ts +40 -76
  52. package/corpus/core/src/a2a/types.ts +2 -0
  53. package/corpus/core/src/agent/durable-background.ts +24 -0
  54. package/corpus/core/src/agent/production-agent.ts +48 -5
  55. package/corpus/core/src/agent/run-manager.ts +171 -20
  56. package/corpus/core/src/agent/run-store.ts +297 -42
  57. package/corpus/core/src/agent/types.ts +23 -0
  58. package/corpus/core/src/audit/record.ts +31 -0
  59. package/corpus/core/src/audit/store.ts +69 -3
  60. package/corpus/core/src/audit/types.ts +13 -0
  61. package/corpus/core/src/automation/index.ts +802 -0
  62. package/corpus/core/src/cli/create.ts +12 -5
  63. package/corpus/core/src/cli/design-connect.ts +596 -36
  64. package/corpus/core/src/client/AgentPanel.tsx +51 -6
  65. package/corpus/core/src/client/AssistantChat.tsx +274 -147
  66. package/corpus/core/src/client/MultiTabAssistantChat.tsx +3 -0
  67. package/corpus/core/src/client/RunStuckBanner.tsx +69 -20
  68. package/corpus/core/src/client/agent-chat-adapter.ts +110 -17
  69. package/corpus/core/src/client/automation.ts +22 -0
  70. package/corpus/core/src/client/chat/run-recovery.tsx +67 -50
  71. package/corpus/core/src/client/composer/TiptapComposer.tsx +8 -0
  72. package/corpus/core/src/client/index.ts +30 -0
  73. package/corpus/core/src/client/integrations/api.ts +295 -0
  74. package/corpus/core/src/client/integrations/index.ts +26 -0
  75. package/corpus/core/src/client/transcription/use-live-transcription.ts +68 -5
  76. package/corpus/core/src/client/use-run-stuck-detection.ts +41 -3
  77. package/corpus/core/src/deploy/build.ts +59 -3
  78. package/corpus/core/src/deploy/workspace-deploy.ts +37 -2
  79. package/corpus/core/src/file-upload/types.ts +2 -0
  80. package/corpus/core/src/index.ts +37 -0
  81. package/corpus/core/src/integrations/a2a-continuations-store.ts +6 -4
  82. package/corpus/core/src/integrations/adapters/discord.ts +362 -0
  83. package/corpus/core/src/integrations/adapters/index.ts +29 -0
  84. package/corpus/core/src/integrations/adapters/microsoft-teams.ts +411 -0
  85. package/corpus/core/src/integrations/adapters/slack.ts +861 -27
  86. package/corpus/core/src/integrations/adapters/telegram.ts +54 -15
  87. package/corpus/core/src/integrations/adapters/whatsapp.ts +41 -17
  88. package/corpus/core/src/integrations/catalog.ts +571 -0
  89. package/corpus/core/src/integrations/controls-store.ts +187 -0
  90. package/corpus/core/src/integrations/index.ts +100 -0
  91. package/corpus/core/src/integrations/installations-store.ts +677 -0
  92. package/corpus/core/src/integrations/integration-memory.ts +187 -0
  93. package/corpus/core/src/integrations/pending-tasks-retry-job.ts +6 -6
  94. package/corpus/core/src/integrations/pending-tasks-store.ts +83 -5
  95. package/corpus/core/src/integrations/plugin.ts +685 -47
  96. package/corpus/core/src/integrations/scope-store.ts +498 -0
  97. package/corpus/core/src/integrations/slack-manifest.ts +78 -0
  98. package/corpus/core/src/integrations/slack-oauth.ts +343 -0
  99. package/corpus/core/src/integrations/types.ts +179 -0
  100. package/corpus/core/src/integrations/usage-budget-store.ts +906 -0
  101. package/corpus/core/src/integrations/webhook-handler.ts +562 -51
  102. package/corpus/core/src/jobs/scheduler.ts +100 -2
  103. package/corpus/core/src/jobs/tools.ts +45 -9
  104. package/corpus/core/src/provider-api/index.ts +72 -1
  105. package/corpus/core/src/resources/handlers.ts +88 -14
  106. package/corpus/core/src/resources/script-helpers.ts +36 -7
  107. package/corpus/core/src/resources/store.ts +59 -52
  108. package/corpus/core/src/scripts/call-agent.ts +107 -1
  109. package/corpus/core/src/server/agent-chat-plugin.ts +294 -119
  110. package/corpus/core/src/server/auth.ts +10 -14
  111. package/corpus/core/src/server/builder-design-systems.ts +16 -1
  112. package/corpus/core/src/server/edge.ts +18 -0
  113. package/corpus/core/src/server/index.ts +26 -0
  114. package/corpus/core/src/server/request-context.ts +18 -0
  115. package/corpus/core/src/server/social-og-image.ts +3 -2
  116. package/corpus/core/src/styles/agent-native.css +62 -44
  117. package/corpus/core/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
  118. package/corpus/core/src/templates/default/AGENTS.md +7 -3
  119. package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
  120. package/corpus/core/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
  121. package/corpus/core/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
  122. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
  123. package/corpus/core/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
  124. package/corpus/core/src/templates/workspace-core/AGENTS.md +3 -2
  125. package/corpus/core/src/usage/store.ts +37 -2
  126. package/corpus/templates/analytics/.agents/skills/capture-learnings/SKILL.md +22 -9
  127. package/corpus/templates/analytics/.agents/skills/provider-api/SKILL.md +23 -0
  128. package/corpus/templates/analytics/.builder/skills/provider-api/SKILL.md +15 -0
  129. package/corpus/templates/analytics/actions/save-monitor.ts +25 -2
  130. package/corpus/templates/analytics/app/lib/data-sources.ts +28 -0
  131. package/corpus/templates/analytics/changelog/2026-07-10-agent-created-uptime-monitors-now-return-a-direct-link-to-th.md +6 -0
  132. package/corpus/templates/analytics/changelog/2026-07-10-dashboard-email-reports-still-arrive-when-screenshot-capture-temporarily-fails.md +6 -0
  133. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +3 -7
  134. package/corpus/templates/analytics/server/lib/credential-keys.ts +12 -0
  135. package/corpus/templates/analytics/server/lib/dashboard-report.ts +5 -1
  136. package/corpus/templates/analytics/server/lib/provider-credentials.ts +2 -0
  137. package/corpus/templates/analytics/server/routes/api/test-connection.post.ts +16 -0
  138. package/corpus/templates/assets/.agents/skills/capture-learnings/SKILL.md +22 -9
  139. package/corpus/templates/brain/.agents/skills/capture-learnings/SKILL.md +22 -9
  140. package/corpus/templates/calendar/.agents/skills/capture-learnings/SKILL.md +22 -9
  141. package/corpus/templates/calendar/app/components/calendar/CommandPalette.tsx +98 -108
  142. package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +97 -90
  143. package/corpus/templates/calendar/changelog/2026-07-10-event-guest-details-and-option-menus-now-use-valid-accessibl.md +6 -0
  144. package/corpus/templates/calendar/changelog/2026-07-10-natural-language-event-phrases-stay-available-as-quick-creat.md +6 -0
  145. package/corpus/templates/chat/.agents/skills/capture-learnings/SKILL.md +22 -9
  146. package/corpus/templates/chat/changelog/2026-07-10-chat-now-makes-ai-connection-setup-clear-without-shifting-th.md +6 -0
  147. package/corpus/templates/clips/.agents/skills/capture-learnings/SKILL.md +22 -9
  148. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +17 -1
  149. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +8 -0
  150. package/corpus/templates/clips/AGENTS.md +8 -3
  151. package/corpus/templates/clips/actions/finalize-recording.ts +63 -23
  152. package/corpus/templates/clips/actions/get-recording-player-data.ts +6 -2
  153. package/corpus/templates/clips/actions/lib/ensure-seekable-video.ts +72 -9
  154. package/corpus/templates/clips/actions/list-recordings.ts +19 -3
  155. package/corpus/templates/clips/actions/navigate.ts +2 -0
  156. package/corpus/templates/clips/actions/reprocess-recording.ts +20 -6
  157. package/corpus/templates/clips/actions/request-transcript.ts +16 -31
  158. package/corpus/templates/clips/actions/view-screen.ts +57 -5
  159. package/corpus/templates/clips/app/components/layout/Header.tsx +1 -0
  160. package/corpus/templates/clips/app/components/library/empty-state.tsx +2 -0
  161. package/corpus/templates/clips/app/components/library/library-grid.tsx +69 -42
  162. package/corpus/templates/clips/app/components/library/library-layout.tsx +15 -1
  163. package/corpus/templates/clips/app/components/library/recording-card.tsx +81 -68
  164. package/corpus/templates/clips/app/components/library/search-bar.tsx +4 -3
  165. package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +9 -3
  166. package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -1
  167. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +27 -5
  168. package/corpus/templates/clips/app/hooks/use-library.ts +1 -1
  169. package/corpus/templates/clips/app/hooks/use-navigation-state.ts +10 -2
  170. package/corpus/templates/clips/app/hooks/use-player-shortcuts.ts +1 -0
  171. package/corpus/templates/clips/app/i18n/ar-SA.ts +7 -1
  172. package/corpus/templates/clips/app/i18n/de-DE.ts +7 -1
  173. package/corpus/templates/clips/app/i18n/en-US.ts +7 -1
  174. package/corpus/templates/clips/app/i18n/es-ES.ts +7 -1
  175. package/corpus/templates/clips/app/i18n/fr-FR.ts +7 -1
  176. package/corpus/templates/clips/app/i18n/hi-IN.ts +7 -1
  177. package/corpus/templates/clips/app/i18n/ja-JP.ts +7 -1
  178. package/corpus/templates/clips/app/i18n/ko-KR.ts +7 -1
  179. package/corpus/templates/clips/app/i18n/pt-BR.ts +7 -1
  180. package/corpus/templates/clips/app/i18n/zh-CN.ts +8 -1
  181. package/corpus/templates/clips/app/i18n/zh-TW.ts +8 -1
  182. package/corpus/templates/clips/app/lib/recording-visibility.ts +70 -0
  183. package/corpus/templates/clips/app/routes/_app.shared.tsx +20 -0
  184. package/corpus/templates/clips/app/routes/download.tsx +24 -8
  185. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +115 -2
  186. package/corpus/templates/clips/app/routes/record.tsx +62 -0
  187. package/corpus/templates/clips/app/routes/share.$shareId.tsx +25 -16
  188. package/corpus/templates/clips/changelog/2026-07-10-clips-desktop-is-now-available-for-linux-with-appimage-debia.md +6 -0
  189. package/corpus/templates/clips/changelog/2026-07-10-clips-downloads-updates-sooner-in-the-background-and-offers-.md +6 -0
  190. package/corpus/templates/clips/changelog/2026-07-10-clips-shared-with-you-now-appear-in-a-searchable-shared-with.md +6 -0
  191. package/corpus/templates/clips/changelog/2026-07-10-clips-with-missing-mobile-video-frames-can-be-repaired-witho.md +6 -0
  192. package/corpus/templates/clips/changelog/2026-07-10-fixed-copying-agent-responses-and-transcript-text-from-recor.md +6 -0
  193. package/corpus/templates/clips/changelog/2026-07-10-mobile-camera-recordings-pause-while-backgrounded.md +6 -0
  194. package/corpus/templates/clips/changelog/2026-07-10-mp4-downloads-now-show-progress-immediately-after-the-option.md +6 -0
  195. package/corpus/templates/clips/changelog/2026-07-10-recording-pages-now-open-as-soon-as-you-stop-with-a-share-li.md +6 -0
  196. package/corpus/templates/clips/changelog/2026-07-10-recordings-now-seek-smoothly-downloads-use-the-correct-file-.md +6 -0
  197. package/corpus/templates/clips/changelog/2026-07-10-s3-compatible-storage-now-saves-hosted-recordings-without-re.md +6 -0
  198. package/corpus/templates/clips/desktop/README.md +22 -6
  199. package/corpus/templates/clips/desktop/package.json +1 -1
  200. package/corpus/templates/clips/desktop/src/app.tsx +32 -19
  201. package/corpus/templates/clips/desktop/src/components/ReadinessPanel.tsx +15 -9
  202. package/corpus/templates/clips/desktop/src/lib/finalization-guard.ts +22 -0
  203. package/corpus/templates/clips/desktop/src/lib/permissions.ts +3 -1
  204. package/corpus/templates/clips/desktop/src/lib/recorder.ts +97 -120
  205. package/corpus/templates/clips/desktop/src/lib/updater.ts +26 -4
  206. package/corpus/templates/clips/desktop/src/overlays/finalizing.tsx +4 -8
  207. package/corpus/templates/clips/desktop/src-tauri/Cargo.toml +1 -1
  208. package/corpus/templates/clips/desktop/src-tauri/src/clips/mod.rs +2 -2
  209. package/corpus/templates/clips/desktop/src-tauri/src/permission_status.rs +11 -7
  210. package/corpus/templates/clips/desktop/src-tauri/tauri.linux.conf.json +11 -0
  211. package/corpus/templates/clips/netlify.toml +3 -0
  212. package/corpus/templates/clips/server/lib/post-finalize-dispatch.ts +106 -0
  213. package/corpus/templates/clips/server/lib/public-agent-context.ts +9 -1
  214. package/corpus/templates/clips/server/lib/resumable-upload-provider.ts +52 -0
  215. package/corpus/templates/clips/server/lib/s3-upload-provider.ts +433 -85
  216. package/corpus/templates/clips/server/lib/video-remux.ts +114 -0
  217. package/corpus/templates/clips/server/routes/api/_agent-native-background/post-finalize-worker.post.ts +109 -0
  218. package/corpus/templates/clips/server/routes/api/clips-updater.json.get.ts +22 -11
  219. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +4 -2
  220. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/abort.post.ts +47 -5
  221. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +10 -2
  222. package/corpus/templates/clips/shared/share-loader-response.ts +12 -0
  223. package/corpus/templates/clips/shared/transcript-status.ts +40 -0
  224. package/corpus/templates/content/.agents/skills/capture-learnings/SKILL.md +22 -9
  225. package/corpus/templates/content/.agents/skills/content/SKILL.md +57 -5
  226. package/corpus/templates/content/AGENTS.md +65 -55
  227. package/corpus/templates/content/actions/_builder-cms-read-client.ts +92 -23
  228. package/corpus/templates/content/actions/_database-source-utils.ts +207 -41
  229. package/corpus/templates/content/actions/_property-utils.ts +30 -2
  230. package/corpus/templates/content/actions/add-content-database-source-field-property.ts +316 -121
  231. package/corpus/templates/content/actions/attach-content-database-source.ts +41 -17
  232. package/corpus/templates/content/actions/change-content-database-source-role.ts +46 -8
  233. package/corpus/templates/content/actions/submit-content-database-form.ts +497 -0
  234. package/corpus/templates/content/actions/suggest-source-join-key.ts +8 -1
  235. package/corpus/templates/content/actions/update-content-database-view.ts +8 -1
  236. package/corpus/templates/content/actions/view-screen.ts +4 -1
  237. package/corpus/templates/content/agent-native.app-skill.json +1 -1
  238. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +250 -64
  239. package/corpus/templates/content/app/components/editor/database/FormView.tsx +460 -0
  240. package/corpus/templates/content/app/components/editor/database/navigation-state.ts +3 -0
  241. package/corpus/templates/content/app/components/editor/database/settings.tsx +30 -37
  242. package/corpus/templates/content/app/components/editor/database/shared.tsx +2 -0
  243. package/corpus/templates/content/app/components/editor/database/view-config.ts +29 -1
  244. package/corpus/templates/content/app/components/ui/textarea.tsx +1 -0
  245. package/corpus/templates/content/app/hooks/use-content-database.ts +22 -0
  246. package/corpus/templates/content/app/i18n/zh-TW.ts +21 -0
  247. package/corpus/templates/content/app/i18n-data.ts +225 -0
  248. package/corpus/templates/content/changelog/2026-07-09-builder-source-refreshes-now-keep-mapped-fields-such-as-topi.md +6 -0
  249. package/corpus/templates/content/changelog/2026-07-10-builder-backed-properties-now-load-current-source-values-as-.md +6 -0
  250. package/corpus/templates/content/changelog/2026-07-10-builder-database-refreshes-now-stay-explicit-and-accurate.md +6 -0
  251. package/corpus/templates/content/changelog/2026-07-10-database-form-views-now-collect-ordered-required-answers-and.md +6 -0
  252. package/corpus/templates/content/changelog/2026-07-10-database-tables-now-use-a-quieter-more-compact-layout-with-c.md +6 -0
  253. package/corpus/templates/content/changelog/2026-07-10-slack-intake-routes-to-content-database-forms.md +6 -0
  254. package/corpus/templates/content/parity/matrix.md +1 -0
  255. package/corpus/templates/content/parity/matrix.ts +18 -0
  256. package/corpus/templates/content/shared/api.ts +28 -1
  257. package/corpus/templates/content/shared/database-form.ts +53 -0
  258. package/corpus/templates/design/.agents/skills/capture-learnings/SKILL.md +22 -9
  259. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +26 -0
  260. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +85 -12
  261. package/corpus/templates/design/AGENTS.md +72 -18
  262. package/corpus/templates/design/DESIGN.md +1 -1
  263. package/corpus/templates/design/DEVELOPING.md +1 -1
  264. package/corpus/templates/design/FIGMA_INTEROPERABILITY.md +116 -0
  265. package/corpus/templates/design/actions/create-design-from-template.ts +220 -0
  266. package/corpus/templates/design/actions/create-design-system.ts +92 -16
  267. package/corpus/templates/design/actions/delete-design-template.ts +28 -0
  268. package/corpus/templates/design/actions/delete-file.ts +7 -0
  269. package/corpus/templates/design/actions/edit-design.ts +3 -0
  270. package/corpus/templates/design/actions/export-design-as-figma-svg.ts +137 -5
  271. package/corpus/templates/design/actions/export-pdf.ts +1 -1
  272. package/corpus/templates/design/actions/generate-design.ts +3 -0
  273. package/corpus/templates/design/actions/get-design-snapshot.ts +9 -0
  274. package/corpus/templates/design/actions/get-figma-connection-status.ts +26 -0
  275. package/corpus/templates/design/actions/get-figma-design-context.ts +138 -0
  276. package/corpus/templates/design/actions/get-figma-styles.ts +2 -2
  277. package/corpus/templates/design/actions/import-figma-clipboard.ts +112 -16
  278. package/corpus/templates/design/actions/import-figma-frame.ts +15 -4
  279. package/corpus/templates/design/actions/index-design-system-with-builder.ts +4 -0
  280. package/corpus/templates/design/actions/list-design-templates.ts +118 -0
  281. package/corpus/templates/design/actions/navigate.ts +16 -2
  282. package/corpus/templates/design/actions/provider-api-request.ts +11 -1
  283. package/corpus/templates/design/actions/save-design-as-template.ts +156 -0
  284. package/corpus/templates/design/actions/set-active-breakpoint.ts +13 -4
  285. package/corpus/templates/design/actions/take-design-screenshot.ts +73 -3
  286. package/corpus/templates/design/actions/update-file.ts +39 -22
  287. package/corpus/templates/design/actions/view-screen.ts +36 -1
  288. package/corpus/templates/design/actions/write-local-file.ts +50 -38
  289. package/corpus/templates/design/app/components/design/AutoLayoutSuggestionDialog.tsx +151 -0
  290. package/corpus/templates/design/app/components/design/CanvasContextMenu.tsx +20 -0
  291. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +251 -22
  292. package/corpus/templates/design/app/components/design/DesignEditorSkeleton.tsx +3 -3
  293. package/corpus/templates/design/app/components/design/DesignImportPanel.tsx +384 -9
  294. package/corpus/templates/design/app/components/design/EditPanel.tsx +105 -32
  295. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +58 -28
  296. package/corpus/templates/design/app/components/design/TweaksPanel.tsx +6 -0
  297. package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +539 -53
  298. package/corpus/templates/design/app/components/design/bridge/embedded-wheel.bridge.ts +40 -0
  299. package/corpus/templates/design/app/components/design/code-workbench/CodeWorkbench.tsx +1 -0
  300. package/corpus/templates/design/app/components/design/code-workbench/explorer/ExplorerView.tsx +1 -0
  301. package/corpus/templates/design/app/components/design/code-workbench/explorer/FileTree.tsx +5 -1
  302. package/corpus/templates/design/app/components/design/code-workbench/workspace/create-providers.ts +2 -0
  303. package/corpus/templates/design/app/components/design/code-workbench/workspace/localhost-provider.ts +3 -1
  304. package/corpus/templates/design/app/components/design/code-workbench/workspace/types.ts +2 -0
  305. package/corpus/templates/design/app/components/design/edit-panel/element-identity.ts +19 -0
  306. package/corpus/templates/design/app/components/design/edit-panel/frame-presets-panel.tsx +1 -0
  307. package/corpus/templates/design/app/components/design/edit-panel/interaction-state-helpers.ts +27 -0
  308. package/corpus/templates/design/app/components/design/inspector/InteractionStatePanel.tsx +137 -81
  309. package/corpus/templates/design/app/components/design/inspector/frame-size-presets.ts +25 -5
  310. package/corpus/templates/design/app/components/design/multi-screen/chrome-transitions.ts +1 -1
  311. package/corpus/templates/design/app/components/design/multi-screen/frame-geometry.ts +220 -3
  312. package/corpus/templates/design/app/components/design/multi-screen/overview-layout.ts +13 -0
  313. package/corpus/templates/design/app/components/design/multi-screen/types.ts +22 -1
  314. package/corpus/templates/design/app/components/design/types.ts +4 -0
  315. package/corpus/templates/design/app/components/design-system/ProductionDesignSystemShowcase.tsx +208 -0
  316. package/corpus/templates/design/app/components/editor/FigmaLinkComposerBubble.tsx +321 -0
  317. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +24 -4
  318. package/corpus/templates/design/app/components/layout/Layout.tsx +16 -2
  319. package/corpus/templates/design/app/components/layout/Sidebar.tsx +2 -0
  320. package/corpus/templates/design/app/components/templates/TemplatePreview.tsx +72 -0
  321. package/corpus/templates/design/app/global.css +2 -35
  322. package/corpus/templates/design/app/hooks/use-navigation-state.ts +10 -0
  323. package/corpus/templates/design/app/i18n/zh-TW.ts +127 -5
  324. package/corpus/templates/design/app/i18n-breakpoints.ts +209 -0
  325. package/corpus/templates/design/app/i18n-data.ts +1317 -59
  326. package/corpus/templates/design/app/i18n-template-feature.ts +458 -0
  327. package/corpus/templates/design/app/lib/design-clipboard.ts +202 -0
  328. package/corpus/templates/design/app/lib/design-file-upload.ts +87 -0
  329. package/corpus/templates/design/app/lib/design-import.ts +168 -11
  330. package/corpus/templates/design/app/lib/desktop-design-preview.ts +423 -0
  331. package/corpus/templates/design/app/lib/figma-clipboard.ts +74 -8
  332. package/corpus/templates/design/app/lib/figma-connection.ts +161 -0
  333. package/corpus/templates/design/app/lib/figma-svg-copy.ts +814 -22
  334. package/corpus/templates/design/app/lib/figma-url.ts +77 -0
  335. package/corpus/templates/design/app/lib/pending-generation.ts +35 -0
  336. package/corpus/templates/design/app/pages/DesignSystems.tsx +236 -177
  337. package/corpus/templates/design/app/pages/Index.tsx +38 -0
  338. package/corpus/templates/design/app/pages/Templates.tsx +498 -0
  339. package/corpus/templates/design/app/pages/design-editor/auto-layout-suggestion.ts +328 -0
  340. package/corpus/templates/design/app/pages/design-editor/clone-idrefs.ts +113 -0
  341. package/corpus/templates/design/app/pages/design-editor/created-screen-navigation.ts +55 -0
  342. package/corpus/templates/design/app/pages/design-editor/editor-session.ts +32 -0
  343. package/corpus/templates/design/app/pages/design-editor/editor-state.ts +49 -2
  344. package/corpus/templates/design/app/pages/design-editor/export-capture.ts +296 -0
  345. package/corpus/templates/design/app/pages/design-editor/history.ts +101 -2
  346. package/corpus/templates/design/app/pages/design-editor/layout-operations.ts +28 -1
  347. package/corpus/templates/design/app/pages/design-editor/overview-camera.ts +34 -0
  348. package/corpus/templates/design/app/pages/design-editor/pending-edits.ts +202 -6
  349. package/corpus/templates/design/app/pages/design-editor/pending-structure-verification.ts +92 -0
  350. package/corpus/templates/design/app/pages/design-editor/save-failure.ts +58 -0
  351. package/corpus/templates/design/app/routes/templates.tsx +4 -6
  352. package/corpus/templates/design/changelog/2026-07-10-app-workspaces-now-use-clean-borderless-main-surfaces-throug.md +6 -0
  353. package/corpus/templates/design/changelog/2026-07-10-ask-chat-what-s-in-a-figma-file-or-frame-structure-screensho.md +6 -0
  354. package/corpus/templates/design/changelog/2026-07-10-canvas-edits-now-reject-malformed-html-before-it-can-corrupt.md +6 -0
  355. package/corpus/templates/design/changelog/2026-07-10-complex-designs-now-export-as-valid-secure-svgs-and-crisp-ra.md +6 -0
  356. package/corpus/templates/design/changelog/2026-07-10-complex-figma-masks-arcs-rich-text-transformed-images-and-ad.md +6 -0
  357. package/corpus/templates/design/changelog/2026-07-10-copied-layers-paste-across-designs-and-browser-tabs.md +6 -0
  358. package/corpus/templates/design/changelog/2026-07-10-copy-and-download-editable-figma-svg.md +6 -0
  359. package/corpus/templates/design/changelog/2026-07-10-copying-design-text-now-pastes-readable-text-into-other-apps.md +6 -0
  360. package/corpus/templates/design/changelog/2026-07-10-deleted-screens-can-be-restored-with-undo-and-removed-again-.md +6 -0
  361. package/corpus/templates/design/changelog/2026-07-10-design-changes-now-save-before-switching-apps-and-retry-when.md +6 -0
  362. package/corpus/templates/design/changelog/2026-07-10-design-stays-usable-on-phones-by-keeping-editor-panels-and-f.md +6 -0
  363. package/corpus/templates/design/changelog/2026-07-10-download-all-screens-as-one-multi-page-pdf-from-the-overview.md +6 -0
  364. package/corpus/templates/design/changelog/2026-07-10-duplicated-layers-now-keep-labels-aria-relationships-fragmen.md +6 -0
  365. package/corpus/templates/design/changelog/2026-07-10-fig-import-results-stay-compact.md +6 -0
  366. package/corpus/templates/design/changelog/2026-07-10-figma-imports-now-load-real-fonts-fix-rotated-gradient-dashe.md +6 -0
  367. package/corpus/templates/design/changelog/2026-07-10-figma-links-in-chat-and-the-import-tab-now-offer-secure-one-.md +6 -0
  368. package/corpus/templates/design/changelog/2026-07-10-fixed-cmd-z-not-restoring-content-after-an-agent-driven-desi.md +6 -0
  369. package/corpus/templates/design/changelog/2026-07-10-fixed-download-pdf-being-unreachable-from-the-export-panel-e.md +6 -0
  370. package/corpus/templates/design/changelog/2026-07-10-fixed-dragging-a-layer-out-of-an-auto-layout-row-column-no-l.md +6 -0
  371. package/corpus/templates/design/changelog/2026-07-10-fixed-figma-svg-export-text-wrapping-sizing-and-inner-layer.md +6 -0
  372. package/corpus/templates/design/changelog/2026-07-10-fixed-hiding-or-locking-one-layer-no-longer-hides-or-blocks-.md +6 -0
  373. package/corpus/templates/design/changelog/2026-07-10-fixed-png-screenshots-of-tall-screens-being-cropped-to-one-v.md +6 -0
  374. package/corpus/templates/design/changelog/2026-07-10-fixed-png-svg-exports-capturing-broken-layout-when-webfonts-.md +6 -0
  375. package/corpus/templates/design/changelog/2026-07-10-frame-tool-now-offers-standard-ad-unit-size-presets-medium-r.md +6 -0
  376. package/corpus/templates/design/changelog/2026-07-10-full-view-controls-stay-within-their-frame-instead-of-coveri.md +6 -0
  377. package/corpus/templates/design/changelog/2026-07-10-hover-focus-focus-visible-pressed-and-disabled-states-now-pr.md +6 -0
  378. package/corpus/templates/design/changelog/2026-07-10-layer-drops-now-land-in-the-intended-grid-row-stay-visually-.md +6 -0
  379. package/corpus/templates/design/changelog/2026-07-10-local-code-workspaces-now-keep-unsaved-edits-across-panel-sw.md +6 -0
  380. package/corpus/templates/design/changelog/2026-07-10-local-visual-editing-now-keeps-authenticated-sessions-shared.md +6 -0
  381. package/corpus/templates/design/changelog/2026-07-10-long-running-agent-work-no-longer-shows-a-premature-stuck-wa.md +6 -0
  382. package/corpus/templates/design/changelog/2026-07-10-managed-figma-connections-are-recognized-automatically.md +6 -0
  383. package/corpus/templates/design/changelog/2026-07-10-new-designs-can-open-directly-in-the-editor-without-a-pr.md +6 -0
  384. package/corpus/templates/design/changelog/2026-07-10-new-screens-are-selected-and-revealed-immediately.md +6 -0
  385. package/corpus/templates/design/changelog/2026-07-10-new-text-layers-undo-as-one-safe-creation.md +6 -0
  386. package/corpus/templates/design/changelog/2026-07-10-preview-and-apply-inferred-auto-layout-without-changing-yo.md +5 -0
  387. package/corpus/templates/design/changelog/2026-07-10-print-pdf-exports-and-paper-size-presets-letter-a4-now-match.md +6 -0
  388. package/corpus/templates/design/changelog/2026-07-10-responsive-frame-editing.md +6 -0
  389. package/corpus/templates/design/changelog/2026-07-10-reusable-design-templates.md +6 -0
  390. package/corpus/templates/design/changelog/2026-07-10-screen-overview-frames-now-use-a-clearer-interact-action-wit.md +6 -0
  391. package/corpus/templates/design/changelog/2026-07-10-start-designs-from-source-linked-material-3-carbon-or-primer.md +6 -0
  392. package/corpus/templates/design/changelog/2026-07-10-tweaks-guidance.md +6 -0
  393. package/corpus/templates/design/changelog/2026-07-10-uploaded-fig-files-can-now-become-editable-design-screens-wi.md +6 -0
  394. package/corpus/templates/design/e2e/helpers.ts +3 -3
  395. package/corpus/templates/design/package.json +2 -0
  396. package/corpus/templates/design/scripts/qa-figma-stress-import.ts +96 -0
  397. package/corpus/templates/design/server/db/index.ts +10 -0
  398. package/corpus/templates/design/server/db/schema.ts +44 -0
  399. package/corpus/templates/design/server/handlers/import-design-file.ts +114 -80
  400. package/corpus/templates/design/server/handlers/index-design-system-with-builder.ts +19 -6
  401. package/corpus/templates/design/server/lib/design-export.ts +240 -3
  402. package/corpus/templates/design/server/lib/design-template-data.ts +89 -0
  403. package/corpus/templates/design/server/lib/design-to-figma-svg.ts +250 -26
  404. package/corpus/templates/design/server/lib/fig-file-decoder.ts +839 -0
  405. package/corpus/templates/design/server/lib/fig-file-import.ts +287 -0
  406. package/corpus/templates/design/server/lib/fig-file-limits.ts +3 -0
  407. package/corpus/templates/design/server/lib/fig-file-to-html.ts +2568 -0
  408. package/corpus/templates/design/server/lib/figma-design-context.ts +359 -0
  409. package/corpus/templates/design/server/lib/figma-node-import.ts +478 -22
  410. package/corpus/templates/design/server/lib/figma-node-to-html.ts +554 -29
  411. package/corpus/templates/design/server/lib/local-figma-qa-upload.ts +112 -0
  412. package/corpus/templates/design/server/lib/verify-write-grant.ts +16 -2
  413. package/corpus/templates/design/server/lib/visible-clipboard-html.ts +13 -3
  414. package/corpus/templates/design/server/plugins/agent-chat.ts +7 -0
  415. package/corpus/templates/design/server/plugins/db.ts +42 -0
  416. package/corpus/templates/design/server/plugins/local-figma-qa-upload.ts +7 -0
  417. package/corpus/templates/design/server/register-secrets.ts +8 -8
  418. package/corpus/templates/design/server/routes/api/qa-figma-import-assets/[assetId].get.ts +46 -0
  419. package/corpus/templates/design/server/source-workspace.ts +104 -12
  420. package/corpus/templates/design/shared/code-layer.ts +105 -28
  421. package/corpus/templates/design/shared/design-system-templates.ts +301 -0
  422. package/corpus/templates/design/shared/design-template-presets.ts +195 -0
  423. package/corpus/templates/design/shared/figma-url.ts +8 -0
  424. package/corpus/templates/design/shared/html-integrity.ts +306 -0
  425. package/corpus/templates/design/shared/interaction-states.ts +318 -23
  426. package/corpus/templates/design/shared/locked-layers.ts +151 -0
  427. package/corpus/templates/dispatch/.agents/skills/capture-learnings/SKILL.md +22 -9
  428. package/corpus/templates/dispatch/app/i18n/zh-TW.ts +48 -0
  429. package/corpus/templates/dispatch/app/i18n-data.ts +536 -1
  430. package/corpus/templates/dispatch/changelog/2026-07-10-connect-slack-workspaces-with-oauth-and-manage-channel-ident.md +6 -0
  431. package/corpus/templates/dispatch/changelog/2026-07-10-microsoft-teams-bots-and-discord-slash-commands-can-now-conn.md +6 -0
  432. package/corpus/templates/dispatch/changelog/2026-07-10-slack-and-telegram-now-route-uptime-monitor-requests-to-anal.md +6 -0
  433. package/corpus/templates/forms/.agents/skills/capture-learnings/SKILL.md +22 -9
  434. package/corpus/templates/forms/.agents/skills/form-publishing/SKILL.md +7 -0
  435. package/corpus/templates/forms/AGENTS.md +4 -0
  436. package/corpus/templates/forms/actions/create-form.ts +44 -7
  437. package/corpus/templates/forms/actions/lib/assert-publishable-form.ts +38 -0
  438. package/corpus/templates/forms/actions/patch-form-fields.ts +4 -0
  439. package/corpus/templates/forms/actions/update-form.ts +2 -36
  440. package/corpus/templates/forms/app/i18n/ar-SA.ts +3 -0
  441. package/corpus/templates/forms/app/i18n/de-DE.ts +3 -0
  442. package/corpus/templates/forms/app/i18n/en-US.ts +3 -0
  443. package/corpus/templates/forms/app/i18n/es-ES.ts +3 -0
  444. package/corpus/templates/forms/app/i18n/fr-FR.ts +3 -0
  445. package/corpus/templates/forms/app/i18n/hi-IN.ts +3 -0
  446. package/corpus/templates/forms/app/i18n/ja-JP.ts +3 -0
  447. package/corpus/templates/forms/app/i18n/ko-KR.ts +3 -0
  448. package/corpus/templates/forms/app/i18n/pt-BR.ts +3 -0
  449. package/corpus/templates/forms/app/i18n/zh-CN.ts +2 -0
  450. package/corpus/templates/forms/app/i18n/zh-TW.ts +3 -0
  451. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +17 -0
  452. package/corpus/templates/forms/changelog/2026-07-10-agent-created-published-forms-now-return-the-anonymous-publi.md +6 -0
  453. package/corpus/templates/forms/changelog/2026-07-10-published-forms-can-no-longer-be-edited-into-an-unusable-emp.md +6 -0
  454. package/corpus/templates/forms/server/handlers/submissions.ts +4 -3
  455. package/corpus/templates/forms/server/plugins/agent-chat.ts +1 -0
  456. package/corpus/templates/forms/shared/types.ts +5 -0
  457. package/corpus/templates/mail/.agents/skills/capture-learnings/SKILL.md +22 -9
  458. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
  459. package/corpus/templates/mail/changelog/2026-07-10-mail-navigation-now-uses-a-clean-borderless-drawer.md +6 -0
  460. package/corpus/templates/plan/.agents/skills/capture-learnings/SKILL.md +22 -9
  461. package/corpus/templates/plan/app/lib/plan-local-bridge.ts +4 -1
  462. package/corpus/templates/plan/changelog/2026-07-10-local-plans-now-keep-valid-content-visible-when-one-generate.md +6 -0
  463. package/corpus/templates/plan/server/lib/local-plan-files.ts +4 -1
  464. package/corpus/templates/slides/.agents/skills/capture-learnings/SKILL.md +22 -9
  465. package/dist/a2a/artifact-response.d.ts.map +1 -1
  466. package/dist/a2a/artifact-response.js +88 -2
  467. package/dist/a2a/artifact-response.js.map +1 -1
  468. package/dist/a2a/client.d.ts +9 -0
  469. package/dist/a2a/client.d.ts.map +1 -1
  470. package/dist/a2a/client.js +1 -0
  471. package/dist/a2a/client.js.map +1 -1
  472. package/dist/a2a/handlers.d.ts.map +1 -1
  473. package/dist/a2a/handlers.js +24 -69
  474. package/dist/a2a/handlers.js.map +1 -1
  475. package/dist/a2a/types.d.ts +2 -0
  476. package/dist/a2a/types.d.ts.map +1 -1
  477. package/dist/a2a/types.js.map +1 -1
  478. package/dist/agent/durable-background.d.ts +11 -0
  479. package/dist/agent/durable-background.d.ts.map +1 -1
  480. package/dist/agent/durable-background.js +17 -0
  481. package/dist/agent/durable-background.js.map +1 -1
  482. package/dist/agent/production-agent.d.ts +5 -3
  483. package/dist/agent/production-agent.d.ts.map +1 -1
  484. package/dist/agent/production-agent.js +34 -8
  485. package/dist/agent/production-agent.js.map +1 -1
  486. package/dist/agent/run-manager.d.ts +44 -2
  487. package/dist/agent/run-manager.d.ts.map +1 -1
  488. package/dist/agent/run-manager.js +124 -18
  489. package/dist/agent/run-manager.js.map +1 -1
  490. package/dist/agent/run-store.d.ts +109 -0
  491. package/dist/agent/run-store.d.ts.map +1 -1
  492. package/dist/agent/run-store.js +274 -37
  493. package/dist/agent/run-store.js.map +1 -1
  494. package/dist/agent/types.d.ts +22 -0
  495. package/dist/agent/types.d.ts.map +1 -1
  496. package/dist/agent/types.js.map +1 -1
  497. package/dist/audit/record.d.ts.map +1 -1
  498. package/dist/audit/record.js +29 -0
  499. package/dist/audit/record.js.map +1 -1
  500. package/dist/audit/store.d.ts.map +1 -1
  501. package/dist/audit/store.js +62 -3
  502. package/dist/audit/store.js.map +1 -1
  503. package/dist/audit/types.d.ts +13 -0
  504. package/dist/audit/types.d.ts.map +1 -1
  505. package/dist/audit/types.js.map +1 -1
  506. package/dist/automation/index.d.ts +193 -0
  507. package/dist/automation/index.d.ts.map +1 -0
  508. package/dist/automation/index.js +464 -0
  509. package/dist/automation/index.js.map +1 -0
  510. package/dist/cli/create.d.ts.map +1 -1
  511. package/dist/cli/create.js +10 -3
  512. package/dist/cli/create.js.map +1 -1
  513. package/dist/cli/design-connect.d.ts.map +1 -1
  514. package/dist/cli/design-connect.js +492 -35
  515. package/dist/cli/design-connect.js.map +1 -1
  516. package/dist/client/AgentPanel.d.ts +7 -1
  517. package/dist/client/AgentPanel.d.ts.map +1 -1
  518. package/dist/client/AgentPanel.js +32 -8
  519. package/dist/client/AgentPanel.js.map +1 -1
  520. package/dist/client/AssistantChat.d.ts +15 -0
  521. package/dist/client/AssistantChat.d.ts.map +1 -1
  522. package/dist/client/AssistantChat.js +115 -47
  523. package/dist/client/AssistantChat.js.map +1 -1
  524. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  525. package/dist/client/MultiTabAssistantChat.js +1 -1
  526. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  527. package/dist/client/RunStuckBanner.d.ts +14 -1
  528. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  529. package/dist/client/RunStuckBanner.js +35 -7
  530. package/dist/client/RunStuckBanner.js.map +1 -1
  531. package/dist/client/agent-chat-adapter.d.ts +4 -1
  532. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  533. package/dist/client/agent-chat-adapter.js +97 -16
  534. package/dist/client/agent-chat-adapter.js.map +1 -1
  535. package/dist/client/automation.d.ts +14 -0
  536. package/dist/client/automation.d.ts.map +1 -0
  537. package/dist/client/automation.js +9 -0
  538. package/dist/client/automation.js.map +1 -0
  539. package/dist/client/chat/run-recovery.d.ts +4 -0
  540. package/dist/client/chat/run-recovery.d.ts.map +1 -1
  541. package/dist/client/chat/run-recovery.js +12 -10
  542. package/dist/client/chat/run-recovery.js.map +1 -1
  543. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  544. package/dist/client/composer/TiptapComposer.js +8 -0
  545. package/dist/client/composer/TiptapComposer.js.map +1 -1
  546. package/dist/client/index.d.ts +2 -0
  547. package/dist/client/index.d.ts.map +1 -1
  548. package/dist/client/index.js +2 -0
  549. package/dist/client/index.js.map +1 -1
  550. package/dist/client/integrations/api.d.ts +115 -0
  551. package/dist/client/integrations/api.d.ts.map +1 -0
  552. package/dist/client/integrations/api.js +123 -0
  553. package/dist/client/integrations/api.js.map +1 -0
  554. package/dist/client/integrations/index.d.ts +1 -0
  555. package/dist/client/integrations/index.d.ts.map +1 -1
  556. package/dist/client/integrations/index.js +1 -0
  557. package/dist/client/integrations/index.js.map +1 -1
  558. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  559. package/dist/client/transcription/use-live-transcription.js +59 -5
  560. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  561. package/dist/client/use-run-stuck-detection.d.ts +16 -1
  562. package/dist/client/use-run-stuck-detection.d.ts.map +1 -1
  563. package/dist/client/use-run-stuck-detection.js +23 -4
  564. package/dist/client/use-run-stuck-detection.js.map +1 -1
  565. package/dist/collab/awareness.d.ts +2 -2
  566. package/dist/collab/awareness.d.ts.map +1 -1
  567. package/dist/deploy/build.d.ts.map +1 -1
  568. package/dist/deploy/build.js +49 -4
  569. package/dist/deploy/build.js.map +1 -1
  570. package/dist/deploy/workspace-deploy.d.ts.map +1 -1
  571. package/dist/deploy/workspace-deploy.js +31 -2
  572. package/dist/deploy/workspace-deploy.js.map +1 -1
  573. package/dist/file-upload/types.d.ts +2 -0
  574. package/dist/file-upload/types.d.ts.map +1 -1
  575. package/dist/file-upload/types.js.map +1 -1
  576. package/dist/index.d.ts +2 -0
  577. package/dist/index.d.ts.map +1 -1
  578. package/dist/index.js +2 -0
  579. package/dist/index.js.map +1 -1
  580. package/dist/integrations/a2a-continuations-store.d.ts.map +1 -1
  581. package/dist/integrations/a2a-continuations-store.js +6 -4
  582. package/dist/integrations/a2a-continuations-store.js.map +1 -1
  583. package/dist/integrations/adapters/discord.d.ts +3 -0
  584. package/dist/integrations/adapters/discord.d.ts.map +1 -0
  585. package/dist/integrations/adapters/discord.js +261 -0
  586. package/dist/integrations/adapters/discord.js.map +1 -0
  587. package/dist/integrations/adapters/index.d.ts +4 -0
  588. package/dist/integrations/adapters/index.d.ts.map +1 -0
  589. package/dist/integrations/adapters/index.js +26 -0
  590. package/dist/integrations/adapters/index.js.map +1 -0
  591. package/dist/integrations/adapters/microsoft-teams.d.ts +5 -0
  592. package/dist/integrations/adapters/microsoft-teams.d.ts.map +1 -0
  593. package/dist/integrations/adapters/microsoft-teams.js +295 -0
  594. package/dist/integrations/adapters/microsoft-teams.js.map +1 -0
  595. package/dist/integrations/adapters/slack.d.ts +8 -2
  596. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  597. package/dist/integrations/adapters/slack.js +736 -27
  598. package/dist/integrations/adapters/slack.js.map +1 -1
  599. package/dist/integrations/adapters/telegram.d.ts +0 -2
  600. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  601. package/dist/integrations/adapters/telegram.js +49 -15
  602. package/dist/integrations/adapters/telegram.js.map +1 -1
  603. package/dist/integrations/adapters/whatsapp.d.ts +0 -2
  604. package/dist/integrations/adapters/whatsapp.d.ts.map +1 -1
  605. package/dist/integrations/adapters/whatsapp.js +40 -17
  606. package/dist/integrations/adapters/whatsapp.js.map +1 -1
  607. package/dist/integrations/catalog.d.ts +75 -0
  608. package/dist/integrations/catalog.d.ts.map +1 -0
  609. package/dist/integrations/catalog.js +451 -0
  610. package/dist/integrations/catalog.js.map +1 -0
  611. package/dist/integrations/controls-store.d.ts +44 -0
  612. package/dist/integrations/controls-store.d.ts.map +1 -0
  613. package/dist/integrations/controls-store.js +129 -0
  614. package/dist/integrations/controls-store.js.map +1 -0
  615. package/dist/integrations/index.d.ts +13 -1
  616. package/dist/integrations/index.d.ts.map +1 -1
  617. package/dist/integrations/index.js +9 -0
  618. package/dist/integrations/index.js.map +1 -1
  619. package/dist/integrations/installations-store.d.ts +112 -0
  620. package/dist/integrations/installations-store.d.ts.map +1 -0
  621. package/dist/integrations/installations-store.js +493 -0
  622. package/dist/integrations/installations-store.js.map +1 -0
  623. package/dist/integrations/integration-memory.d.ts +24 -0
  624. package/dist/integrations/integration-memory.d.ts.map +1 -0
  625. package/dist/integrations/integration-memory.js +136 -0
  626. package/dist/integrations/integration-memory.js.map +1 -0
  627. package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
  628. package/dist/integrations/pending-tasks-retry-job.js +6 -5
  629. package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
  630. package/dist/integrations/pending-tasks-store.d.ts +17 -0
  631. package/dist/integrations/pending-tasks-store.d.ts.map +1 -1
  632. package/dist/integrations/pending-tasks-store.js +71 -5
  633. package/dist/integrations/pending-tasks-store.js.map +1 -1
  634. package/dist/integrations/plugin.d.ts.map +1 -1
  635. package/dist/integrations/plugin.js +520 -35
  636. package/dist/integrations/plugin.js.map +1 -1
  637. package/dist/integrations/scope-store.d.ts +65 -0
  638. package/dist/integrations/scope-store.d.ts.map +1 -0
  639. package/dist/integrations/scope-store.js +361 -0
  640. package/dist/integrations/scope-store.js.map +1 -0
  641. package/dist/integrations/slack-manifest.d.ts +66 -0
  642. package/dist/integrations/slack-manifest.d.ts.map +1 -0
  643. package/dist/integrations/slack-manifest.js +70 -0
  644. package/dist/integrations/slack-manifest.js.map +1 -0
  645. package/dist/integrations/slack-oauth.d.ts +99 -0
  646. package/dist/integrations/slack-oauth.d.ts.map +1 -0
  647. package/dist/integrations/slack-oauth.js +226 -0
  648. package/dist/integrations/slack-oauth.js.map +1 -0
  649. package/dist/integrations/types.d.ts +144 -0
  650. package/dist/integrations/types.d.ts.map +1 -1
  651. package/dist/integrations/types.js +16 -1
  652. package/dist/integrations/types.js.map +1 -1
  653. package/dist/integrations/usage-budget-store.d.ts +84 -0
  654. package/dist/integrations/usage-budget-store.d.ts.map +1 -0
  655. package/dist/integrations/usage-budget-store.js +650 -0
  656. package/dist/integrations/usage-budget-store.js.map +1 -0
  657. package/dist/integrations/webhook-handler.d.ts +4 -0
  658. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  659. package/dist/integrations/webhook-handler.js +415 -47
  660. package/dist/integrations/webhook-handler.js.map +1 -1
  661. package/dist/jobs/scheduler.d.ts +6 -0
  662. package/dist/jobs/scheduler.d.ts.map +1 -1
  663. package/dist/jobs/scheduler.js +83 -4
  664. package/dist/jobs/scheduler.js.map +1 -1
  665. package/dist/jobs/tools.d.ts.map +1 -1
  666. package/dist/jobs/tools.js +43 -11
  667. package/dist/jobs/tools.js.map +1 -1
  668. package/dist/provider-api/index.d.ts +4 -4
  669. package/dist/provider-api/index.d.ts.map +1 -1
  670. package/dist/provider-api/index.js +72 -1
  671. package/dist/provider-api/index.js.map +1 -1
  672. package/dist/resources/handlers.d.ts.map +1 -1
  673. package/dist/resources/handlers.js +57 -15
  674. package/dist/resources/handlers.js.map +1 -1
  675. package/dist/resources/script-helpers.d.ts.map +1 -1
  676. package/dist/resources/script-helpers.js +34 -8
  677. package/dist/resources/script-helpers.js.map +1 -1
  678. package/dist/resources/store.d.ts +10 -0
  679. package/dist/resources/store.d.ts.map +1 -1
  680. package/dist/resources/store.js +54 -47
  681. package/dist/resources/store.js.map +1 -1
  682. package/dist/scripts/call-agent.d.ts.map +1 -1
  683. package/dist/scripts/call-agent.js +106 -1
  684. package/dist/scripts/call-agent.js.map +1 -1
  685. package/dist/server/agent-chat-plugin.d.ts +15 -4
  686. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  687. package/dist/server/agent-chat-plugin.js +248 -113
  688. package/dist/server/agent-chat-plugin.js.map +1 -1
  689. package/dist/server/auth.d.ts.map +1 -1
  690. package/dist/server/auth.js +10 -14
  691. package/dist/server/auth.js.map +1 -1
  692. package/dist/server/builder-design-systems.d.ts +3 -1
  693. package/dist/server/builder-design-systems.d.ts.map +1 -1
  694. package/dist/server/builder-design-systems.js +9 -2
  695. package/dist/server/builder-design-systems.js.map +1 -1
  696. package/dist/server/edge.d.ts +1 -1
  697. package/dist/server/edge.d.ts.map +1 -1
  698. package/dist/server/edge.js +1 -1
  699. package/dist/server/edge.js.map +1 -1
  700. package/dist/server/index.d.ts +2 -1
  701. package/dist/server/index.d.ts.map +1 -1
  702. package/dist/server/index.js +2 -1
  703. package/dist/server/index.js.map +1 -1
  704. package/dist/server/request-context.d.ts +18 -0
  705. package/dist/server/request-context.d.ts.map +1 -1
  706. package/dist/server/request-context.js.map +1 -1
  707. package/dist/server/social-og-image.d.ts.map +1 -1
  708. package/dist/server/social-og-image.js +3 -2
  709. package/dist/server/social-og-image.js.map +1 -1
  710. package/dist/server/transcribe-voice.d.ts +1 -1
  711. package/dist/styles/agent-native.css +62 -44
  712. package/dist/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
  713. package/dist/templates/default/AGENTS.md +7 -3
  714. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
  715. package/dist/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
  716. package/dist/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
  717. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
  718. package/dist/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
  719. package/dist/templates/workspace-core/AGENTS.md +3 -2
  720. package/dist/usage/store.d.ts +7 -0
  721. package/dist/usage/store.d.ts.map +1 -1
  722. package/dist/usage/store.js +24 -3
  723. package/dist/usage/store.js.map +1 -1
  724. package/docs/content/automation-connectors.mdx +80 -0
  725. package/docs/content/extensions.mdx +8 -0
  726. package/docs/content/locales/ar-SA/extensions.mdx +8 -0
  727. package/docs/content/locales/ar-SA/messaging.mdx +84 -15
  728. package/docs/content/locales/ar-SA/template-clips.mdx +1 -0
  729. package/docs/content/locales/ar-SA/template-design.mdx +1 -0
  730. package/docs/content/locales/de-DE/extensions.mdx +10 -0
  731. package/docs/content/locales/de-DE/messaging.mdx +92 -15
  732. package/docs/content/locales/de-DE/template-clips.mdx +1 -0
  733. package/docs/content/locales/de-DE/template-design.mdx +1 -0
  734. package/docs/content/locales/es-ES/extensions.mdx +10 -0
  735. package/docs/content/locales/es-ES/messaging.mdx +91 -15
  736. package/docs/content/locales/es-ES/template-clips.mdx +1 -0
  737. package/docs/content/locales/es-ES/template-design.mdx +1 -0
  738. package/docs/content/locales/fr-FR/extensions.mdx +10 -0
  739. package/docs/content/locales/fr-FR/messaging.mdx +91 -15
  740. package/docs/content/locales/fr-FR/template-clips.mdx +1 -0
  741. package/docs/content/locales/fr-FR/template-design.mdx +1 -0
  742. package/docs/content/locales/hi-IN/extensions.mdx +8 -0
  743. package/docs/content/locales/hi-IN/messaging.mdx +81 -15
  744. package/docs/content/locales/hi-IN/template-clips.mdx +1 -0
  745. package/docs/content/locales/hi-IN/template-design.mdx +1 -0
  746. package/docs/content/locales/ja-JP/extensions.mdx +9 -0
  747. package/docs/content/locales/ja-JP/messaging.mdx +81 -15
  748. package/docs/content/locales/ja-JP/template-clips.mdx +1 -0
  749. package/docs/content/locales/ja-JP/template-design.mdx +1 -0
  750. package/docs/content/locales/ko-KR/extensions.mdx +8 -0
  751. package/docs/content/locales/ko-KR/messaging.mdx +80 -15
  752. package/docs/content/locales/ko-KR/template-clips.mdx +1 -0
  753. package/docs/content/locales/ko-KR/template-design.mdx +1 -0
  754. package/docs/content/locales/pt-BR/extensions.mdx +9 -0
  755. package/docs/content/locales/pt-BR/messaging.mdx +88 -15
  756. package/docs/content/locales/pt-BR/template-clips.mdx +1 -0
  757. package/docs/content/locales/pt-BR/template-design.mdx +1 -0
  758. package/docs/content/locales/zh-CN/extensions.mdx +6 -0
  759. package/docs/content/locales/zh-CN/messaging.mdx +78 -15
  760. package/docs/content/locales/zh-CN/template-clips.mdx +1 -0
  761. package/docs/content/locales/zh-CN/template-design.mdx +1 -0
  762. package/docs/content/locales/zh-TW/extensions.mdx +6 -0
  763. package/docs/content/locales/zh-TW/messaging.mdx +78 -15
  764. package/docs/content/locales/zh-TW/template-clips.mdx +1 -0
  765. package/docs/content/locales/zh-TW/template-design.mdx +1 -0
  766. package/docs/content/messaging.mdx +227 -45
  767. package/docs/content/template-clips.mdx +3 -0
  768. package/docs/content/template-design.mdx +4 -0
  769. package/package.json +5 -1
  770. package/src/templates/default/.agents/skills/capture-learnings/SKILL.md +22 -9
  771. package/src/templates/default/AGENTS.md +7 -3
  772. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +1 -1
  773. package/src/templates/workspace-core/.agents/skills/capture-learnings/SKILL.md +22 -9
  774. package/src/templates/workspace-core/.agents/skills/extension-points/SKILL.md +6 -3
  775. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +25 -0
  776. package/src/templates/workspace-core/.agents/skills/integration-webhooks/SKILL.md +15 -0
  777. package/src/templates/workspace-core/AGENTS.md +3 -2
@@ -11,11 +11,14 @@ metadata:
11
11
 
12
12
  # Capture Learnings
13
13
 
14
- This is background knowledge, not a slash command. **Your memory index is loaded at the start of every conversation.** Use `save-memory` proactively when you learn something worth remembering.
14
+ This is background knowledge, not a slash command. **Organization learnings and your personal memory index are loaded at the start of every conversation, including Slack/integration turns.** Capture durable context proactively when you learn something worth remembering.
15
15
 
16
16
  ## How to Read & Write Memories
17
17
 
18
- Memories are stored as **resources** in the SQL database (personal scope), not as files on disk.
18
+ Memories are stored as **resources** in the SQL database, not as files on disk.
19
+
20
+ - **Team/organization knowledge:** shared `LEARNINGS.md`. Read it first, merge the new fact, then write the full updated file with the `resources` tool using `scope: "shared"`. Shared scope resolves to the active organization; it must never leak to another organization in the same deployment.
21
+ - **Personal knowledge:** `memory/MEMORY.md` plus `memory/<name>.md`, written with `save-memory`.
19
22
 
20
23
  - **Save a memory:** `save-memory --name <name> --type <type> --description "..." --content "..."`
21
24
  - **Read a memory:** `resource-read --path memory/<name>.md`
@@ -33,6 +36,14 @@ Memories are stored as **resources** in the SQL database (personal scope), not a
33
36
 
34
37
  ## When to Capture
35
38
 
39
+ ### Team and organization knowledge (`LEARNINGS.md`, shared scope)
40
+ - Canonical destinations and workflows (for example, which Content database receives a type of Slack request)
41
+ - Required intake fields, ownership, prioritization conventions, metric definitions, and approved terminology
42
+ - Durable external references that the whole team needs, including the canonical page/database URL
43
+ - Corrections or decisions that should affect every organization member's future Slack and app conversations
44
+
45
+ Store the fact and a concise provenance link when available. Do not paste full private conversations, customer data, credentials, or secrets into learnings. Put stable always-on policy in shared `AGENTS.md`; put learned facts and evolving conventions in shared `LEARNINGS.md`.
46
+
36
47
  ### User Preferences & Memory (`user`)
37
48
  - **Tone and style** — "I prefer casual tone", "don't use emojis", "keep replies short"
38
49
  - **Personal context** — contacts, relationships, habits ("my wife's email is...", "I'm in PST timezone")
@@ -58,19 +69,21 @@ Memories are stored as **resources** in the SQL database (personal scope), not a
58
69
  - Things obvious from reading the code
59
70
  - Standard language/framework behavior
60
71
  - Temporary debugging notes
61
- - Anything already in AGENTS.md or skills
72
+ - Anything already in AGENTS.md, shared LEARNINGS.md, or skills
62
73
  - Ephemeral task details (use tasks/plans instead)
63
74
 
64
75
  ## Key Rules
65
76
 
66
- 1. **Save proactively — don't ask permission.** When you learn something, save it immediately.
67
- 2. **One memory per topic** e.g. `coding-style`, `project-alpha`, not one giant dump
68
- 3. **Read before updating** — if a memory exists, read it first and merge, don't overwrite
69
- 4. **Keep descriptions concise** — the index is loaded every conversation
70
- 5. **Memories are SQL-backed** — safe for personal info, persist across sessions, not in git
77
+ 1. **Save proactively — don't ask permission.** When you learn something durable, save it immediately at the correct scope.
78
+ 2. **Choose scope by audience.** Organization workflow or reference → shared `LEARNINGS.md`; one person's preference/context → personal memory.
79
+ 3. **One memory per topic** — e.g. `coding-style`, `project-alpha`, not one giant dump
80
+ 4. **Read before updating** — if a memory exists, read it first and merge, don't overwrite
81
+ 5. **Keep descriptions concise** — the index is loaded every conversation
82
+ 6. **Memories are SQL-backed** — they persist across sessions and are not in git; still minimize sensitive content
71
83
 
72
84
  ## Graduation
73
85
 
74
86
  When a memory is referenced repeatedly, it may belong in AGENTS.md or a skill:
75
- - Saving a memory is lightweight (auto-apply, personal scope)
87
+ - Saving a personal memory is lightweight (auto-apply, personal scope)
88
+ - Shared LEARNINGS.md is the lightweight organization knowledge layer
76
89
  - Updating AGENTS.md or a skill is heavier (affects all users/agents)
@@ -278,6 +278,32 @@ pnpm action generate-design \
278
278
 
279
279
  Always pass `canvasFrames` with an explicit `width`/`height` matching the form-factor answer (mobile ≈ 390×844, tablet ≈ 768×1024, desktop ≈ 1440×1024 as above) — a screen saved without a placement falls back to a generic default that won't match a desktop-intended design. For multiple screens generated together, call `generate-screens` first and pass `deviceType` (`"mobile"` / `"tablet"` / `"desktop"`) per screen; it returns the matching `canvasFrame` to forward to each `generate-design` call.
280
280
 
281
+ #### Non-web sizes — ad units, print one-pagers, social sizes
282
+
283
+ `canvasFrames` accepts any exact `width`/`height` in px, so "create a 300x250
284
+ ad" style requests work the same way — no special action, just the pixel
285
+ dimensions the artifact actually needs. The editor's own Frame tool preset
286
+ list (`app/components/design/inspector/frame-size-presets.ts`) documents the
287
+ canonical sizes to reuse instead of guessing:
288
+
289
+ - **Ad units (IAB standard)**: Medium Rectangle 300×250, Leaderboard 728×90,
290
+ Wide Skyscraper 160×600, Mobile Leaderboard 320×50, Billboard 970×250.
291
+ - **Print (96dpi CSS px, matching this app's PNG/PDF export unit)**: US
292
+ Letter 816×1056, A4 794×1123, A5 559×794, Tabloid 1056×1632. Design print
293
+ one-pagers with real multi-column layout, tables, and a footer — a
294
+ fixed-size print artifact has no responsive fallback, so lay out the exact
295
+ canvas once. The editor's Download PDF export renders these at a
296
+ print-quality floor (2x raster, ~192dpi) regardless of the export panel's
297
+ default scale setting.
298
+ - **Social**: Instagram Post 1080×1080, Instagram Story 1080×1920, X Post
299
+ 1200×675, Facebook Cover 820×312, LinkedIn Cover 1584×396.
300
+
301
+ At small ad-unit sizes (320×50, 160×600), text commonly runs 9-11px — smaller
302
+ than this skill's general 16px body-text floor — because there is no room to
303
+ reflow. That is expected for these formats; it stays legible in @2x+ exports
304
+ since the export scale multiplies raster resolution, not the authored CSS
305
+ size. Avoid dense multi-line copy at these sizes regardless.
306
+
281
307
  ### Phase 4 — Always ship tweaks with the design
282
308
 
283
309
  `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.
@@ -119,6 +119,25 @@ fingerprint.
119
119
 
120
120
  If this is the user's first design system, it is automatically set as the default.
121
121
 
122
+ ### Starting from an established public system
123
+
124
+ Use the curated production templates instead of recreating familiar systems
125
+ from memory:
126
+
127
+ ```bash
128
+ pnpm action create-design-system --templateId material-3
129
+ pnpm action create-design-system --templateId carbon-white
130
+ pnpm action create-design-system --templateId primer-light
131
+ ```
132
+
133
+ Each template is a source-linked, versioned snapshot with real semantic tokens,
134
+ type scales, spacing, shapes, CSS variables, state guidance, attribution, and
135
+ brand-misrepresentation guardrails. The action may accept a custom `title`,
136
+ `description`, or additional `customInstructions`, but it intentionally rejects
137
+ `data` overrides when `templateId` is present so the named snapshot cannot
138
+ silently become a lookalike. Use `get-design-system` after creation when the
139
+ full stored snapshot is needed.
140
+
122
141
  ### Reading a Design System
123
142
 
124
143
  ```bash
@@ -298,11 +317,11 @@ copied frame **link** carry fundamentally different information:
298
317
 
299
318
  - **A copied frame link** (`?node-id=...`) names an exact node. Always exact —
300
319
  use `import-figma-frame`.
301
- - **A plain clipboard paste** only carries Figma's `figmeta` marker, which is
302
- `{fileKey, pasteID, dataType}` **no node id at all**, and `pasteID` is an
303
- ephemeral, server-side identifier that the public REST API can't resolve
304
- back to a node. So a clipboard paste can only ever get an exact node import
305
- on a **best-effort match**, never a guarantee.
320
+ - **A current Figma clipboard paste** carries `figmeta.selectedNodeData`; each
321
+ comma-separated entry begins with the exact REST node id. Design imports
322
+ those selected nodes directly, including multi-selection. This field is not
323
+ a public Figma contract, so older or future clipboard formats may still need
324
+ the conservative matching fallback below.
306
325
 
307
326
  The canvas paste listener (`app/lib/figma-clipboard.ts` +
308
327
  `import-figma-clipboard`) handles this automatically:
@@ -312,10 +331,10 @@ The canvas paste listener (`app/lib/figma-clipboard.ts` +
312
331
  `import-figma-clipboard` (figmeta present) or the legacy
313
332
  `import-design-source` HTML path (no figmeta — not a Figma paste, or an
314
333
  older Figma client that doesn't emit the marker).
315
- 2. `import-figma-clipboard` fetches the file's shallow structure (top-level
316
- frames + their direct children, `server/lib/figma-node-import.ts`'s
317
- `fetchFileStructure(fileKey, 3)`) and heuristically matches it against the
318
- pasted content's visible text (`server/lib/figma-clipboard-match.ts`):
334
+ 2. When `selectedNodeData` is present, `import-figma-clipboard` fetches those
335
+ exact node ids immediately. Otherwise it fetches the file's shallow
336
+ structure and heuristically matches it against pasted visible text
337
+ (`server/lib/figma-clipboard-match.ts`):
319
338
  a frame is only imported when its **name** or at least **two distinct
320
339
  text-layer contents** appear verbatim in the paste. Anything ambiguous or
321
340
  unmatched imports **nothing structural** — it never guesses and never
@@ -330,9 +349,63 @@ The canvas paste listener (`app/lib/figma-clipboard.ts` +
330
349
  both cases: connect the Figma access token, or paste a frame **link**
331
350
  instead for a guaranteed-exact import.
332
351
 
333
- Tell users who want guaranteed pixel-exact imports to copy a frame **link**
334
- ("Copy link to selection" in Figma), not just Cmd+C a plain paste is
335
- convenient but only best-effort.
352
+ Tell users who need a path based only on Figma's public contract to copy a
353
+ frame **link** ("Copy link to selection" in Figma). Current Cmd+C is exact
354
+ when `selectedNodeData` is present, with conservative fallback if it changes.
355
+
356
+ ### Reading a Figma file/frame without importing it
357
+
358
+ **When the user just asks a question about a Figma file/frame** ("what's in
359
+ this file?", "what's in this frame?", "show me a screenshot of this Figma
360
+ frame", "what components/instances does it use?") — do not call
361
+ `import-figma-frame` just to inspect it; that persists a new Design screen.
362
+ Use `get-figma-design-context` instead, the chat equivalent of the official
363
+ Figma MCP's `get_metadata` + `get_design_context` for this app:
364
+
365
+ ```bash
366
+ # No nodeId: lists pages and top-level frames (like get_metadata with no node id)
367
+ pnpm action get-figma-design-context --figmaUrl "https://www.figma.com/design/<fileKey>/<name>"
368
+ # A specific frame/node: full structural summary + screenshot
369
+ pnpm action get-figma-design-context --figmaUrl "https://www.figma.com/design/<fileKey>/<name>?node-id=<id>"
370
+ ```
371
+
372
+ - **Overview mode** (no `nodeId`, none parsed from the URL) returns the file's
373
+ pages and each page's top-level frames (id, name, type, child count) so the
374
+ agent can pick a frame before drilling in — mirrors the official MCP's
375
+ `get_metadata` behavior when called with no node id.
376
+ - **Node mode** (a `nodeId`, or a link with `?node-id=`) returns a
377
+ depth-limited, size-capped tree (`depth`/`maxNodes` args) describing box
378
+ geometry, fills/strokes/effects/corner-radii (including per-corner arrays),
379
+ auto-layout, text/style (font, case, decoration, line-height), and
380
+ component/instance identity (`isComponent`/`isInstance`/`componentId`) for
381
+ every visible descendant — plus a rendered screenshot URL by default
382
+ (`includeScreenshot: false` to skip it). It never writes anything; use
383
+ `import-figma-frame` afterward if the user wants the frame brought in as a
384
+ real, editable screen.
385
+ - This also answers "what components does this file use?" for **local,
386
+ unpublished** components/instances that never show up in
387
+ `list-figma-library-assets` — that action's REST source
388
+ (`/files/:key/components`) only returns components **published to a team
389
+ library**, not every `COMPONENT`/`INSTANCE` node in the file. Use
390
+ `get-figma-design-context` for "what components exist in this file/frame",
391
+ and `list-figma-library-assets` + `insert-figma-library-asset` for "insert a
392
+ reusable library component". The screenshot URL `get-figma-design-context`
393
+ returns for a component/instance node can be passed straight to
394
+ `insert-figma-library-asset` as `renderUrl` even when the component isn't
395
+ published.
396
+ - For Figma **variables** ("what tokens/variables does this file define?"),
397
+ give an honest answer instead of guessing: the REST Variables API is
398
+ Enterprise-plan-gated, so `get-figma-design-context`'s summary of a node's
399
+ own paints only shows resolved colors, not variable bindings, and
400
+ `get-figma-styles` only covers the file's published FILL/TEXT/EFFECT/GRID
401
+ **Styles** (a separate, non-Enterprise feature) — neither is the Variables
402
+ API. If the user has Enterprise access and a connected Figma MCP with
403
+ `get_variable_defs`, call that directly for real variable definitions and
404
+ pass the result to `index-design-system-with-builder`. Otherwise, tell the
405
+ user variables need Enterprise access or a connected Figma MCP, and offer
406
+ Styles (`get-figma-styles`) or a manual `import-design-tokens` /
407
+ `apply-design-token-edit` pass as the available fallback — do not claim to
408
+ have enumerated variables from a plain `FIGMA_ACCESS_TOKEN`.
336
409
 
337
410
  ### Source: Brand Analysis (combines website + notes)
338
411
 
@@ -16,13 +16,19 @@ patterns live in `.agents/skills/`.
16
16
  - Never hardcode API keys, tokens, webhook URLs, signing secrets, private Builder/internal data, customer data, or credential-looking literals. Use secrets/OAuth/runtime configuration and obvious placeholders in examples.
17
17
  - Use the app actions for designs, files, versions, design systems, variants,
18
18
  export, and sharing. Do not write design rows directly with SQL.
19
- - Treat repository import actions as shortcuts, not capability limits. When the
20
- exact GitHub endpoint, search query, request body, pagination mode, metadata
21
- field, or API version matters, use `provider-api-catalog`,
22
- `provider-api-docs`, and `provider-api-request` against the real GitHub API.
23
- The provider API resolves auth from the saved `GITHUB_TOKEN` secret and never
24
- exposes the token value. For large scans, stage results with `stageAs` and
25
- analyze them with `query-staged-dataset`.
19
+ - When a user wants an established public system as a starting point, call
20
+ `create-design-system` with `templateId: material-3`, `carbon-white`, or
21
+ `primer-light`. These are source-linked, versioned token snapshots with
22
+ system-specific generation guidance; preserve that data instead of
23
+ reconstructing a lookalike palette.
24
+ - Treat provider-specific actions as shortcuts, not capability limits. Use
25
+ `provider-api-catalog`, `provider-api-docs`, and `provider-api-request` for
26
+ open-ended GitHub and Figma API questions. Auth resolves from the saved,
27
+ user-scoped `GITHUB_TOKEN` or `FIGMA_ACCESS_TOKEN` and never exposes secret
28
+ values. Stage large reads with `stageAs` and analyze them through
29
+ `query-staged-dataset`. Figma REST can read files, nodes, components, styles,
30
+ images, comments, versions, and Enterprise variables, but it cannot create
31
+ arbitrary canvas layers; non-read Figma requests require human approval.
26
32
  - In dev, call actions with `pnpm action <name>`; in production, call the native
27
33
  tool. The action schema is the source of truth for parameters.
28
34
  - Call `view-screen` before editing a specific design if the current design or
@@ -64,20 +70,46 @@ patterns live in `.agents/skills/`.
64
70
  `insert-figma-library-asset`, preserving `fileKey`, `nodeId`, `componentKey`,
65
71
  `sourceUrl`, and the rendered URL. This path requires the saved
66
72
  `FIGMA_ACCESS_TOKEN` secret; never ask the user to paste that token into chat
67
- or pass it as an action parameter. Figma styles and variables are design-system
68
- inputs, not draggable media assets; route full file/design-system extraction
69
- through Builder-backed indexing.
73
+ or pass it as an action parameter. Token setup needs `current_user:read` for
74
+ validation and `file_content:read` for frame/node import; add library or
75
+ Enterprise variable scopes only when needed. Figma styles and variables are
76
+ design-system inputs, not draggable media assets; route reusable system
77
+ extraction through Builder-backed indexing.
70
78
  - To import a Figma frame/screen as a real, editable Design screen (not a
71
79
  rendered image), use `import-figma-frame` with a `figmaUrl` (or
72
- `fileKey`/`nodeId`) — it maps position, auto-layout, text, fills/gradients,
73
- strokes, corner radii, effects, opacity, and blend modes pixel-accurately,
74
- falling back to an exact PNG only for vector networks/boolean ops/unsupported
75
- node types, and saves the result as a new screen. Read the returned
80
+ `fileKey`/`nodeId`) — it maps supported position, auto-layout, text,
81
+ fills/gradients, strokes, corner radii, effects, opacity, and blend modes,
82
+ falling back to a rendered PNG for masks, vector/boolean geometry,
83
+ lines/arcs, advanced strokes/text, transformed image crops, and unsupported
84
+ node types, then saves the result as a new screen. Read the returned
76
85
  `fidelityReport` (`approximated`, `imageFallbacks`) back to the user when
77
86
  non-trivial. Use `get-figma-styles` for a file's published style names (not
78
87
  the Enterprise Variables API; full token extraction still routes through
79
- Builder-backed indexing). See the `design-systems` skill's "Import from
80
- Figma" section.
88
+ Builder-backed indexing). Never claim universal lossless import/export:
89
+ consult `FIGMA_INTEROPERABILITY.md` for the feature-level fidelity contract,
90
+ fallback rules, scale limits, and real-file golden corpus. See the
91
+ `design-systems` skill's "Import from Figma" section.
92
+ - A current Figma Cmd+C clipboard includes exact selected node ids in
93
+ `figmeta.selectedNodeData`; `import-figma-clipboard` uses those before any
94
+ heuristic matching and supports multi-selection. Clipboard metadata is not a
95
+ public Figma contract, so a copied frame link remains the stable exact path
96
+ if Figma changes that field. Without a token, current Figma's binary-only
97
+ clipboard has no browser-readable HTML fallback; give setup guidance instead
98
+ of claiming a successful import.
99
+ - For "what's in this Figma file/frame?" or "show me a screenshot of this
100
+ frame" without importing anything, use `get-figma-design-context` — no
101
+ `nodeId` lists pages/top-level frames (like the official Figma MCP's
102
+ `get_metadata`), a `nodeId`/node-id link returns a depth-limited structural
103
+ summary (box, fills/strokes/effects, auto-layout, text/style,
104
+ component/instance identity) plus a rendered screenshot URL. It never
105
+ creates a screen; use `import-figma-frame` for that. It also surfaces local,
106
+ unpublished components/instances that `list-figma-library-assets` cannot see
107
+ (that action's REST source only returns library-published components). For
108
+ variables, `get-figma-design-context` and `get-figma-styles` are honest
109
+ fallbacks, not the Enterprise Variables API — say so plainly rather than
110
+ guessing when no connected Figma MCP/Enterprise access is available. See the
111
+ `design-systems` skill's "Reading a Figma file/frame without importing"
112
+ section.
81
113
  - Use Alpine.js and Tailwind CDN for interactive prototypes. Prefer Alpine
82
114
  directives over raw inline event handlers.
83
115
  - Navigate between prototype screens with Alpine state (`x-show`), a
@@ -88,6 +120,17 @@ patterns live in `.agents/skills/`.
88
120
  `generate-design` for new files. For broad rewrites of an existing selected
89
121
  file, use `edit-design` with `mode: "replace-file"` and the exact `fileId`;
90
122
  never resend files you aren't changing.
123
+ - For reusable starting points, call `list-design-templates`. Use
124
+ `save-design-as-template` to snapshot an editable inline design, including
125
+ its screens, canvas dimensions, defaults, and locked layers. Use
126
+ `create-design-from-template` to instantiate a normal design. If the user
127
+ supplies a prompt, call `get-design-snapshot` once and refine the copied
128
+ files with `edit-design`; never regenerate the template from scratch.
129
+ - Treat `data-agent-native-locked="true"` as an authoritative template
130
+ boundary. Locked backgrounds, logos, and their descendants must remain
131
+ byte-for-byte unchanged during agent edits. The server rejects attempts to
132
+ change or remove them; ask the user to unlock the layer in the Layers panel
133
+ if they explicitly want it changed.
91
134
  - When the user asks to add tweak controls, preserve existing useful tweaks,
92
135
  add or update the requested `tweaks` definitions, and make sure each control
93
136
  is backed by a CSS custom property the rendered file actually uses. If source
@@ -110,7 +153,8 @@ patterns live in `.agents/skills/`.
110
153
  explicit user instructions in the current turn still win.
111
154
  - For reusable design-system setup from Figma, connected code/GitHub, local
112
155
  code/design files, or optional `design.md`, use Builder-backed DSI indexing
113
- through `index-design-system-with-builder` or `import-file --format fig`.
156
+ through `index-design-system-with-builder` or the Design System Setup `.fig`
157
+ upload.
114
158
  Pass readable `design.md` content as `designMd`, use the returned local design
115
159
  system id in Design flows, and call `get-design-system` before generation to
116
160
  hydrate Builder docs/tokens when available. Do not create a duplicate local
@@ -140,7 +184,7 @@ patterns live in `.agents/skills/`.
140
184
  the work involves multiple screens or artboard placement. Overview is the
141
185
  primary editing surface: users can select screens, move/resize/drop static
142
186
  frames and canvas primitives, edit layers in place, and use the frame's
143
- full-view button to enter focused editing.
187
+ Interact button to enter focused editing.
144
188
  - To move the user's editor, call `navigate` with `view: "editor"` and
145
189
  `editorView: "overview"` for the screen overview, or `editorView: "single"`
146
190
  plus `fileId`, `filename`, or `screen` to focus one screen.
@@ -306,6 +350,8 @@ patterns live in `.agents/skills/`.
306
350
  frame new edits target. Breakpoint frames are one document with a
307
351
  Framer-style cascade (base = widest frame; narrower-frame edits persist as
308
352
  width-scoped overrides via `apply-visual-edit` + `activeFrameWidthPx`).
353
+ `set-active-breakpoint.editScope` is `cascade-smaller` by default; use
354
+ `only` when the user explicitly wants a bounded, breakpoint-only override.
309
355
  Read the `responsive-breakpoints` skill before responsive edits.
310
356
  - **Design states**: `create-design-state`, `apply-design-state`,
311
357
  `capture-design-state`, `list-design-states`, and `delete-design-state`
@@ -323,6 +369,14 @@ patterns live in `.agents/skills/`.
323
369
  `detach-component-instance` to turn an instance into plain editable markup.
324
370
  See the `design-generation` skill's "Component reuse" section — promote a
325
371
  3+ times repeated pattern instead of inventing another near-duplicate.
372
+ - **Suggested auto layout**: for an absolute/freeform container, first measure
373
+ its direct children and present the proposed direction, visual order, gap,
374
+ four-side padding, alignment, and sizing. Do not mutate source until the user
375
+ applies the preview. Inline HTML/Alpine applies the reviewed proposal through
376
+ one `apply-visual-edit`-backed content transaction so undo restores the exact
377
+ prior structure. Local React uses the semantic source handoff (never generic
378
+ AST rewriting), preserves nested absolute descendants and responsive logic,
379
+ and applies the approved proposal as one reversible source edit.
326
380
 
327
381
  ## Full App Building
328
382
 
@@ -9,7 +9,7 @@ and later blend hosted/fusion sources without changing the artboard model.
9
9
  Design is overview-first for multi-screen work. Generation and broad updates
10
10
  should land in the screen overview: an infinite canvas where each screen is a
11
11
  static frame that can be selected, moved, resized, dropped, or duplicated.
12
- Use the frame's full-view button when a screen needs focused scrolling or
12
+ Use the frame's Interact button when a screen needs focused scrolling or
13
13
  prototype interaction.
14
14
 
15
15
  Single-screen mode is the scroll/interact/edit surface for one rendered file. It
@@ -114,7 +114,7 @@ Design has two editor views:
114
114
  - **Overview** is the default multi-screen canvas after generation or broad
115
115
  updates. It renders every screen as a static, movable frame on an infinite
116
116
  surface. Users can select screens, move/resize/drop frames and primitives,
117
- edit layers in place, and use a frame's full-view button to focus it.
117
+ edit layers in place, and use a frame's Interact button to focus it.
118
118
  - **Single screen** renders one file in the iframe editor. Use it for scrolling,
119
119
  interacting with prototype behavior, text/DOM selection, and local visual
120
120
  edits inside that screen.
@@ -0,0 +1,116 @@
1
+ # Figma interoperability and fidelity contract
2
+
3
+ This is the acceptance contract for Figma interoperability in Design. It is
4
+ deliberately stricter than a feature checklist: a path is only **exact** when
5
+ the original visual result and the relevant editable semantics survive. A
6
+ rendered fallback can be pixel-faithful while still losing editability, so it
7
+ is reported separately.
8
+
9
+ Figma's REST API exposes file/node JSON and rendered exports, but it does not
10
+ offer a general REST operation for creating arbitrary native canvas layers.
11
+ Native canvas writes belong to Figma's official MCP/Plugin API path. The `.fig`
12
+ container and Figma clipboard binary are private formats and can change without
13
+ notice. Those boundaries make a universal lossless round trip impossible; the
14
+ product must report them instead of claiming success.
15
+
16
+ ## Capability matrix
17
+
18
+ | Workflow or feature | Current behavior | Fidelity | Required verification |
19
+ | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
20
+ | Figma frame URL / file key | Reads the exact node through `file_content:read`, converts it to a new Design screen, mirrors expiring images into durable storage, and returns a per-node fidelity report. | Mixed; see node matrix below. | REST fixture, authenticated file, screenshot comparison. |
21
+ | Figma URL without a node id | Imports the first top-level object on the first page. A specific frame URL is recommended for deterministic results. | Same as node import. | Multi-page and empty-page fixtures. |
22
+ | Figma branch URL | Uses the branch key and imports that branch's node. | Same as node import. | Main/branch pair with divergent content. |
23
+ | Figma clipboard to Design | Uses private `figmeta.selectedNodeData` ids when present, then the same REST converter. Older visible HTML is only a fallback. Binary-only clipboard data without ids/token is not decoded. | Exact selection identity while Figma's private metadata shape remains compatible; node fidelity is mixed. | Real Chrome copy from single, multi, nested, and 100+ node selections. |
24
+ | `.fig` upload | Bounded best-effort decoding of known Kiwi/ZIP variants into editable HTML. Embedded images are moved to durable storage. | Experimental. The format is proprietary and has no compatibility guarantee. | Corpus of real files from multiple Figma versions; never only generated containers. |
25
+ | Design to Figma clipboard | Copies an SVG built from the live rendered DOM. Figma imports supported SVG primitives as editable layers. | Visual/vector handoff, not a native semantic round trip. Auto layout, variables, components, prototypes, HTML state, and code identity are not recreated by SVG. | Paste into real Figma and inspect layer types, text, images, effects, clipping, and bounds. |
26
+ | Design SVG download | Same conversion as clipboard, with a server-render fallback when a live DOM is unavailable. | Same SVG limits; the export report lists approximations and omissions. | Live and server paths, selected layer and whole screen. |
27
+ | Native Design to Figma write | Use Figma's official MCP `use_figma` write-to-canvas path when the connected client/account supports it. | Native Figma structures, subject to Figma MCP beta limitations and permissions. | Full-seat/edit-permission account and a real destination file. |
28
+ | `.fig` download | Not supported. There is no documented public `.fig` authoring contract. | Unsupported. | Do not label SVG/ZIP as `.fig`. |
29
+ | Open-ended Figma chat | Provider catalog/docs/request expose the REST surface allowed by the user's scoped token; non-read calls require approval. Native canvas authoring requires official Figma MCP, not a personal access token alone. | Endpoint-dependent. | Read scopes, expired/revoked token, rate limiting, Enterprise-variable permissions, MCP connection. |
30
+
31
+ ## REST node conversion matrix
32
+
33
+ | Figma construct | Representation in Design | Fidelity and residual limit |
34
+ | -------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
35
+ | Frames, groups, sections, rectangles, full ellipses | Nested HTML boxes with fixed imported geometry. | Exact at the imported canvas size for supported paints/effects. |
36
+ | Horizontal/vertical auto layout | Flexbox with direction, padding, gap, wrap, alignment, FILL/HUG sizing, and min/max sizes. Absolute children remain out of flow. | Strong structural mapping, but Figma and browser layout engines are not identical. GRID and less common layout flags need golden comparison. |
37
+ | Nested freeform positioning and clipping | Parent-relative absolute geometry; `clipsContent` becomes `overflow:hidden`. | Exact for axis-aligned bounds. |
38
+ | Rotation | CSS rotation reconstructed from the post-rotation bounding box. | Approximated because the pre-rotation box/pivot requires geometry transforms. Listed in the fidelity report. |
39
+ | Solid and multi-layer fills | CSS background layers in Figma stacking order. | Exact for supported paint stacks. |
40
+ | Linear gradients | CSS gradient derived from Figma handles in pixel space. | Exact for the supported linear model. |
41
+ | Radial/angular/diamond gradients | CSS radial/conic approximation. | Approximated and reported. |
42
+ | Image fills | Durable mirrored URL with FILL/FIT/TILE/STRETCH. | Exact for axis-aligned transforms. Filtered, rotated, or skewed crops become rendered fallbacks. Missing image URLs fail the import instead of silently disappearing. |
43
+ | Text | Editable text with font family, size, weight, italic, line height, tracking, alignment, case, decoration, whitespace, and ordinary mixed-style runs. | Exact only when the same font is available and the feature is representable by CSS. Lists, paragraph typography, hyperlinks, OpenType overrides, gradient/image text, and other advanced runs become rendered fallbacks. |
44
+ | Uniform solid strokes | Border/outline/inset-shadow mapping according to alignment. | Exact for the covered model. Per-side CENTER/OUTSIDE is approximated and reported. |
45
+ | Multiple, dashed, gradient, or image strokes | Rendered PNG fallback for the smallest affected subtree. | Pixel-oriented fallback; not structurally editable. |
46
+ | Drop/inner shadows | CSS shadows. | Exact for ordinary CSS-compatible shadows. Non-normal effect blending becomes a fallback. |
47
+ | Layer/background blur | CSS filter/backdrop-filter. | Approximated because Figma's radius mapping is not a public 1:1 contract. |
48
+ | Blend modes | CSS `mix-blend-mode` when available; closest mapping for a few Figma-only modes. | Exact or approximated as reported. Paint/effect blend modes that cannot be preserved become fallbacks. |
49
+ | Lines, partial/ring ellipses, vectors, boolean operations, stars, polygons | Rendered fallback requested from Figma. | Visual fallback, not editable geometry. Figma caps rendered images at 32 megapixels and may downscale them. |
50
+ | Masks | The smallest container whose children participate in the mask is rendered as one fallback. | Preserves visual composition, loses structural editability within that subtree. Alpha/vector/luminance masks are not misrepresented as ordinary layers. |
51
+ | Components, instances, and variants | Resolved child visuals become HTML; component id/properties remain bounded `data-figma-*` metadata. | Visual conversion plus provenance, not a live link to the Figma master. Instance swaps/variant semantics do not round trip through HTML/SVG. |
52
+ | Variables | Resolved visuals are imported and `boundVariables` ids remain bounded metadata. | Bindings are not live Design tokens. Full variable enumeration also depends on Enterprise plan/seat/scopes. |
53
+ | Prototype interactions | Preserved as inert metadata. | Deliberately do not navigate the editor iframe. No executable prototype round trip yet. |
54
+ | Videos, emoji paints, FigJam-only and unknown node types | Rendered fallback when Figma can render the node. | Visual fallback only. |
55
+ | Hidden or 0%-opacity subtrees | Omitted without downloading their assets. | Visually exact and avoids unnecessary work. |
56
+
57
+ ## Safety and scale limits
58
+
59
+ - REST responses are capped at 4 MB. Multi-selection requests split
60
+ recursively; one frame that exceeds the cap fails with "import a smaller
61
+ selection" rather than truncating.
62
+ - Node trees are capped at 75,000 nodes and 256 levels before recursive
63
+ rendering. Cycles are rejected.
64
+ - Fallback/image-fill references are capped at 256, fetched/uploaded with a
65
+ concurrency of four, limited to 15 MB per image and 64 MB total, and checked
66
+ by MIME signature.
67
+ - Figma render/image URLs are fetched through the SSRF-safe path, then mirrored
68
+ into user-scoped durable file storage. Expiring provider URLs and binary data
69
+ are not stored in SQL.
70
+ - A required fallback or image fill that Figma fails to return aborts the import.
71
+ The importer never reports success after silently deleting visible content.
72
+ - Metadata attributes are capped at 16 KB per property; oversized metadata is
73
+ omitted and reported as an approximation.
74
+
75
+ ## Golden corpus required for release confidence
76
+
77
+ Generated unit fixtures protect parsing and failure behavior but cannot prove
78
+ pixel parity. Maintain a permission-safe private test file/corpus with these
79
+ real cases and compare both screenshots and editable structure:
80
+
81
+ 1. Nested horizontal, vertical, wrapping, negative-gap, grid, absolute-child,
82
+ min/max, baseline, and responsive auto layout.
83
+ 2. Mixed fonts/scripts/emoji, missing and custom fonts, variable fonts, lists,
84
+ OpenType features, text-on-path, truncation, and mixed hyperlinks.
85
+ 3. Every gradient, fill stack, image crop/filter/tile, stroke alignment/dash,
86
+ effect, blend mode, mask type, vector network, boolean op, and arc.
87
+ 4. Local/remote components, nested instances, variants, exposed properties,
88
+ overrides, swaps, variables/modes/aliases, and published libraries.
89
+ 5. Prototype overlays, scroll behaviors, links, interactive components, media,
90
+ and conditional actions, verifying they stay inert while editing.
91
+ 6. Rotated/skewed/flipped nested frames and clipping at fractional coordinates.
92
+ 7. Single/multi/cross-page clipboard selections, 100+ node selections, revoked
93
+ tokens, inaccessible files, branches, rate limits, null renders, and expired
94
+ image URLs.
95
+ 8. Small through near-limit documents, deeply nested documents, 32-megapixel
96
+ fallback boundaries, many images, slow storage, cancellation, and retries.
97
+ 9. Round trips through live-DOM SVG, server SVG, clipboard paste into Figma,
98
+ official MCP native write, PDF export, and re-import with a structural diff.
99
+
100
+ Release evidence should record the Figma file version, browser/app version,
101
+ font environment, screenshot diff thresholds, structural assertions, timing,
102
+ memory, warnings, and every fallback. "The import completed" is not a fidelity
103
+ assertion.
104
+
105
+ ## Primary references
106
+
107
+ - Figma REST file/node/image endpoints:
108
+ <https://developers.figma.com/docs/rest-api/file-endpoints/>
109
+ - Figma REST node types and mask/interaction/geometry properties:
110
+ <https://developers.figma.com/docs/rest-api/file-node-types/>
111
+ - Figma Variables API requirements:
112
+ <https://developers.figma.com/docs/rest-api/variables/>
113
+ - Figma MCP write to canvas and current limitations:
114
+ <https://developers.figma.com/docs/figma-mcp-server/write-to-canvas/>
115
+ - Figma MCP code to canvas:
116
+ <https://developers.figma.com/docs/figma-mcp-server/code-to-canvas/>