@fprad0/skill-master-mcp 0.0.11 → 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 (337) hide show
  1. package/CHANGELOG.md +96 -83
  2. package/README.md +472 -443
  3. package/VERSION.md +9 -9
  4. package/bin/lib/bootstrap-global-core.mjs +34 -0
  5. package/bin/lib/client-config.mjs +293 -268
  6. package/bin/lib/doctor-core.mjs +202 -0
  7. package/bin/lib/menu-core.mjs +1629 -1154
  8. package/bin/lib/operation-result.mjs +59 -0
  9. package/bin/lib/register-clients-core.mjs +247 -0
  10. package/bin/lib/skill-installation.mjs +215 -0
  11. package/bin/lib/update-cli-core.mjs +117 -0
  12. package/bin/skill-master-activation.mjs +163 -163
  13. package/bin/skill-master-bootstrap-global.mjs +61 -49
  14. package/bin/skill-master-configure-private-registry.mjs +3 -3
  15. package/bin/skill-master-doctor.mjs +239 -181
  16. package/bin/skill-master-eval-activation.mjs +32 -32
  17. package/bin/skill-master-install-global-skills.mjs +59 -97
  18. package/bin/skill-master-install-project-skills.mjs +97 -0
  19. package/bin/skill-master-menu.mjs +406 -320
  20. package/bin/skill-master-register-clients.mjs +232 -98
  21. package/bin/skill-master-success-skills.mjs +307 -307
  22. package/bin/skill-master-update.mjs +121 -72
  23. package/bin/skill-master.mjs +3 -3
  24. package/dist/activation.d.ts.map +1 -1
  25. package/dist/activation.js +12 -0
  26. package/dist/activation.js.map +1 -1
  27. package/dist/prompt-router.d.ts.map +1 -1
  28. package/dist/prompt-router.js +19 -0
  29. package/dist/prompt-router.js.map +1 -1
  30. package/dist/recommender.d.ts.map +1 -1
  31. package/dist/recommender.js +4 -1
  32. package/dist/recommender.js.map +1 -1
  33. package/docs/architecture/APRENDIZADO_DE_IMPLEMENTACOES_BEM_SUCEDIDAS.md +125 -125
  34. package/docs/architecture/ARQUITETURA_AUTO_UPDATE.md +9 -9
  35. package/docs/architecture/PLANO_MASTER_ACIONAMENTO_AUTOMATICO_E_APRENDIZADO.md +341 -341
  36. package/docs/architecture/REDE_SEGURA_DE_SKILLS.md +148 -148
  37. package/docs/operations/GUIA_MULTI_COMPUTADOR.md +262 -255
  38. package/docs/operations/GUIA_NPM_PRIVADO.md +294 -294
  39. package/docs/operations/GUIA_NPM_PUBLICO.md +147 -147
  40. package/docs/operations/MENU_VISUAL_EVIDENCE_2026-06-28.md +66 -0
  41. package/docs/operations/assets/menu-frame-compact.html +76 -0
  42. package/docs/operations/assets/menu-frame-compact.png +0 -0
  43. package/docs/operations/assets/menu-frame-large.html +84 -0
  44. package/docs/operations/assets/menu-frame-large.png +0 -0
  45. package/docs/operations/assets/menu-frame-running.html +80 -0
  46. package/docs/operations/assets/menu-frame-running.png +0 -0
  47. package/docs/operations/cross-platform-auth-transfer/ANALISE_COMPATIBILIDADE_MCP_2026-06-28.md +140 -0
  48. package/docs/operations/cross-platform-auth-transfer/README_TRANSFERENCIA.md +85 -0
  49. package/docs/operations/reborn-menu-cyberpunk-transfer/ANALISE_MENU_REBORN_CYBERPUNK_2026-06-28.md +174 -0
  50. package/docs/operations/reborn-menu-cyberpunk-transfer/HANDOFF_IMPLEMENTACAO_REBORN_CYBERPUNK_2026-06-28.md +119 -0
  51. package/docs/operations/reborn-menu-cyberpunk-transfer/ORDEM_DE_EXECUCAO_MENU_REBORN_CYBERPUNK.md +134 -0
  52. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA.md +84 -0
  53. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA_REBORN_PACKAGE.md +56 -0
  54. package/docs/operations/reborn-menu-cyberpunk-transfer/references/cyan-hud-frame-sheet.jpg +0 -0
  55. package/docs/operations/reborn-menu-cyberpunk-transfer/references/cyberpunk-pattern-sheet.jpg +0 -0
  56. package/docs/operations/reborn-menu-cyberpunk-transfer/references/fluid-workflow-windows.gif +0 -0
  57. package/docs/operations/token-economy-transfer/ANALISE_AVANCADA_ECONOMIA_TOKENS_2026-06-30.md +141 -0
  58. package/docs/operations/token-economy-transfer/PLANO_DEV_SENIOR_MASTER_TOKEN_ECONOMY_2026-06-30.md +171 -0
  59. package/docs/operations/token-economy-transfer/README_TRANSFERENCIA_TOKEN_ECONOMY.md +31 -0
  60. package/docs/planning/MENU_RUNTIME_CORRECTION_PLAN_2026-06-30.md +551 -0
  61. package/docs/planning/V0_0_9_APROVACAO_CRITICA_MENSAGENS_DE_VENDA.md +85 -85
  62. package/docs/planning/V0_0_9_FONTES_E_CRITERIOS_DE_AUTORIDADE.md +139 -139
  63. package/docs/planning/V0_0_9_MATRIZ_SKILLS_MULTIDISCIPLINARES.md +105 -105
  64. package/docs/planning/V0_0_9_POLITICA_MORAL_CATOLICA_PARA_IA.md +181 -181
  65. package/docs/planning/V0_0_9_PROMPTS_EXECUCAO.md +59 -59
  66. package/docs/planning/V0_0_9_ROADMAP_DISCERNIMENTO_E_CONHECIMENTO_AMPLO.md +181 -181
  67. package/docs/prompt-tasks/PROMPT_TASK_001_BOOTSTRAP_SKILL_MASTER_MCP.md +6 -0
  68. package/docs/prompt-tasks/PROMPT_TASK_002_AUTO_UPDATE_LAUNCHER.md +6 -0
  69. package/docs/prompt-tasks/PROMPT_TASK_003_REMOTE_MANIFEST_AND_RELEASES.md +6 -0
  70. package/docs/prompt-tasks/PROMPT_TASK_004_MULTI_USER_DISTRIBUTION.md +6 -0
  71. package/docs/prompt-tasks/PROMPT_TASK_005_SECURITY_AND_QUALITY_GATE.md +6 -0
  72. package/docs/prompt-tasks/PROMPT_TASK_006_MASTER_ACIONAMENTO_APRENDIZADO.md +83 -0
  73. package/docs/prompt-tasks/PROMPT_TASK_007_PERSONA_ORQUESTRADORA.md +88 -0
  74. package/docs/prompt-tasks/PROMPT_TASK_008_PROMPT_ROUTER_MODOS_ATIVACAO.md +156 -0
  75. package/docs/prompt-tasks/PROMPT_TASK_009_PIPELINE_APRENDIZADO_SUCESSO.md +105 -0
  76. package/docs/prompt-tasks/PROMPT_TASK_010_EVALS_GOVERNANCA_ATIVACAO.md +119 -0
  77. package/docs/prompt-tasks/PROMPT_TASK_011_MENU_NOTIFICACOES_NOTION.md +120 -0
  78. package/docs/prompt-tasks/PROMPT_TASK_012_MENU_CYBERPUNK_PIXEL_FRAME.md +123 -0
  79. package/docs/prompt-tasks/PROMPT_TASK_013_MENU_FLUID_DNA_ANIMATION.md +114 -0
  80. package/docs/prompt-tasks/PROMPT_TASK_014_MENU_FUNCTIONAL_PARITY_QA.md +157 -0
  81. package/docs/prompt-tasks/PROMPT_TASK_015_TRANSFER_RELEASE_HANDOFF.md +127 -0
  82. package/docs/prompt-tasks/PROMPT_TASK_016_CROSS_PLATFORM_MCP_AUTH_REGISTRATION.md +107 -0
  83. package/docs/prompt-tasks/PROMPT_TASK_018_NPM_PUBLISH_2FA_SETUP.md +80 -0
  84. package/docs/prompt-tasks/PROMPT_TASK_019_TOKEN_ECONOMY_GLOBAL_SKILLS.md +56 -0
  85. package/docs/prompt-tasks/PROMPT_TASK_MASTER_EXECUTOR.md +6 -0
  86. package/docs/skill-candidates/v0.0.10/cli-creator/LICENSE.txt +201 -201
  87. package/docs/skill-candidates/v0.0.10/cli-creator/SKILL.md +160 -160
  88. package/docs/skill-candidates/v0.0.10/cli-creator/agents/openai.yaml +4 -4
  89. package/docs/skill-candidates/v0.0.10/cli-creator/references/agent-cli-patterns.md +154 -154
  90. package/docs/skill-candidates/v0.0.10/developer-workstation-ops/SKILL.md +32 -32
  91. package/docs/skill-candidates/v0.0.10/figma/LICENSE.txt +1 -1
  92. package/docs/skill-candidates/v0.0.10/figma/SKILL.md +42 -42
  93. package/docs/skill-candidates/v0.0.10/figma/agents/openai.yaml +14 -14
  94. package/docs/skill-candidates/v0.0.10/figma/assets/figma-small.svg +3 -3
  95. package/docs/skill-candidates/v0.0.10/figma/assets/icon.svg +28 -28
  96. package/docs/skill-candidates/v0.0.10/figma/references/figma-mcp-config.md +35 -35
  97. package/docs/skill-candidates/v0.0.10/figma/references/figma-tools-and-prompts.md +34 -34
  98. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/LICENSE.TXT +1 -1
  99. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/SKILL.md +349 -349
  100. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/agents/openai.yaml +14 -14
  101. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/figma-small.svg +3 -3
  102. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/icon.svg +28 -28
  103. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/references/mapping-checklist.md +7 -7
  104. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/scripts/normalize_node_id.py +25 -25
  105. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/LICENSE.TXT +1 -1
  106. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/SKILL.md +537 -537
  107. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/agents/openai.yaml +14 -14
  108. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/figma-small.svg +3 -3
  109. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/icon.svg +28 -28
  110. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/references/rule-template.md +15 -15
  111. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -9
  112. package/docs/skill-candidates/v0.0.10/figma-generate-design/LICENSE.TXT +1 -1
  113. package/docs/skill-candidates/v0.0.10/figma-generate-design/SKILL.md +341 -341
  114. package/docs/skill-candidates/v0.0.10/figma-generate-design/agents/openai.yaml +14 -14
  115. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/figma-small.svg +3 -3
  116. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/icon.svg +28 -28
  117. package/docs/skill-candidates/v0.0.10/figma-generate-design/maintainers.yml +1 -1
  118. package/docs/skill-candidates/v0.0.10/figma-generate-library/LICENSE.TXT +1 -1
  119. package/docs/skill-candidates/v0.0.10/figma-generate-library/SKILL.md +314 -314
  120. package/docs/skill-candidates/v0.0.10/figma-generate-library/agents/openai.yaml +14 -14
  121. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/figma-small.svg +3 -3
  122. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/icon.svg +28 -28
  123. package/docs/skill-candidates/v0.0.10/figma-generate-library/maintainers.yml +3 -3
  124. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/code-connect-setup.md +260 -260
  125. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/component-creation.md +1014 -1014
  126. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/discovery-phase.md +518 -518
  127. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/documentation-creation.md +834 -834
  128. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/error-recovery.md +540 -540
  129. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/naming-conventions.md +527 -527
  130. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/token-creation.md +962 -962
  131. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/bindVariablesToComponent.js +110 -110
  132. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/cleanupOrphans.js +127 -127
  133. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createComponentWithVariants.js +148 -148
  134. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createDocumentationPage.js +139 -139
  135. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createSemanticTokens.js +108 -108
  136. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createVariableCollection.js +49 -49
  137. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/inspectFileStructure.js +121 -121
  138. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/rehydrateState.js +92 -92
  139. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/validateCreation.js +83 -83
  140. package/docs/skill-candidates/v0.0.10/figma-implement-design/LICENSE.txt +1 -1
  141. package/docs/skill-candidates/v0.0.10/figma-implement-design/SKILL.md +258 -258
  142. package/docs/skill-candidates/v0.0.10/figma-implement-design/agents/openai.yaml +14 -14
  143. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/figma-small.svg +3 -3
  144. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/icon.svg +28 -28
  145. package/docs/skill-candidates/v0.0.10/figma-use/LICENSE.TXT +1 -1
  146. package/docs/skill-candidates/v0.0.10/figma-use/SKILL.md +233 -233
  147. package/docs/skill-candidates/v0.0.10/figma-use/agents/openai.yaml +14 -14
  148. package/docs/skill-candidates/v0.0.10/figma-use/assets/figma-small.svg +3 -3
  149. package/docs/skill-candidates/v0.0.10/figma-use/assets/icon.svg +28 -28
  150. package/docs/skill-candidates/v0.0.10/figma-use/maintainers.yml +1 -1
  151. package/docs/skill-candidates/v0.0.10/figma-use/references/api-reference.md +301 -301
  152. package/docs/skill-candidates/v0.0.10/figma-use/references/common-patterns.md +512 -512
  153. package/docs/skill-candidates/v0.0.10/figma-use/references/component-patterns.md +488 -488
  154. package/docs/skill-candidates/v0.0.10/figma-use/references/effect-style-patterns.md +123 -123
  155. package/docs/skill-candidates/v0.0.10/figma-use/references/gotchas.md +599 -599
  156. package/docs/skill-candidates/v0.0.10/figma-use/references/maintainers.yml +12 -12
  157. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-patterns.md +513 -513
  158. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.d.ts +11293 -11293
  159. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.index.md +441 -441
  160. package/docs/skill-candidates/v0.0.10/figma-use/references/text-style-patterns.md +203 -203
  161. package/docs/skill-candidates/v0.0.10/figma-use/references/validation-and-recovery.md +109 -109
  162. package/docs/skill-candidates/v0.0.10/figma-use/references/variable-patterns.md +354 -354
  163. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/maintainers.yml +9 -9
  164. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--creating.md +17 -17
  165. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--using.md +17 -17
  166. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components.md +50 -50
  167. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-effect-styles.md +52 -52
  168. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-text-styles.md +90 -90
  169. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--creating.md +13 -13
  170. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--using.md +13 -13
  171. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables.md +64 -64
  172. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds.md +41 -41
  173. package/docs/skill-candidates/v0.0.10/frontend-design/LICENSE.txt +177 -177
  174. package/docs/skill-candidates/v0.0.10/frontend-design/SKILL.md +55 -55
  175. package/docs/skill-candidates/v0.0.10/frontend-ui-ux-systems/SKILL.md +32 -32
  176. package/docs/skill-candidates/v0.0.10/github/SKILL.md +74 -74
  177. package/docs/skill-candidates/v0.0.10/github/agents/openai.yaml +6 -6
  178. package/docs/skill-candidates/v0.0.10/github/assets/github-small.svg +3 -3
  179. package/docs/skill-candidates/v0.0.10/image-graphic-design-rendering/SKILL.md +28 -28
  180. package/docs/skill-candidates/v0.0.10/language-quality-pt-en-fr-it-ru/SKILL.md +28 -28
  181. package/docs/skill-candidates/v0.0.10/math-physics-reasoning/SKILL.md +28 -28
  182. package/docs/skill-candidates/v0.0.10/mcp-builder/LICENSE.txt +201 -201
  183. package/docs/skill-candidates/v0.0.10/mcp-builder/SKILL.md +236 -236
  184. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/evaluation.md +601 -601
  185. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/mcp_best_practices.md +249 -249
  186. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/node_mcp_server.md +969 -969
  187. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/python_mcp_server.md +718 -718
  188. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/connections.py +151 -151
  189. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/evaluation.py +373 -373
  190. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/example_evaluation.xml +22 -22
  191. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/requirements.txt +2 -2
  192. package/docs/skill-candidates/v0.0.10/mcp-client-readiness/SKILL.md +31 -31
  193. package/docs/skill-candidates/v0.0.10/openai-docs/LICENSE.txt +201 -201
  194. package/docs/skill-candidates/v0.0.10/openai-docs/SKILL.md +161 -161
  195. package/docs/skill-candidates/v0.0.10/openai-docs/agents/openai.yaml +14 -14
  196. package/docs/skill-candidates/v0.0.10/openai-docs/assets/openai-small.svg +3 -3
  197. package/docs/skill-candidates/v0.0.10/openai-docs/references/latest-model.md +37 -37
  198. package/docs/skill-candidates/v0.0.10/openai-docs/references/prompting-guide.md +244 -244
  199. package/docs/skill-candidates/v0.0.10/openai-docs/references/upgrade-guide.md +181 -181
  200. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/fetch-codex-manual.mjs +598 -598
  201. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/resolve-latest-model-info.js +147 -147
  202. package/docs/skill-candidates/v0.0.10/playwright/NOTICE.txt +14 -14
  203. package/docs/skill-candidates/v0.0.10/playwright/SKILL.md +147 -147
  204. package/docs/skill-candidates/v0.0.10/playwright/agents/openai.yaml +6 -6
  205. package/docs/skill-candidates/v0.0.10/playwright/assets/playwright-small.svg +3 -3
  206. package/docs/skill-candidates/v0.0.10/playwright/references/cli.md +116 -116
  207. package/docs/skill-candidates/v0.0.10/playwright/references/workflows.md +95 -95
  208. package/docs/skill-candidates/v0.0.10/playwright/scripts/playwright_cli.sh +25 -25
  209. package/docs/skill-candidates/v0.0.10/polyglot-backend-engineering/SKILL.md +32 -32
  210. package/docs/skill-candidates/v0.0.10/screenshot/LICENSE.txt +201 -201
  211. package/docs/skill-candidates/v0.0.10/screenshot/SKILL.md +267 -267
  212. package/docs/skill-candidates/v0.0.10/screenshot/agents/openai.yaml +6 -6
  213. package/docs/skill-candidates/v0.0.10/screenshot/assets/screenshot-small.svg +5 -5
  214. package/docs/skill-candidates/v0.0.10/screenshot/scripts/ensure_macos_permissions.sh +54 -54
  215. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_display_info.swift +22 -22
  216. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_permissions.swift +40 -40
  217. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_window_info.swift +126 -126
  218. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.ps1 +163 -163
  219. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.py +585 -585
  220. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/SKILL.md +62 -62
  221. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/agents/openai.yaml +4 -4
  222. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/activation-policy.md +77 -77
  223. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/human-approval-policy.md +83 -83
  224. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/persona-dev-senior-master.md +46 -46
  225. package/docs/skill-candidates/v0.0.10/terminal-menu-operations/SKILL.md +30 -30
  226. package/docs/skill-candidates/v0.0.10/terminal-pixel-art-tui/SKILL.md +43 -43
  227. package/docs/skill-candidates/v0.0.10/webapp-testing/LICENSE.txt +201 -201
  228. package/docs/skill-candidates/v0.0.10/webapp-testing/SKILL.md +95 -95
  229. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/console_logging.py +34 -34
  230. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/element_discovery.py +39 -39
  231. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/static_html_automation.py +32 -32
  232. package/docs/skill-candidates/v0.0.10/webapp-testing/scripts/with_server.py +105 -105
  233. package/docs/skill-candidates/v0.0.10/winui-app/LICENSE.txt +201 -201
  234. package/docs/skill-candidates/v0.0.10/winui-app/SKILL.md +94 -94
  235. package/docs/skill-candidates/v0.0.10/winui-app/agents/openai.yaml +5 -5
  236. package/docs/skill-candidates/v0.0.10/winui-app/config.yaml +50 -50
  237. package/docs/skill-candidates/v0.0.10/winui-app/references/_sections.md +96 -96
  238. package/docs/skill-candidates/v0.0.10/winui-app/references/accessibility-input-and-localization.md +51 -51
  239. package/docs/skill-candidates/v0.0.10/winui-app/references/build-run-and-launch-verification.md +72 -72
  240. package/docs/skill-candidates/v0.0.10/winui-app/references/community-toolkit-controls-and-helpers.md +57 -57
  241. package/docs/skill-candidates/v0.0.10/winui-app/references/controls-layout-and-adaptive-ui.md +84 -84
  242. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-environment-audit-and-remediation.md +82 -82
  243. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-setup-and-project-selection.md +67 -67
  244. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-template-first-recovery.md +62 -62
  245. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-winui-app-structure.md +62 -62
  246. package/docs/skill-candidates/v0.0.10/winui-app/references/motion-animations-and-polish.md +45 -45
  247. package/docs/skill-candidates/v0.0.10/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -46
  248. package/docs/skill-candidates/v0.0.10/winui-app/references/sample-source-map.md +37 -37
  249. package/docs/skill-candidates/v0.0.10/winui-app/references/shell-navigation-and-windowing.md +67 -67
  250. package/docs/skill-candidates/v0.0.10/winui-app/references/styling-theming-materials-and-icons.md +71 -71
  251. package/docs/skill-candidates/v0.0.10/winui-app/references/testing-debugging-and-review-checklists.md +77 -77
  252. package/docs/skill-candidates/v0.0.10/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -52
  253. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/SKILL.md +398 -398
  254. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/common-patterns.md +330 -330
  255. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/complete-examples.md +871 -871
  256. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/component-patterns.md +501 -501
  257. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/data-fetching.md +766 -766
  258. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/file-organization.md +501 -501
  259. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/loading-and-error-states.md +500 -500
  260. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/performance.md +405 -405
  261. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/routing-guide.md +363 -363
  262. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/styling-guide.md +427 -427
  263. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/typescript-standards.md +417 -417
  264. package/docs/skill-candidates/v0.0.11/git-version-control-ops/SKILL.md +34 -34
  265. package/docs/skill-candidates/v0.0.11/go-engineering/SKILL.md +34 -34
  266. package/docs/skill-candidates/v0.0.11/java-engineering/SKILL.md +34 -34
  267. package/docs/skill-candidates/v0.0.11/javascript-engineering/SKILL.md +34 -34
  268. package/docs/skill-candidates/v0.0.11/json-contract-design/SKILL.md +34 -34
  269. package/docs/skill-candidates/v0.0.11/multi-client-mcp-ops/SKILL.md +36 -36
  270. package/docs/skill-candidates/v0.0.11/nextjs/SKILL.md +745 -745
  271. package/docs/skill-candidates/v0.0.11/nextjs/agents/openai.yaml +3 -3
  272. package/docs/skill-candidates/v0.0.11/nextjs/references/app-router-files.md +94 -94
  273. package/docs/skill-candidates/v0.0.11/python-engineering/SKILL.md +34 -34
  274. package/docs/skill-candidates/v0.0.11/ruby-engineering/SKILL.md +34 -34
  275. package/docs/skill-candidates/v0.0.11/senior-fullstack/SKILL.md +209 -209
  276. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/architecture_patterns.md +103 -103
  277. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/development_workflows.md +103 -103
  278. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/tech_stack_guide.md +103 -103
  279. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/code_quality_analyzer.py +114 -114
  280. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/fullstack_scaffolder.py +114 -114
  281. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/project_scaffolder.py +114 -114
  282. package/docs/skill-candidates/v0.0.11/shadcn/SKILL.md +573 -573
  283. package/docs/skill-candidates/v0.0.11/shadcn/agents/openai.yaml +3 -3
  284. package/docs/skill-candidates/v0.0.11/sql-postgresql-engineering/SKILL.md +34 -34
  285. package/docs/skill-candidates/v0.0.11/terminal-shell-ops/SKILL.md +34 -34
  286. package/docs/skill-candidates/v0.0.11/typescript-expert/SKILL.md +429 -429
  287. package/docs/skill-candidates/v0.0.11/typescript-expert/references/tsconfig-strict.json +91 -91
  288. package/docs/skill-candidates/v0.0.11/typescript-expert/references/typescript-cheatsheet.md +383 -383
  289. package/docs/skill-candidates/v0.0.11/typescript-expert/references/utility-types.ts +335 -335
  290. package/docs/skill-candidates/v0.0.11/typescript-expert/scripts/ts_diagnostic.py +203 -203
  291. package/docs/skill-candidates/v0.0.11/ui-component-primitives/SKILL.md +34 -34
  292. package/docs/skill-candidates/v0.0.11/web-mobile-design-systems/SKILL.md +34 -34
  293. package/docs/skill-candidates/v0.0.11/windows-linux-platform-ops/SKILL.md +34 -34
  294. package/docs/skill-candidates/v0.0.12/context-compression-handoff/SKILL.md +47 -0
  295. package/docs/skill-candidates/v0.0.12/csharp-senior-master-engineering/SKILL.md +32 -0
  296. package/docs/skill-candidates/v0.0.12/css-senior-master-engineering/SKILL.md +32 -0
  297. package/docs/skill-candidates/v0.0.12/go-senior-master-engineering/SKILL.md +32 -0
  298. package/docs/skill-candidates/v0.0.12/html-senior-master-engineering/SKILL.md +32 -0
  299. package/docs/skill-candidates/v0.0.12/javascript-senior-master-engineering/SKILL.md +32 -0
  300. package/docs/skill-candidates/v0.0.12/json-senior-master-engineering/SKILL.md +32 -0
  301. package/docs/skill-candidates/v0.0.12/prompt-budget-gate/SKILL.md +46 -0
  302. package/docs/skill-candidates/v0.0.12/python-senior-master-engineering/SKILL.md +32 -0
  303. package/docs/skill-candidates/v0.0.12/react-senior-master-engineering/SKILL.md +32 -0
  304. package/docs/skill-candidates/v0.0.12/ruby-senior-master-engineering/SKILL.md +32 -0
  305. package/docs/skill-candidates/v0.0.12/senior-master-code-optimizer/SKILL.md +48 -0
  306. package/docs/skill-candidates/v0.0.12/sql-senior-master-engineering/SKILL.md +31 -0
  307. package/docs/skill-candidates/v0.0.12/token-economy-orchestrator/SKILL.md +38 -0
  308. package/docs/skill-candidates/v0.0.12/typescript-senior-master-engineering/SKILL.md +35 -0
  309. package/docs/skill-candidates/v0.0.9/ai-ethics-human-dignity/SKILL.md +32 -32
  310. package/docs/skill-candidates/v0.0.9/broad-domain-router/SKILL.md +41 -41
  311. package/docs/skill-candidates/v0.0.9/catholic-moral-discernment/SKILL.md +31 -31
  312. package/docs/skill-candidates/v0.0.9/engineering-systems-master/SKILL.md +31 -31
  313. package/docs/skill-candidates/v0.0.9/language-quality-pt-en-fr/SKILL.md +28 -28
  314. package/docs/skill-candidates/v0.0.9/math-science-reasoning/SKILL.md +29 -29
  315. package/docs/skill-candidates/v0.0.9/philosophy-sociology-discernment/SKILL.md +28 -28
  316. package/docs/skill-candidates/v0.0.9/professional-boundary-triage/SKILL.md +40 -40
  317. package/docs/skill-candidates/v0.0.9/release-ethics-gate/SKILL.md +32 -32
  318. package/docs/skill-candidates/v0.0.9/source-authority-reviewer/SKILL.md +31 -31
  319. package/examples/client-configs/claude-code.commands.md +21 -17
  320. package/examples/client-configs/claude-code.project.mcp.json +18 -18
  321. package/examples/client-configs/claude-desktop.macos.json +18 -18
  322. package/examples/client-configs/claude-desktop.windows.json +20 -20
  323. package/examples/client-configs/codex.windows.toml +11 -11
  324. package/examples/client-configs/gemini-code-assist.intellij.mcp.json +18 -18
  325. package/examples/client-configs/gemini.linux.settings.json +21 -21
  326. package/examples/client-configs/gemini.windows.settings.json +23 -23
  327. package/examples/client-configs/generic-stdio.json +16 -16
  328. package/manifests/channels/beta.json +26 -26
  329. package/manifests/channels/stable.json +27 -27
  330. package/network/approved-skills.json +54 -54
  331. package/network/unapproved-skill-candidates.json +110 -110
  332. package/package.json +87 -78
  333. package/scripts/configure-private-registry.mjs +208 -208
  334. package/scripts/lib/private-registry.mjs +97 -97
  335. package/scripts/render-menu-evidence.mjs +130 -0
  336. package/scripts/verify-menu-actions.mjs +117 -115
  337. package/sources.json +11 -11
