@fprad0/skill-master-mcp 0.0.12 → 1.0.0

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