@fprad0/skill-master-mcp 0.0.12 → 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 (331) hide show
  1. package/CHANGELOG.md +96 -90
  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 +293 -293
  6. package/bin/lib/doctor-core.mjs +202 -0
  7. package/bin/lib/menu-core.mjs +1629 -1522
  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 +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 -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 +406 -405
  20. package/bin/skill-master-register-clients.mjs +232 -153
  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 -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 +75 -75
  42. package/docs/operations/assets/menu-frame-large.html +83 -83
  43. package/docs/operations/assets/menu-frame-running.html +79 -79
  44. package/docs/operations/cross-platform-auth-transfer/ANALISE_COMPATIBILIDADE_MCP_2026-06-28.md +140 -140
  45. package/docs/operations/cross-platform-auth-transfer/README_TRANSFERENCIA.md +85 -85
  46. package/docs/operations/reborn-menu-cyberpunk-transfer/ANALISE_MENU_REBORN_CYBERPUNK_2026-06-28.md +174 -174
  47. package/docs/operations/reborn-menu-cyberpunk-transfer/HANDOFF_IMPLEMENTACAO_REBORN_CYBERPUNK_2026-06-28.md +119 -119
  48. package/docs/operations/reborn-menu-cyberpunk-transfer/ORDEM_DE_EXECUCAO_MENU_REBORN_CYBERPUNK.md +134 -134
  49. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA.md +84 -84
  50. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA_REBORN_PACKAGE.md +56 -56
  51. package/docs/operations/token-economy-transfer/ANALISE_AVANCADA_ECONOMIA_TOKENS_2026-06-30.md +141 -0
  52. package/docs/operations/token-economy-transfer/PLANO_DEV_SENIOR_MASTER_TOKEN_ECONOMY_2026-06-30.md +171 -0
  53. package/docs/operations/token-economy-transfer/README_TRANSFERENCIA_TOKEN_ECONOMY.md +31 -0
  54. package/docs/planning/MENU_RUNTIME_CORRECTION_PLAN_2026-06-30.md +551 -0
  55. package/docs/planning/V0_0_9_APROVACAO_CRITICA_MENSAGENS_DE_VENDA.md +85 -85
  56. package/docs/planning/V0_0_9_FONTES_E_CRITERIOS_DE_AUTORIDADE.md +139 -139
  57. package/docs/planning/V0_0_9_MATRIZ_SKILLS_MULTIDISCIPLINARES.md +105 -105
  58. package/docs/planning/V0_0_9_POLITICA_MORAL_CATOLICA_PARA_IA.md +181 -181
  59. package/docs/planning/V0_0_9_PROMPTS_EXECUCAO.md +59 -59
  60. package/docs/planning/V0_0_9_ROADMAP_DISCERNIMENTO_E_CONHECIMENTO_AMPLO.md +181 -181
  61. package/docs/prompt-tasks/PROMPT_TASK_001_BOOTSTRAP_SKILL_MASTER_MCP.md +6 -6
  62. package/docs/prompt-tasks/PROMPT_TASK_002_AUTO_UPDATE_LAUNCHER.md +6 -6
  63. package/docs/prompt-tasks/PROMPT_TASK_003_REMOTE_MANIFEST_AND_RELEASES.md +6 -6
  64. package/docs/prompt-tasks/PROMPT_TASK_004_MULTI_USER_DISTRIBUTION.md +6 -6
  65. package/docs/prompt-tasks/PROMPT_TASK_005_SECURITY_AND_QUALITY_GATE.md +6 -6
  66. package/docs/prompt-tasks/PROMPT_TASK_006_MASTER_ACIONAMENTO_APRENDIZADO.md +83 -83
  67. package/docs/prompt-tasks/PROMPT_TASK_007_PERSONA_ORQUESTRADORA.md +88 -88
  68. package/docs/prompt-tasks/PROMPT_TASK_008_PROMPT_ROUTER_MODOS_ATIVACAO.md +156 -156
  69. package/docs/prompt-tasks/PROMPT_TASK_009_PIPELINE_APRENDIZADO_SUCESSO.md +105 -105
  70. package/docs/prompt-tasks/PROMPT_TASK_010_EVALS_GOVERNANCA_ATIVACAO.md +119 -119
  71. package/docs/prompt-tasks/PROMPT_TASK_011_MENU_NOTIFICACOES_NOTION.md +120 -120
  72. package/docs/prompt-tasks/PROMPT_TASK_012_MENU_CYBERPUNK_PIXEL_FRAME.md +123 -123
  73. package/docs/prompt-tasks/PROMPT_TASK_013_MENU_FLUID_DNA_ANIMATION.md +114 -114
  74. package/docs/prompt-tasks/PROMPT_TASK_014_MENU_FUNCTIONAL_PARITY_QA.md +157 -157
  75. package/docs/prompt-tasks/PROMPT_TASK_015_TRANSFER_RELEASE_HANDOFF.md +127 -127
  76. package/docs/prompt-tasks/PROMPT_TASK_016_CROSS_PLATFORM_MCP_AUTH_REGISTRATION.md +107 -107
  77. package/docs/prompt-tasks/PROMPT_TASK_018_NPM_PUBLISH_2FA_SETUP.md +80 -80
  78. package/docs/prompt-tasks/PROMPT_TASK_019_TOKEN_ECONOMY_GLOBAL_SKILLS.md +56 -0
  79. package/docs/prompt-tasks/PROMPT_TASK_MASTER_EXECUTOR.md +6 -6
  80. package/docs/skill-candidates/v0.0.10/cli-creator/LICENSE.txt +201 -201
  81. package/docs/skill-candidates/v0.0.10/cli-creator/SKILL.md +160 -160
  82. package/docs/skill-candidates/v0.0.10/cli-creator/agents/openai.yaml +4 -4
  83. package/docs/skill-candidates/v0.0.10/cli-creator/references/agent-cli-patterns.md +154 -154
  84. package/docs/skill-candidates/v0.0.10/developer-workstation-ops/SKILL.md +32 -32
  85. package/docs/skill-candidates/v0.0.10/figma/LICENSE.txt +1 -1
  86. package/docs/skill-candidates/v0.0.10/figma/SKILL.md +42 -42
  87. package/docs/skill-candidates/v0.0.10/figma/agents/openai.yaml +14 -14
  88. package/docs/skill-candidates/v0.0.10/figma/assets/figma-small.svg +3 -3
  89. package/docs/skill-candidates/v0.0.10/figma/assets/icon.svg +28 -28
  90. package/docs/skill-candidates/v0.0.10/figma/references/figma-mcp-config.md +35 -35
  91. package/docs/skill-candidates/v0.0.10/figma/references/figma-tools-and-prompts.md +34 -34
  92. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/LICENSE.TXT +1 -1
  93. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/SKILL.md +349 -349
  94. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/agents/openai.yaml +14 -14
  95. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/figma-small.svg +3 -3
  96. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/icon.svg +28 -28
  97. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/references/mapping-checklist.md +7 -7
  98. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/scripts/normalize_node_id.py +25 -25
  99. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/LICENSE.TXT +1 -1
  100. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/SKILL.md +537 -537
  101. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/agents/openai.yaml +14 -14
  102. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/figma-small.svg +3 -3
  103. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/icon.svg +28 -28
  104. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/references/rule-template.md +15 -15
  105. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -9
  106. package/docs/skill-candidates/v0.0.10/figma-generate-design/LICENSE.TXT +1 -1
  107. package/docs/skill-candidates/v0.0.10/figma-generate-design/SKILL.md +341 -341
  108. package/docs/skill-candidates/v0.0.10/figma-generate-design/agents/openai.yaml +14 -14
  109. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/figma-small.svg +3 -3
  110. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/icon.svg +28 -28
  111. package/docs/skill-candidates/v0.0.10/figma-generate-design/maintainers.yml +1 -1
  112. package/docs/skill-candidates/v0.0.10/figma-generate-library/LICENSE.TXT +1 -1
  113. package/docs/skill-candidates/v0.0.10/figma-generate-library/SKILL.md +314 -314
  114. package/docs/skill-candidates/v0.0.10/figma-generate-library/agents/openai.yaml +14 -14
  115. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/figma-small.svg +3 -3
  116. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/icon.svg +28 -28
  117. package/docs/skill-candidates/v0.0.10/figma-generate-library/maintainers.yml +3 -3
  118. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/code-connect-setup.md +260 -260
  119. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/component-creation.md +1014 -1014
  120. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/discovery-phase.md +518 -518
  121. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/documentation-creation.md +834 -834
  122. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/error-recovery.md +540 -540
  123. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/naming-conventions.md +527 -527
  124. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/token-creation.md +962 -962
  125. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/bindVariablesToComponent.js +110 -110
  126. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/cleanupOrphans.js +127 -127
  127. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createComponentWithVariants.js +148 -148
  128. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createDocumentationPage.js +139 -139
  129. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createSemanticTokens.js +108 -108
  130. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createVariableCollection.js +49 -49
  131. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/inspectFileStructure.js +121 -121
  132. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/rehydrateState.js +92 -92
  133. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/validateCreation.js +83 -83
  134. package/docs/skill-candidates/v0.0.10/figma-implement-design/LICENSE.txt +1 -1
  135. package/docs/skill-candidates/v0.0.10/figma-implement-design/SKILL.md +258 -258
  136. package/docs/skill-candidates/v0.0.10/figma-implement-design/agents/openai.yaml +14 -14
  137. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/figma-small.svg +3 -3
  138. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/icon.svg +28 -28
  139. package/docs/skill-candidates/v0.0.10/figma-use/LICENSE.TXT +1 -1
  140. package/docs/skill-candidates/v0.0.10/figma-use/SKILL.md +233 -233
  141. package/docs/skill-candidates/v0.0.10/figma-use/agents/openai.yaml +14 -14
  142. package/docs/skill-candidates/v0.0.10/figma-use/assets/figma-small.svg +3 -3
  143. package/docs/skill-candidates/v0.0.10/figma-use/assets/icon.svg +28 -28
  144. package/docs/skill-candidates/v0.0.10/figma-use/maintainers.yml +1 -1
  145. package/docs/skill-candidates/v0.0.10/figma-use/references/api-reference.md +301 -301
  146. package/docs/skill-candidates/v0.0.10/figma-use/references/common-patterns.md +512 -512
  147. package/docs/skill-candidates/v0.0.10/figma-use/references/component-patterns.md +488 -488
  148. package/docs/skill-candidates/v0.0.10/figma-use/references/effect-style-patterns.md +123 -123
  149. package/docs/skill-candidates/v0.0.10/figma-use/references/gotchas.md +599 -599
  150. package/docs/skill-candidates/v0.0.10/figma-use/references/maintainers.yml +12 -12
  151. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-patterns.md +513 -513
  152. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.d.ts +11293 -11293
  153. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.index.md +441 -441
  154. package/docs/skill-candidates/v0.0.10/figma-use/references/text-style-patterns.md +203 -203
  155. package/docs/skill-candidates/v0.0.10/figma-use/references/validation-and-recovery.md +109 -109
  156. package/docs/skill-candidates/v0.0.10/figma-use/references/variable-patterns.md +354 -354
  157. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/maintainers.yml +9 -9
  158. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--creating.md +17 -17
  159. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--using.md +17 -17
  160. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components.md +50 -50
  161. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-effect-styles.md +52 -52
  162. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-text-styles.md +90 -90
  163. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--creating.md +13 -13
  164. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--using.md +13 -13
  165. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables.md +64 -64
  166. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds.md +41 -41
  167. package/docs/skill-candidates/v0.0.10/frontend-design/LICENSE.txt +177 -177
  168. package/docs/skill-candidates/v0.0.10/frontend-design/SKILL.md +55 -55
  169. package/docs/skill-candidates/v0.0.10/frontend-ui-ux-systems/SKILL.md +32 -32
  170. package/docs/skill-candidates/v0.0.10/github/SKILL.md +74 -74
  171. package/docs/skill-candidates/v0.0.10/github/agents/openai.yaml +6 -6
  172. package/docs/skill-candidates/v0.0.10/github/assets/github-small.svg +3 -3
  173. package/docs/skill-candidates/v0.0.10/image-graphic-design-rendering/SKILL.md +28 -28
  174. package/docs/skill-candidates/v0.0.10/language-quality-pt-en-fr-it-ru/SKILL.md +28 -28
  175. package/docs/skill-candidates/v0.0.10/math-physics-reasoning/SKILL.md +28 -28
  176. package/docs/skill-candidates/v0.0.10/mcp-builder/LICENSE.txt +201 -201
  177. package/docs/skill-candidates/v0.0.10/mcp-builder/SKILL.md +236 -236
  178. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/evaluation.md +601 -601
  179. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/mcp_best_practices.md +249 -249
  180. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/node_mcp_server.md +969 -969
  181. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/python_mcp_server.md +718 -718
  182. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/connections.py +151 -151
  183. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/evaluation.py +373 -373
  184. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/example_evaluation.xml +22 -22
  185. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/requirements.txt +2 -2
  186. package/docs/skill-candidates/v0.0.10/mcp-client-readiness/SKILL.md +31 -31
  187. package/docs/skill-candidates/v0.0.10/openai-docs/LICENSE.txt +201 -201
  188. package/docs/skill-candidates/v0.0.10/openai-docs/SKILL.md +161 -161
  189. package/docs/skill-candidates/v0.0.10/openai-docs/agents/openai.yaml +14 -14
  190. package/docs/skill-candidates/v0.0.10/openai-docs/assets/openai-small.svg +3 -3
  191. package/docs/skill-candidates/v0.0.10/openai-docs/references/latest-model.md +37 -37
  192. package/docs/skill-candidates/v0.0.10/openai-docs/references/prompting-guide.md +244 -244
  193. package/docs/skill-candidates/v0.0.10/openai-docs/references/upgrade-guide.md +181 -181
  194. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/fetch-codex-manual.mjs +598 -598
  195. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/resolve-latest-model-info.js +147 -147
  196. package/docs/skill-candidates/v0.0.10/playwright/NOTICE.txt +14 -14
  197. package/docs/skill-candidates/v0.0.10/playwright/SKILL.md +147 -147
  198. package/docs/skill-candidates/v0.0.10/playwright/agents/openai.yaml +6 -6
  199. package/docs/skill-candidates/v0.0.10/playwright/assets/playwright-small.svg +3 -3
  200. package/docs/skill-candidates/v0.0.10/playwright/references/cli.md +116 -116
  201. package/docs/skill-candidates/v0.0.10/playwright/references/workflows.md +95 -95
  202. package/docs/skill-candidates/v0.0.10/playwright/scripts/playwright_cli.sh +25 -25
  203. package/docs/skill-candidates/v0.0.10/polyglot-backend-engineering/SKILL.md +32 -32
  204. package/docs/skill-candidates/v0.0.10/screenshot/LICENSE.txt +201 -201
  205. package/docs/skill-candidates/v0.0.10/screenshot/SKILL.md +267 -267
  206. package/docs/skill-candidates/v0.0.10/screenshot/agents/openai.yaml +6 -6
  207. package/docs/skill-candidates/v0.0.10/screenshot/assets/screenshot-small.svg +5 -5
  208. package/docs/skill-candidates/v0.0.10/screenshot/scripts/ensure_macos_permissions.sh +54 -54
  209. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_display_info.swift +22 -22
  210. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_permissions.swift +40 -40
  211. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_window_info.swift +126 -126
  212. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.ps1 +163 -163
  213. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.py +585 -585
  214. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/SKILL.md +62 -62
  215. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/agents/openai.yaml +4 -4
  216. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/activation-policy.md +77 -77
  217. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/human-approval-policy.md +83 -83
  218. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/persona-dev-senior-master.md +46 -46
  219. package/docs/skill-candidates/v0.0.10/terminal-menu-operations/SKILL.md +30 -30
  220. package/docs/skill-candidates/v0.0.10/terminal-pixel-art-tui/SKILL.md +43 -43
  221. package/docs/skill-candidates/v0.0.10/webapp-testing/LICENSE.txt +201 -201
  222. package/docs/skill-candidates/v0.0.10/webapp-testing/SKILL.md +95 -95
  223. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/console_logging.py +34 -34
  224. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/element_discovery.py +39 -39
  225. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/static_html_automation.py +32 -32
  226. package/docs/skill-candidates/v0.0.10/webapp-testing/scripts/with_server.py +105 -105
  227. package/docs/skill-candidates/v0.0.10/winui-app/LICENSE.txt +201 -201
  228. package/docs/skill-candidates/v0.0.10/winui-app/SKILL.md +94 -94
  229. package/docs/skill-candidates/v0.0.10/winui-app/agents/openai.yaml +5 -5
  230. package/docs/skill-candidates/v0.0.10/winui-app/config.yaml +50 -50
  231. package/docs/skill-candidates/v0.0.10/winui-app/references/_sections.md +96 -96
  232. package/docs/skill-candidates/v0.0.10/winui-app/references/accessibility-input-and-localization.md +51 -51
  233. package/docs/skill-candidates/v0.0.10/winui-app/references/build-run-and-launch-verification.md +72 -72
  234. package/docs/skill-candidates/v0.0.10/winui-app/references/community-toolkit-controls-and-helpers.md +57 -57
  235. package/docs/skill-candidates/v0.0.10/winui-app/references/controls-layout-and-adaptive-ui.md +84 -84
  236. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-environment-audit-and-remediation.md +82 -82
  237. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-setup-and-project-selection.md +67 -67
  238. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-template-first-recovery.md +62 -62
  239. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-winui-app-structure.md +62 -62
  240. package/docs/skill-candidates/v0.0.10/winui-app/references/motion-animations-and-polish.md +45 -45
  241. package/docs/skill-candidates/v0.0.10/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -46
  242. package/docs/skill-candidates/v0.0.10/winui-app/references/sample-source-map.md +37 -37
  243. package/docs/skill-candidates/v0.0.10/winui-app/references/shell-navigation-and-windowing.md +67 -67
  244. package/docs/skill-candidates/v0.0.10/winui-app/references/styling-theming-materials-and-icons.md +71 -71
  245. package/docs/skill-candidates/v0.0.10/winui-app/references/testing-debugging-and-review-checklists.md +77 -77
  246. package/docs/skill-candidates/v0.0.10/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -52
  247. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/SKILL.md +398 -398
  248. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/common-patterns.md +330 -330
  249. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/complete-examples.md +871 -871
  250. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/component-patterns.md +501 -501
  251. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/data-fetching.md +766 -766
  252. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/file-organization.md +501 -501
  253. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/loading-and-error-states.md +500 -500
  254. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/performance.md +405 -405
  255. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/routing-guide.md +363 -363
  256. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/styling-guide.md +427 -427
  257. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/typescript-standards.md +417 -417
  258. package/docs/skill-candidates/v0.0.11/git-version-control-ops/SKILL.md +34 -34
  259. package/docs/skill-candidates/v0.0.11/go-engineering/SKILL.md +34 -34
  260. package/docs/skill-candidates/v0.0.11/java-engineering/SKILL.md +34 -34
  261. package/docs/skill-candidates/v0.0.11/javascript-engineering/SKILL.md +34 -34
  262. package/docs/skill-candidates/v0.0.11/json-contract-design/SKILL.md +34 -34
  263. package/docs/skill-candidates/v0.0.11/multi-client-mcp-ops/SKILL.md +36 -36
  264. package/docs/skill-candidates/v0.0.11/nextjs/SKILL.md +745 -745
  265. package/docs/skill-candidates/v0.0.11/nextjs/agents/openai.yaml +3 -3
  266. package/docs/skill-candidates/v0.0.11/nextjs/references/app-router-files.md +94 -94
  267. package/docs/skill-candidates/v0.0.11/python-engineering/SKILL.md +34 -34
  268. package/docs/skill-candidates/v0.0.11/ruby-engineering/SKILL.md +34 -34
  269. package/docs/skill-candidates/v0.0.11/senior-fullstack/SKILL.md +209 -209
  270. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/architecture_patterns.md +103 -103
  271. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/development_workflows.md +103 -103
  272. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/tech_stack_guide.md +103 -103
  273. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/code_quality_analyzer.py +114 -114
  274. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/fullstack_scaffolder.py +114 -114
  275. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/project_scaffolder.py +114 -114
  276. package/docs/skill-candidates/v0.0.11/shadcn/SKILL.md +573 -573
  277. package/docs/skill-candidates/v0.0.11/shadcn/agents/openai.yaml +3 -3
  278. package/docs/skill-candidates/v0.0.11/sql-postgresql-engineering/SKILL.md +34 -34
  279. package/docs/skill-candidates/v0.0.11/terminal-shell-ops/SKILL.md +34 -34
  280. package/docs/skill-candidates/v0.0.11/typescript-expert/SKILL.md +429 -429
  281. package/docs/skill-candidates/v0.0.11/typescript-expert/references/tsconfig-strict.json +91 -91
  282. package/docs/skill-candidates/v0.0.11/typescript-expert/references/typescript-cheatsheet.md +383 -383
  283. package/docs/skill-candidates/v0.0.11/typescript-expert/references/utility-types.ts +335 -335
  284. package/docs/skill-candidates/v0.0.11/typescript-expert/scripts/ts_diagnostic.py +203 -203
  285. package/docs/skill-candidates/v0.0.11/ui-component-primitives/SKILL.md +34 -34
  286. package/docs/skill-candidates/v0.0.11/web-mobile-design-systems/SKILL.md +34 -34
  287. package/docs/skill-candidates/v0.0.11/windows-linux-platform-ops/SKILL.md +34 -34
  288. package/docs/skill-candidates/v0.0.12/context-compression-handoff/SKILL.md +47 -0
  289. package/docs/skill-candidates/v0.0.12/csharp-senior-master-engineering/SKILL.md +32 -32
  290. package/docs/skill-candidates/v0.0.12/css-senior-master-engineering/SKILL.md +32 -32
  291. package/docs/skill-candidates/v0.0.12/go-senior-master-engineering/SKILL.md +32 -32
  292. package/docs/skill-candidates/v0.0.12/html-senior-master-engineering/SKILL.md +32 -32
  293. package/docs/skill-candidates/v0.0.12/javascript-senior-master-engineering/SKILL.md +32 -32
  294. package/docs/skill-candidates/v0.0.12/json-senior-master-engineering/SKILL.md +32 -32
  295. package/docs/skill-candidates/v0.0.12/prompt-budget-gate/SKILL.md +46 -0
  296. package/docs/skill-candidates/v0.0.12/python-senior-master-engineering/SKILL.md +32 -32
  297. package/docs/skill-candidates/v0.0.12/react-senior-master-engineering/SKILL.md +32 -32
  298. package/docs/skill-candidates/v0.0.12/ruby-senior-master-engineering/SKILL.md +32 -32
  299. package/docs/skill-candidates/v0.0.12/senior-master-code-optimizer/SKILL.md +48 -48
  300. package/docs/skill-candidates/v0.0.12/sql-senior-master-engineering/SKILL.md +31 -31
  301. package/docs/skill-candidates/v0.0.12/token-economy-orchestrator/SKILL.md +38 -0
  302. package/docs/skill-candidates/v0.0.12/typescript-senior-master-engineering/SKILL.md +35 -35
  303. package/docs/skill-candidates/v0.0.9/ai-ethics-human-dignity/SKILL.md +32 -32
  304. package/docs/skill-candidates/v0.0.9/broad-domain-router/SKILL.md +41 -41
  305. package/docs/skill-candidates/v0.0.9/catholic-moral-discernment/SKILL.md +31 -31
  306. package/docs/skill-candidates/v0.0.9/engineering-systems-master/SKILL.md +31 -31
  307. package/docs/skill-candidates/v0.0.9/language-quality-pt-en-fr/SKILL.md +28 -28
  308. package/docs/skill-candidates/v0.0.9/math-science-reasoning/SKILL.md +29 -29
  309. package/docs/skill-candidates/v0.0.9/philosophy-sociology-discernment/SKILL.md +28 -28
  310. package/docs/skill-candidates/v0.0.9/professional-boundary-triage/SKILL.md +40 -40
  311. package/docs/skill-candidates/v0.0.9/release-ethics-gate/SKILL.md +32 -32
  312. package/docs/skill-candidates/v0.0.9/source-authority-reviewer/SKILL.md +31 -31
  313. package/examples/client-configs/claude-code.commands.md +21 -21
  314. package/examples/client-configs/claude-code.project.mcp.json +18 -18
  315. package/examples/client-configs/claude-desktop.macos.json +18 -18
  316. package/examples/client-configs/claude-desktop.windows.json +20 -20
  317. package/examples/client-configs/codex.windows.toml +11 -11
  318. package/examples/client-configs/gemini-code-assist.intellij.mcp.json +18 -18
  319. package/examples/client-configs/gemini.linux.settings.json +21 -21
  320. package/examples/client-configs/gemini.windows.settings.json +23 -23
  321. package/examples/client-configs/generic-stdio.json +16 -16
  322. package/manifests/channels/beta.json +26 -26
  323. package/manifests/channels/stable.json +27 -27
  324. package/network/approved-skills.json +54 -54
  325. package/network/unapproved-skill-candidates.json +110 -110
  326. package/package.json +87 -86
  327. package/scripts/configure-private-registry.mjs +208 -208
  328. package/scripts/lib/private-registry.mjs +97 -97
  329. package/scripts/render-menu-evidence.mjs +130 -130
  330. package/scripts/verify-menu-actions.mjs +117 -117
  331. package/sources.json +11 -11