@@ -1,108 +1,108 @@
1
- /**
2
- * createSemanticTokens
3
- *
4
- * Creates a batch of Figma variables in the given collection, one per entry in
5
- * `tokenMap`. Supports raw values, variable alias references, code syntax, and
6
- * scopes. Returns a map of token name → Variable for use in subsequent steps.
7
- *
8
- * @param {VariableCollection} collection - The target variable collection.
9
- * @param {Record<string, string>} modeIds - Map of {modeName: modeId} from createVariableCollection.
10
- * @param {Array<{
11
- * name: string,
12
- * type: 'COLOR' | 'FLOAT' | 'STRING' | 'BOOLEAN',
13
- * values: Record<string, string | number | boolean | {type: 'VARIABLE_ALIAS', id: string}>,
14
- * scopes?: VariableScope[],
15
- * codeSyntax?: {WEB?: string, ANDROID?: string, iOS?: string}
16
- * }>} tokenMap - Ordered list of token definitions.
17
- * - `name`: Variable name using slash hierarchy (e.g. "color/bg/primary").
18
- * - `type`: Figma variable type.
19
- * - `values`: Map of {modeName: value}. Values can be raw (hex string for COLOR,
20
- * number for FLOAT) or alias objects {type: 'VARIABLE_ALIAS', id: variableId}.
21
- * For COLOR, raw values are accepted as hex strings ("#rrggbb" or "#rrggbbaa")
22
- * and converted to {r, g, b, a} automatically.
23
- * - `scopes`: Array of VariableScope strings. Omit to use [] (hidden/primitive).
24
- * - `codeSyntax`: Platform code syntax strings. Omit to skip.
25
- * @param {string} [runId] - Optional dsb_run_id to tag every variable.
26
- * @returns {Promise<{variables: Record<string, Variable>}>}
27
- * `variables` maps each token name to its created Variable object.
28
- */
29
- async function createSemanticTokens(collection, modeIds, tokenMap, runId) {
30
- const variables = {}
31
-
32
- for (const token of tokenMap) {
33
- // Create the variable
34
- const variable = figma.variables.createVariable(token.name, collection, token.type)
35
-
36
- // Tag for cleanup
37
- variable.setPluginData('dsb_key', `variable/${token.name}`)
38
- if (runId) {
39
- variable.setPluginData('dsb_run_id', runId)
40
- }
41
-
42
- // Set values for each mode
43
- for (const [modeName, rawValue] of Object.entries(token.values)) {
44
- const modeId = modeIds[modeName]
45
- if (!modeId) {
46
- throw new Error(
47
- `createSemanticTokens: mode "${modeName}" not found in modeIds for token "${token.name}". ` +
48
- `Available modes: ${Object.keys(modeIds).join(', ')}`,
49
- )
50
- }
51
-
52
- let value = rawValue
53
-
54
- // Convert hex strings to Figma RGBA for COLOR type
55
- if (token.type === 'COLOR' && typeof rawValue === 'string' && rawValue.startsWith('#')) {
56
- value = hexToFigmaColor(rawValue)
57
- }
58
-
59
- variable.setValueForMode(modeId, value)
60
- }
61
-
62
- // Set scopes (default: empty array = hidden from property pickers / primitives)
63
- variable.scopes = token.scopes || []
64
-
65
- // Set code syntax per platform
66
- if (token.codeSyntax) {
67
- if (token.codeSyntax.WEB) {
68
- variable.setVariableCodeSyntax('WEB', token.codeSyntax.WEB)
69
- }
70
- if (token.codeSyntax.ANDROID) {
71
- variable.setVariableCodeSyntax('ANDROID', token.codeSyntax.ANDROID)
72
- }
73
- if (token.codeSyntax.iOS) {
74
- variable.setVariableCodeSyntax('iOS', token.codeSyntax.iOS)
75
- }
76
- }
77
-
78
- variables[token.name] = variable
79
- }
80
-
81
- return { variables }
82
- }
83
-
84
- /**
85
- * Converts a hex color string to a Figma RGBA object.
86
- * Supports "#rgb", "#rrggbb", and "#rrggbbaa".
87
- *
88
- * @param {string} hex
89
- * @returns {{ r: number, g: number, b: number, a: number }}
90
- */
91
- function hexToFigmaColor(hex) {
92
- let h = hex.replace('#', '')
93
-
94
- // Expand shorthand #rgb → #rrggbb
95
- if (h.length === 3) {
96
- h = h
97
- .split('')
98
- .map((c) => c + c)
99
- .join('')
100
- }
101
-
102
- const r = parseInt(h.substring(0, 2), 16) / 255
103
- const g = parseInt(h.substring(2, 4), 16) / 255
104
- const b = parseInt(h.substring(4, 6), 16) / 255
105
- const a = h.length === 8 ? parseInt(h.substring(6, 8), 16) / 255 : 1
106
-
107
- return { r, g, b, a }
108
- }
1
+ /**
2
+ * createSemanticTokens
3
+ *
4
+ * Creates a batch of Figma variables in the given collection, one per entry in
5
+ * `tokenMap`. Supports raw values, variable alias references, code syntax, and
6
+ * scopes. Returns a map of token name → Variable for use in subsequent steps.
7
+ *
8
+ * @param {VariableCollection} collection - The target variable collection.
9
+ * @param {Record<string, string>} modeIds - Map of {modeName: modeId} from createVariableCollection.
10
+ * @param {Array<{
11
+ * name: string,
12
+ * type: 'COLOR' | 'FLOAT' | 'STRING' | 'BOOLEAN',
13
+ * values: Record<string, string | number | boolean | {type: 'VARIABLE_ALIAS', id: string}>,
14
+ * scopes?: VariableScope[],
15
+ * codeSyntax?: {WEB?: string, ANDROID?: string, iOS?: string}
16
+ * }>} tokenMap - Ordered list of token definitions.
17
+ * - `name`: Variable name using slash hierarchy (e.g. "color/bg/primary").
18
+ * - `type`: Figma variable type.
19
+ * - `values`: Map of {modeName: value}. Values can be raw (hex string for COLOR,
20
+ * number for FLOAT) or alias objects {type: 'VARIABLE_ALIAS', id: variableId}.
21
+ * For COLOR, raw values are accepted as hex strings ("#rrggbb" or "#rrggbbaa")
22
+ * and converted to {r, g, b, a} automatically.
23
+ * - `scopes`: Array of VariableScope strings. Omit to use [] (hidden/primitive).
24
+ * - `codeSyntax`: Platform code syntax strings. Omit to skip.
25
+ * @param {string} [runId] - Optional dsb_run_id to tag every variable.
26
+ * @returns {Promise<{variables: Record<string, Variable>}>}
27
+ * `variables` maps each token name to its created Variable object.
28
+ */
29
+ async function createSemanticTokens(collection, modeIds, tokenMap, runId) {
30
+ const variables = {}
31
+
32
+ for (const token of tokenMap) {
33
+ // Create the variable
34
+ const variable = figma.variables.createVariable(token.name, collection, token.type)
35
+
36
+ // Tag for cleanup
37
+ variable.setPluginData('dsb_key', `variable/${token.name}`)
38
+ if (runId) {
39
+ variable.setPluginData('dsb_run_id', runId)
40
+ }
41
+
42
+ // Set values for each mode
43
+ for (const [modeName, rawValue] of Object.entries(token.values)) {
44
+ const modeId = modeIds[modeName]
45
+ if (!modeId) {
46
+ throw new Error(
47
+ `createSemanticTokens: mode "${modeName}" not found in modeIds for token "${token.name}". ` +
48
+ `Available modes: ${Object.keys(modeIds).join(', ')}`,
49
+ )
50
+ }
51
+
52
+ let value = rawValue
53
+
54
+ // Convert hex strings to Figma RGBA for COLOR type
55
+ if (token.type === 'COLOR' && typeof rawValue === 'string' && rawValue.startsWith('#')) {
56
+ value = hexToFigmaColor(rawValue)
57
+ }
58
+
59
+ variable.setValueForMode(modeId, value)
60
+ }
61
+
62
+ // Set scopes (default: empty array = hidden from property pickers / primitives)
63
+ variable.scopes = token.scopes || []
64
+
65
+ // Set code syntax per platform
66
+ if (token.codeSyntax) {
67
+ if (token.codeSyntax.WEB) {
68
+ variable.setVariableCodeSyntax('WEB', token.codeSyntax.WEB)
69
+ }
70
+ if (token.codeSyntax.ANDROID) {
71
+ variable.setVariableCodeSyntax('ANDROID', token.codeSyntax.ANDROID)
72
+ }
73
+ if (token.codeSyntax.iOS) {
74
+ variable.setVariableCodeSyntax('iOS', token.codeSyntax.iOS)
75
+ }
76
+ }
77
+
78
+ variables[token.name] = variable
79
+ }
80
+
81
+ return { variables }
82
+ }
83
+
84
+ /**
85
+ * Converts a hex color string to a Figma RGBA object.
86
+ * Supports "#rgb", "#rrggbb", and "#rrggbbaa".
87
+ *
88
+ * @param {string} hex
89
+ * @returns {{ r: number, g: number, b: number, a: number }}
90
+ */
91
+ function hexToFigmaColor(hex) {
92
+ let h = hex.replace('#', '')
93
+
94
+ // Expand shorthand #rgb → #rrggbb
95
+ if (h.length === 3) {
96
+ h = h
97
+ .split('')
98
+ .map((c) => c + c)
99
+ .join('')
100
+ }
101
+
102
+ const r = parseInt(h.substring(0, 2), 16) / 255
103
+ const g = parseInt(h.substring(2, 4), 16) / 255
104
+ const b = parseInt(h.substring(4, 6), 16) / 255
105
+ const a = h.length === 8 ? parseInt(h.substring(6, 8), 16) / 255 : 1
106
+
107
+ return { r, g, b, a }
108
+ }
@@ -1,49 +1,49 @@
1
- /**
2
- * createVariableCollection
3
- *
4
- * Creates a new Figma variable collection with the specified name and modes.
5
- * If `modeNames` has more than one entry, the first mode is renamed from
6
- * Figma's default "Mode 1" to the first name, and additional modes are added.
7
- *
8
- * Every created collection is tagged with `dsb_key` plugin data so it can be
9
- * found and cleaned up idempotently by `cleanupOrphans`.
10
- *
11
- * @param {string} name - The display name of the collection (e.g. "Color", "Spacing").
12
- * @param {string[]} modeNames - Ordered list of mode names (e.g. ["Light", "Dark"] or ["Value"]).
13
- * @param {string} [runId] - Optional dsb_run_id to tag for cleanup.
14
- * @returns {Promise<{
15
- * collection: VariableCollection,
16
- * modeIds: Record<string, string>
17
- * }>}
18
- * `modeIds` maps each mode name to its modeId string.
19
- */
20
- async function createVariableCollection(name, modeNames, runId) {
21
- if (!modeNames || modeNames.length === 0) {
22
- throw new Error('createVariableCollection: modeNames must have at least one entry.')
23
- }
24
-
25
- // Create the collection — Figma always creates it with one mode named "Mode 1".
26
- const collection = figma.variables.createVariableCollection(name)
27
-
28
- // Tag for idempotent cleanup
29
- collection.setPluginData('dsb_key', `collection/${name}`)
30
- if (runId) {
31
- collection.setPluginData('dsb_run_id', runId)
32
- }
33
-
34
- // modeIds accumulator
35
- const modeIds = {}
36
-
37
- // Rename the default first mode
38
- const defaultMode = collection.modes[0]
39
- collection.renameMode(defaultMode.modeId, modeNames[0])
40
- modeIds[modeNames[0]] = defaultMode.modeId
41
-
42
- // Add additional modes
43
- for (let i = 1; i < modeNames.length; i++) {
44
- const newModeId = collection.addMode(modeNames[i])
45
- modeIds[modeNames[i]] = newModeId
46
- }
47
-
48
- return { collection, modeIds }
49
- }
1
+ /**
2
+ * createVariableCollection
3
+ *
4
+ * Creates a new Figma variable collection with the specified name and modes.
5
+ * If `modeNames` has more than one entry, the first mode is renamed from
6
+ * Figma's default "Mode 1" to the first name, and additional modes are added.
7
+ *
8
+ * Every created collection is tagged with `dsb_key` plugin data so it can be
9
+ * found and cleaned up idempotently by `cleanupOrphans`.
10
+ *
11
+ * @param {string} name - The display name of the collection (e.g. "Color", "Spacing").
12
+ * @param {string[]} modeNames - Ordered list of mode names (e.g. ["Light", "Dark"] or ["Value"]).
13
+ * @param {string} [runId] - Optional dsb_run_id to tag for cleanup.
14
+ * @returns {Promise<{
15
+ * collection: VariableCollection,
16
+ * modeIds: Record<string, string>
17
+ * }>}
18
+ * `modeIds` maps each mode name to its modeId string.
19
+ */
20
+ async function createVariableCollection(name, modeNames, runId) {
21
+ if (!modeNames || modeNames.length === 0) {
22
+ throw new Error('createVariableCollection: modeNames must have at least one entry.')
23
+ }
24
+
25
+ // Create the collection — Figma always creates it with one mode named "Mode 1".
26
+ const collection = figma.variables.createVariableCollection(name)
27
+
28
+ // Tag for idempotent cleanup
29
+ collection.setPluginData('dsb_key', `collection/${name}`)
30
+ if (runId) {
31
+ collection.setPluginData('dsb_run_id', runId)
32
+ }
33
+
34
+ // modeIds accumulator
35
+ const modeIds = {}
36
+
37
+ // Rename the default first mode
38
+ const defaultMode = collection.modes[0]
39
+ collection.renameMode(defaultMode.modeId, modeNames[0])
40
+ modeIds[modeNames[0]] = defaultMode.modeId
41
+
42
+ // Add additional modes
43
+ for (let i = 1; i < modeNames.length; i++) {
44
+ const newModeId = collection.addMode(modeNames[i])
45
+ modeIds[modeNames[i]] = newModeId
46
+ }
47
+
48
+ return { collection, modeIds }
49
+ }
@@ -1,121 +1,121 @@
1
- /**
2
- * inspectFileStructure
3
- *
4
- * Reads the current Figma file and returns a structural inventory:
5
- * all pages (with child counts), all local variable collections (with mode
6
- * names and variable counts), all component sets, all local text styles,
7
- * and all local effect styles.
8
- *
9
- * This is a read-only discovery function — it never creates or mutates nodes.
10
- * Run it at the start of Phase 0 to understand what already exists before
11
- * planning any creation work.
12
- *
13
- * @returns {Promise<{
14
- * pages: Array<{id: string, name: string, childCount: number}>,
15
- * variableCollections: Array<{
16
- * id: string,
17
- * name: string,
18
- * modes: Array<{modeId: string, name: string}>,
19
- * variableCount: number,
20
- * variableNames: string[]
21
- * }>,
22
- * componentSets: Array<{id: string, name: string, variantCount: number, pageId: string, pageName: string}>,
23
- * textStyles: Array<{id: string, name: string, fontFamily: string, fontStyle: string, fontSize: number}>,
24
- * effectStyles: Array<{id: string, name: string, effectCount: number}>
25
- * }>}
26
- */
27
- async function inspectFileStructure() {
28
- const result = {
29
- pages: [],
30
- variableCollections: [],
31
- componentSets: [],
32
- textStyles: [],
33
- effectStyles: [],
34
- }
35
-
36
- // --- Pages ---
37
- for (const page of figma.root.children) {
38
- result.pages.push({
39
- id: page.id,
40
- name: page.name,
41
- childCount: page.children.length,
42
- })
43
- }
44
-
45
- // --- Variable collections ---
46
- const collections = figma.variables.getLocalVariableCollections()
47
- for (const coll of collections) {
48
- const variableNames = coll.variableIds
49
- .map((id) => figma.variables.getVariableById(id))
50
- .filter(Boolean)
51
- .map((v) => v.name)
52
-
53
- result.variableCollections.push({
54
- id: coll.id,
55
- name: coll.name,
56
- modes: coll.modes.map((m) => ({ modeId: m.modeId, name: m.name })),
57
- variableCount: coll.variableIds.length,
58
- variableNames,
59
- })
60
- }
61
-
62
- // --- Component sets (and standalone components) ---
63
- // We need to load all pages to inspect components across the whole file.
64
- const originalPage = figma.currentPage
65
-
66
- for (const page of figma.root.children) {
67
- await figma.setCurrentPageAsync(page)
68
-
69
- const componentSetsOnPage = page.findAllWithCriteria({ types: ['COMPONENT_SET'] })
70
- for (const cs of componentSetsOnPage) {
71
- result.componentSets.push({
72
- id: cs.id,
73
- name: cs.name,
74
- variantCount: cs.children.length,
75
- pageId: page.id,
76
- pageName: page.name,
77
- })
78
- }
79
-
80
- // Also capture standalone components (not inside a component set)
81
- const standaloneComponents = page
82
- .findAllWithCriteria({ types: ['COMPONENT'] })
83
- .filter((c) => c.parent && c.parent.type !== 'COMPONENT_SET')
84
- for (const comp of standaloneComponents) {
85
- result.componentSets.push({
86
- id: comp.id,
87
- name: comp.name,
88
- variantCount: 1,
89
- pageId: page.id,
90
- pageName: page.name,
91
- })
92
- }
93
- }
94
-
95
- // Restore original page
96
- await figma.setCurrentPageAsync(originalPage)
97
-
98
- // --- Text styles ---
99
- const textStyles = figma.getLocalTextStyles()
100
- for (const ts of textStyles) {
101
- result.textStyles.push({
102
- id: ts.id,
103
- name: ts.name,
104
- fontFamily: ts.fontName.family,
105
- fontStyle: ts.fontName.style,
106
- fontSize: ts.fontSize,
107
- })
108
- }
109
-
110
- // --- Effect styles ---
111
- const effectStyles = figma.getLocalEffectStyles()
112
- for (const es of effectStyles) {
113
- result.effectStyles.push({
114
- id: es.id,
115
- name: es.name,
116
- effectCount: es.effects.length,
117
- })
118
- }
119
-
120
- return result
121
- }
1
+ /**
2
+ * inspectFileStructure
3
+ *
4
+ * Reads the current Figma file and returns a structural inventory:
5
+ * all pages (with child counts), all local variable collections (with mode
6
+ * names and variable counts), all component sets, all local text styles,
7
+ * and all local effect styles.
8
+ *
9
+ * This is a read-only discovery function — it never creates or mutates nodes.
10
+ * Run it at the start of Phase 0 to understand what already exists before
11
+ * planning any creation work.
12
+ *
13
+ * @returns {Promise<{
14
+ * pages: Array<{id: string, name: string, childCount: number}>,
15
+ * variableCollections: Array<{
16
+ * id: string,
17
+ * name: string,
18
+ * modes: Array<{modeId: string, name: string}>,
19
+ * variableCount: number,
20
+ * variableNames: string[]
21
+ * }>,
22
+ * componentSets: Array<{id: string, name: string, variantCount: number, pageId: string, pageName: string}>,
23
+ * textStyles: Array<{id: string, name: string, fontFamily: string, fontStyle: string, fontSize: number}>,
24
+ * effectStyles: Array<{id: string, name: string, effectCount: number}>
25
+ * }>}
26
+ */
27
+ async function inspectFileStructure() {
28
+ const result = {
29
+ pages: [],
30
+ variableCollections: [],
31
+ componentSets: [],
32
+ textStyles: [],
33
+ effectStyles: [],
34
+ }
35
+
36
+ // --- Pages ---
37
+ for (const page of figma.root.children) {
38
+ result.pages.push({
39
+ id: page.id,
40
+ name: page.name,
41
+ childCount: page.children.length,
42
+ })
43
+ }
44
+
45
+ // --- Variable collections ---
46
+ const collections = figma.variables.getLocalVariableCollections()
47
+ for (const coll of collections) {
48
+ const variableNames = coll.variableIds
49
+ .map((id) => figma.variables.getVariableById(id))
50
+ .filter(Boolean)
51
+ .map((v) => v.name)
52
+
53
+ result.variableCollections.push({
54
+ id: coll.id,
55
+ name: coll.name,
56
+ modes: coll.modes.map((m) => ({ modeId: m.modeId, name: m.name })),
57
+ variableCount: coll.variableIds.length,
58
+ variableNames,
59
+ })
60
+ }
61
+
62
+ // --- Component sets (and standalone components) ---
63
+ // We need to load all pages to inspect components across the whole file.
64
+ const originalPage = figma.currentPage
65
+
66
+ for (const page of figma.root.children) {
67
+ await figma.setCurrentPageAsync(page)
68
+
69
+ const componentSetsOnPage = page.findAllWithCriteria({ types: ['COMPONENT_SET'] })
70
+ for (const cs of componentSetsOnPage) {
71
+ result.componentSets.push({
72
+ id: cs.id,
73
+ name: cs.name,
74
+ variantCount: cs.children.length,
75
+ pageId: page.id,
76
+ pageName: page.name,
77
+ })
78
+ }
79
+
80
+ // Also capture standalone components (not inside a component set)
81
+ const standaloneComponents = page
82
+ .findAllWithCriteria({ types: ['COMPONENT'] })
83
+ .filter((c) => c.parent && c.parent.type !== 'COMPONENT_SET')
84
+ for (const comp of standaloneComponents) {
85
+ result.componentSets.push({
86
+ id: comp.id,
87
+ name: comp.name,
88
+ variantCount: 1,
89
+ pageId: page.id,
90
+ pageName: page.name,
91
+ })
92
+ }
93
+ }
94
+
95
+ // Restore original page
96
+ await figma.setCurrentPageAsync(originalPage)
97
+
98
+ // --- Text styles ---
99
+ const textStyles = figma.getLocalTextStyles()
100
+ for (const ts of textStyles) {
101
+ result.textStyles.push({
102
+ id: ts.id,
103
+ name: ts.name,
104
+ fontFamily: ts.fontName.family,
105
+ fontStyle: ts.fontName.style,
106
+ fontSize: ts.fontSize,
107
+ })
108
+ }
109
+
110
+ // --- Effect styles ---
111
+ const effectStyles = figma.getLocalEffectStyles()
112
+ for (const es of effectStyles) {
113
+ result.effectStyles.push({
114
+ id: es.id,
115
+ name: es.name,
116
+ effectCount: es.effects.length,
117
+ })
118
+ }
119
+
120
+ return result
121
+ }