@sarjallab09/figma-intelligence 1.0.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 (286) hide show
  1. package/LICENSE +26 -0
  2. package/README.md +327 -0
  3. package/bin/cli.js +859 -0
  4. package/design-bridge/.env.example +5 -0
  5. package/design-bridge/bridge.js +196 -0
  6. package/design-bridge/lib/assets.js +367 -0
  7. package/design-bridge/lib/prompt.js +85 -0
  8. package/design-bridge/lib/server.js +66 -0
  9. package/design-bridge/lib/stitch.js +37 -0
  10. package/design-bridge/lib/tokens.js +82 -0
  11. package/design-bridge/package-lock.json +579 -0
  12. package/design-bridge/package.json +19 -0
  13. package/figma-bridge-plugin/README.md +97 -0
  14. package/figma-bridge-plugin/anthropic-chat-runner.js +192 -0
  15. package/figma-bridge-plugin/bridge-relay.js +2363 -0
  16. package/figma-bridge-plugin/chat-runner.js +459 -0
  17. package/figma-bridge-plugin/code.js +1528 -0
  18. package/figma-bridge-plugin/codex-runner.js +505 -0
  19. package/figma-bridge-plugin/component-schemas.js +110 -0
  20. package/figma-bridge-plugin/content-context.js +869 -0
  21. package/figma-bridge-plugin/create-button.js +216 -0
  22. package/figma-bridge-plugin/gemini-cli-runner.js +291 -0
  23. package/figma-bridge-plugin/gemini-runner.js +187 -0
  24. package/figma-bridge-plugin/html-to-figma.js +927 -0
  25. package/figma-bridge-plugin/knowledge-hub/.gitkeep +0 -0
  26. package/figma-bridge-plugin/knowledge-hub/uspec-references/anatomy-spec.md +159 -0
  27. package/figma-bridge-plugin/knowledge-hub/uspec-references/api-spec.md +162 -0
  28. package/figma-bridge-plugin/knowledge-hub/uspec-references/color-spec.md +148 -0
  29. package/figma-bridge-plugin/knowledge-hub/uspec-references/full-spec-template.md +314 -0
  30. package/figma-bridge-plugin/knowledge-hub/uspec-references/property-spec.md +175 -0
  31. package/figma-bridge-plugin/knowledge-hub/uspec-references/screen-reader-spec.md +180 -0
  32. package/figma-bridge-plugin/knowledge-hub/uspec-references/structure-spec.md +165 -0
  33. package/figma-bridge-plugin/manifest.json +21 -0
  34. package/figma-bridge-plugin/package-lock.json +1936 -0
  35. package/figma-bridge-plugin/package.json +20 -0
  36. package/figma-bridge-plugin/perplexity-runner.js +188 -0
  37. package/figma-bridge-plugin/references/SKILL.md +178 -0
  38. package/figma-bridge-plugin/references/anatomy-spec.md +159 -0
  39. package/figma-bridge-plugin/references/api-spec.md +162 -0
  40. package/figma-bridge-plugin/references/color-spec.md +148 -0
  41. package/figma-bridge-plugin/references/full-spec-template.md +314 -0
  42. package/figma-bridge-plugin/references/property-spec.md +175 -0
  43. package/figma-bridge-plugin/references/screen-reader-spec.md +180 -0
  44. package/figma-bridge-plugin/references/structure-spec.md +165 -0
  45. package/figma-bridge-plugin/shared-prompt-config.js +604 -0
  46. package/figma-bridge-plugin/spec-helpers/build-table.js +269 -0
  47. package/figma-bridge-plugin/spec-helpers/classify-elements.js +189 -0
  48. package/figma-bridge-plugin/spec-helpers/index.js +35 -0
  49. package/figma-bridge-plugin/spec-helpers/parse-figma-link.js +49 -0
  50. package/figma-bridge-plugin/spec-helpers/position-markers.js +158 -0
  51. package/figma-bridge-plugin/stitch-auth.js +322 -0
  52. package/figma-bridge-plugin/stitch-runner.js +1427 -0
  53. package/figma-bridge-plugin/token-resolver.js +107 -0
  54. package/figma-bridge-plugin/ui.html +4467 -0
  55. package/figma-intelligence-layer/.env.example +39 -0
  56. package/figma-intelligence-layer/docs/local-image-generation.md +60 -0
  57. package/figma-intelligence-layer/examples/comfyui-workflow-template.example.json +101 -0
  58. package/figma-intelligence-layer/jest.config.js +14 -0
  59. package/figma-intelligence-layer/mcp-config.json +19 -0
  60. package/figma-intelligence-layer/package-lock.json +5892 -0
  61. package/figma-intelligence-layer/package.json +48 -0
  62. package/figma-intelligence-layer/scripts/setup-comfyui-local.sh +67 -0
  63. package/figma-intelligence-layer/scripts/start-comfyui.sh +33 -0
  64. package/figma-intelligence-layer/src/index.ts +2233 -0
  65. package/figma-intelligence-layer/src/shared/auto-layout-validator.ts +404 -0
  66. package/figma-intelligence-layer/src/shared/cache.ts +187 -0
  67. package/figma-intelligence-layer/src/shared/color-operations.ts +533 -0
  68. package/figma-intelligence-layer/src/shared/color-utils.ts +138 -0
  69. package/figma-intelligence-layer/src/shared/component-script-builder.ts +413 -0
  70. package/figma-intelligence-layer/src/shared/component-templates.ts +2767 -0
  71. package/figma-intelligence-layer/src/shared/concept-taxonomy.ts +694 -0
  72. package/figma-intelligence-layer/src/shared/decision-log.ts +128 -0
  73. package/figma-intelligence-layer/src/shared/design-system-context.ts +568 -0
  74. package/figma-intelligence-layer/src/shared/design-system-intelligence.ts +131 -0
  75. package/figma-intelligence-layer/src/shared/design-system-matcher.ts +184 -0
  76. package/figma-intelligence-layer/src/shared/design-system-normalizers.ts +196 -0
  77. package/figma-intelligence-layer/src/shared/design-system-tokens.ts +295 -0
  78. package/figma-intelligence-layer/src/shared/dtcg-validator.ts +530 -0
  79. package/figma-intelligence-layer/src/shared/enrichment-pipeline.ts +671 -0
  80. package/figma-intelligence-layer/src/shared/figma-bridge.ts +1408 -0
  81. package/figma-intelligence-layer/src/shared/font-config.ts +126 -0
  82. package/figma-intelligence-layer/src/shared/icon-catalog.ts +360 -0
  83. package/figma-intelligence-layer/src/shared/icon-fetch.ts +80 -0
  84. package/figma-intelligence-layer/src/shared/prototype-script-builder.ts +162 -0
  85. package/figma-intelligence-layer/src/shared/response-compression.ts +440 -0
  86. package/figma-intelligence-layer/src/shared/semantic-token-catalog.ts +324 -0
  87. package/figma-intelligence-layer/src/shared/token-binder.ts +505 -0
  88. package/figma-intelligence-layer/src/shared/token-math.ts +427 -0
  89. package/figma-intelligence-layer/src/shared/token-naming.ts +468 -0
  90. package/figma-intelligence-layer/src/shared/token-utils.ts +420 -0
  91. package/figma-intelligence-layer/src/shared/types.ts +346 -0
  92. package/figma-intelligence-layer/src/shared/typography-presets.ts +94 -0
  93. package/figma-intelligence-layer/src/shared/unsplash.ts +165 -0
  94. package/figma-intelligence-layer/src/shared/vision-client.ts +607 -0
  95. package/figma-intelligence-layer/src/shared/vision-provider-anthropic.ts +334 -0
  96. package/figma-intelligence-layer/src/shared/vision-provider-openai.ts +446 -0
  97. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotate-handler.ts +782 -0
  98. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotate-renderer.ts +496 -0
  99. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/a11y-annotation-kit.ts +230 -0
  100. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/colorblind-sim.ts +66 -0
  101. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/index.ts +810 -0
  102. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-analyzer.ts +1191 -0
  103. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-figma-page.ts +1346 -0
  104. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/keyboard-sr-order-handler.ts +148 -0
  105. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/vpat-figma-page.ts +499 -0
  106. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/vpat-report.ts +910 -0
  107. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/wcag-checker.ts +989 -0
  108. package/figma-intelligence-layer/src/tools/phase1-vision/a11y-audit/wcag-criteria.ts +1160 -0
  109. package/figma-intelligence-layer/src/tools/phase1-vision/design-from-ref/index.ts +424 -0
  110. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/component-recognizer.ts +38 -0
  111. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/ds-matcher.ts +111 -0
  112. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/font-matcher.ts +114 -0
  113. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/icon-resolver.ts +103 -0
  114. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/index.ts +1060 -0
  115. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/layout-segmenter.ts +18 -0
  116. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/token-inferencer.ts +39 -0
  117. package/figma-intelligence-layer/src/tools/phase1-vision/screen-cloner/vision-pipeline.ts +58 -0
  118. package/figma-intelligence-layer/src/tools/phase1-vision/sketch-to-design/index.ts +298 -0
  119. package/figma-intelligence-layer/src/tools/phase1-vision/visual-audit/index.ts +197 -0
  120. package/figma-intelligence-layer/src/tools/phase2-accuracy/component-audit/index.ts +494 -0
  121. package/figma-intelligence-layer/src/tools/phase2-accuracy/intent-translator/index.ts +356 -0
  122. package/figma-intelligence-layer/src/tools/phase2-accuracy/layout-intelligence/container-patterns.ts +123 -0
  123. package/figma-intelligence-layer/src/tools/phase2-accuracy/layout-intelligence/index.ts +663 -0
  124. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/built-in-rules.yaml +56 -0
  125. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/index.ts +614 -0
  126. package/figma-intelligence-layer/src/tools/phase2-accuracy/lint-rules/rule-engine.ts +113 -0
  127. package/figma-intelligence-layer/src/tools/phase2-accuracy/theme-generator/color-theory.ts +178 -0
  128. package/figma-intelligence-layer/src/tools/phase2-accuracy/theme-generator/index.ts +470 -0
  129. package/figma-intelligence-layer/src/tools/phase2-accuracy/variant-expander/index.ts +429 -0
  130. package/figma-intelligence-layer/src/tools/phase2-accuracy/variant-expander/token-override-maps.ts +226 -0
  131. package/figma-intelligence-layer/src/tools/phase3-generation/ai-image-insert/index.ts +535 -0
  132. package/figma-intelligence-layer/src/tools/phase3-generation/component-archaeologist/index.ts +660 -0
  133. package/figma-intelligence-layer/src/tools/phase3-generation/component-archaeologist/pattern-fingerprints.ts +209 -0
  134. package/figma-intelligence-layer/src/tools/phase3-generation/composition-builder/index.ts +540 -0
  135. package/figma-intelligence-layer/src/tools/phase3-generation/figma-animated-build.ts +391 -0
  136. package/figma-intelligence-layer/src/tools/phase3-generation/page-architect/index.ts +2019 -0
  137. package/figma-intelligence-layer/src/tools/phase3-generation/page-architect/screen-templates.ts +131 -0
  138. package/figma-intelligence-layer/src/tools/phase3-generation/prototype-map/index.ts +381 -0
  139. package/figma-intelligence-layer/src/tools/phase3-generation/prototype-wire/index.ts +565 -0
  140. package/figma-intelligence-layer/src/tools/phase3-generation/swarm-build/index.ts +764 -0
  141. package/figma-intelligence-layer/src/tools/phase3-generation/system-drift/index.ts +535 -0
  142. package/figma-intelligence-layer/src/tools/phase3-generation/unsplash-search/index.ts +84 -0
  143. package/figma-intelligence-layer/src/tools/phase3-generation/url-to-frame/index.ts +401 -0
  144. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/css-animations.ts +68 -0
  145. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/framer-motion.ts +78 -0
  146. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/code-generators/swift-animations.ts +93 -0
  147. package/figma-intelligence-layer/src/tools/phase4-sync/animation-specifier/index.ts +596 -0
  148. package/figma-intelligence-layer/src/tools/phase4-sync/ci-check/index.ts +462 -0
  149. package/figma-intelligence-layer/src/tools/phase4-sync/export-tokens/index.ts +1470 -0
  150. package/figma-intelligence-layer/src/tools/phase4-sync/generate-component-code/index.ts +829 -0
  151. package/figma-intelligence-layer/src/tools/phase4-sync/handoff-spec/index.ts +702 -0
  152. package/figma-intelligence-layer/src/tools/phase4-sync/icon-library-sync/index.ts +483 -0
  153. package/figma-intelligence-layer/src/tools/phase4-sync/sync-from-code/index.ts +501 -0
  154. package/figma-intelligence-layer/src/tools/phase4-sync/sync-from-code/storybook-parser.ts +106 -0
  155. package/figma-intelligence-layer/src/tools/phase4-sync/watch-docs/index.ts +676 -0
  156. package/figma-intelligence-layer/src/tools/phase4-sync/webhook-listener/index.ts +560 -0
  157. package/figma-intelligence-layer/src/tools/phase5-governance/apg-doc/index.ts +1043 -0
  158. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/component-detection.ts +620 -0
  159. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/anatomy.ts +331 -0
  160. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/color-tokens.ts +77 -0
  161. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/properties.ts +54 -0
  162. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/snapshot.ts +287 -0
  163. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/spacing.ts +71 -0
  164. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/states.ts +43 -0
  165. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/extractors/typography.ts +71 -0
  166. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/index.ts +221 -0
  167. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/_default.ts +166 -0
  168. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/accordion.ts +232 -0
  169. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/alert.ts +234 -0
  170. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar-group.ts +270 -0
  171. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/avatar.ts +249 -0
  172. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/badge.ts +231 -0
  173. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/banner.ts +293 -0
  174. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/breadcrumb.ts +240 -0
  175. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/button.ts +243 -0
  176. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/calendar.ts +307 -0
  177. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/card.ts +143 -0
  178. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/checkbox.ts +227 -0
  179. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/chip.ts +233 -0
  180. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/combobox.ts +282 -0
  181. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/datepicker.ts +276 -0
  182. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/divider.ts +223 -0
  183. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/drawer.ts +255 -0
  184. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/dropdown-menu.ts +289 -0
  185. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/empty-state.ts +261 -0
  186. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/file-uploader.ts +290 -0
  187. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/form.ts +265 -0
  188. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/grid.ts +238 -0
  189. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/icon.ts +255 -0
  190. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/index.ts +128 -0
  191. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/inline-edit.ts +286 -0
  192. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/inline-message.ts +255 -0
  193. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/input.ts +330 -0
  194. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/link.ts +247 -0
  195. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/list.ts +250 -0
  196. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/menu.ts +247 -0
  197. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/modal.ts +144 -0
  198. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/navbar.ts +264 -0
  199. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/navigation.ts +251 -0
  200. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/number-input.ts +261 -0
  201. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/pagination.ts +248 -0
  202. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/popover.ts +270 -0
  203. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/progress.ts +251 -0
  204. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/radio.ts +142 -0
  205. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/range-slider.ts +282 -0
  206. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/rating.ts +250 -0
  207. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/search.ts +258 -0
  208. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/segmented-control.ts +265 -0
  209. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/select.ts +319 -0
  210. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/skeleton.ts +256 -0
  211. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/slider.ts +232 -0
  212. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/spinner.ts +239 -0
  213. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/status-dot.ts +252 -0
  214. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/stepper.ts +270 -0
  215. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/table.ts +244 -0
  216. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tabs.ts +143 -0
  217. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tag.ts +243 -0
  218. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/textarea.ts +259 -0
  219. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/time-picker.ts +293 -0
  220. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toast.ts +144 -0
  221. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toggle.ts +289 -0
  222. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/toolbar.ts +267 -0
  223. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/tooltip.ts +232 -0
  224. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/treeview.ts +257 -0
  225. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/knowledge/typography.ts +319 -0
  226. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/legacy-compat.ts +121 -0
  227. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/anatomy-diagram.ts +430 -0
  228. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/figma-page.ts +312 -0
  229. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/json.ts +129 -0
  230. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/markdown.ts +78 -0
  231. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/renderers/visual-doc.ts +2333 -0
  232. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/accessibility.ts +100 -0
  233. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/anatomy.ts +32 -0
  234. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/color-tokens.ts +59 -0
  235. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/content-guidance.ts +18 -0
  236. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/design-tokens.ts +53 -0
  237. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/interaction-rules.ts +19 -0
  238. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/overview.ts +91 -0
  239. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/properties-api.ts +71 -0
  240. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/qa-criteria.ts +19 -0
  241. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/related-components.ts +110 -0
  242. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/responsive.ts +19 -0
  243. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/size-specs.ts +67 -0
  244. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/spacing-structure.ts +58 -0
  245. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/state-specs.ts +79 -0
  246. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/states.ts +50 -0
  247. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/type-hierarchy.ts +33 -0
  248. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/typography.ts +55 -0
  249. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/usage-guidelines.ts +73 -0
  250. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/sections/variants.ts +81 -0
  251. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec/types.ts +409 -0
  252. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/index.ts +198 -0
  253. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/renderer.ts +701 -0
  254. package/figma-intelligence-layer/src/tools/phase5-governance/component-spec-sheet/types.ts +88 -0
  255. package/figma-intelligence-layer/src/tools/phase5-governance/decision-log/index.ts +135 -0
  256. package/figma-intelligence-layer/src/tools/phase5-governance/design-decision-log/index.ts +491 -0
  257. package/figma-intelligence-layer/src/tools/phase5-governance/ds-primitives/index.ts +416 -0
  258. package/figma-intelligence-layer/src/tools/phase5-governance/ds-scaffolder/index.ts +722 -0
  259. package/figma-intelligence-layer/src/tools/phase5-governance/ds-variables/index.ts +449 -0
  260. package/figma-intelligence-layer/src/tools/phase5-governance/health-report/index.ts +393 -0
  261. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/index.ts +406 -0
  262. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/figma-page.ts +292 -0
  263. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/json.ts +24 -0
  264. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/markdown.ts +172 -0
  265. package/figma-intelligence-layer/src/tools/phase5-governance/taxonomy-docs/renderers/naming-guide.ts +409 -0
  266. package/figma-intelligence-layer/src/tools/phase5-governance/token-analytics/index.ts +594 -0
  267. package/figma-intelligence-layer/src/tools/phase5-governance/token-docs/index.ts +710 -0
  268. package/figma-intelligence-layer/src/tools/phase5-governance/token-migrate/index.ts +458 -0
  269. package/figma-intelligence-layer/src/tools/phase5-governance/token-naming/index.ts +134 -0
  270. package/figma-intelligence-layer/tests/apg-doc.test.ts +101 -0
  271. package/figma-intelligence-layer/tests/design-system-context.test.ts +152 -0
  272. package/figma-intelligence-layer/tests/design-system-matcher.test.ts +144 -0
  273. package/figma-intelligence-layer/tests/figma-bridge.test.ts +83 -0
  274. package/figma-intelligence-layer/tests/generate-image-and-insert.test.ts +56 -0
  275. package/figma-intelligence-layer/tests/screen-cloner-regression.test.ts +69 -0
  276. package/figma-intelligence-layer/tests/smoke.test.ts +174 -0
  277. package/figma-intelligence-layer/tests/spec-generator.test.ts +127 -0
  278. package/figma-intelligence-layer/tests/token-migrate.test.ts +21 -0
  279. package/figma-intelligence-layer/tests/token-naming.test.ts +30 -0
  280. package/figma-intelligence-layer/tsconfig.json +19 -0
  281. package/package.json +35 -0
  282. package/scripts/clean-existing-chunks.js +179 -0
  283. package/scripts/connect-ai-tool.js +490 -0
  284. package/scripts/convert-hub-pdfs.js +425 -0
  285. package/scripts/figma-mcp-status.js +349 -0
  286. package/scripts/register-codex-mcp.js +96 -0