@@ -1,148 +1,148 @@
1
- /**
2
- * createComponentWithVariants
3
- *
4
- * Creates a component set by generating all combinations of `variantAxes`,
5
- * building one Figma component per combination, then calling
6
- * `figma.combineAsVariants` to produce the component set. After combining,
7
- * the variants are repositioned into a grid so they don't all stack at (0, 0).
8
- *
9
- * @param {{
10
- * name: string,
11
- * variantAxes: Record<string, string[]>,
12
- * baseProps: {
13
- * width: number,
14
- * height: number,
15
- * fills?: Paint[],
16
- * padding?: {top?: number, bottom?: number, left?: number, right?: number},
17
- * radius?: number,
18
- * layoutMode?: 'HORIZONTAL' | 'VERTICAL' | 'NONE',
19
- * itemSpacing?: number
20
- * },
21
- * page: PageNode
22
- * }} config
23
- * - `name`: Component set name (e.g. "Button").
24
- * - `variantAxes`: Each key is a variant property name; each value is an array of
25
- * allowed values. All combinations are generated (Cartesian product).
26
- * Example: { Size: ['Small', 'Medium', 'Large'], Style: ['Primary', 'Ghost'] }
27
- * produces 6 variants.
28
- * - `baseProps`: Visual properties applied to every variant.
29
- * - `page`: The PageNode to create components on (must be set as current page by caller).
30
- * @param {string} [runId] - Optional dsb_run_id to tag every node.
31
- * @returns {Promise<{
32
- * componentSet: ComponentSetNode,
33
- * variants: ComponentNode[]
34
- * }>}
35
- */
36
- async function createComponentWithVariants(config, runId) {
37
- const { name, variantAxes, baseProps, page } = config
38
-
39
- // Ensure we are on the correct page
40
- await figma.setCurrentPageAsync(page)
41
-
42
- // Compute Cartesian product of variant axes
43
- const axisNames = Object.keys(variantAxes)
44
- const axisValues = axisNames.map((k) => variantAxes[k])
45
- const combinations = cartesianProduct(axisValues)
46
-
47
- // Build one component per combination
48
- const components = []
49
- for (const combo of combinations) {
50
- const comp = figma.createComponent()
51
-
52
- // Name: "Property=Value, Property=Value, ..."
53
- comp.name = axisNames.map((ax, i) => `${ax}=${combo[i]}`).join(', ')
54
-
55
- // Base geometry
56
- comp.resize(baseProps.width, baseProps.height)
57
-
58
- // Fills
59
- if (baseProps.fills !== undefined) {
60
- comp.fills = baseProps.fills
61
- } else {
62
- comp.fills = [{ type: 'SOLID', color: { r: 0.9, g: 0.9, b: 0.9 } }]
63
- }
64
-
65
- // Corner radius
66
- if (baseProps.radius !== undefined) {
67
- comp.cornerRadius = baseProps.radius
68
- }
69
-
70
- // Auto-layout
71
- if (baseProps.layoutMode && baseProps.layoutMode !== 'NONE') {
72
- comp.layoutMode = baseProps.layoutMode
73
- comp.primaryAxisAlignItems = 'CENTER'
74
- comp.counterAxisAlignItems = 'CENTER'
75
- if (baseProps.itemSpacing !== undefined) {
76
- comp.itemSpacing = baseProps.itemSpacing
77
- }
78
- }
79
-
80
- // Padding
81
- if (baseProps.padding) {
82
- comp.paddingTop = baseProps.padding.top ?? 0
83
- comp.paddingBottom = baseProps.padding.bottom ?? 0
84
- comp.paddingLeft = baseProps.padding.left ?? 0
85
- comp.paddingRight = baseProps.padding.right ?? 0
86
- }
87
-
88
- // Plugin data
89
- const variantKey = axisNames.map((ax, i) => `${ax}:${combo[i]}`).join('|')
90
- comp.setPluginData('dsb_key', `component/${name}/${variantKey}`)
91
- if (runId) {
92
- comp.setPluginData('dsb_run_id', runId)
93
- }
94
-
95
- page.appendChild(comp)
96
- components.push(comp)
97
- }
98
-
99
- // Combine into a component set
100
- const componentSet = figma.combineAsVariants(components, page)
101
- componentSet.name = name
102
- componentSet.setPluginData('dsb_key', `componentSet/${name}`)
103
- if (runId) {
104
- componentSet.setPluginData('dsb_run_id', runId)
105
- }
106
-
107
- // Grid layout — variants stack at (0, 0) after combineAsVariants; reposition them.
108
- const GRID_GAP = 16
109
- const cols = Math.max(1, axisValues[axisValues.length - 1]?.length ?? 1)
110
- const variantWidth = baseProps.width
111
- const variantHeight = baseProps.height
112
-
113
- componentSet.children.forEach((variant, idx) => {
114
- const col = idx % cols
115
- const row = Math.floor(idx / cols)
116
- variant.x = col * (variantWidth + GRID_GAP)
117
- variant.y = row * (variantHeight + GRID_GAP)
118
- })
119
-
120
- // Resize component set to wrap its children with padding
121
- const totalCols = Math.min(cols, combinations.length)
122
- const totalRows = Math.ceil(combinations.length / cols)
123
- const PADDING = 40
124
- componentSet.resize(
125
- totalCols * variantWidth + (totalCols - 1) * GRID_GAP + PADDING * 2,
126
- totalRows * variantHeight + (totalRows - 1) * GRID_GAP + PADDING * 2,
127
- )
128
-
129
- // Position component set at a safe canvas location
130
- componentSet.x = 480
131
- componentSet.y = 80
132
-
133
- return { componentSet, variants: componentSet.children }
134
- }
135
-
136
- /**
137
- * Computes the Cartesian product of multiple arrays.
138
- * cartesianProduct([[A, B], [1, 2]]) → [[A,1], [A,2], [B,1], [B,2]]
139
- *
140
- * @param {Array<string[]>} arrays
141
- * @returns {string[][]}
142
- */
143
- function cartesianProduct(arrays) {
144
- return arrays.reduce(
145
- (acc, curr) => acc.flatMap((combo) => curr.map((val) => [...combo, val])),
146
- [[]],
147
- )
148
- }
1
+ /**
2
+ * createComponentWithVariants
3
+ *
4
+ * Creates a component set by generating all combinations of `variantAxes`,
5
+ * building one Figma component per combination, then calling
6
+ * `figma.combineAsVariants` to produce the component set. After combining,
7
+ * the variants are repositioned into a grid so they don't all stack at (0, 0).
8
+ *
9
+ * @param {{
10
+ * name: string,
11
+ * variantAxes: Record<string, string[]>,
12
+ * baseProps: {
13
+ * width: number,
14
+ * height: number,
15
+ * fills?: Paint[],
16
+ * padding?: {top?: number, bottom?: number, left?: number, right?: number},
17
+ * radius?: number,
18
+ * layoutMode?: 'HORIZONTAL' | 'VERTICAL' | 'NONE',
19
+ * itemSpacing?: number
20
+ * },
21
+ * page: PageNode
22
+ * }} config
23
+ * - `name`: Component set name (e.g. "Button").
24
+ * - `variantAxes`: Each key is a variant property name; each value is an array of
25
+ * allowed values. All combinations are generated (Cartesian product).
26
+ * Example: { Size: ['Small', 'Medium', 'Large'], Style: ['Primary', 'Ghost'] }
27
+ * produces 6 variants.
28
+ * - `baseProps`: Visual properties applied to every variant.
29
+ * - `page`: The PageNode to create components on (must be set as current page by caller).
30
+ * @param {string} [runId] - Optional dsb_run_id to tag every node.
31
+ * @returns {Promise<{
32
+ * componentSet: ComponentSetNode,
33
+ * variants: ComponentNode[]
34
+ * }>}
35
+ */
36
+ async function createComponentWithVariants(config, runId) {
37
+ const { name, variantAxes, baseProps, page } = config
38
+
39
+ // Ensure we are on the correct page
40
+ await figma.setCurrentPageAsync(page)
41
+
42
+ // Compute Cartesian product of variant axes
43
+ const axisNames = Object.keys(variantAxes)
44
+ const axisValues = axisNames.map((k) => variantAxes[k])
45
+ const combinations = cartesianProduct(axisValues)
46
+
47
+ // Build one component per combination
48
+ const components = []
49
+ for (const combo of combinations) {
50
+ const comp = figma.createComponent()
51
+
52
+ // Name: "Property=Value, Property=Value, ..."
53
+ comp.name = axisNames.map((ax, i) => `${ax}=${combo[i]}`).join(', ')
54
+
55
+ // Base geometry
56
+ comp.resize(baseProps.width, baseProps.height)
57
+
58
+ // Fills
59
+ if (baseProps.fills !== undefined) {
60
+ comp.fills = baseProps.fills
61
+ } else {
62
+ comp.fills = [{ type: 'SOLID', color: { r: 0.9, g: 0.9, b: 0.9 } }]
63
+ }
64
+
65
+ // Corner radius
66
+ if (baseProps.radius !== undefined) {
67
+ comp.cornerRadius = baseProps.radius
68
+ }
69
+
70
+ // Auto-layout
71
+ if (baseProps.layoutMode && baseProps.layoutMode !== 'NONE') {
72
+ comp.layoutMode = baseProps.layoutMode
73
+ comp.primaryAxisAlignItems = 'CENTER'
74
+ comp.counterAxisAlignItems = 'CENTER'
75
+ if (baseProps.itemSpacing !== undefined) {
76
+ comp.itemSpacing = baseProps.itemSpacing
77
+ }
78
+ }
79
+
80
+ // Padding
81
+ if (baseProps.padding) {
82
+ comp.paddingTop = baseProps.padding.top ?? 0
83
+ comp.paddingBottom = baseProps.padding.bottom ?? 0
84
+ comp.paddingLeft = baseProps.padding.left ?? 0
85
+ comp.paddingRight = baseProps.padding.right ?? 0
86
+ }
87
+
88
+ // Plugin data
89
+ const variantKey = axisNames.map((ax, i) => `${ax}:${combo[i]}`).join('|')
90
+ comp.setPluginData('dsb_key', `component/${name}/${variantKey}`)
91
+ if (runId) {
92
+ comp.setPluginData('dsb_run_id', runId)
93
+ }
94
+
95
+ page.appendChild(comp)
96
+ components.push(comp)
97
+ }
98
+
99
+ // Combine into a component set
100
+ const componentSet = figma.combineAsVariants(components, page)
101
+ componentSet.name = name
102
+ componentSet.setPluginData('dsb_key', `componentSet/${name}`)
103
+ if (runId) {
104
+ componentSet.setPluginData('dsb_run_id', runId)
105
+ }
106
+
107
+ // Grid layout — variants stack at (0, 0) after combineAsVariants; reposition them.
108
+ const GRID_GAP = 16
109
+ const cols = Math.max(1, axisValues[axisValues.length - 1]?.length ?? 1)
110
+ const variantWidth = baseProps.width
111
+ const variantHeight = baseProps.height
112
+
113
+ componentSet.children.forEach((variant, idx) => {
114
+ const col = idx % cols
115
+ const row = Math.floor(idx / cols)
116
+ variant.x = col * (variantWidth + GRID_GAP)
117
+ variant.y = row * (variantHeight + GRID_GAP)
118
+ })
119
+
120
+ // Resize component set to wrap its children with padding
121
+ const totalCols = Math.min(cols, combinations.length)
122
+ const totalRows = Math.ceil(combinations.length / cols)
123
+ const PADDING = 40
124
+ componentSet.resize(
125
+ totalCols * variantWidth + (totalCols - 1) * GRID_GAP + PADDING * 2,
126
+ totalRows * variantHeight + (totalRows - 1) * GRID_GAP + PADDING * 2,
127
+ )
128
+
129
+ // Position component set at a safe canvas location
130
+ componentSet.x = 480
131
+ componentSet.y = 80
132
+
133
+ return { componentSet, variants: componentSet.children }
134
+ }
135
+
136
+ /**
137
+ * Computes the Cartesian product of multiple arrays.
138
+ * cartesianProduct([[A, B], [1, 2]]) → [[A,1], [A,2], [B,1], [B,2]]
139
+ *
140
+ * @param {Array<string[]>} arrays
141
+ * @returns {string[][]}
142
+ */
143
+ function cartesianProduct(arrays) {
144
+ return arrays.reduce(
145
+ (acc, curr) => acc.flatMap((combo) => curr.map((val) => [...combo, val])),
146
+ [[]],
147
+ )
148
+ }
@@ -1,139 +1,139 @@
1
- /**
2
- * createDocumentationPage
3
- *
4
- * Creates a new Figma page with a standardized documentation layout: a page
5
- * title, optional description, and an ordered list of sections each built by
6
- * a caller-supplied `contentFn`. The content function receives the section
7
- * frame and may append any nodes to it.
8
- *
9
- * This function is used for standalone documentation pages (e.g. a Foundations
10
- * page, a Getting Started page, or a component page with documentation).
11
- * It does not handle component sets — those live on separate pages created by
12
- * createComponentWithVariants.
13
- *
14
- * @param {string} pageName - The Figma page name (e.g. "Foundations", "Getting Started").
15
- * @param {{
16
- * title: string,
17
- * description?: string,
18
- * sections: Array<{
19
- * name: string,
20
- * contentFn: (sectionFrame: FrameNode) => Promise<void>
21
- * }>
22
- * }} config
23
- * - `title`: Large heading displayed at the top of the page.
24
- * - `description`: Optional subtitle displayed below the heading.
25
- * - `sections`: Ordered list of sections. Each section gets its own frame
26
- * with a heading and is passed to `contentFn` for population.
27
- * @param {string} [runId] - Optional dsb_run_id to tag every created node.
28
- * @returns {Promise<{
29
- * page: PageNode,
30
- * titleNode: TextNode,
31
- * frameIds: string[]
32
- * }>}
33
- * `frameIds` is an ordered list of IDs for the root frame and each section frame.
34
- */
35
- async function createDocumentationPage(pageName, config, runId) {
36
- await figma.loadFontAsync({ family: 'Inter', style: 'Bold' })
37
- await figma.loadFontAsync({ family: 'Inter', style: 'Regular' })
38
- await figma.loadFontAsync({ family: 'Inter', style: 'Medium' })
39
-
40
- // Create and activate the page
41
- const page = figma.createPage()
42
- page.name = pageName
43
- await figma.setCurrentPageAsync(page)
44
-
45
- if (runId) {
46
- page.setPluginData('dsb_run_id', runId)
47
- page.setPluginData('dsb_key', `page/${pageName}`)
48
- }
49
-
50
- const frameIds = []
51
-
52
- // Root scroll container — 1440px wide, auto-height
53
- const root = figma.createFrame()
54
- root.name = pageName
55
- root.layoutMode = 'VERTICAL'
56
- root.primaryAxisAlignItems = 'MIN'
57
- root.counterAxisAlignItems = 'MIN'
58
- root.itemSpacing = 80
59
- root.paddingTop = 80
60
- root.paddingBottom = 120
61
- root.paddingLeft = 80
62
- root.paddingRight = 80
63
- root.layoutSizingHorizontal = 'FIXED'
64
- root.layoutSizingVertical = 'HUG'
65
- root.resize(1440, 1)
66
- root.fills = [{ type: 'SOLID', color: { r: 1, g: 1, b: 1 } }]
67
- root.x = 0
68
- root.y = 0
69
- page.appendChild(root)
70
-
71
- if (runId) {
72
- root.setPluginData('dsb_run_id', runId)
73
- root.setPluginData('dsb_key', `frame/root/${pageName}`)
74
- }
75
-
76
- frameIds.push(root.id)
77
-
78
- // Page header: title + optional description
79
- const header = figma.createFrame()
80
- header.name = 'Header'
81
- header.layoutMode = 'VERTICAL'
82
- header.itemSpacing = 12
83
- header.layoutSizingHorizontal = 'FILL'
84
- header.layoutSizingVertical = 'HUG'
85
- header.fills = []
86
- root.appendChild(header)
87
-
88
- const titleNode = figma.createText()
89
- titleNode.fontName = { family: 'Inter', style: 'Bold' }
90
- titleNode.characters = config.title
91
- titleNode.fontSize = 40
92
- titleNode.fills = [{ type: 'SOLID', color: { r: 0.07, g: 0.07, b: 0.07 } }]
93
- titleNode.layoutSizingHorizontal = 'FILL'
94
- header.appendChild(titleNode)
95
-
96
- if (config.description) {
97
- const descNode = figma.createText()
98
- descNode.fontName = { family: 'Inter', style: 'Regular' }
99
- descNode.characters = config.description
100
- descNode.fontSize = 16
101
- descNode.lineHeight = { value: 24, unit: 'PIXELS' }
102
- descNode.fills = [{ type: 'SOLID', color: { r: 0.4, g: 0.4, b: 0.4 } }]
103
- descNode.layoutSizingHorizontal = 'FILL'
104
- header.appendChild(descNode)
105
- }
106
-
107
- // Sections
108
- for (const section of config.sections) {
109
- const sectionFrame = figma.createFrame()
110
- sectionFrame.name = `Section/${section.name}`
111
- sectionFrame.layoutMode = 'VERTICAL'
112
- sectionFrame.itemSpacing = 20
113
- sectionFrame.layoutSizingHorizontal = 'FILL'
114
- sectionFrame.layoutSizingVertical = 'HUG'
115
- sectionFrame.fills = []
116
- root.appendChild(sectionFrame)
117
-
118
- if (runId) {
119
- sectionFrame.setPluginData('dsb_run_id', runId)
120
- sectionFrame.setPluginData('dsb_key', `frame/section/${pageName}/${section.name}`)
121
- }
122
-
123
- // Section heading
124
- const sectionHeading = figma.createText()
125
- sectionHeading.fontName = { family: 'Inter', style: 'Bold' }
126
- sectionHeading.characters = section.name
127
- sectionHeading.fontSize = 24
128
- sectionHeading.fills = [{ type: 'SOLID', color: { r: 0.07, g: 0.07, b: 0.07 } }]
129
- sectionHeading.layoutSizingHorizontal = 'FILL'
130
- sectionFrame.appendChild(sectionHeading)
131
-
132
- // Invoke the caller's content function to populate the section
133
- await section.contentFn(sectionFrame)
134
-
135
- frameIds.push(sectionFrame.id)
136
- }
137
-
138
- return { page, titleNode, frameIds }
139
- }
1
+ /**
2
+ * createDocumentationPage
3
+ *
4
+ * Creates a new Figma page with a standardized documentation layout: a page
5
+ * title, optional description, and an ordered list of sections each built by
6
+ * a caller-supplied `contentFn`. The content function receives the section
7
+ * frame and may append any nodes to it.
8
+ *
9
+ * This function is used for standalone documentation pages (e.g. a Foundations
10
+ * page, a Getting Started page, or a component page with documentation).
11
+ * It does not handle component sets — those live on separate pages created by
12
+ * createComponentWithVariants.
13
+ *
14
+ * @param {string} pageName - The Figma page name (e.g. "Foundations", "Getting Started").
15
+ * @param {{
16
+ * title: string,
17
+ * description?: string,
18
+ * sections: Array<{
19
+ * name: string,
20
+ * contentFn: (sectionFrame: FrameNode) => Promise<void>
21
+ * }>
22
+ * }} config
23
+ * - `title`: Large heading displayed at the top of the page.
24
+ * - `description`: Optional subtitle displayed below the heading.
25
+ * - `sections`: Ordered list of sections. Each section gets its own frame
26
+ * with a heading and is passed to `contentFn` for population.
27
+ * @param {string} [runId] - Optional dsb_run_id to tag every created node.
28
+ * @returns {Promise<{
29
+ * page: PageNode,
30
+ * titleNode: TextNode,
31
+ * frameIds: string[]
32
+ * }>}
33
+ * `frameIds` is an ordered list of IDs for the root frame and each section frame.
34
+ */
35
+ async function createDocumentationPage(pageName, config, runId) {
36
+ await figma.loadFontAsync({ family: 'Inter', style: 'Bold' })
37
+ await figma.loadFontAsync({ family: 'Inter', style: 'Regular' })
38
+ await figma.loadFontAsync({ family: 'Inter', style: 'Medium' })
39
+
40
+ // Create and activate the page
41
+ const page = figma.createPage()
42
+ page.name = pageName
43
+ await figma.setCurrentPageAsync(page)
44
+
45
+ if (runId) {
46
+ page.setPluginData('dsb_run_id', runId)
47
+ page.setPluginData('dsb_key', `page/${pageName}`)
48
+ }
49
+
50
+ const frameIds = []
51
+
52
+ // Root scroll container — 1440px wide, auto-height
53
+ const root = figma.createFrame()
54
+ root.name = pageName
55
+ root.layoutMode = 'VERTICAL'
56
+ root.primaryAxisAlignItems = 'MIN'
57
+ root.counterAxisAlignItems = 'MIN'
58
+ root.itemSpacing = 80
59
+ root.paddingTop = 80
60
+ root.paddingBottom = 120
61
+ root.paddingLeft = 80
62
+ root.paddingRight = 80
63
+ root.layoutSizingHorizontal = 'FIXED'
64
+ root.layoutSizingVertical = 'HUG'
65
+ root.resize(1440, 1)
66
+ root.fills = [{ type: 'SOLID', color: { r: 1, g: 1, b: 1 } }]
67
+ root.x = 0
68
+ root.y = 0
69
+ page.appendChild(root)
70
+
71
+ if (runId) {
72
+ root.setPluginData('dsb_run_id', runId)
73
+ root.setPluginData('dsb_key', `frame/root/${pageName}`)
74
+ }
75
+
76
+ frameIds.push(root.id)
77
+
78
+ // Page header: title + optional description
79
+ const header = figma.createFrame()
80
+ header.name = 'Header'
81
+ header.layoutMode = 'VERTICAL'
82
+ header.itemSpacing = 12
83
+ header.layoutSizingHorizontal = 'FILL'
84
+ header.layoutSizingVertical = 'HUG'
85
+ header.fills = []
86
+ root.appendChild(header)
87
+
88
+ const titleNode = figma.createText()
89
+ titleNode.fontName = { family: 'Inter', style: 'Bold' }
90
+ titleNode.characters = config.title
91
+ titleNode.fontSize = 40
92
+ titleNode.fills = [{ type: 'SOLID', color: { r: 0.07, g: 0.07, b: 0.07 } }]
93
+ titleNode.layoutSizingHorizontal = 'FILL'
94
+ header.appendChild(titleNode)
95
+
96
+ if (config.description) {
97
+ const descNode = figma.createText()
98
+ descNode.fontName = { family: 'Inter', style: 'Regular' }
99
+ descNode.characters = config.description
100
+ descNode.fontSize = 16
101
+ descNode.lineHeight = { value: 24, unit: 'PIXELS' }
102
+ descNode.fills = [{ type: 'SOLID', color: { r: 0.4, g: 0.4, b: 0.4 } }]
103
+ descNode.layoutSizingHorizontal = 'FILL'
104
+ header.appendChild(descNode)
105
+ }
106
+
107
+ // Sections
108
+ for (const section of config.sections) {
109
+ const sectionFrame = figma.createFrame()
110
+ sectionFrame.name = `Section/${section.name}`
111
+ sectionFrame.layoutMode = 'VERTICAL'
112
+ sectionFrame.itemSpacing = 20
113
+ sectionFrame.layoutSizingHorizontal = 'FILL'
114
+ sectionFrame.layoutSizingVertical = 'HUG'
115
+ sectionFrame.fills = []
116
+ root.appendChild(sectionFrame)
117
+
118
+ if (runId) {
119
+ sectionFrame.setPluginData('dsb_run_id', runId)
120
+ sectionFrame.setPluginData('dsb_key', `frame/section/${pageName}/${section.name}`)
121
+ }
122
+
123
+ // Section heading
124
+ const sectionHeading = figma.createText()
125
+ sectionHeading.fontName = { family: 'Inter', style: 'Bold' }
126
+ sectionHeading.characters = section.name
127
+ sectionHeading.fontSize = 24
128
+ sectionHeading.fills = [{ type: 'SOLID', color: { r: 0.07, g: 0.07, b: 0.07 } }]
129
+ sectionHeading.layoutSizingHorizontal = 'FILL'
130
+ sectionFrame.appendChild(sectionHeading)
131
+
132
+ // Invoke the caller's content function to populate the section
133
+ await section.contentFn(sectionFrame)
134
+
135
+ frameIds.push(sectionFrame.id)
136
+ }
137
+
138
+ return { page, titleNode, frameIds }
139
+ }