@fprad0/skill-master-mcp 0.0.11 → 1.0.0

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