@@ -0,0 +1,449 @@
1
+ import { getBridge } from "../../../shared/figma-bridge.js";
2
+ import { dsPrimitivesHandler, DsPrimitivesArgs } from "../ds-primitives/index.js";
3
+ import { SEMANTIC_TOKEN_CATALOG, type SemanticTokenEntry } from "../../../shared/semantic-token-catalog.js";
4
+
5
+ type VariableScalar = string | number | boolean;
6
+ type VariableAliasValue = { type: "VARIABLE_ALIAS"; variableId: string };
7
+ type VariableValue = VariableScalar | VariableAliasValue;
8
+
9
+ export interface DsVariableCollectionInput {
10
+ name: string;
11
+ initialModeName?: string;
12
+ modes?: string[];
13
+ }
14
+
15
+ export interface DsVariableInput {
16
+ collectionId?: string;
17
+ collectionName?: string;
18
+ name: string;
19
+ resolvedType: "COLOR" | "FLOAT" | "STRING" | "BOOLEAN";
20
+ valuesByMode: Record<string, VariableValue>;
21
+ description?: string;
22
+ }
23
+
24
+ export interface DsComponentVariableTemplate {
25
+ componentName: string;
26
+ variant?: string;
27
+ parts?: string[];
28
+ properties?: string[];
29
+ states?: string[];
30
+ }
31
+
32
+ export interface DsVariablesArgs {
33
+ action:
34
+ | "diagnose"
35
+ | "scaffold-primitives"
36
+ | "scaffold-semantics"
37
+ | "scaffold-components"
38
+ | "scaffold-all"
39
+ | "create-collections"
40
+ | "create-variables";
41
+ brandName?: string;
42
+ primaryColor?: string;
43
+ secondaryColor?: string;
44
+ neutralColor?: string;
45
+ accentColor?: string;
46
+ createDarkMode?: boolean;
47
+ createSemantics?: boolean;
48
+ collections?: DsVariableCollectionInput[];
49
+ variables?: DsVariableInput[];
50
+ componentTemplates?: DsComponentVariableTemplate[];
51
+ }
52
+
53
+ export interface DsVariablesResult {
54
+ ok: boolean;
55
+ action: DsVariablesArgs["action"];
56
+ diagnostics: Record<string, unknown>;
57
+ createdCollections: Array<{ id: string; name: string }>;
58
+ createdVariables: Array<{ id: string; name: string; resolvedType: string }>;
59
+ notes: string[];
60
+ }
61
+
62
+ interface VariableCollectionSummary {
63
+ id: string;
64
+ name: string;
65
+ modes: Array<{ modeId: string; name: string }>;
66
+ variables: Array<{ id: string; name: string; type: string }>;
67
+ }
68
+
69
+ async function getAllCollections(
70
+ bridge: Awaited<ReturnType<typeof getBridge>>
71
+ ): Promise<VariableCollectionSummary[]> {
72
+ return await bridge.getVariables(undefined, "full") as VariableCollectionSummary[];
73
+ }
74
+
75
+ function variableMapByName(collections: VariableCollectionSummary[]): Map<string, { id: string; collectionId: string }> {
76
+ const map = new Map<string, { id: string; collectionId: string }>();
77
+ for (const collection of collections) {
78
+ for (const variable of collection.variables) {
79
+ map.set(variable.name, { id: variable.id, collectionId: collection.id });
80
+ map.set(`${collection.name}::${variable.name}`, { id: variable.id, collectionId: collection.id });
81
+ }
82
+ }
83
+ return map;
84
+ }
85
+
86
+ async function ensureCollection(
87
+ bridge: Awaited<ReturnType<typeof getBridge>>,
88
+ name: string,
89
+ initialModeName = "Base",
90
+ modes: string[] = []
91
+ ): Promise<{ id: string; name: string; modes: Record<string, string> }> {
92
+ const collections = await getAllCollections(bridge);
93
+ let collection = collections.find((item) => item.name === name);
94
+
95
+ if (!collection) {
96
+ const created = await bridge.createVariableCollection(name, initialModeName) as unknown as {
97
+ id: string;
98
+ name: string;
99
+ modes: Array<{ modeId: string; name: string }>;
100
+ };
101
+ collection = {
102
+ id: created.id,
103
+ name: created.name,
104
+ modes: created.modes,
105
+ variables: [],
106
+ };
107
+ }
108
+
109
+ const refreshed = await getAllCollections(bridge);
110
+ const current = refreshed.find((item) => item.id === collection!.id || item.name === name);
111
+ if (!current) throw new Error(`Failed to load collection: ${name}`);
112
+
113
+ const modeMap = Object.fromEntries(current.modes.map((mode) => [mode.name, mode.modeId]));
114
+ for (const modeName of [initialModeName, ...modes]) {
115
+ if (!modeMap[modeName]) {
116
+ const created = await bridge.addMode(current.id, modeName) as { modeId: string; modeName: string };
117
+ modeMap[created.modeName] = created.modeId;
118
+ }
119
+ }
120
+
121
+ return { id: current.id, name: current.name, modes: modeMap };
122
+ }
123
+
124
+ function makeAlias(variableId: string): VariableAliasValue {
125
+ return { type: "VARIABLE_ALIAS", variableId };
126
+ }
127
+
128
+ function requireVariable(
129
+ variableIndex: Map<string, { id: string; collectionId: string }>,
130
+ name: string
131
+ ): string {
132
+ const found = variableIndex.get(name);
133
+ if (!found) {
134
+ throw new Error(`Required variable not found: ${name}`);
135
+ }
136
+ return found.id;
137
+ }
138
+
139
+ function buildSemanticVariableSpecs(
140
+ brandName: string,
141
+ variableIndex: Map<string, { id: string; collectionId: string }>,
142
+ createDarkMode: boolean
143
+ ): DsVariableInput[] {
144
+ const specs: DsVariableInput[] = [];
145
+
146
+ const tryAlias = (ref: string): VariableValue | null => {
147
+ const found = variableIndex.get(ref);
148
+ if (found) return makeAlias(found.id);
149
+ return null;
150
+ };
151
+
152
+ const lightDark = (lightRef: string, darkRef: string): Record<string, VariableValue> => {
153
+ const lightAlias = tryAlias(lightRef);
154
+ if (!lightAlias) return {}; // skip if primitive not found
155
+ const values: Record<string, VariableValue> = { Light: lightAlias };
156
+ if (createDarkMode) {
157
+ const darkAlias = tryAlias(darkRef);
158
+ if (darkAlias) values.Dark = darkAlias;
159
+ }
160
+ return values;
161
+ };
162
+
163
+ const baseOnly = (ref: string): Record<string, VariableValue> => {
164
+ const alias = tryAlias(ref);
165
+ if (!alias) return {};
166
+ return { Base: alias };
167
+ };
168
+
169
+ // Category → Figma collection mapping (forward-compatible: add a line for new categories)
170
+ const CATEGORY_COLLECTION: Record<string, string> = {
171
+ // Color categories
172
+ actions: "Semantic Colors", surface: "Semantic Colors", text: "Semantic Colors",
173
+ border: "Semantic Colors", field: "Semantic Colors", feedback: "Semantic Colors",
174
+ focus: "Semantic Colors", interactive: "Semantic Colors",
175
+ // Float / String categories
176
+ spacing: "Semantic Space", radius: "Semantic Radius",
177
+ elevation: "Semantic Elevation", motion: "Semantic Motion",
178
+ "z-index": "Semantic Layout", opacity: "Semantic Opacity",
179
+ "border-width": "Semantic Border", typography: "Semantic Typography",
180
+ "icon-size": "Semantic Icon", breakpoint: "Semantic Layout",
181
+ grid: "Semantic Layout", density: "Semantic Density",
182
+ };
183
+
184
+ // Iterate the full semantic token catalog
185
+ for (const entry of SEMANTIC_TOKEN_CATALOG) {
186
+ const collectionSuffix = CATEGORY_COLLECTION[entry.category] ?? "Semantic Colors";
187
+ const collectionName = `${brandName} ${collectionSuffix}`;
188
+
189
+ // Convert token name to dot-notation for variable name
190
+ const varName = entry.name.replace(/\//g, ".");
191
+
192
+ const resolvedType = entry.type === "COLOR" ? "COLOR" : entry.type === "STRING" ? "STRING" : "FLOAT";
193
+
194
+ if (entry.type === "COLOR") {
195
+ const valuesByMode = lightDark(entry.lightRef, entry.darkRef);
196
+ if (Object.keys(valuesByMode).length === 0) continue;
197
+ specs.push({
198
+ collectionName,
199
+ name: varName,
200
+ resolvedType,
201
+ valuesByMode,
202
+ description: entry.description,
203
+ });
204
+ } else {
205
+ const valuesByMode = baseOnly(entry.lightRef);
206
+ if (Object.keys(valuesByMode).length === 0) continue;
207
+ specs.push({
208
+ collectionName,
209
+ name: varName,
210
+ resolvedType,
211
+ valuesByMode,
212
+ description: entry.description,
213
+ });
214
+ }
215
+ }
216
+
217
+ // Also add typography semantic aliases
218
+ const typoAliases: Array<[string, string, string]> = [
219
+ ["typography.body.md.size", "typography/size/md", "Body medium font size"],
220
+ ["typography.body.md.line-height", "typography/line-height/md", "Body medium line height"],
221
+ ["typography.body.sm.size", "typography/size/sm", "Body small font size"],
222
+ ["typography.body.sm.line-height", "typography/line-height/sm", "Body small line height"],
223
+ ["typography.heading.h3.size", "typography/size/2xl", "Heading h3 font size"],
224
+ ["typography.heading.h3.line-height", "typography/line-height/2xl", "Heading h3 line height"],
225
+ ["typography.label.md.size", "typography/size/sm", "Label medium font size"],
226
+ ["typography.label.md.weight", "typography/weight/medium", "Label medium font weight"],
227
+ ["typography.label.sm.size", "typography/size/xs", "Label small font size"],
228
+ ["typography.label.sm.weight", "typography/weight/medium", "Label small font weight"],
229
+ ];
230
+
231
+ for (const [name, ref, desc] of typoAliases) {
232
+ const valuesByMode = baseOnly(ref);
233
+ if (Object.keys(valuesByMode).length === 0) continue;
234
+ specs.push({
235
+ collectionName: `${brandName} Semantic Typography`,
236
+ name,
237
+ resolvedType: "FLOAT",
238
+ valuesByMode,
239
+ description: desc,
240
+ });
241
+ }
242
+
243
+ return specs;
244
+ }
245
+
246
+ function buildComponentVariableSpecs(
247
+ brandName: string,
248
+ variableIndex: Map<string, { id: string; collectionId: string }>,
249
+ templates: DsComponentVariableTemplate[]
250
+ ): DsVariableInput[] {
251
+ const items: DsVariableInput[] = [];
252
+ const colorBg = makeAlias(requireVariable(variableIndex, `${brandName} Semantic Colors::color.actions.primary.background.default`));
253
+ const colorText = makeAlias(requireVariable(variableIndex, `${brandName} Semantic Colors::color.actions.primary.text.default`));
254
+ const radius = makeAlias(requireVariable(variableIndex, `${brandName} Semantic Radius::radius.field.all.default`));
255
+ const space = makeAlias(requireVariable(variableIndex, `${brandName} Semantic Space::space.inset.control.md`));
256
+
257
+ for (const template of templates) {
258
+ const parts = template.parts?.length ? template.parts : ["container", "label"];
259
+ const properties = template.properties?.length ? template.properties : ["background", "text", "radius", "padding-x"];
260
+ const states = template.states?.length ? template.states : ["default", "hover", "disabled"];
261
+
262
+ for (const part of parts) {
263
+ for (const property of properties) {
264
+ for (const state of states) {
265
+ const nameParts = ["components", template.componentName];
266
+ if (template.variant) nameParts.push(template.variant);
267
+ nameParts.push(part, property, state);
268
+ const name = nameParts.join(".");
269
+
270
+ let resolvedType: DsVariableInput["resolvedType"] = "COLOR";
271
+ let valuesByMode: Record<string, VariableValue> = { Base: colorBg };
272
+
273
+ if (property.includes("text")) {
274
+ resolvedType = "COLOR";
275
+ valuesByMode = { Base: colorText };
276
+ } else if (property.includes("radius")) {
277
+ resolvedType = "FLOAT";
278
+ valuesByMode = { Base: radius };
279
+ } else if (property.includes("padding") || property.includes("gap")) {
280
+ resolvedType = "FLOAT";
281
+ valuesByMode = { Base: space };
282
+ }
283
+
284
+ items.push({
285
+ collectionName: `${brandName} Component Tokens`,
286
+ name,
287
+ resolvedType,
288
+ valuesByMode,
289
+ });
290
+ }
291
+ }
292
+ }
293
+ }
294
+
295
+ return items;
296
+ }
297
+
298
+ async function createVariablesFromSpec(
299
+ bridge: Awaited<ReturnType<typeof getBridge>>,
300
+ specs: DsVariableInput[]
301
+ ): Promise<Array<{ id: string; name: string; resolvedType: string }>> {
302
+ const created: Array<{ id: string; name: string; resolvedType: string }> = [];
303
+
304
+ for (const spec of specs) {
305
+ let collectionId = spec.collectionId;
306
+ if (!collectionId) {
307
+ if (!spec.collectionName) {
308
+ throw new Error(`Variable ${spec.name} is missing collectionId or collectionName`);
309
+ }
310
+ const collection = await ensureCollection(bridge, spec.collectionName, Object.keys(spec.valuesByMode)[0] ?? "Base");
311
+ collectionId = collection.id;
312
+
313
+ const translatedValues = Object.fromEntries(
314
+ Object.entries(spec.valuesByMode).map(([modeName, value]) => {
315
+ const modeId = collection.modes[modeName] ?? collection.modes.Base ?? collection.modes.Light;
316
+ if (!modeId) {
317
+ throw new Error(`Mode ${modeName} not found in collection ${collection.name}`);
318
+ }
319
+ return [modeId, value];
320
+ })
321
+ );
322
+
323
+ const result = await bridge.createVariable(
324
+ spec.name,
325
+ collectionId,
326
+ spec.resolvedType,
327
+ translatedValues,
328
+ spec.description
329
+ ) as { id: string; name: string; resolvedType: string };
330
+ created.push(result);
331
+ continue;
332
+ }
333
+
334
+ const result = await bridge.createVariable(
335
+ spec.name,
336
+ collectionId,
337
+ spec.resolvedType,
338
+ spec.valuesByMode,
339
+ spec.description
340
+ ) as { id: string; name: string; resolvedType: string };
341
+ created.push(result);
342
+ }
343
+
344
+ return created;
345
+ }
346
+
347
+ export async function dsVariablesHandler(args: DsVariablesArgs): Promise<DsVariablesResult> {
348
+ const bridge = await getBridge();
349
+ const diagnostics = await bridge.getCapabilities();
350
+
351
+ if (args.action === "diagnose") {
352
+ return {
353
+ ok: true,
354
+ action: args.action,
355
+ diagnostics,
356
+ createdCollections: [],
357
+ createdVariables: [],
358
+ notes: [],
359
+ };
360
+ }
361
+
362
+ if (!diagnostics.variablesApi || !diagnostics.localVariablesApi) {
363
+ return {
364
+ ok: false,
365
+ action: args.action,
366
+ diagnostics,
367
+ createdCollections: [],
368
+ createdVariables: [],
369
+ notes: ["Variables API is unavailable in the current plugin runtime."],
370
+ };
371
+ }
372
+
373
+ const brandName = args.brandName ?? "Design System";
374
+ const createdCollections: Array<{ id: string; name: string }> = [];
375
+ const createdVariables: Array<{ id: string; name: string; resolvedType: string }> = [];
376
+ const notes: string[] = [];
377
+
378
+ if (args.action === "scaffold-primitives" || args.action === "scaffold-all") {
379
+ const primitiveResult = await dsPrimitivesHandler({
380
+ brandName,
381
+ primaryColor: args.primaryColor,
382
+ secondaryColor: args.secondaryColor,
383
+ neutralColor: args.neutralColor,
384
+ accentColor: args.accentColor,
385
+ createSemantics: args.createSemantics,
386
+ createDarkMode: args.createDarkMode,
387
+ } as DsPrimitivesArgs);
388
+ createdCollections.push(...primitiveResult.collectionsCreated.map(({ id, name }) => ({ id, name })));
389
+ notes.push("Primitive collections scaffolded.");
390
+ }
391
+
392
+ if (args.action === "create-collections") {
393
+ for (const collectionSpec of args.collections ?? []) {
394
+ const ensured = await ensureCollection(
395
+ bridge,
396
+ collectionSpec.name,
397
+ collectionSpec.initialModeName ?? "Base",
398
+ collectionSpec.modes ?? []
399
+ );
400
+ createdCollections.push({ id: ensured.id, name: ensured.name });
401
+ }
402
+ }
403
+
404
+ if (args.action === "create-variables") {
405
+ createdVariables.push(...await createVariablesFromSpec(bridge, args.variables ?? []));
406
+ }
407
+
408
+ if (args.action === "scaffold-semantics" || args.action === "scaffold-all") {
409
+ await ensureCollection(bridge, `${brandName} Semantic Colors`, "Light", args.createDarkMode === false ? [] : ["Dark"]);
410
+ await ensureCollection(bridge, `${brandName} Semantic Space`, "Base");
411
+ await ensureCollection(bridge, `${brandName} Semantic Radius`, "Base");
412
+ await ensureCollection(bridge, `${brandName} Semantic Typography`, "Base");
413
+ await ensureCollection(bridge, `${brandName} Semantic Elevation`, "Base");
414
+ await ensureCollection(bridge, `${brandName} Semantic Motion`, "Base");
415
+ await ensureCollection(bridge, `${brandName} Semantic Layout`, "Base");
416
+ await ensureCollection(bridge, `${brandName} Semantic Opacity`, "Base");
417
+ await ensureCollection(bridge, `${brandName} Semantic Border`, "Base");
418
+ await ensureCollection(bridge, `${brandName} Semantic Icon`, "Base");
419
+ await ensureCollection(bridge, `${brandName} Semantic Density`, "Base");
420
+
421
+ const variableIndex = variableMapByName(await getAllCollections(bridge));
422
+ const semanticSpecs = buildSemanticVariableSpecs(brandName, variableIndex, args.createDarkMode !== false);
423
+ createdVariables.push(...await createVariablesFromSpec(bridge, semanticSpecs));
424
+ notes.push("Semantic collections scaffolded with primitive aliases.");
425
+ }
426
+
427
+ if (args.action === "scaffold-components" || args.action === "scaffold-all") {
428
+ await ensureCollection(bridge, `${brandName} Component Tokens`, "Base");
429
+ const variableIndex = variableMapByName(await getAllCollections(bridge));
430
+ const templates = args.componentTemplates?.length
431
+ ? args.componentTemplates
432
+ : [
433
+ { componentName: "button", variant: "primary" },
434
+ { componentName: "input", variant: "default", parts: ["container", "label", "text"], properties: ["background", "text", "radius", "padding-x"], states: ["default", "focus", "disabled"] },
435
+ ];
436
+ const componentSpecs = buildComponentVariableSpecs(brandName, variableIndex, templates);
437
+ createdVariables.push(...await createVariablesFromSpec(bridge, componentSpecs));
438
+ notes.push("Component token collection scaffolded with semantic aliases.");
439
+ }
440
+
441
+ return {
442
+ ok: true,
443
+ action: args.action,
444
+ diagnostics,
445
+ createdCollections,
446
+ createdVariables,
447
+ notes,
448
+ };
449
+ }