@fprad0/skill-master-mcp 0.0.12 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/CHANGELOG.md +100 -88
  2. package/README.md +472 -472
  3. package/VERSION.md +9 -9
  4. package/bin/lib/bootstrap-global-core.mjs +34 -0
  5. package/bin/lib/client-config.mjs +287 -285
  6. package/bin/lib/doctor-core.mjs +202 -0
  7. package/bin/lib/menu-core.mjs +1792 -1514
  8. package/bin/lib/operation-result.mjs +59 -0
  9. package/bin/lib/register-clients-core.mjs +247 -0
  10. package/bin/lib/skill-installation.mjs +215 -215
  11. package/bin/lib/update-cli-core.mjs +117 -0
  12. package/bin/skill-master-activation.mjs +165 -163
  13. package/bin/skill-master-bootstrap-global.mjs +61 -49
  14. package/bin/skill-master-configure-private-registry.mjs +3 -3
  15. package/bin/skill-master-doctor.mjs +239 -228
  16. package/bin/skill-master-eval-activation.mjs +32 -32
  17. package/bin/skill-master-install-global-skills.mjs +59 -59
  18. package/bin/skill-master-install-project-skills.mjs +97 -97
  19. package/bin/skill-master-menu.mjs +489 -378
  20. package/bin/skill-master-register-clients.mjs +232 -153
  21. package/bin/skill-master-success-skills.mjs +357 -307
  22. package/bin/skill-master-update.mjs +121 -72
  23. package/bin/skill-master.mjs +3 -3
  24. package/dist/activation.d.ts.map +1 -1
  25. package/dist/activation.js +12 -0
  26. package/dist/activation.js.map +1 -1
  27. package/dist/prompt-router.d.ts.map +1 -1
  28. package/dist/prompt-router.js +19 -0
  29. package/dist/prompt-router.js.map +1 -1
  30. package/dist/recommender.d.ts.map +1 -1
  31. package/dist/recommender.js +4 -1
  32. package/dist/recommender.js.map +1 -1
  33. package/docs/architecture/APRENDIZADO_DE_IMPLEMENTACOES_BEM_SUCEDIDAS.md +125 -125
  34. package/docs/architecture/ARQUITETURA_AUTO_UPDATE.md +9 -9
  35. package/docs/architecture/PLANO_MASTER_ACIONAMENTO_AUTOMATICO_E_APRENDIZADO.md +341 -341
  36. package/docs/architecture/REDE_SEGURA_DE_SKILLS.md +148 -148
  37. package/docs/operations/GUIA_MULTI_COMPUTADOR.md +262 -262
  38. package/docs/operations/GUIA_NPM_PRIVADO.md +294 -294
  39. package/docs/operations/GUIA_NPM_PUBLICO.md +147 -147
  40. package/docs/operations/MENU_VISUAL_EVIDENCE_2026-06-28.md +66 -66
  41. package/docs/operations/assets/menu-frame-compact.html +36 -33
  42. package/docs/operations/assets/menu-frame-dna-hero.html +87 -0
  43. package/docs/operations/assets/menu-frame-fine-helix.html +89 -0
  44. package/docs/operations/assets/menu-frame-large.html +44 -41
  45. package/docs/operations/assets/menu-frame-running.html +41 -38
  46. package/docs/operations/assets/menu-frame-score-10-contact-sheet.html +184 -0
  47. package/docs/operations/cross-platform-auth-transfer/ANALISE_COMPATIBILIDADE_MCP_2026-06-28.md +140 -140
  48. package/docs/operations/cross-platform-auth-transfer/README_TRANSFERENCIA.md +85 -85
  49. package/docs/operations/reborn-menu-cyberpunk-transfer/ANALISE_MENU_REBORN_CYBERPUNK_2026-06-28.md +174 -174
  50. package/docs/operations/reborn-menu-cyberpunk-transfer/HANDOFF_IMPLEMENTACAO_REBORN_CYBERPUNK_2026-06-28.md +119 -119
  51. package/docs/operations/reborn-menu-cyberpunk-transfer/ORDEM_DE_EXECUCAO_MENU_REBORN_CYBERPUNK.md +134 -134
  52. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA.md +84 -84
  53. package/docs/operations/reborn-menu-cyberpunk-transfer/README_TRANSFERENCIA_REBORN_PACKAGE.md +56 -56
  54. package/docs/operations/token-economy-transfer/ANALISE_AVANCADA_ECONOMIA_TOKENS_2026-06-30.md +141 -0
  55. package/docs/operations/token-economy-transfer/PLANO_DEV_SENIOR_MASTER_TOKEN_ECONOMY_2026-06-30.md +171 -0
  56. package/docs/operations/token-economy-transfer/README_TRANSFERENCIA_TOKEN_ECONOMY.md +31 -0
  57. package/docs/planning/MENU_RUNTIME_CORRECTION_PLAN_2026-06-30.md +551 -0
  58. package/docs/planning/V0_0_9_APROVACAO_CRITICA_MENSAGENS_DE_VENDA.md +85 -85
  59. package/docs/planning/V0_0_9_FONTES_E_CRITERIOS_DE_AUTORIDADE.md +139 -139
  60. package/docs/planning/V0_0_9_MATRIZ_SKILLS_MULTIDISCIPLINARES.md +105 -105
  61. package/docs/planning/V0_0_9_POLITICA_MORAL_CATOLICA_PARA_IA.md +181 -181
  62. package/docs/planning/V0_0_9_PROMPTS_EXECUCAO.md +59 -59
  63. package/docs/planning/V0_0_9_ROADMAP_DISCERNIMENTO_E_CONHECIMENTO_AMPLO.md +181 -181
  64. package/docs/planning/mcp-1.0.0/00_RESUMO_EXECUTIVO_AUDITORIA_MENU.md +118 -0
  65. package/docs/planning/mcp-1.0.0/01_MATRIZ_TESTES_MENU_E_RESULTADOS.md +250 -0
  66. package/docs/planning/mcp-1.0.0/02_PLANO_CORRECAO_ATIVAR_SKILL_APRENDIDA.md +200 -0
  67. package/docs/planning/mcp-1.0.0/03_PLANO_COMPATIBILIDADE_WINDOWS_LINUX_MACOS.md +167 -0
  68. package/docs/planning/mcp-1.0.0/04_PLANO_UI_CYBERPUNK_PIXEL_ART_E_PERFORMANCE.md +165 -0
  69. package/docs/planning/mcp-1.0.0/05_PROMPT_TASK_EXECUCAO_CORRECOES.md +151 -0
  70. package/docs/planning/mcp-1.0.0/06_CHECKLIST_REGRESSAO_PRE_RELEASE.md +159 -0
  71. package/docs/planning/mcp-1.0.0/07_RELATORIO_APLICACAO_CORRECOES_MENU_SKILL_MASTER.md +136 -0
  72. package/docs/planning/mcp-1.0.0/08_AUDITORIA_CRITICA_MENU_NOTA_E_DNA_REFINADO.md +184 -0
  73. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/00_PROMPT_TASK_MASTER_NOTA_10_10.md +103 -0
  74. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/01_PROMPT_TASK_FINE_HELIX_DNA.md +116 -0
  75. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/02_PROMPT_TASK_DNA_HERO_BOOT_AND_MOTION.md +109 -0
  76. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/03_PROMPT_TASK_MENU_UX_HELP_ERROR_COPY.md +99 -0
  77. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/04_PROMPT_TASK_EVIDENCE_RENDERER_1_0_0.md +97 -0
  78. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/05_PROMPT_TASK_CROSS_PLATFORM_UTF8_MOJIBAKE.md +99 -0
  79. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/06_PROMPT_TASK_VISUAL_REGRESSION_QA.md +105 -0
  80. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/07_PROMPT_TASK_PRE_RELEASE_SCORE_GATE_10_10.md +104 -0
  81. package/docs/planning/mcp-1.0.0/prompt-tasks-nota-10-10/README_ORDEM_EXECUCAO_NOTA_10_10.md +77 -0
  82. package/docs/prompt-tasks/PROMPT_TASK_001_BOOTSTRAP_SKILL_MASTER_MCP.md +6 -6
  83. package/docs/prompt-tasks/PROMPT_TASK_002_AUTO_UPDATE_LAUNCHER.md +6 -6
  84. package/docs/prompt-tasks/PROMPT_TASK_003_REMOTE_MANIFEST_AND_RELEASES.md +6 -6
  85. package/docs/prompt-tasks/PROMPT_TASK_004_MULTI_USER_DISTRIBUTION.md +6 -6
  86. package/docs/prompt-tasks/PROMPT_TASK_005_SECURITY_AND_QUALITY_GATE.md +6 -6
  87. package/docs/prompt-tasks/PROMPT_TASK_006_MASTER_ACIONAMENTO_APRENDIZADO.md +83 -83
  88. package/docs/prompt-tasks/PROMPT_TASK_007_PERSONA_ORQUESTRADORA.md +88 -88
  89. package/docs/prompt-tasks/PROMPT_TASK_008_PROMPT_ROUTER_MODOS_ATIVACAO.md +156 -156
  90. package/docs/prompt-tasks/PROMPT_TASK_009_PIPELINE_APRENDIZADO_SUCESSO.md +105 -105
  91. package/docs/prompt-tasks/PROMPT_TASK_010_EVALS_GOVERNANCA_ATIVACAO.md +119 -119
  92. package/docs/prompt-tasks/PROMPT_TASK_011_MENU_NOTIFICACOES_NOTION.md +120 -120
  93. package/docs/prompt-tasks/PROMPT_TASK_012_MENU_CYBERPUNK_PIXEL_FRAME.md +123 -123
  94. package/docs/prompt-tasks/PROMPT_TASK_013_MENU_FLUID_DNA_ANIMATION.md +114 -114
  95. package/docs/prompt-tasks/PROMPT_TASK_014_MENU_FUNCTIONAL_PARITY_QA.md +157 -157
  96. package/docs/prompt-tasks/PROMPT_TASK_015_TRANSFER_RELEASE_HANDOFF.md +127 -127
  97. package/docs/prompt-tasks/PROMPT_TASK_016_CROSS_PLATFORM_MCP_AUTH_REGISTRATION.md +107 -107
  98. package/docs/prompt-tasks/PROMPT_TASK_018_NPM_PUBLISH_2FA_SETUP.md +80 -80
  99. package/docs/prompt-tasks/PROMPT_TASK_019_TOKEN_ECONOMY_GLOBAL_SKILLS.md +56 -0
  100. package/docs/prompt-tasks/PROMPT_TASK_MASTER_EXECUTOR.md +6 -6
  101. package/docs/skill-candidates/v0.0.10/cli-creator/LICENSE.txt +201 -201
  102. package/docs/skill-candidates/v0.0.10/cli-creator/SKILL.md +160 -160
  103. package/docs/skill-candidates/v0.0.10/cli-creator/agents/openai.yaml +4 -4
  104. package/docs/skill-candidates/v0.0.10/cli-creator/references/agent-cli-patterns.md +154 -154
  105. package/docs/skill-candidates/v0.0.10/developer-workstation-ops/SKILL.md +32 -32
  106. package/docs/skill-candidates/v0.0.10/figma/LICENSE.txt +1 -1
  107. package/docs/skill-candidates/v0.0.10/figma/SKILL.md +42 -42
  108. package/docs/skill-candidates/v0.0.10/figma/agents/openai.yaml +14 -14
  109. package/docs/skill-candidates/v0.0.10/figma/assets/figma-small.svg +3 -3
  110. package/docs/skill-candidates/v0.0.10/figma/assets/icon.svg +28 -28
  111. package/docs/skill-candidates/v0.0.10/figma/references/figma-mcp-config.md +35 -35
  112. package/docs/skill-candidates/v0.0.10/figma/references/figma-tools-and-prompts.md +34 -34
  113. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/LICENSE.TXT +1 -1
  114. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/SKILL.md +349 -349
  115. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/agents/openai.yaml +14 -14
  116. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/figma-small.svg +3 -3
  117. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/assets/icon.svg +28 -28
  118. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/references/mapping-checklist.md +7 -7
  119. package/docs/skill-candidates/v0.0.10/figma-code-connect-components/scripts/normalize_node_id.py +25 -25
  120. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/LICENSE.TXT +1 -1
  121. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/SKILL.md +537 -537
  122. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/agents/openai.yaml +14 -14
  123. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/figma-small.svg +3 -3
  124. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/assets/icon.svg +28 -28
  125. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/references/rule-template.md +15 -15
  126. package/docs/skill-candidates/v0.0.10/figma-create-design-system-rules/scripts/check_agents_md.sh +9 -9
  127. package/docs/skill-candidates/v0.0.10/figma-generate-design/LICENSE.TXT +1 -1
  128. package/docs/skill-candidates/v0.0.10/figma-generate-design/SKILL.md +341 -341
  129. package/docs/skill-candidates/v0.0.10/figma-generate-design/agents/openai.yaml +14 -14
  130. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/figma-small.svg +3 -3
  131. package/docs/skill-candidates/v0.0.10/figma-generate-design/assets/icon.svg +28 -28
  132. package/docs/skill-candidates/v0.0.10/figma-generate-design/maintainers.yml +1 -1
  133. package/docs/skill-candidates/v0.0.10/figma-generate-library/LICENSE.TXT +1 -1
  134. package/docs/skill-candidates/v0.0.10/figma-generate-library/SKILL.md +314 -314
  135. package/docs/skill-candidates/v0.0.10/figma-generate-library/agents/openai.yaml +14 -14
  136. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/figma-small.svg +3 -3
  137. package/docs/skill-candidates/v0.0.10/figma-generate-library/assets/icon.svg +28 -28
  138. package/docs/skill-candidates/v0.0.10/figma-generate-library/maintainers.yml +3 -3
  139. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/code-connect-setup.md +260 -260
  140. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/component-creation.md +1014 -1014
  141. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/discovery-phase.md +518 -518
  142. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/documentation-creation.md +834 -834
  143. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/error-recovery.md +540 -540
  144. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/naming-conventions.md +527 -527
  145. package/docs/skill-candidates/v0.0.10/figma-generate-library/references/token-creation.md +962 -962
  146. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/bindVariablesToComponent.js +110 -110
  147. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/cleanupOrphans.js +127 -127
  148. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createComponentWithVariants.js +148 -148
  149. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createDocumentationPage.js +139 -139
  150. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createSemanticTokens.js +108 -108
  151. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/createVariableCollection.js +49 -49
  152. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/inspectFileStructure.js +121 -121
  153. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/rehydrateState.js +92 -92
  154. package/docs/skill-candidates/v0.0.10/figma-generate-library/scripts/validateCreation.js +83 -83
  155. package/docs/skill-candidates/v0.0.10/figma-implement-design/LICENSE.txt +1 -1
  156. package/docs/skill-candidates/v0.0.10/figma-implement-design/SKILL.md +258 -258
  157. package/docs/skill-candidates/v0.0.10/figma-implement-design/agents/openai.yaml +14 -14
  158. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/figma-small.svg +3 -3
  159. package/docs/skill-candidates/v0.0.10/figma-implement-design/assets/icon.svg +28 -28
  160. package/docs/skill-candidates/v0.0.10/figma-use/LICENSE.TXT +1 -1
  161. package/docs/skill-candidates/v0.0.10/figma-use/SKILL.md +233 -233
  162. package/docs/skill-candidates/v0.0.10/figma-use/agents/openai.yaml +14 -14
  163. package/docs/skill-candidates/v0.0.10/figma-use/assets/figma-small.svg +3 -3
  164. package/docs/skill-candidates/v0.0.10/figma-use/assets/icon.svg +28 -28
  165. package/docs/skill-candidates/v0.0.10/figma-use/maintainers.yml +1 -1
  166. package/docs/skill-candidates/v0.0.10/figma-use/references/api-reference.md +301 -301
  167. package/docs/skill-candidates/v0.0.10/figma-use/references/common-patterns.md +512 -512
  168. package/docs/skill-candidates/v0.0.10/figma-use/references/component-patterns.md +488 -488
  169. package/docs/skill-candidates/v0.0.10/figma-use/references/effect-style-patterns.md +123 -123
  170. package/docs/skill-candidates/v0.0.10/figma-use/references/gotchas.md +599 -599
  171. package/docs/skill-candidates/v0.0.10/figma-use/references/maintainers.yml +12 -12
  172. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-patterns.md +513 -513
  173. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.d.ts +11293 -11293
  174. package/docs/skill-candidates/v0.0.10/figma-use/references/plugin-api-standalone.index.md +441 -441
  175. package/docs/skill-candidates/v0.0.10/figma-use/references/text-style-patterns.md +203 -203
  176. package/docs/skill-candidates/v0.0.10/figma-use/references/validation-and-recovery.md +109 -109
  177. package/docs/skill-candidates/v0.0.10/figma-use/references/variable-patterns.md +354 -354
  178. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/maintainers.yml +9 -9
  179. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--creating.md +17 -17
  180. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components--using.md +17 -17
  181. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-components.md +50 -50
  182. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-effect-styles.md +52 -52
  183. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-text-styles.md +90 -90
  184. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--creating.md +13 -13
  185. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables--using.md +13 -13
  186. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds-variables.md +64 -64
  187. package/docs/skill-candidates/v0.0.10/figma-use/references/working-with-design-systems/wwds.md +41 -41
  188. package/docs/skill-candidates/v0.0.10/frontend-design/LICENSE.txt +177 -177
  189. package/docs/skill-candidates/v0.0.10/frontend-design/SKILL.md +55 -55
  190. package/docs/skill-candidates/v0.0.10/frontend-ui-ux-systems/SKILL.md +32 -32
  191. package/docs/skill-candidates/v0.0.10/github/SKILL.md +74 -74
  192. package/docs/skill-candidates/v0.0.10/github/agents/openai.yaml +6 -6
  193. package/docs/skill-candidates/v0.0.10/github/assets/github-small.svg +3 -3
  194. package/docs/skill-candidates/v0.0.10/image-graphic-design-rendering/SKILL.md +28 -28
  195. package/docs/skill-candidates/v0.0.10/language-quality-pt-en-fr-it-ru/SKILL.md +28 -28
  196. package/docs/skill-candidates/v0.0.10/math-physics-reasoning/SKILL.md +28 -28
  197. package/docs/skill-candidates/v0.0.10/mcp-builder/LICENSE.txt +201 -201
  198. package/docs/skill-candidates/v0.0.10/mcp-builder/SKILL.md +236 -236
  199. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/evaluation.md +601 -601
  200. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/mcp_best_practices.md +249 -249
  201. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/node_mcp_server.md +969 -969
  202. package/docs/skill-candidates/v0.0.10/mcp-builder/reference/python_mcp_server.md +718 -718
  203. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/connections.py +151 -151
  204. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/evaluation.py +373 -373
  205. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/example_evaluation.xml +22 -22
  206. package/docs/skill-candidates/v0.0.10/mcp-builder/scripts/requirements.txt +2 -2
  207. package/docs/skill-candidates/v0.0.10/mcp-client-readiness/SKILL.md +31 -31
  208. package/docs/skill-candidates/v0.0.10/openai-docs/LICENSE.txt +201 -201
  209. package/docs/skill-candidates/v0.0.10/openai-docs/SKILL.md +161 -161
  210. package/docs/skill-candidates/v0.0.10/openai-docs/agents/openai.yaml +14 -14
  211. package/docs/skill-candidates/v0.0.10/openai-docs/assets/openai-small.svg +3 -3
  212. package/docs/skill-candidates/v0.0.10/openai-docs/references/latest-model.md +37 -37
  213. package/docs/skill-candidates/v0.0.10/openai-docs/references/prompting-guide.md +244 -244
  214. package/docs/skill-candidates/v0.0.10/openai-docs/references/upgrade-guide.md +181 -181
  215. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/fetch-codex-manual.mjs +598 -598
  216. package/docs/skill-candidates/v0.0.10/openai-docs/scripts/resolve-latest-model-info.js +147 -147
  217. package/docs/skill-candidates/v0.0.10/playwright/NOTICE.txt +14 -14
  218. package/docs/skill-candidates/v0.0.10/playwright/SKILL.md +147 -147
  219. package/docs/skill-candidates/v0.0.10/playwright/agents/openai.yaml +6 -6
  220. package/docs/skill-candidates/v0.0.10/playwright/assets/playwright-small.svg +3 -3
  221. package/docs/skill-candidates/v0.0.10/playwright/references/cli.md +116 -116
  222. package/docs/skill-candidates/v0.0.10/playwright/references/workflows.md +95 -95
  223. package/docs/skill-candidates/v0.0.10/playwright/scripts/playwright_cli.sh +25 -25
  224. package/docs/skill-candidates/v0.0.10/polyglot-backend-engineering/SKILL.md +32 -32
  225. package/docs/skill-candidates/v0.0.10/screenshot/LICENSE.txt +201 -201
  226. package/docs/skill-candidates/v0.0.10/screenshot/SKILL.md +267 -267
  227. package/docs/skill-candidates/v0.0.10/screenshot/agents/openai.yaml +6 -6
  228. package/docs/skill-candidates/v0.0.10/screenshot/assets/screenshot-small.svg +5 -5
  229. package/docs/skill-candidates/v0.0.10/screenshot/scripts/ensure_macos_permissions.sh +54 -54
  230. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_display_info.swift +22 -22
  231. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_permissions.swift +40 -40
  232. package/docs/skill-candidates/v0.0.10/screenshot/scripts/macos_window_info.swift +126 -126
  233. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.ps1 +163 -163
  234. package/docs/skill-candidates/v0.0.10/screenshot/scripts/take_screenshot.py +585 -585
  235. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/SKILL.md +62 -62
  236. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/agents/openai.yaml +4 -4
  237. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/activation-policy.md +77 -77
  238. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/human-approval-policy.md +83 -83
  239. package/docs/skill-candidates/v0.0.10/skill-master-orchestrator/references/persona-dev-senior-master.md +46 -46
  240. package/docs/skill-candidates/v0.0.10/terminal-menu-operations/SKILL.md +30 -30
  241. package/docs/skill-candidates/v0.0.10/terminal-pixel-art-tui/SKILL.md +43 -43
  242. package/docs/skill-candidates/v0.0.10/webapp-testing/LICENSE.txt +201 -201
  243. package/docs/skill-candidates/v0.0.10/webapp-testing/SKILL.md +95 -95
  244. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/console_logging.py +34 -34
  245. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/element_discovery.py +39 -39
  246. package/docs/skill-candidates/v0.0.10/webapp-testing/examples/static_html_automation.py +32 -32
  247. package/docs/skill-candidates/v0.0.10/webapp-testing/scripts/with_server.py +105 -105
  248. package/docs/skill-candidates/v0.0.10/winui-app/LICENSE.txt +201 -201
  249. package/docs/skill-candidates/v0.0.10/winui-app/SKILL.md +94 -94
  250. package/docs/skill-candidates/v0.0.10/winui-app/agents/openai.yaml +5 -5
  251. package/docs/skill-candidates/v0.0.10/winui-app/config.yaml +50 -50
  252. package/docs/skill-candidates/v0.0.10/winui-app/references/_sections.md +96 -96
  253. package/docs/skill-candidates/v0.0.10/winui-app/references/accessibility-input-and-localization.md +51 -51
  254. package/docs/skill-candidates/v0.0.10/winui-app/references/build-run-and-launch-verification.md +72 -72
  255. package/docs/skill-candidates/v0.0.10/winui-app/references/community-toolkit-controls-and-helpers.md +57 -57
  256. package/docs/skill-candidates/v0.0.10/winui-app/references/controls-layout-and-adaptive-ui.md +84 -84
  257. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-environment-audit-and-remediation.md +82 -82
  258. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-setup-and-project-selection.md +67 -67
  259. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-template-first-recovery.md +62 -62
  260. package/docs/skill-candidates/v0.0.10/winui-app/references/foundation-winui-app-structure.md +62 -62
  261. package/docs/skill-candidates/v0.0.10/winui-app/references/motion-animations-and-polish.md +45 -45
  262. package/docs/skill-candidates/v0.0.10/winui-app/references/performance-diagnostics-and-responsiveness.md +46 -46
  263. package/docs/skill-candidates/v0.0.10/winui-app/references/sample-source-map.md +37 -37
  264. package/docs/skill-candidates/v0.0.10/winui-app/references/shell-navigation-and-windowing.md +67 -67
  265. package/docs/skill-candidates/v0.0.10/winui-app/references/styling-theming-materials-and-icons.md +71 -71
  266. package/docs/skill-candidates/v0.0.10/winui-app/references/testing-debugging-and-review-checklists.md +77 -77
  267. package/docs/skill-candidates/v0.0.10/winui-app/references/windows-app-sdk-lifecycle-notifications-and-deployment.md +52 -52
  268. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/SKILL.md +398 -398
  269. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/common-patterns.md +330 -330
  270. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/complete-examples.md +871 -871
  271. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/component-patterns.md +501 -501
  272. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/data-fetching.md +766 -766
  273. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/file-organization.md +501 -501
  274. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/loading-and-error-states.md +500 -500
  275. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/performance.md +405 -405
  276. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/routing-guide.md +363 -363
  277. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/styling-guide.md +427 -427
  278. package/docs/skill-candidates/v0.0.11/frontend-dev-guidelines/resources/typescript-standards.md +417 -417
  279. package/docs/skill-candidates/v0.0.11/git-version-control-ops/SKILL.md +34 -34
  280. package/docs/skill-candidates/v0.0.11/go-engineering/SKILL.md +34 -34
  281. package/docs/skill-candidates/v0.0.11/java-engineering/SKILL.md +34 -34
  282. package/docs/skill-candidates/v0.0.11/javascript-engineering/SKILL.md +34 -34
  283. package/docs/skill-candidates/v0.0.11/json-contract-design/SKILL.md +34 -34
  284. package/docs/skill-candidates/v0.0.11/multi-client-mcp-ops/SKILL.md +36 -36
  285. package/docs/skill-candidates/v0.0.11/nextjs/SKILL.md +745 -745
  286. package/docs/skill-candidates/v0.0.11/nextjs/agents/openai.yaml +3 -3
  287. package/docs/skill-candidates/v0.0.11/nextjs/references/app-router-files.md +94 -94
  288. package/docs/skill-candidates/v0.0.11/python-engineering/SKILL.md +34 -34
  289. package/docs/skill-candidates/v0.0.11/ruby-engineering/SKILL.md +34 -34
  290. package/docs/skill-candidates/v0.0.11/senior-fullstack/SKILL.md +209 -209
  291. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/architecture_patterns.md +103 -103
  292. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/development_workflows.md +103 -103
  293. package/docs/skill-candidates/v0.0.11/senior-fullstack/references/tech_stack_guide.md +103 -103
  294. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/code_quality_analyzer.py +114 -114
  295. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/fullstack_scaffolder.py +114 -114
  296. package/docs/skill-candidates/v0.0.11/senior-fullstack/scripts/project_scaffolder.py +114 -114
  297. package/docs/skill-candidates/v0.0.11/shadcn/SKILL.md +573 -573
  298. package/docs/skill-candidates/v0.0.11/shadcn/agents/openai.yaml +3 -3
  299. package/docs/skill-candidates/v0.0.11/sql-postgresql-engineering/SKILL.md +34 -34
  300. package/docs/skill-candidates/v0.0.11/terminal-shell-ops/SKILL.md +34 -34
  301. package/docs/skill-candidates/v0.0.11/typescript-expert/SKILL.md +429 -429
  302. package/docs/skill-candidates/v0.0.11/typescript-expert/references/tsconfig-strict.json +91 -91
  303. package/docs/skill-candidates/v0.0.11/typescript-expert/references/typescript-cheatsheet.md +383 -383
  304. package/docs/skill-candidates/v0.0.11/typescript-expert/references/utility-types.ts +335 -335
  305. package/docs/skill-candidates/v0.0.11/typescript-expert/scripts/ts_diagnostic.py +203 -203
  306. package/docs/skill-candidates/v0.0.11/ui-component-primitives/SKILL.md +34 -34
  307. package/docs/skill-candidates/v0.0.11/web-mobile-design-systems/SKILL.md +34 -34
  308. package/docs/skill-candidates/v0.0.11/windows-linux-platform-ops/SKILL.md +34 -34
  309. package/docs/skill-candidates/v0.0.12/context-compression-handoff/SKILL.md +47 -0
  310. package/docs/skill-candidates/v0.0.12/csharp-senior-master-engineering/SKILL.md +32 -32
  311. package/docs/skill-candidates/v0.0.12/css-senior-master-engineering/SKILL.md +32 -32
  312. package/docs/skill-candidates/v0.0.12/go-senior-master-engineering/SKILL.md +32 -32
  313. package/docs/skill-candidates/v0.0.12/html-senior-master-engineering/SKILL.md +32 -32
  314. package/docs/skill-candidates/v0.0.12/javascript-senior-master-engineering/SKILL.md +32 -32
  315. package/docs/skill-candidates/v0.0.12/json-senior-master-engineering/SKILL.md +32 -32
  316. package/docs/skill-candidates/v0.0.12/prompt-budget-gate/SKILL.md +46 -0
  317. package/docs/skill-candidates/v0.0.12/python-senior-master-engineering/SKILL.md +32 -32
  318. package/docs/skill-candidates/v0.0.12/react-senior-master-engineering/SKILL.md +32 -32
  319. package/docs/skill-candidates/v0.0.12/ruby-senior-master-engineering/SKILL.md +32 -32
  320. package/docs/skill-candidates/v0.0.12/senior-master-code-optimizer/SKILL.md +48 -48
  321. package/docs/skill-candidates/v0.0.12/sql-senior-master-engineering/SKILL.md +31 -31
  322. package/docs/skill-candidates/v0.0.12/token-economy-orchestrator/SKILL.md +38 -0
  323. package/docs/skill-candidates/v0.0.12/typescript-senior-master-engineering/SKILL.md +35 -35
  324. package/docs/skill-candidates/v0.0.9/ai-ethics-human-dignity/SKILL.md +32 -32
  325. package/docs/skill-candidates/v0.0.9/broad-domain-router/SKILL.md +41 -41
  326. package/docs/skill-candidates/v0.0.9/catholic-moral-discernment/SKILL.md +31 -31
  327. package/docs/skill-candidates/v0.0.9/engineering-systems-master/SKILL.md +31 -31
  328. package/docs/skill-candidates/v0.0.9/language-quality-pt-en-fr/SKILL.md +28 -28
  329. package/docs/skill-candidates/v0.0.9/math-science-reasoning/SKILL.md +29 -29
  330. package/docs/skill-candidates/v0.0.9/philosophy-sociology-discernment/SKILL.md +28 -28
  331. package/docs/skill-candidates/v0.0.9/professional-boundary-triage/SKILL.md +40 -40
  332. package/docs/skill-candidates/v0.0.9/release-ethics-gate/SKILL.md +32 -32
  333. package/docs/skill-candidates/v0.0.9/source-authority-reviewer/SKILL.md +31 -31
  334. package/examples/client-configs/claude-code.commands.md +21 -21
  335. package/examples/client-configs/claude-code.project.mcp.json +18 -18
  336. package/examples/client-configs/claude-desktop.macos.json +18 -18
  337. package/examples/client-configs/claude-desktop.windows.json +20 -20
  338. package/examples/client-configs/codex.windows.toml +11 -11
  339. package/examples/client-configs/gemini-code-assist.intellij.mcp.json +18 -18
  340. package/examples/client-configs/gemini.linux.settings.json +21 -21
  341. package/examples/client-configs/gemini.windows.settings.json +23 -23
  342. package/examples/client-configs/generic-stdio.json +16 -16
  343. package/manifests/channels/beta.json +24 -24
  344. package/manifests/channels/stable.json +25 -25
  345. package/network/approved-skills.json +54 -54
  346. package/network/unapproved-skill-candidates.json +110 -110
  347. package/package.json +89 -86
  348. package/scripts/configure-private-registry.mjs +208 -208
  349. package/scripts/lib/private-registry.mjs +97 -97
  350. package/scripts/render-menu-evidence.mjs +196 -130
  351. package/scripts/verify-menu-actions.mjs +112 -107
  352. package/scripts/verify-menu-visual.mjs +90 -0
  353. package/sources.json +11 -11
