@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,58 @@
1
+ /**
2
+ * Spacing & Structure section — layout info, dimensions, padding, gaps
3
+ */
4
+ import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
5
+
6
+ export function buildSpacingSection(data: ExtractionResult): SpecSectionOutput {
7
+ const { spacing, snapshot } = data;
8
+ const blocks: SpecSectionContent[] = [];
9
+
10
+ // Root component structure
11
+ blocks.push({
12
+ kind: "key-value",
13
+ entries: [
14
+ { label: "Root layout", value: snapshot.layoutMode === "NONE" ? "Absolute (no auto layout)" : `${snapshot.layoutMode} auto layout` },
15
+ { label: "Dimensions", value: `${Math.round(snapshot.width)} × ${Math.round(snapshot.height)} px` },
16
+ { label: "Padding", value: `${snapshot.paddingTop} / ${snapshot.paddingRight} / ${snapshot.paddingBottom} / ${snapshot.paddingLeft} (T/R/B/L)` },
17
+ { label: "Item spacing", value: `${snapshot.itemSpacing}px` },
18
+ ],
19
+ });
20
+
21
+ // Child spacing table
22
+ if (spacing.length > 0) {
23
+ blocks.push({
24
+ kind: "table",
25
+ headers: ["Element", "Layout", "W × H", "Padding (T/R/B/L)", "Gap", "Sizing (H/V)"],
26
+ rows: spacing.slice(0, 20).map((entry) => [
27
+ entry.element,
28
+ entry.layoutMode,
29
+ `${entry.width} × ${entry.height}`,
30
+ `${entry.paddingTop}/${entry.paddingRight}/${entry.paddingBottom}/${entry.paddingLeft}`,
31
+ `${entry.itemSpacing}px`,
32
+ `${entry.layoutSizingH} / ${entry.layoutSizingV}`,
33
+ ]),
34
+ });
35
+ }
36
+
37
+ // Layout guidance
38
+ if (snapshot.layoutMode === "NONE") {
39
+ blocks.push({
40
+ kind: "paragraph",
41
+ text: "This component uses absolute positioning instead of auto layout. Consider converting to auto layout for responsive behavior, consistent spacing, and easier maintenance.",
42
+ });
43
+ }
44
+
45
+ // Knowledge-based structure rules
46
+ if (data.knowledge?.structureRules && data.knowledge.structureRules.length > 0) {
47
+ blocks.push({
48
+ kind: "rules",
49
+ items: data.knowledge.structureRules,
50
+ });
51
+ }
52
+
53
+ return {
54
+ id: "spacing",
55
+ title: "Structure & Layout",
56
+ content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
57
+ };
58
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * State Specifications section — rich state descriptions merged from knowledge
3
+ */
4
+ import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
5
+
6
+ export function buildStateSpecsSection(data: ExtractionResult): SpecSectionOutput | null {
7
+ const { states, knowledge } = data;
8
+ if (!knowledge || knowledge.stateSpecifications.length === 0) return null;
9
+
10
+ const blocks: SpecSectionContent[] = [];
11
+
12
+ // Build a lookup from knowledge state entries
13
+ const knowledgeLookup = new Map(
14
+ knowledge.stateSpecifications.map((s) => [s.state.toLowerCase(), s])
15
+ );
16
+
17
+ // If we have detected Figma states, merge with knowledge
18
+ if (states.states.length > 0) {
19
+ const detectedNames = states.states.map((s) => s.name);
20
+ const rows: Record<string, string>[] = [];
21
+
22
+ for (const name of detectedNames) {
23
+ const kEntry = knowledgeLookup.get(name.toLowerCase());
24
+ rows.push({
25
+ state: name,
26
+ visualChange: kEntry?.visualChange ?? "See component definition",
27
+ opacity: kEntry?.opacity ?? "100% (1.0)",
28
+ cursorWeb: kEntry?.cursorWeb ?? "default",
29
+ usage: kEntry?.usage ?? "",
30
+ });
31
+ }
32
+
33
+ // Add knowledge-only states that were expected but not detected
34
+ for (const kState of knowledge.stateSpecifications) {
35
+ const alreadyIncluded = detectedNames.some(
36
+ (n) => n.toLowerCase() === kState.state.toLowerCase()
37
+ );
38
+ if (!alreadyIncluded) {
39
+ rows.push({
40
+ state: `${kState.state} (expected)`,
41
+ visualChange: kState.visualChange,
42
+ opacity: kState.opacity,
43
+ cursorWeb: kState.cursorWeb,
44
+ usage: kState.usage,
45
+ });
46
+ }
47
+ }
48
+
49
+ blocks.push({
50
+ kind: "structured-data",
51
+ columns: ["state", "visualChange", "opacity", "cursorWeb", "usage"],
52
+ rows,
53
+ });
54
+ } else {
55
+ // No Figma states detected — output full knowledge as recommended spec
56
+ blocks.push({
57
+ kind: "structured-data",
58
+ columns: ["state", "visualChange", "opacity", "cursorWeb", "usage"],
59
+ rows: knowledge.stateSpecifications.map((s) => ({
60
+ state: `${s.state} (recommended)`,
61
+ visualChange: s.visualChange,
62
+ opacity: s.opacity,
63
+ cursorWeb: s.cursorWeb,
64
+ usage: s.usage,
65
+ })),
66
+ });
67
+
68
+ blocks.push({
69
+ kind: "paragraph",
70
+ text: "No explicit state variants detected in the Figma component. The states listed above are recommended for this component type.",
71
+ });
72
+ }
73
+
74
+ return {
75
+ id: "state-specs",
76
+ title: "State Specifications",
77
+ content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
78
+ };
79
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * States section — detected interaction states
3
+ */
4
+ import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
5
+
6
+ export function buildStatesSection(data: ExtractionResult): SpecSectionOutput {
7
+ const { states, snapshot } = data;
8
+ const blocks: SpecSectionContent[] = [];
9
+
10
+ if (states.states.length > 0) {
11
+ blocks.push({
12
+ kind: "table",
13
+ headers: ["State", "Source", "Axis / Property"],
14
+ rows: states.states.map((s) => [s.name, s.source, s.axisName || "—"]),
15
+ });
16
+ }
17
+
18
+ // Generate expected states based on component type
19
+ const isInteractive = /button|btn|input|field|toggle|switch|checkbox|radio|tab|link|select|slider/i.test(snapshot.name);
20
+ if (isInteractive) {
21
+ const expectedStates = ["Default", "Hover", "Pressed", "Focused", "Disabled"];
22
+ const detectedNames = states.states.map((s) => s.name.toLowerCase());
23
+ const missing = expectedStates.filter((s) => !detectedNames.some((d) => d.includes(s.toLowerCase())));
24
+
25
+ if (missing.length > 0 && states.states.length > 0) {
26
+ blocks.push({
27
+ kind: "paragraph",
28
+ text: `Potentially missing states for an interactive component: ${missing.join(", ")}. Review whether these states are needed for this component.`,
29
+ });
30
+ }
31
+
32
+ if (states.states.length === 0) {
33
+ blocks.push({
34
+ kind: "paragraph",
35
+ text: `This appears to be an interactive component but no explicit state variants were detected. Expected states for interactive components include: ${expectedStates.join(", ")}. Consider adding a "State" variant axis to support these interaction states.`,
36
+ });
37
+ }
38
+ } else if (states.states.length === 0) {
39
+ blocks.push({
40
+ kind: "paragraph",
41
+ text: "No explicit interaction states detected. This component appears to be a static/presentational element. If it needs interaction states, add a variant axis named \"State\" with values like Default, Hover, Pressed, Focused, Disabled.",
42
+ });
43
+ }
44
+
45
+ return {
46
+ id: "states",
47
+ title: "States",
48
+ content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
49
+ };
50
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Type Hierarchy & Emphasis section — typography rules from knowledge + extracted data
3
+ */
4
+ import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
5
+
6
+ export function buildTypeHierarchySection(data: ExtractionResult): SpecSectionOutput | null {
7
+ const { knowledge, typography } = data;
8
+ if (!knowledge || knowledge.typeHierarchyRules.length === 0) return null;
9
+
10
+ const blocks: SpecSectionContent[] = [];
11
+
12
+ blocks.push({
13
+ kind: "rules",
14
+ items: knowledge.typeHierarchyRules,
15
+ });
16
+
17
+ // Add observed typography summary if available
18
+ if (typography.length > 0) {
19
+ const fontFamilies = [...new Set(typography.map((t) => `${t.fontFamily} ${t.fontStyle}`))];
20
+ const fontSizes = [...new Set(typography.map((t) => t.fontSize))].sort((a, b) => a - b);
21
+
22
+ blocks.push({
23
+ kind: "paragraph",
24
+ text: `Observed in component: ${fontFamilies.join(", ")}. Size range: ${fontSizes[0]}px–${fontSizes[fontSizes.length - 1]}px.`,
25
+ });
26
+ }
27
+
28
+ return {
29
+ id: "type-hierarchy",
30
+ title: "Type Hierarchy & Emphasis",
31
+ content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
32
+ };
33
+ }
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Typography section — text style specifications with guidance
3
+ */
4
+ import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
5
+
6
+ export function buildTypographySection(data: ExtractionResult): SpecSectionOutput {
7
+ const { typography, snapshot } = data;
8
+ const blocks: SpecSectionContent[] = [];
9
+
10
+ if (typography.length > 0) {
11
+ blocks.push({
12
+ kind: "table",
13
+ headers: ["Element", "Content", "Font", "Size", "Line Height", "Token"],
14
+ rows: typography.map((entry) => [
15
+ entry.element,
16
+ entry.characters.length > 40 ? entry.characters.slice(0, 37) + "…" : entry.characters || "—",
17
+ `${entry.fontFamily} ${entry.fontStyle}`,
18
+ `${entry.fontSize}px`,
19
+ entry.lineHeightPx ? `${Math.round(entry.lineHeightPx)}px` : "Auto",
20
+ entry.tokenName || "—",
21
+ ]),
22
+ });
23
+
24
+ // Font summary
25
+ const fonts = [...new Set(typography.map((t) => `${t.fontFamily} ${t.fontStyle}`))];
26
+ const sizes = [...new Set(typography.map((t) => t.fontSize))].sort((a, b) => a - b);
27
+ blocks.push({
28
+ kind: "paragraph",
29
+ text: `Font families used: ${fonts.join(", ")}. Size range: ${sizes[0]}px–${sizes[sizes.length - 1]}px across ${typography.length} text layer(s).`,
30
+ });
31
+ } else if (snapshot.textLayers.length > 0) {
32
+ // Use snapshot text layers as fallback
33
+ blocks.push({
34
+ kind: "table",
35
+ headers: ["Layer", "Content", "Font", "Size"],
36
+ rows: snapshot.textLayers.map((t) => [
37
+ t.name,
38
+ t.characters.length > 40 ? t.characters.slice(0, 37) + "…" : t.characters || "—",
39
+ `${t.fontFamily} ${t.fontStyle}`,
40
+ `${t.fontSize}px`,
41
+ ]),
42
+ });
43
+ } else {
44
+ blocks.push({
45
+ kind: "paragraph",
46
+ text: `No text layers detected in "${snapshot.name}". This component is either icon-only, purely structural, or all text is inside nested sub-components.`,
47
+ });
48
+ }
49
+
50
+ return {
51
+ id: "typography",
52
+ title: "Typography",
53
+ content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
54
+ };
55
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Usage Guidelines section — do's and don'ts derived from component structure
3
+ */
4
+ import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
5
+
6
+ export function buildUsageSection(data: ExtractionResult): SpecSectionOutput {
7
+ const { snapshot, properties, anatomy, states, colorTokens, knowledge } = data;
8
+
9
+ // If knowledge provides curated dos/donts, use those as the base
10
+ const dos: string[] = knowledge?.dos ? [...knowledge.dos] : [];
11
+ const donts: string[] = knowledge?.donts ? [...knowledge.donts] : [];
12
+
13
+ // Only add generated guidance when knowledge doesn't provide curated content
14
+ if (!knowledge?.dos || knowledge.dos.length === 0) {
15
+ // Token-based guidance
16
+ const hasTokens = colorTokens.some((t) => t.tokenName);
17
+ if (hasTokens) {
18
+ dos.push("Use the bound design tokens for all colors — never hardcode hex values.");
19
+ } else if (colorTokens.length > 0) {
20
+ donts.push("Hardcoded colors detected — bind all fills and strokes to design tokens before publishing.");
21
+ }
22
+
23
+ // Variant-based guidance
24
+ if (properties.variantAxes.length > 0) {
25
+ dos.push(`Use the variant properties (${properties.variantAxes.map((a) => a.name).join(", ")}) to configure the component. Don't detach instances to create custom variations.`);
26
+ }
27
+
28
+ // Boolean toggle guidance
29
+ if (properties.booleanToggles.length > 0) {
30
+ dos.push(`Use boolean toggles (${properties.booleanToggles.map((t) => t.name).join(", ")}) to show/hide optional elements instead of deleting layers.`);
31
+ }
32
+
33
+ // Anatomy-based guidance
34
+ const requiredElements = anatomy.elements.filter((e) => e.role === "content-element");
35
+ if (requiredElements.length > 0) {
36
+ dos.push(`Keep required elements intact: ${requiredElements.map((e) => e.name).join(", ")}.`);
37
+ donts.push("Don't remove or hide required child elements — this breaks the component's semantic structure.");
38
+ }
39
+
40
+ const optionalSlots = anatomy.elements.filter((e) => e.role === "optional-slot");
41
+ if (optionalSlots.length > 0) {
42
+ dos.push(`Toggle optional elements (${optionalSlots.map((e) => e.name).join(", ")}) via boolean properties instead of deleting them.`);
43
+ }
44
+
45
+ // State-based guidance
46
+ if (states.states.length > 0) {
47
+ dos.push(`Support all defined states (${states.states.map((s) => s.name).join(", ")}) in your implementation.`);
48
+ donts.push("Don't create undocumented state variations — extend the variant set formally if new states are needed.");
49
+ }
50
+
51
+ // Layout-based guidance
52
+ if (snapshot.layoutMode !== "NONE") {
53
+ dos.push("Preserve auto layout settings when overriding content — don't switch to absolute positioning.");
54
+ dos.push(`Maintain the ${snapshot.itemSpacing}px gap between child elements.`);
55
+ }
56
+
57
+ // Instance swap guidance
58
+ if (properties.instanceSwaps.length > 0) {
59
+ dos.push(`Use instance swap properties for ${properties.instanceSwaps.map((s) => s.name).join(", ")} — only swap in compatible component types.`);
60
+ donts.push("Don't replace swap slots with unrelated components that break the visual or semantic contract.");
61
+ }
62
+
63
+ // General best practices
64
+ dos.push("Test the component in both light and dark themes before publishing.");
65
+ donts.push("Don't override internal padding or spacing values — use the component's built-in sizing properties.");
66
+ }
67
+
68
+ return {
69
+ id: "usage",
70
+ title: "Usage Guidelines",
71
+ content: { kind: "do-dont", dos, donts },
72
+ };
73
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Variants section — variant axes, boolean toggles, instance swaps, variant matrix
3
+ */
4
+ import type { ExtractionResult, SpecSectionOutput, SpecSectionContent } from "../types.js";
5
+
6
+ export function buildVariantsSection(data: ExtractionResult): SpecSectionOutput | null {
7
+ const { properties, snapshot } = data;
8
+ const blocks: SpecSectionContent[] = [];
9
+
10
+ // Variant axes table
11
+ if (properties.variantAxes.length > 0) {
12
+ blocks.push({
13
+ kind: "table",
14
+ headers: ["Axis", "Values", "Default", "Count"],
15
+ rows: properties.variantAxes.map((axis) => [
16
+ axis.name,
17
+ axis.values.join(", "),
18
+ axis.defaultValue || axis.values[0] || "—",
19
+ String(axis.values.length),
20
+ ]),
21
+ });
22
+ }
23
+
24
+ // Boolean toggles
25
+ if (properties.booleanToggles.length > 0) {
26
+ blocks.push({
27
+ kind: "table",
28
+ headers: ["Toggle", "Default", "Controls Element"],
29
+ rows: properties.booleanToggles.map((t) => [
30
+ t.name,
31
+ t.defaultValue ? "true" : "false",
32
+ t.controlsElement || "—",
33
+ ]),
34
+ });
35
+ }
36
+
37
+ // Instance swaps
38
+ if (properties.instanceSwaps.length > 0) {
39
+ blocks.push({
40
+ kind: "table",
41
+ headers: ["Swap Slot", "Current Component"],
42
+ rows: properties.instanceSwaps.map((s) => [s.name, s.currentComponentName || "—"]),
43
+ });
44
+ }
45
+
46
+ // Variant combination summary
47
+ if (properties.variantAxes.length > 0) {
48
+ const totalCombinations = properties.variantAxes.reduce((acc, a) => acc * a.values.length, 1);
49
+ const boolMultiplier = properties.booleanToggles.length > 0 ? Math.pow(2, properties.booleanToggles.length) : 1;
50
+ blocks.push({
51
+ kind: "paragraph",
52
+ text: `Total possible configurations: ${totalCombinations * boolMultiplier} (${properties.variantAxes.length} variant axes × ${properties.booleanToggles.length} boolean toggles). Defined variants in file: ${snapshot.variants.length}.`,
53
+ });
54
+ }
55
+
56
+ // Variant list (first few names)
57
+ if (snapshot.variants.length > 0 && snapshot.variants.length <= 20) {
58
+ blocks.push({
59
+ kind: "list",
60
+ items: snapshot.variants.map((v) => v.name),
61
+ });
62
+ } else if (snapshot.variants.length > 20) {
63
+ const items = snapshot.variants.slice(0, 15).map((v) => v.name);
64
+ items.push(`... and ${snapshot.variants.length - 15} more variants`);
65
+ blocks.push({ kind: "list", items });
66
+ }
67
+
68
+ if (blocks.length === 0) {
69
+ // Always produce content
70
+ blocks.push({
71
+ kind: "paragraph",
72
+ text: "This component has no variant axes, boolean toggles, or instance swap slots defined. It is a single-configuration component. Consider adding variant properties (e.g., Size, State, Style) if this component needs multiple configurations for different use cases.",
73
+ });
74
+ }
75
+
76
+ return {
77
+ id: "variants",
78
+ title: "Variants",
79
+ content: blocks.length === 1 ? blocks[0] : { kind: "mixed", blocks },
80
+ };
81
+ }