@fprad0/skill-master-mcp 0.0.12 → 1.0.1

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 (353) hide show
  1. package/CHANGELOG.md +100 -88
  2. package/README.md +472 -472
  3. package/VERSION.md +9 -9
  4. package/bin/lib/bootstrap-global-core.mjs +34 -0
  5. package/bin/lib/client-config.mjs +287 -285
  6. package/bin/lib/doctor-core.mjs +202 -0
  7. package/bin/lib/menu-core.mjs +1792 -1514
  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 -215
  11. package/bin/lib/update-cli-core.mjs +117 -0
  12. package/bin/skill-master-activation.mjs +165 -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 -228
  16. package/bin/skill-master-eval-activation.mjs +32 -32
  17. package/bin/skill-master-install-global-skills.mjs +59 -59
  18. package/bin/skill-master-install-project-skills.mjs +97 -97
  19. package/bin/skill-master-menu.mjs +489 -378
  20. package/bin/skill-master-register-clients.mjs +232 -153
  21. package/bin/skill-master-success-skills.mjs +357 -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 -262
  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 -66
  41. package/docs/operations/assets/menu-frame-compact.html +36 -33
  42. package/docs/operations/assets/menu-frame-dna-hero.html +87 -0
  43. package/docs/operations/assets/menu-frame-fine-helix.html +89 -0
  44. package/docs/operations/assets/menu-frame-large.html +44 -41
  45. package/docs/operations/assets/menu-frame-running.html +41 -38
  46. package/docs/operations/assets/menu-frame-score-10-contact-sheet.html +184 -0
  47. package/docs/operations/cross-platform-auth-transfer/ANALISE_COMPATIBILIDADE_MCP_2026-06-28.md +140 -140
  48. package/docs/operations/cross-platform-auth-transfer/README_TRANSFERENCIA.md +85 -85
  49. package/docs/operations/reborn-menu-cyberpunk-transfer/ANALISE_MENU_REBORN_CYBERPUNK_2026-06-28.md +174 -174
  50. package/docs/operations/reborn-menu-cyberpunk-transfer/HANDOFF_IMPLEMENTACAO_REBORN_CYBERPUNK_2026-06-28.md +119 -119
  51. package/docs/operations/reborn-menu-cyberpunk-transfer/ORDEM_DE_EXECUCAO_MENU_REBORN_CYBERPUNK.md +134 -134
  52. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA.md +84 -84
  53. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA_REBORN_PACKAGE.md +56 -56
  54. package/docs/operations/token-economy-transfer/ANALISE_AVANCADA_ECONOMIA_TOKENS_2026-06-30.md +141 -0
  55. package/docs/operations/token-economy-transfer/PLANO_DEV_SENIOR_MASTER_TOKEN_ECONOMY_2026-06-30.md +171 -0
  56. package/docs/operations/token-economy-transfer/README_TRANSFERENCIA_TOKEN_ECONOMY.md +31 -0
  57. package/docs/planning/MENU_RUNTIME_CORRECTION_PLAN_2026-06-30.md +551 -0
  58. package/docs/planning/V0_0_9_APROVACAO_CRITICA_MENSAGENS_DE_VENDA.md +85 -85
  59. package/docs/planning/V0_0_9_FONTES_E_CRITERIOS_DE_AUTORIDADE.md +139 -139
  60. package/docs/planning/V0_0_9_MATRIZ_SKILLS_MULTIDISCIPLINARES.md +105 -105
  61. package/docs/planning/V0_0_9_POLITICA_MORAL_CATOLICA_PARA_IA.md +181 -181
  62. package/docs/planning/V0_0_9_PROMPTS_EXECUCAO.md +59 -59
  63. package/docs/planning/V0_0_9_ROADMAP_DISCERNIMENTO_E_CONHECIMENTO_AMPLO.md +181 -181
  64. package/docs/planning/mcp-1.0.0/00_RESUMO_EXECUTIVO_AUDITORIA_MENU.md +118 -0
  65. package/docs/planning/mcp-1.0.0/01_MATRIZ_TESTES_MENU_E_RESULTADOS.md +250 -0
  66. package/docs/planning/mcp-1.0.0/02_PLANO_CORRECAO_ATIVAR_SKILL_APRENDIDA.md +200 -0
  67. package/docs/planning/mcp-1.0.0/03_PLANO_COMPATIBILIDADE_WINDOWS_LINUX_MACOS.md +167 -0
  68. package/docs/planning/mcp-1.0.0/04_PLANO_UI_CYBERPUNK_PIXEL_ART_E_PERFORMANCE.md +165 -0
  69. package/docs/planning/mcp-1.0.0/05_PROMPT_TASK_EXECUCAO_CORRECOES.md +151 -0
  70. package/docs/planning/mcp-1.0.0/06_CHECKLIST_REGRESSAO_PRE_RELEASE.md +159 -0
  71. package/docs/planning/mcp-1.0.0/07_RELATORIO_APLICACAO_CORRECOES_MENU_SKILL_MASTER.md +136 -0
  72. package/docs/planning/mcp-1.0.0/08_AUDITORIA_CRITICA_MENU_NOTA_E_DNA_REFINADO.md +184 -0
  73. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/00_PROMPT_TASK_MASTER_NOTA_10_10.md +103 -0
  74. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/01_PROMPT_TASK_FINE_HELIX_DNA.md +116 -0
  75. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/02_PROMPT_TASK_DNA_HERO_BOOT_AND_MOTION.md +109 -0
  76. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/03_PROMPT_TASK_MENU_UX_HELP_ERROR_COPY.md +99 -0
  77. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/04_PROMPT_TASK_EVIDENCE_RENDERER_1_0_0.md +97 -0
  78. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/05_PROMPT_TASK_CROSS_PLATFORM_UTF8_MOJIBAKE.md +99 -0
  79. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/06_PROMPT_TASK_VISUAL_REGRESSION_QA.md +105 -0
  80. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/07_PROMPT_TASK_PRE_RELEASE_SCORE_GATE_10_10.md +104 -0
  81. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/README_ORDEM_EXECUCAO_NOTA_10_10.md +77 -0
  82. package/docs/prompt-tasks/PROMPT_TASK_001_BOOTSTRAP_SKILL_MASTER_MCP.md +6 -6
  83. package/docs/prompt-tasks/PROMPT_TASK_002_AUTO_UPDATE_LAUNCHER.md +6 -6
  84. package/docs/prompt-tasks/PROMPT_TASK_003_REMOTE_MANIFEST_AND_RELEASES.md +6 -6
  85. package/docs/prompt-tasks/PROMPT_TASK_004_MULTI_USER_DISTRIBUTION.md +6 -6
  86. package/docs/prompt-tasks/PROMPT_TASK_005_SECURITY_AND_QUALITY_GATE.md +6 -6
  87. package/docs/prompt-tasks/PROMPT_TASK_006_MASTER_ACIONAMENTO_APRENDIZADO.md +83 -83
  88. package/docs/prompt-tasks/PROMPT_TASK_007_PERSONA_ORQUESTRADORA.md +88 -88
  89. package/docs/prompt-tasks/PROMPT_TASK_008_PROMPT_ROUTER_MODOS_ATIVACAO.md +156 -156
  90. package/docs/prompt-tasks/PROMPT_TASK_009_PIPELINE_APRENDIZADO_SUCESSO.md +105 -105
  91. package/docs/prompt-tasks/PROMPT_TASK_010_EVALS_GOVERNANCA_ATIVACAO.md +119 -119
  92. package/docs/prompt-tasks/PROMPT_TASK_011_MENU_NOTIFICACOES_NOTION.md +120 -120
  93. package/docs/prompt-tasks/PROMPT_TASK_012_MENU_CYBERPUNK_PIXEL_FRAME.md +123 -123
  94. package/docs/prompt-tasks/PROMPT_TASK_013_MENU_FLUID_DNA_ANIMATION.md +114 -114
  95. package/docs/prompt-tasks/PROMPT_TASK_014_MENU_FUNCTIONAL_PARITY_QA.md +157 -157
  96. package/docs/prompt-tasks/PROMPT_TASK_015_TRANSFER_RELEASE_HANDOFF.md +127 -127
  97. package/docs/prompt-tasks/PROMPT_TASK_016_CROSS_PLATFORM_MCP_AUTH_REGISTRATION.md +107 -107
  98. package/docs/prompt-tasks/PROMPT_TASK_018_NPM_PUBLISH_2FA_SETUP.md +80 -80
  99. package/docs/prompt-tasks/PROMPT_TASK_019_TOKEN_ECONOMY_GLOBAL_SKILLS.md +56 -0
  100. package/docs/prompt-tasks/PROMPT_TASK_MASTER_EXECUTOR.md +6 -6
  101. package/docs/skill-candidates/v0.0.10/cli-creator/LICENSE.txt +201 -201
  102. package/docs/skill-candidates/v0.0.10/cli-creator/SKILL.md +160 -160
  103. package/docs/skill-candidates/v0.0.10/cli-creator/agents/openai.yaml +4 -4
  104. package/docs/skill-candidates/v0.0.10/cli-creator/references/agent-cli-patterns.md +154 -154
  105. package/docs/skill-candidates/v0.0.10/developer-workstation-ops/SKILL.md +32 -32
  106. package/docs/skill-candidates/v0.0.10/figma/LICENSE.txt +1 -1
  107. package/docs/skill-candidates/v0.0.10/figma/SKILL.md +42 -42
  108. package/docs/skill-candidates/v0.0.10/figma/agents/openai.yaml +14 -14
  109. package/docs/skill-candidates/v0.0.10/figma/assets/figma-small.svg +3 -3
  110. package/docs/skill-candidates/v0.0.10/figma/assets/icon.svg +28 -28
  111. package/docs/skill-candidates/v0.0.10/figma/references/figma-mcp-config.md +35 -35
  112. package/docs/skill-candidates/v0.0.10/figma/references/figma-tools-and-prompts.md +34 -34
  113. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/LICENSE.TXT +1 -1
  114. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/SKILL.md +349 -349
  115. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/agents/openai.yaml +14 -14
  116. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/figma-small.svg +3 -3
  117. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/icon.svg +28 -28
  118. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/references/mapping-checklist.md +7 -7
  119. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/scripts/normalize_node_id.py +25 -25
  120. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/LICENSE.TXT +1 -1
  121. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/SKILL.md +537 -537
  122. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/agents/openai.yaml +14 -14
  123. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/figma-small.svg +3 -3
  124. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/icon.svg +28 -28
  125. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/references/rule-template.md +15 -15
  126. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -9
  127. package/docs/skill-candidates/v0.0.10/figma-generate-design/LICENSE.TXT +1 -1
  128. package/docs/skill-candidates/v0.0.10/figma-generate-design/SKILL.md +341 -341
  129. package/docs/skill-candidates/v0.0.10/figma-generate-design/agents/openai.yaml +14 -14
  130. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/figma-small.svg +3 -3
  131. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/icon.svg +28 -28
  132. package/docs/skill-candidates/v0.0.10/figma-generate-design/maintainers.yml +1 -1
  133. package/docs/skill-candidates/v0.0.10/figma-generate-library/LICENSE.TXT +1 -1
  134. package/docs/skill-candidates/v0.0.10/figma-generate-library/SKILL.md +314 -314
  135. package/docs/skill-candidates/v0.0.10/figma-generate-library/agents/openai.yaml +14 -14
  136. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/figma-small.svg +3 -3
  137. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/icon.svg +28 -28
  138. package/docs/skill-candidates/v0.0.10/figma-generate-library/maintainers.yml +3 -3
  139. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/code-connect-setup.md +260 -260
  140. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/component-creation.md +1014 -1014
  141. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/discovery-phase.md +518 -518
  142. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/documentation-creation.md +834 -834
  143. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/error-recovery.md +540 -540
  144. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/naming-conventions.md +527 -527
  145. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/token-creation.md +962 -962
  146. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/bindVariablesToComponent.js +110 -110
  147. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/cleanupOrphans.js +127 -127
  148. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createComponentWithVariants.js +148 -148
  149. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createDocumentationPage.js +139 -139
  150. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createSemanticTokens.js +108 -108
  151. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createVariableCollection.js +49 -49
  152. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/inspectFileStructure.js +121 -121
  153. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/rehydrateState.js +92 -92
  154. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/validateCreation.js +83 -83
  155. package/docs/skill-candidates/v0.0.10/figma-implement-design/LICENSE.txt +1 -1
  156. package/docs/skill-candidates/v0.0.10/figma-implement-design/SKILL.md +258 -258
  157. package/docs/skill-candidates/v0.0.10/figma-implement-design/agents/openai.yaml +14 -14
  158. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/figma-small.svg +3 -3
  159. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/icon.svg +28 -28
  160. package/docs/skill-candidates/v0.0.10/figma-use/LICENSE.TXT +1 -1
  161. package/docs/skill-candidates/v0.0.10/figma-use/SKILL.md +233 -233
  162. package/docs/skill-candidates/v0.0.10/figma-use/agents/openai.yaml +14 -14
  163. package/docs/skill-candidates/v0.0.10/figma-use/assets/figma-small.svg +3 -3
  164. package/docs/skill-candidates/v0.0.10/figma-use/assets/icon.svg +28 -28
  165. package/docs/skill-candidates/v0.0.10/figma-use/maintainers.yml +1 -1
  166. package/docs/skill-candidates/v0.0.10/figma-use/references/api-reference.md +301 -301
  167. package/docs/skill-candidates/v0.0.10/figma-use/references/common-patterns.md +512 -512
  168. package/docs/skill-candidates/v0.0.10/figma-use/references/component-patterns.md +488 -488
  169. package/docs/skill-candidates/v0.0.10/figma-use/references/effect-style-patterns.md +123 -123
  170. package/docs/skill-candidates/v0.0.10/figma-use/references/gotchas.md +599 -599
  171. package/docs/skill-candidates/v0.0.10/figma-use/references/maintainers.yml +12 -12
  172. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-patterns.md +513 -513
  173. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.d.ts +11293 -11293
  174. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.index.md +441 -441
  175. package/docs/skill-candidates/v0.0.10/figma-use/references/text-style-patterns.md +203 -203
  176. package/docs/skill-candidates/v0.0.10/figma-use/references/validation-and-recovery.md +109 -109
  177. package/docs/skill-candidates/v0.0.10/figma-use/references/variable-patterns.md +354 -354
  178. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/maintainers.yml +9 -9
  179. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--creating.md +17 -17
  180. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--using.md +17 -17
  181. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components.md +50 -50
  182. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-effect-styles.md +52 -52
  183. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-text-styles.md +90 -90
  184. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--creating.md +13 -13
  185. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--using.md +13 -13
  186. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables.md +64 -64
  187. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds.md +41 -41
  188. package/docs/skill-candidates/v0.0.10/frontend-design/LICENSE.txt +177 -177
  189. package/docs/skill-candidates/v0.0.10/frontend-design/SKILL.md +55 -55
  190. package/docs/skill-candidates/v0.0.10/frontend-ui-ux-systems/SKILL.md +32 -32
  191. package/docs/skill-candidates/v0.0.10/github/SKILL.md +74 -74
  192. package/docs/skill-candidates/v0.0.10/github/agents/openai.yaml +6 -6
  193. package/docs/skill-candidates/v0.0.10/github/assets/github-small.svg +3 -3
  194. package/docs/skill-candidates/v0.0.10/image-graphic-design-rendering/SKILL.md +28 -28
  195. package/docs/skill-candidates/v0.0.10/language-quality-pt-en-fr-it-ru/SKILL.md +28 -28
  196. package/docs/skill-candidates/v0.0.10/math-physics-reasoning/SKILL.md +28 -28
  197. package/docs/skill-candidates/v0.0.10/mcp-builder/LICENSE.txt +201 -201
  198. package/docs/skill-candidates/v0.0.10/mcp-builder/SKILL.md +236 -236
  199. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/evaluation.md +601 -601
  200. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/mcp_best_practices.md +249 -249
  201. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/node_mcp_server.md +969 -969
  202. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/python_mcp_server.md +718 -718
  203. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/connections.py +151 -151
  204. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/evaluation.py +373 -373
  205. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/example_evaluation.xml +22 -22
  206. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/requirements.txt +2 -2
  207. package/docs/skill-candidates/v0.0.10/mcp-client-readiness/SKILL.md +31 -31
  208. package/docs/skill-candidates/v0.0.10/openai-docs/LICENSE.txt +201 -201
  209. package/docs/skill-candidates/v0.0.10/openai-docs/SKILL.md +161 -161
  210. package/docs/skill-candidates/v0.0.10/openai-docs/agents/openai.yaml +14 -14
  211. package/docs/skill-candidates/v0.0.10/openai-docs/assets/openai-small.svg +3 -3
  212. package/docs/skill-candidates/v0.0.10/openai-docs/references/latest-model.md +37 -37
  213. package/docs/skill-candidates/v0.0.10/openai-docs/references/prompting-guide.md +244 -244
  214. package/docs/skill-candidates/v0.0.10/openai-docs/references/upgrade-guide.md +181 -181
  215. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/fetch-codex-manual.mjs +598 -598
  216. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/resolve-latest-model-info.js +147 -147
  217. package/docs/skill-candidates/v0.0.10/playwright/NOTICE.txt +14 -14
  218. package/docs/skill-candidates/v0.0.10/playwright/SKILL.md +147 -147
  219. package/docs/skill-candidates/v0.0.10/playwright/agents/openai.yaml +6 -6
  220. package/docs/skill-candidates/v0.0.10/playwright/assets/playwright-small.svg +3 -3
  221. package/docs/skill-candidates/v0.0.10/playwright/references/cli.md +116 -116
  222. package/docs/skill-candidates/v0.0.10/playwright/references/workflows.md +95 -95
  223. package/docs/skill-candidates/v0.0.10/playwright/scripts/playwright_cli.sh +25 -25
  224. package/docs/skill-candidates/v0.0.10/polyglot-backend-engineering/SKILL.md +32 -32
  225. package/docs/skill-candidates/v0.0.10/screenshot/LICENSE.txt +201 -201
  226. package/docs/skill-candidates/v0.0.10/screenshot/SKILL.md +267 -267
  227. package/docs/skill-candidates/v0.0.10/screenshot/agents/openai.yaml +6 -6
  228. package/docs/skill-candidates/v0.0.10/screenshot/assets/screenshot-small.svg +5 -5
  229. package/docs/skill-candidates/v0.0.10/screenshot/scripts/ensure_macos_permissions.sh +54 -54
  230. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_display_info.swift +22 -22
  231. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_permissions.swift +40 -40
  232. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_window_info.swift +126 -126
  233. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.ps1 +163 -163
  234. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.py +585 -585
  235. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/SKILL.md +62 -62
  236. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/agents/openai.yaml +4 -4
  237. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/activation-policy.md +77 -77
  238. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/human-approval-policy.md +83 -83
  239. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/persona-dev-senior-master.md +46 -46
  240. package/docs/skill-candidates/v0.0.10/terminal-menu-operations/SKILL.md +30 -30
  241. package/docs/skill-candidates/v0.0.10/terminal-pixel-art-tui/SKILL.md +43 -43
  242. package/docs/skill-candidates/v0.0.10/webapp-testing/LICENSE.txt +201 -201
  243. package/docs/skill-candidates/v0.0.10/webapp-testing/SKILL.md +95 -95
  244. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/console_logging.py +34 -34
  245. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/element_discovery.py +39 -39
  246. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/static_html_automation.py +32 -32
  247. package/docs/skill-candidates/v0.0.10/webapp-testing/scripts/with_server.py +105 -105
  248. package/docs/skill-candidates/v0.0.10/winui-app/LICENSE.txt +201 -201
  249. package/docs/skill-candidates/v0.0.10/winui-app/SKILL.md +94 -94
  250. package/docs/skill-candidates/v0.0.10/winui-app/agents/openai.yaml +5 -5
  251. package/docs/skill-candidates/v0.0.10/winui-app/config.yaml +50 -50
  252. package/docs/skill-candidates/v0.0.10/winui-app/references/_sections.md +96 -96
  253. package/docs/skill-candidates/v0.0.10/winui-app/references/accessibility-input-and-localization.md +51 -51
  254. package/docs/skill-candidates/v0.0.10/winui-app/references/build-run-and-launch-verification.md +72 -72
  255. package/docs/skill-candidates/v0.0.10/winui-app/references/community-toolkit-controls-and-helpers.md +57 -57
  256. package/docs/skill-candidates/v0.0.10/winui-app/references/controls-layout-and-adaptive-ui.md +84 -84
  257. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-environment-audit-and-remediation.md +82 -82
  258. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-setup-and-project-selection.md +67 -67
  259. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-template-first-recovery.md +62 -62
  260. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-winui-app-structure.md +62 -62
  261. package/docs/skill-candidates/v0.0.10/winui-app/references/motion-animations-and-polish.md +45 -45
  262. package/docs/skill-candidates/v0.0.10/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -46
  263. package/docs/skill-candidates/v0.0.10/winui-app/references/sample-source-map.md +37 -37
  264. package/docs/skill-candidates/v0.0.10/winui-app/references/shell-navigation-and-windowing.md +67 -67
  265. package/docs/skill-candidates/v0.0.10/winui-app/references/styling-theming-materials-and-icons.md +71 -71
  266. package/docs/skill-candidates/v0.0.10/winui-app/references/testing-debugging-and-review-checklists.md +77 -77
  267. package/docs/skill-candidates/v0.0.10/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -52
  268. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/SKILL.md +398 -398
  269. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/common-patterns.md +330 -330
  270. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/complete-examples.md +871 -871
  271. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/component-patterns.md +501 -501
  272. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/data-fetching.md +766 -766
  273. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/file-organization.md +501 -501
  274. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/loading-and-error-states.md +500 -500
  275. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/performance.md +405 -405
  276. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/routing-guide.md +363 -363
  277. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/styling-guide.md +427 -427
  278. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/typescript-standards.md +417 -417
  279. package/docs/skill-candidates/v0.0.11/git-version-control-ops/SKILL.md +34 -34
  280. package/docs/skill-candidates/v0.0.11/go-engineering/SKILL.md +34 -34
  281. package/docs/skill-candidates/v0.0.11/java-engineering/SKILL.md +34 -34
  282. package/docs/skill-candidates/v0.0.11/javascript-engineering/SKILL.md +34 -34
  283. package/docs/skill-candidates/v0.0.11/json-contract-design/SKILL.md +34 -34
  284. package/docs/skill-candidates/v0.0.11/multi-client-mcp-ops/SKILL.md +36 -36
  285. package/docs/skill-candidates/v0.0.11/nextjs/SKILL.md +745 -745
  286. package/docs/skill-candidates/v0.0.11/nextjs/agents/openai.yaml +3 -3
  287. package/docs/skill-candidates/v0.0.11/nextjs/references/app-router-files.md +94 -94
  288. package/docs/skill-candidates/v0.0.11/python-engineering/SKILL.md +34 -34
  289. package/docs/skill-candidates/v0.0.11/ruby-engineering/SKILL.md +34 -34
  290. package/docs/skill-candidates/v0.0.11/senior-fullstack/SKILL.md +209 -209
  291. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/architecture_patterns.md +103 -103
  292. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/development_workflows.md +103 -103
  293. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/tech_stack_guide.md +103 -103
  294. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/code_quality_analyzer.py +114 -114
  295. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/fullstack_scaffolder.py +114 -114
  296. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/project_scaffolder.py +114 -114
  297. package/docs/skill-candidates/v0.0.11/shadcn/SKILL.md +573 -573
  298. package/docs/skill-candidates/v0.0.11/shadcn/agents/openai.yaml +3 -3
  299. package/docs/skill-candidates/v0.0.11/sql-postgresql-engineering/SKILL.md +34 -34
  300. package/docs/skill-candidates/v0.0.11/terminal-shell-ops/SKILL.md +34 -34
  301. package/docs/skill-candidates/v0.0.11/typescript-expert/SKILL.md +429 -429
  302. package/docs/skill-candidates/v0.0.11/typescript-expert/references/tsconfig-strict.json +91 -91
  303. package/docs/skill-candidates/v0.0.11/typescript-expert/references/typescript-cheatsheet.md +383 -383
  304. package/docs/skill-candidates/v0.0.11/typescript-expert/references/utility-types.ts +335 -335
  305. package/docs/skill-candidates/v0.0.11/typescript-expert/scripts/ts_diagnostic.py +203 -203
  306. package/docs/skill-candidates/v0.0.11/ui-component-primitives/SKILL.md +34 -34
  307. package/docs/skill-candidates/v0.0.11/web-mobile-design-systems/SKILL.md +34 -34
  308. package/docs/skill-candidates/v0.0.11/windows-linux-platform-ops/SKILL.md +34 -34
  309. package/docs/skill-candidates/v0.0.12/context-compression-handoff/SKILL.md +47 -0
  310. package/docs/skill-candidates/v0.0.12/csharp-senior-master-engineering/SKILL.md +32 -32
  311. package/docs/skill-candidates/v0.0.12/css-senior-master-engineering/SKILL.md +32 -32
  312. package/docs/skill-candidates/v0.0.12/go-senior-master-engineering/SKILL.md +32 -32
  313. package/docs/skill-candidates/v0.0.12/html-senior-master-engineering/SKILL.md +32 -32
  314. package/docs/skill-candidates/v0.0.12/javascript-senior-master-engineering/SKILL.md +32 -32
  315. package/docs/skill-candidates/v0.0.12/json-senior-master-engineering/SKILL.md +32 -32
  316. package/docs/skill-candidates/v0.0.12/prompt-budget-gate/SKILL.md +46 -0
  317. package/docs/skill-candidates/v0.0.12/python-senior-master-engineering/SKILL.md +32 -32
  318. package/docs/skill-candidates/v0.0.12/react-senior-master-engineering/SKILL.md +32 -32
  319. package/docs/skill-candidates/v0.0.12/ruby-senior-master-engineering/SKILL.md +32 -32
  320. package/docs/skill-candidates/v0.0.12/senior-master-code-optimizer/SKILL.md +48 -48
  321. package/docs/skill-candidates/v0.0.12/sql-senior-master-engineering/SKILL.md +31 -31
  322. package/docs/skill-candidates/v0.0.12/token-economy-orchestrator/SKILL.md +38 -0
  323. package/docs/skill-candidates/v0.0.12/typescript-senior-master-engineering/SKILL.md +35 -35
  324. package/docs/skill-candidates/v0.0.9/ai-ethics-human-dignity/SKILL.md +32 -32
  325. package/docs/skill-candidates/v0.0.9/broad-domain-router/SKILL.md +41 -41
  326. package/docs/skill-candidates/v0.0.9/catholic-moral-discernment/SKILL.md +31 -31
  327. package/docs/skill-candidates/v0.0.9/engineering-systems-master/SKILL.md +31 -31
  328. package/docs/skill-candidates/v0.0.9/language-quality-pt-en-fr/SKILL.md +28 -28
  329. package/docs/skill-candidates/v0.0.9/math-science-reasoning/SKILL.md +29 -29
  330. package/docs/skill-candidates/v0.0.9/philosophy-sociology-discernment/SKILL.md +28 -28
  331. package/docs/skill-candidates/v0.0.9/professional-boundary-triage/SKILL.md +40 -40
  332. package/docs/skill-candidates/v0.0.9/release-ethics-gate/SKILL.md +32 -32
  333. package/docs/skill-candidates/v0.0.9/source-authority-reviewer/SKILL.md +31 -31
  334. package/examples/client-configs/claude-code.commands.md +21 -21
  335. package/examples/client-configs/claude-code.project.mcp.json +18 -18
  336. package/examples/client-configs/claude-desktop.macos.json +18 -18
  337. package/examples/client-configs/claude-desktop.windows.json +20 -20
  338. package/examples/client-configs/codex.windows.toml +11 -11
  339. package/examples/client-configs/gemini-code-assist.intellij.mcp.json +18 -18
  340. package/examples/client-configs/gemini.linux.settings.json +21 -21
  341. package/examples/client-configs/gemini.windows.settings.json +23 -23
  342. package/examples/client-configs/generic-stdio.json +16 -16
  343. package/manifests/channels/beta.json +24 -24
  344. package/manifests/channels/stable.json +25 -25
  345. package/network/approved-skills.json +54 -54
  346. package/network/unapproved-skill-candidates.json +110 -110
  347. package/package.json +89 -86
  348. package/scripts/configure-private-registry.mjs +208 -208
  349. package/scripts/lib/private-registry.mjs +97 -97
  350. package/scripts/render-menu-evidence.mjs +196 -130
  351. package/scripts/verify-menu-actions.mjs +112 -107
  352. package/scripts/verify-menu-visual.mjs +90 -0
  353. 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
+ }