@@ -1,307 +1,357 @@
1
- #!/usr/bin/env node
2
-
3
- import { existsSync, readFileSync } from 'node:fs';
4
- import os from 'node:os';
5
- import path from 'node:path';
6
- import process from 'node:process';
7
- import { fileURLToPath } from 'node:url';
8
- import prompts from 'prompts';
9
- import {
10
- activateSuccessSkillDraft,
11
- listSuccessSkillDraftManifests,
12
- listUnapprovedSuccessSkills,
13
- prepareSuccessSkillApprovalPackage,
14
- readSuccessSkillDraft,
15
- recordSuccessSkillDecision,
16
- reviewSuccessSkillDraft,
17
- } from '../dist/success-learning.js';
18
- import { readApprovedSkillIndex } from '../dist/skill-network.js';
19
-
20
- const here = path.dirname(fileURLToPath(import.meta.url));
21
- const rootDir = path.resolve(here, '..');
22
- const skillMasterHome = process.env.SKILL_MASTER_HOME ?? path.join(os.homedir(), '.skill-master');
23
- const successLearningDir = process.env.SKILL_MASTER_SUCCESS_LEARNING_DIR
24
- ?? path.join(skillMasterHome, 'data', 'success-learning');
25
- const approvedSkillIndexPath = process.env.SKILL_MASTER_APPROVED_SKILLS_INDEX
26
- ?? path.join(rootDir, 'network', 'approved-skills.json');
27
- const studyCandidatesPath = path.join(rootDir, 'network', 'unapproved-skill-candidates.json');
28
-
29
- const isTty = () => Boolean(process.stdin.isTTY && process.stdout.isTTY);
30
-
31
- const workspaceSkillRoot = () => path.join(process.cwd(), '.codex', 'skills');
32
-
33
- const globalSkillRoot = () => path.join(process.env.CODEX_HOME ?? path.join(os.homedir(), '.codex'), 'skills');
34
-
35
- const parseArgs = (argv) => {
36
- const parsed = {
37
- command: 'notify',
38
- target: 'local',
39
- manifest: null,
40
- reason: null,
41
- yes: false,
42
- overwrite: false,
43
- directory: successLearningDir,
44
- outputDir: successLearningDir,
45
- };
46
-
47
- for (let index = 0; index < argv.length; index += 1) {
48
- const arg = argv[index];
49
- if (arg === '--notify') parsed.command = 'notify';
50
- else if (arg === '--list') parsed.command = 'list';
51
- else if (arg === '--study') parsed.command = 'study';
52
- else if (arg === '--approval-package') parsed.command = 'approval-package';
53
- else if (arg === '--mark-study') {
54
- parsed.command = 'mark-study';
55
- parsed.manifest = argv[++index] ?? null;
56
- } else if (arg === '--reject') {
57
- parsed.command = 'reject';
58
- parsed.manifest = argv[++index] ?? null;
59
- } else if (arg === '--mark-study-interactive') parsed.command = 'mark-study-interactive';
60
- else if (arg === '--reject-interactive') parsed.command = 'reject-interactive';
61
- else if (arg === '--reason') parsed.reason = argv[++index] ?? null;
62
- else if (arg === '--activate') {
63
- parsed.command = 'activate';
64
- parsed.manifest = argv[++index] ?? null;
65
- } else if (arg === '--activate-interactive') parsed.command = 'activate-interactive';
66
- else if (arg === '--yes') parsed.yes = true;
67
- else if (arg === '--overwrite') parsed.overwrite = true;
68
- else if (arg.startsWith('--target=')) parsed.target = arg.slice('--target='.length);
69
- else if (arg === '--target') parsed.target = argv[++index] ?? parsed.target;
70
- else if (arg.startsWith('--directory=')) parsed.directory = arg.slice('--directory='.length);
71
- else if (arg === '--directory') parsed.directory = argv[++index] ?? parsed.directory;
72
- else if (arg.startsWith('--output-dir=')) parsed.outputDir = arg.slice('--output-dir='.length);
73
- else if (arg === '--output-dir') parsed.outputDir = argv[++index] ?? parsed.outputDir;
74
- else if (arg === '--help' || arg === '-h') parsed.command = 'help';
75
- else throw new Error(`Unknown argument: ${arg}`);
76
- }
77
-
78
- return parsed;
79
- };
80
-
81
- const resolveTargetRoot = (target) => {
82
- if (target === 'local') return workspaceSkillRoot();
83
- if (target === 'global') return globalSkillRoot();
84
- return path.resolve(target);
85
- };
86
-
87
- const loadStudyCandidates = () => {
88
- if (!existsSync(studyCandidatesPath)) return [];
89
- const parsed = JSON.parse(readFileSync(studyCandidatesPath, 'utf8'));
90
- return Array.isArray(parsed.candidates) ? parsed.candidates : [];
91
- };
92
-
93
- const printHelp = () => {
94
- console.log(`Skill Master Success Skills
95
-
96
- Usage:
97
- skill-master-success-skills --notify
98
- skill-master-success-skills --list
99
- skill-master-success-skills --study
100
- skill-master-success-skills --approval-package
101
- skill-master-success-skills --mark-study <manifest.json> --reason "why"
102
- skill-master-success-skills --reject <manifest.json> --reason "why"
103
- skill-master-success-skills --mark-study-interactive
104
- skill-master-success-skills --reject-interactive
105
- skill-master-success-skills --activate <manifest.json> --target local|global|<path> --yes
106
- skill-master-success-skills --activate-interactive --target local|global
107
- `);
108
- };
109
-
110
- const notify = async (directory) => {
111
- const drafts = await listUnapprovedSuccessSkills(directory);
112
- const studyCandidates = loadStudyCandidates();
113
- const readyDrafts = [];
114
- const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
115
-
116
- for (const entry of drafts) {
117
- const review = await reviewSuccessSkillDraft({ manifestPath: entry.filePath, approvedIndex });
118
- if (review.recommendation === 'ready-for-human-approval') readyDrafts.push(entry);
119
- }
120
-
121
- console.log('Skill Master - notificacoes');
122
- console.log(`- Drafts pendentes: ${drafts.length}`);
123
- console.log(`- Prontos para aprovacao humana: ${readyDrafts.length}`);
124
- console.log(`- Skills externas para estudo: ${studyCandidates.length}`);
125
- if (readyDrafts.length > 0) {
126
- console.log('');
127
- console.log('Acoes sugeridas:');
128
- console.log('- skill-master-menu --run activate-learned-local');
129
- console.log('- skill-master-menu --run approval-package');
130
- }
131
- };
132
-
133
- const listDrafts = async (directory) => {
134
- const drafts = await listUnapprovedSuccessSkills(directory);
135
- if (drafts.length === 0) {
136
- console.log('Nenhum draft pendente encontrado.');
137
- return;
138
- }
139
-
140
- for (const [index, draft] of drafts.entries()) {
141
- console.log(`${index + 1}. ${draft.candidateName}`);
142
- console.log(` Manifest: ${draft.filePath}`);
143
- console.log(` Motivo: ${draft.reason}`);
144
- }
145
- };
146
-
147
- const study = () => {
148
- const candidates = loadStudyCandidates();
149
- if (candidates.length === 0) {
150
- console.log('Nenhuma skill externa para estudo encontrada.');
151
- return;
152
- }
153
-
154
- console.log('Skills para estudar');
155
- for (const [index, candidate] of candidates.entries()) {
156
- console.log(`${index + 1}. ${candidate.name}`);
157
- console.log(` Criador: ${candidate.creatorName} - ${candidate.creatorUrl}`);
158
- console.log(` Link: ${candidate.sourceUrl}`);
159
- console.log(` Status: ${candidate.reviewStatus}`);
160
- console.log(` Motivo: ${candidate.reason}`);
161
- }
162
- };
163
-
164
- const createApprovalPackage = async ({ directory, outputDir }) => {
165
- const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
166
- const result = await prepareSuccessSkillApprovalPackage({ directory, outputDir, approvedIndex });
167
- console.log('Pacote de aprovacao humana criado.');
168
- console.log(`- Arquivo: ${result.filePath}`);
169
- console.log(`- Drafts: ${result.totalDrafts}`);
170
- console.log(`- Prontos para aprovacao: ${result.readyForApproval}`);
171
- console.log(`- Precisam de revisao: ${result.needsReview}`);
172
- };
173
-
174
- const chooseManifest = async (directory, { readyOnly = true } = {}) => {
175
- const manifests = await listSuccessSkillDraftManifests(directory);
176
- const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
177
- const choices = [];
178
-
179
- for (const manifestPath of manifests) {
180
- const draft = await readSuccessSkillDraft(manifestPath);
181
- if (!draft || draft.governance.approved) continue;
182
- const review = await reviewSuccessSkillDraft({ manifestPath, approvedIndex });
183
- choices.push({
184
- title: draft.candidateSkill.name,
185
- description: `${review.recommendation} - ${manifestPath}`,
186
- value: manifestPath,
187
- disabled: readyOnly && review.recommendation !== 'ready-for-human-approval',
188
- });
189
- }
190
-
191
- if (choices.length === 0) {
192
- throw new Error('No pending success skill drafts found.');
193
- }
194
-
195
- const response = await prompts({
196
- type: 'select',
197
- name: 'manifest',
198
- message: 'Selecione a skill aprendida para ativar',
199
- choices,
200
- });
201
-
202
- if (!response.manifest) {
203
- throw new Error('No draft selected.');
204
- }
205
-
206
- return response.manifest;
207
- };
208
-
209
- const activate = async ({ manifest, target, yes, overwrite }) => {
210
- if (!manifest) throw new Error('Missing manifest path.');
211
- const targetRoot = resolveTargetRoot(target);
212
-
213
- if (!yes) {
214
- if (!isTty()) {
215
- throw new Error('Activation requires --yes outside an interactive terminal.');
216
- }
217
- const confirmation = await prompts({
218
- type: 'confirm',
219
- name: 'confirmed',
220
- message: `Ativar skill em ${targetRoot}?`,
221
- initial: false,
222
- });
223
- if (!confirmation.confirmed) {
224
- console.log('Ativacao cancelada.');
225
- return;
226
- }
227
- }
228
-
229
- const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
230
- const result = await activateSuccessSkillDraft({
231
- manifestPath: path.resolve(manifest),
232
- approvedIndex,
233
- targetRoot,
234
- approvedBy: 'skill-master-menu',
235
- overwrite,
236
- });
237
-
238
- console.log('Skill ativada.');
239
- console.log(`- Nome: ${result.candidateName}`);
240
- console.log(`- Destino: ${result.installedSkillPath}`);
241
- console.log(`- Registro: ${result.approvalRecordPath}`);
242
- };
243
-
244
- const recordDecision = async ({ command, manifest, reason }) => {
245
- if (!manifest) throw new Error('Missing manifest path.');
246
- if (!reason) throw new Error('Decision commands require --reason.');
247
- const decision = command === 'mark-study' ? 'study' : 'rejected';
248
- const result = await recordSuccessSkillDecision({
249
- manifestPath: path.resolve(manifest),
250
- decision,
251
- decidedBy: 'skill-master-menu',
252
- reason,
253
- });
254
-
255
- console.log('Decisao registrada.');
256
- console.log(`- Skill: ${result.candidateName}`);
257
- console.log(`- Decisao: ${result.decision}`);
258
- console.log(`- Manifest: ${result.manifestPath}`);
259
- console.log(`- Atualizar Notion: ${result.notionUpdateRecommended ? 'sim' : 'nao'}`);
260
- };
261
-
262
- const recordDecisionInteractive = async ({ command, directory }) => {
263
- if (!isTty()) throw new Error('Interactive decision requires a TTY.');
264
- const manifest = await chooseManifest(directory, { readyOnly: false });
265
- const response = await prompts({
266
- type: 'text',
267
- name: 'reason',
268
- message: command === 'mark-study-interactive'
269
- ? 'Por que manter esta skill para estudo?'
270
- : 'Por que rejeitar esta skill candidata?',
271
- validate: (value) => value.trim().length >= 5 || 'Informe um motivo com pelo menos 5 caracteres.',
272
- });
273
- if (!response.reason) throw new Error('Decision reason is required.');
274
-
275
- await recordDecision({
276
- command: command === 'mark-study-interactive' ? 'mark-study' : 'reject',
277
- manifest,
278
- reason: response.reason,
279
- });
280
- };
281
-
282
- const main = async () => {
283
- const args = parseArgs(process.argv.slice(2));
284
-
285
- if (args.command === 'help') printHelp();
286
- else if (args.command === 'notify') await notify(args.directory);
287
- else if (args.command === 'list') await listDrafts(args.directory);
288
- else if (args.command === 'study') study();
289
- else if (args.command === 'approval-package') await createApprovalPackage(args);
290
- else if (args.command === 'mark-study' || args.command === 'reject') await recordDecision(args);
291
- else if (args.command === 'mark-study-interactive' || args.command === 'reject-interactive') await recordDecisionInteractive(args);
292
- else if (args.command === 'activate') await activate(args);
293
- else if (args.command === 'activate-interactive') {
294
- if (!isTty()) throw new Error('Interactive activation requires a TTY.');
295
- const manifest = await chooseManifest(args.directory);
296
- await activate({ ...args, manifest });
297
- } else {
298
- throw new Error(`Unsupported command: ${args.command}`);
299
- }
300
- };
301
-
302
- try {
303
- await main();
304
- } catch (error) {
305
- process.stderr.write(`[skill_master] ${error instanceof Error ? error.message : String(error)}\n`);
306
- process.exitCode = 1;
307
- }
1
+ #!/usr/bin/env node
2
+
3
+ import { existsSync, readFileSync } from 'node:fs';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ import process from 'node:process';
7
+ import { fileURLToPath } from 'node:url';
8
+ import prompts from 'prompts';
9
+ import {
10
+ activateSuccessSkillDraft,
11
+ listSuccessSkillDraftManifests,
12
+ listUnapprovedSuccessSkills,
13
+ prepareSuccessSkillApprovalPackage,
14
+ readSuccessSkillDraft,
15
+ recordSuccessSkillDecision,
16
+ reviewSuccessSkillDraft,
17
+ } from '../dist/success-learning.js';
18
+ import { readApprovedSkillIndex } from '../dist/skill-network.js';
19
+
20
+ const here = path.dirname(fileURLToPath(import.meta.url));
21
+ const rootDir = path.resolve(here, '..');
22
+ const skillMasterHome = process.env.SKILL_MASTER_HOME ?? path.join(os.homedir(), '.skill-master');
23
+ const successLearningDir = process.env.SKILL_MASTER_SUCCESS_LEARNING_DIR
24
+ ?? path.join(skillMasterHome, 'data', 'success-learning');
25
+ const approvedSkillIndexPath = process.env.SKILL_MASTER_APPROVED_SKILLS_INDEX
26
+ ?? path.join(rootDir, 'network', 'approved-skills.json');
27
+ const studyCandidatesPath = path.join(rootDir, 'network', 'unapproved-skill-candidates.json');
28
+
29
+ const isTty = () => Boolean(process.stdin.isTTY && process.stdout.isTTY);
30
+
31
+ const workspaceSkillRoot = () => path.join(process.cwd(), '.codex', 'skills');
32
+
33
+ const globalSkillRoot = () => path.join(process.env.CODEX_HOME ?? path.join(os.homedir(), '.codex'), 'skills');
34
+
35
+ const parseArgs = (argv) => {
36
+ const parsed = {
37
+ command: 'notify',
38
+ target: 'local',
39
+ manifest: null,
40
+ reason: null,
41
+ yes: false,
42
+ overwrite: false,
43
+ directory: successLearningDir,
44
+ outputDir: successLearningDir,
45
+ };
46
+
47
+ for (let index = 0; index < argv.length; index += 1) {
48
+ const arg = argv[index];
49
+ if (arg === '--notify') parsed.command = 'notify';
50
+ else if (arg === '--list') parsed.command = 'list';
51
+ else if (arg === '--study') parsed.command = 'study';
52
+ else if (arg === '--approval-package') parsed.command = 'approval-package';
53
+ else if (arg === '--mark-study') {
54
+ parsed.command = 'mark-study';
55
+ parsed.manifest = argv[++index] ?? null;
56
+ } else if (arg === '--reject') {
57
+ parsed.command = 'reject';
58
+ parsed.manifest = argv[++index] ?? null;
59
+ } else if (arg === '--mark-study-interactive') parsed.command = 'mark-study-interactive';
60
+ else if (arg === '--reject-interactive') parsed.command = 'reject-interactive';
61
+ else if (arg === '--reason') parsed.reason = argv[++index] ?? null;
62
+ else if (arg === '--activate') {
63
+ parsed.command = 'activate';
64
+ parsed.manifest = argv[++index] ?? null;
65
+ } else if (arg === '--activate-interactive') parsed.command = 'activate-interactive';
66
+ else if (arg === '--activate-ready') parsed.command = 'activate-ready';
67
+ else if (arg === '--yes') parsed.yes = true;
68
+ else if (arg === '--overwrite') parsed.overwrite = true;
69
+ else if (arg.startsWith('--target=')) parsed.target = arg.slice('--target='.length);
70
+ else if (arg === '--target') parsed.target = argv[++index] ?? parsed.target;
71
+ else if (arg.startsWith('--directory=')) parsed.directory = arg.slice('--directory='.length);
72
+ else if (arg === '--directory') parsed.directory = argv[++index] ?? parsed.directory;
73
+ else if (arg.startsWith('--output-dir=')) parsed.outputDir = arg.slice('--output-dir='.length);
74
+ else if (arg === '--output-dir') parsed.outputDir = argv[++index] ?? parsed.outputDir;
75
+ else if (arg === '--help' || arg === '-h') parsed.command = 'help';
76
+ else throw new Error(`Unknown argument: ${arg}`);
77
+ }
78
+
79
+ return parsed;
80
+ };
81
+
82
+ const resolveTargetRoot = (target) => {
83
+ if (target === 'local') return workspaceSkillRoot();
84
+ if (target === 'global') return globalSkillRoot();
85
+ return path.resolve(target);
86
+ };
87
+
88
+ const loadStudyCandidates = () => {
89
+ if (!existsSync(studyCandidatesPath)) return [];
90
+ const parsed = JSON.parse(readFileSync(studyCandidatesPath, 'utf8'));
91
+ return Array.isArray(parsed.candidates) ? parsed.candidates : [];
92
+ };
93
+
94
+ const printHelp = () => {
95
+ console.log(`Skill Master Success Skills
96
+
97
+ Usage:
98
+ skill-master-success-skills --notify
99
+ skill-master-success-skills --list
100
+ skill-master-success-skills --study
101
+ skill-master-success-skills --approval-package
102
+ skill-master-success-skills --mark-study <manifest.json> --reason "why"
103
+ skill-master-success-skills --reject <manifest.json> --reason "why"
104
+ skill-master-success-skills --mark-study-interactive
105
+ skill-master-success-skills --reject-interactive
106
+ skill-master-success-skills --activate <manifest.json> --target local|global|<path> --yes
107
+ skill-master-success-skills --activate-ready --target local|global|<path> --yes
108
+ skill-master-success-skills --activate-interactive --target local|global
109
+ `);
110
+ };
111
+
112
+ const notify = async (directory) => {
113
+ const drafts = await listUnapprovedSuccessSkills(directory);
114
+ const studyCandidates = loadStudyCandidates();
115
+ const readyDrafts = [];
116
+ const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
117
+
118
+ for (const entry of drafts) {
119
+ const review = await reviewSuccessSkillDraft({ manifestPath: entry.filePath, approvedIndex });
120
+ if (review.recommendation === 'ready-for-human-approval') readyDrafts.push(entry);
121
+ }
122
+
123
+ console.log('Skill Master - notificacoes');
124
+ console.log(`- Drafts pendentes: ${drafts.length}`);
125
+ console.log(`- Prontos para aprovacao humana: ${readyDrafts.length}`);
126
+ console.log(`- Skills externas para estudo: ${studyCandidates.length}`);
127
+ if (readyDrafts.length > 0) {
128
+ console.log('');
129
+ console.log('Acoes sugeridas:');
130
+ console.log('- skill-master-menu --run activate-learned-local');
131
+ console.log('- skill-master-menu --run approval-package');
132
+ }
133
+ };
134
+
135
+ const listDrafts = async (directory) => {
136
+ const drafts = await listUnapprovedSuccessSkills(directory);
137
+ if (drafts.length === 0) {
138
+ console.log('Nenhum draft pendente encontrado.');
139
+ return;
140
+ }
141
+
142
+ for (const [index, draft] of drafts.entries()) {
143
+ console.log(`${index + 1}. ${draft.candidateName}`);
144
+ console.log(` Manifest: ${draft.filePath}`);
145
+ console.log(` Motivo: ${draft.reason}`);
146
+ }
147
+ };
148
+
149
+ const study = () => {
150
+ const candidates = loadStudyCandidates();
151
+ if (candidates.length === 0) {
152
+ console.log('Nenhuma skill externa para estudo encontrada.');
153
+ return;
154
+ }
155
+
156
+ console.log('Skills para estudar');
157
+ for (const [index, candidate] of candidates.entries()) {
158
+ console.log(`${index + 1}. ${candidate.name}`);
159
+ console.log(` Criador: ${candidate.creatorName} - ${candidate.creatorUrl}`);
160
+ console.log(` Link: ${candidate.sourceUrl}`);
161
+ console.log(` Status: ${candidate.reviewStatus}`);
162
+ console.log(` Motivo: ${candidate.reason}`);
163
+ }
164
+ };
165
+
166
+ const createApprovalPackage = async ({ directory, outputDir }) => {
167
+ const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
168
+ const result = await prepareSuccessSkillApprovalPackage({ directory, outputDir, approvedIndex });
169
+ console.log('Pacote de aprovacao humana criado.');
170
+ console.log(`- Arquivo: ${result.filePath}`);
171
+ console.log(`- Drafts: ${result.totalDrafts}`);
172
+ console.log(`- Prontos para aprovacao: ${result.readyForApproval}`);
173
+ console.log(`- Precisam de revisao: ${result.needsReview}`);
174
+ };
175
+
176
+ const chooseManifest = async (directory, { readyOnly = true } = {}) => {
177
+ const manifests = await listSuccessSkillDraftManifests(directory);
178
+ const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
179
+ const choices = [];
180
+
181
+ for (const manifestPath of manifests) {
182
+ const draft = await readSuccessSkillDraft(manifestPath);
183
+ if (!draft || draft.governance.approved) continue;
184
+ const review = await reviewSuccessSkillDraft({ manifestPath, approvedIndex });
185
+ choices.push({
186
+ title: draft.candidateSkill.name,
187
+ description: `${review.recommendation} - ${manifestPath}`,
188
+ value: manifestPath,
189
+ disabled: readyOnly && review.recommendation !== 'ready-for-human-approval',
190
+ });
191
+ }
192
+
193
+ if (choices.length === 0) {
194
+ throw new Error('Nenhum draft pendente encontrado. Gere um pacote com: skill-master-menu --run approval-package. Para revisar a fila: skill-master-menu --run notifications');
195
+ }
196
+
197
+ const response = await prompts({
198
+ type: 'select',
199
+ name: 'manifest',
200
+ message: 'Selecione a skill aprendida para ativar',
201
+ choices,
202
+ });
203
+
204
+ if (!response.manifest) {
205
+ throw new Error('No draft selected.');
206
+ }
207
+
208
+ return response.manifest;
209
+ };
210
+
211
+ const listReadyDrafts = async (directory) => {
212
+ const manifests = await listSuccessSkillDraftManifests(directory);
213
+ const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
214
+ const ready = [];
215
+
216
+ for (const manifestPath of manifests) {
217
+ const draft = await readSuccessSkillDraft(manifestPath);
218
+ if (!draft || draft.governance.approved) continue;
219
+ const review = await reviewSuccessSkillDraft({ manifestPath, approvedIndex });
220
+ if (review.recommendation === 'ready-for-human-approval') {
221
+ ready.push({
222
+ manifestPath,
223
+ name: draft.candidateSkill.name,
224
+ recommendation: review.recommendation,
225
+ });
226
+ }
227
+ }
228
+
229
+ return ready;
230
+ };
231
+
232
+ const activate = async ({ manifest, target, yes, overwrite }) => {
233
+ if (!manifest) throw new Error('Missing manifest path.');
234
+ const targetRoot = resolveTargetRoot(target);
235
+
236
+ if (!yes) {
237
+ if (!isTty()) {
238
+ throw new Error('Activation requires --yes outside an interactive terminal.');
239
+ }
240
+ const confirmation = await prompts({
241
+ type: 'confirm',
242
+ name: 'confirmed',
243
+ message: `Ativar skill em ${targetRoot}?`,
244
+ initial: false,
245
+ });
246
+ if (!confirmation.confirmed) {
247
+ console.log('Ativacao cancelada.');
248
+ return;
249
+ }
250
+ }
251
+
252
+ const approvedIndex = await readApprovedSkillIndex(approvedSkillIndexPath);
253
+ const result = await activateSuccessSkillDraft({
254
+ manifestPath: path.resolve(manifest),
255
+ approvedIndex,
256
+ targetRoot,
257
+ approvedBy: 'skill-master-menu',
258
+ overwrite,
259
+ });
260
+
261
+ console.log('Skill ativada.');
262
+ console.log(`- Nome: ${result.candidateName}`);
263
+ console.log(`- Destino: ${result.installedSkillPath}`);
264
+ console.log(`- Registro: ${result.approvalRecordPath}`);
265
+ };
266
+
267
+ const activateReady = async ({ directory, target, yes, overwrite }) => {
268
+ const ready = await listReadyDrafts(directory);
269
+
270
+ if (ready.length === 0) {
271
+ throw new Error('No ready learned skill drafts found. Use --approval-package to review pending drafts first.');
272
+ }
273
+
274
+ if (ready.length > 1) {
275
+ console.log('Multiple ready learned skill drafts found:');
276
+ for (const [index, draft] of ready.entries()) {
277
+ console.log(`${index + 1}. ${draft.name}`);
278
+ console.log(` Manifest: ${draft.manifestPath}`);
279
+ }
280
+ throw new Error('Multiple ready drafts require an explicit --activate <manifest.json> selection.');
281
+ }
282
+
283
+ await activate({
284
+ manifest: ready[0].manifestPath,
285
+ target,
286
+ yes,
287
+ overwrite,
288
+ });
289
+ };
290
+
291
+ const recordDecision = async ({ command, manifest, reason }) => {
292
+ if (!manifest) throw new Error('Missing manifest path.');
293
+ if (!reason) throw new Error('Decision commands require --reason.');
294
+ const decision = command === 'mark-study' ? 'study' : 'rejected';
295
+ const result = await recordSuccessSkillDecision({
296
+ manifestPath: path.resolve(manifest),
297
+ decision,
298
+ decidedBy: 'skill-master-menu',
299
+ reason,
300
+ });
301
+
302
+ console.log('Decisao registrada.');
303
+ console.log(`- Skill: ${result.candidateName}`);
304
+ console.log(`- Decisao: ${result.decision}`);
305
+ console.log(`- Manifest: ${result.manifestPath}`);
306
+ console.log(`- Atualizar Notion: ${result.notionUpdateRecommended ? 'sim' : 'nao'}`);
307
+ };
308
+
309
+ const recordDecisionInteractive = async ({ command, directory }) => {
310
+ if (!isTty()) throw new Error('Interactive decision requires a TTY.');
311
+ const manifest = await chooseManifest(directory, { readyOnly: false });
312
+ const response = await prompts({
313
+ type: 'text',
314
+ name: 'reason',
315
+ message: command === 'mark-study-interactive'
316
+ ? 'Por que manter esta skill para estudo?'
317
+ : 'Por que rejeitar esta skill candidata?',
318
+ validate: (value) => value.trim().length >= 5 || 'Informe um motivo com pelo menos 5 caracteres.',
319
+ });
320
+ if (!response.reason) throw new Error('Decision reason is required.');
321
+
322
+ await recordDecision({
323
+ command: command === 'mark-study-interactive' ? 'mark-study' : 'reject',
324
+ manifest,
325
+ reason: response.reason,
326
+ });
327
+ };
328
+
329
+ const main = async () => {
330
+ const args = parseArgs(process.argv.slice(2));
331
+
332
+ if (args.command === 'help') printHelp();
333
+ else if (args.command === 'notify') await notify(args.directory);
334
+ else if (args.command === 'list') await listDrafts(args.directory);
335
+ else if (args.command === 'study') study();
336
+ else if (args.command === 'approval-package') await createApprovalPackage(args);
337
+ else if (args.command === 'mark-study' || args.command === 'reject') await recordDecision(args);
338
+ else if (args.command === 'mark-study-interactive' || args.command === 'reject-interactive') await recordDecisionInteractive(args);
339
+ else if (args.command === 'activate') await activate(args);
340
+ else if (args.command === 'activate-ready') await activateReady(args);
341
+ else if (args.command === 'activate-interactive') {
342
+ if (!isTty()) {
343
+ throw new Error('Ativacao interativa requer TTY. Em automacao use: skill-master-menu --run activate-learned-local --manifest <manifest.json> --yes. Para listar manifests: skill-master-menu --run activate-learned-local --list');
344
+ }
345
+ const manifest = await chooseManifest(args.directory);
346
+ await activate({ ...args, manifest });
347
+ } else {
348
+ throw new Error(`Unsupported command: ${args.command}`);
349
+ }
350
+ };
351
+
352
+ try {
353
+ await main();
354
+ } catch (error) {
355
+ process.stderr.write(`[skill_master] ${error instanceof Error ? error.message : String(error)}\n`);
356
+ process.exitCode = 1;
357
+ }