@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,405 +1,516 @@
1
- #!/usr/bin/env node
2
-
3
- import prompts from 'prompts';
4
- import readline from 'node:readline';
5
- import { dirname } from 'node:path';
6
- import { fileURLToPath } from 'node:url';
7
- import {
8
- buildMenuCommands,
9
- formatActionHeader,
10
- formatCyberConfirmFrame,
11
- formatCyberMenuFrame,
12
- formatHelp,
13
- formatRunningActionFrame,
14
- formatResultMessage,
15
- formatSkillMasterIntroFrame,
16
- formatStatusReport,
17
- getMenuStatus,
18
- isInteractiveTerminal,
19
- resolveActionKey,
20
- runCommand,
21
- } from './lib/menu-core.mjs';
22
-
23
- const currentFile = fileURLToPath(import.meta.url);
24
- const rootDir = dirname(dirname(currentFile));
25
- const invocationCwd = process.cwd();
26
- const commands = buildMenuCommands({ rootDir, currentFile, invocationCwd });
27
- readline.emitKeypressEvents(process.stdin);
28
- const CONTROL = {
29
- alternateScreenIn: '\x1b[?1049h',
30
- alternateScreenOut: '\x1b[?1049l',
31
- hideCursor: '\x1b[?25l',
32
- showCursor: '\x1b[?25h',
33
- cursorHome: '\x1b[H',
34
- clearScreen: '\x1b[2J',
35
- clearToEnd: '\x1b[0J',
36
- reset: '\x1b[0m',
37
- syncStart: '\x1b[?2026h',
38
- syncEnd: '\x1b[?2026l',
39
- };
40
-
41
- function parseArgs(argv) {
42
- const parsed = {
43
- help: false,
44
- status: false,
45
- yes: false,
46
- run: null,
47
- };
48
-
49
- for (let i = 0; i < argv.length; i += 1) {
50
- const arg = argv[i];
51
- switch (arg) {
52
- case '--help':
53
- case '-h':
54
- parsed.help = true;
55
- break;
56
- case '--status':
57
- parsed.status = true;
58
- break;
1
+ #!/usr/bin/env node
2
+
3
+ import prompts from 'prompts';
4
+ import readline from 'node:readline';
5
+ import { dirname } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import {
8
+ buildMenuCommands,
9
+ formatActionHeader,
10
+ formatCyberConfirmFrame,
11
+ formatCyberMenuFrame,
12
+ formatHelp,
13
+ formatRunningActionFrame,
14
+ formatResultMessage,
15
+ formatSkillMasterIntroFrame,
16
+ formatSkillMasterDnaHeroFrame,
17
+ formatStatusReport,
18
+ getMenuStatus,
19
+ isInteractiveTerminal,
20
+ resolveActionKey,
21
+ resolveInitialSelectedIndex,
22
+ runCommand,
23
+ } from './lib/menu-core.mjs';
24
+
25
+ const currentFile = fileURLToPath(import.meta.url);
26
+ const rootDir = dirname(dirname(currentFile));
27
+ const invocationCwd = process.cwd();
28
+ const commands = buildMenuCommands({ rootDir, currentFile, invocationCwd });
29
+ readline.emitKeypressEvents(process.stdin);
30
+ const CONTROL = {
31
+ alternateScreenIn: '\x1b[?1049h',
32
+ alternateScreenOut: '\x1b[?1049l',
33
+ hideCursor: '\x1b[?25l',
34
+ showCursor: '\x1b[?25h',
35
+ cursorHome: '\x1b[H',
36
+ clearScreen: '\x1b[2J',
37
+ clearToEnd: '\x1b[0J',
38
+ reset: '\x1b[0m',
39
+ syncStart: '\x1b[?2026h',
40
+ syncEnd: '\x1b[?2026l',
41
+ };
42
+
43
+ function parseArgs(argv) {
44
+ const parsed = {
45
+ help: false,
46
+ manifest: null,
47
+ overwrite: false,
48
+ prompt: null,
49
+ status: false,
50
+ yes: false,
51
+ run: null,
52
+ prompt: null,
53
+ manifest: null,
54
+ list: false,
55
+ overwrite: false,
56
+ };
57
+
58
+ for (let i = 0; i < argv.length; i += 1) {
59
+ const arg = argv[i];
60
+ switch (arg) {
61
+ case '--help':
62
+ case '-h':
63
+ parsed.help = true;
64
+ break;
65
+ case '--status':
66
+ parsed.status = true;
67
+ break;
59
68
  case '--yes':
60
69
  parsed.yes = true;
61
70
  break;
62
- case '--run':
63
- parsed.run = argv[++i] ?? null;
71
+ case '--prompt':
72
+ parsed.prompt = argv[++i] ?? null;
64
73
  break;
65
- default:
66
- throw new Error(`Unknown argument: ${arg}`);
74
+ case '--manifest':
75
+ parsed.manifest = argv[++i] ?? null;
76
+ break;
77
+ case '--list':
78
+ parsed.list = true;
79
+ break;
80
+ case '--overwrite':
81
+ parsed.overwrite = true;
82
+ break;
83
+ case '--run':
84
+ parsed.run = argv[++i] ?? null;
85
+ break;
86
+ default:
87
+ throw new Error(`Unknown argument: ${arg}`);
88
+ }
89
+ }
90
+
91
+ return parsed;
92
+ }
93
+
94
+ function printHelp() {
95
+ console.log(formatHelp(commands));
96
+ }
97
+
98
+ function printStatus() {
99
+ console.log(formatStatusReport(getMenuStatus(rootDir)));
100
+ }
101
+
102
+ function prepareActionForRun(action, args) {
103
+ if (action.key === 'promptRecommendation') {
104
+ if (args.prompt) {
105
+ return {
106
+ ...action,
107
+ description: 'Avalia o prompt informado pelo router local.',
108
+ args: [action.args[0], '--route-prompt', args.prompt],
109
+ };
110
+ }
111
+
112
+ if (!isInteractiveTerminal()) {
113
+ throw new Error('prompt-router precisa de --prompt fora do TTY. Exemplo: skill-master-menu --run prompt-router --prompt "validar menu nota 10"');
114
+ }
115
+ }
116
+
117
+ if (action.key === 'activateLearnedLocal' || action.key === 'activateLearnedGlobal') {
118
+ const target = action.key === 'activateLearnedLocal' ? 'local' : 'global';
119
+ if (args.list) {
120
+ return {
121
+ ...action,
122
+ label: 'Listar drafts de skills aprendidas',
123
+ description: 'Lista manifests disponiveis para aprovacao ou ativacao humana.',
124
+ details: ['Nao instala skill.', 'Use um Manifest listado com --manifest <manifest.json> --yes para ativar.'],
125
+ success: 'Drafts pendentes listados com caminhos de manifest quando existirem.',
126
+ confirmMessage: null,
127
+ args: [action.args[0], '--list'],
128
+ };
129
+ }
130
+
131
+ if (args.manifest) {
132
+ return {
133
+ ...action,
134
+ description: `Ativa a skill aprendida informada em ${target}.`,
135
+ args: [
136
+ action.args[0],
137
+ '--activate',
138
+ args.manifest,
139
+ '--target',
140
+ target,
141
+ ...(args.yes ? ['--yes'] : []),
142
+ ...(args.overwrite ? ['--overwrite'] : []),
143
+ ],
144
+ };
67
145
  }
68
- }
69
-
70
- return parsed;
71
- }
72
146
 
73
- function printHelp() {
74
- console.log(formatHelp(commands));
75
- }
76
-
77
- function printStatus() {
78
- console.log(formatStatusReport(getMenuStatus(rootDir)));
79
- }
80
-
81
- async function runSelectedAction(action, { yes = false, useColor = false } = {}) {
82
- if (action.disabledReason) {
83
- throw new Error(`Action ${action.key} is unavailable here: ${action.disabledReason}`);
84
- }
85
-
86
- if (action.confirmMessage && !yes) {
87
147
  if (!isInteractiveTerminal()) {
88
- throw new Error(`Action ${action.key} requires --yes outside an interactive terminal.`);
89
- }
90
-
91
- const confirmation = await prompts({
92
- type: 'confirm',
93
- name: 'confirmed',
94
- message: action.confirmMessage,
95
- initial: false,
96
- });
97
-
98
- if (!confirmation.confirmed) {
99
- return { cancelled: true, code: 0 };
100
- }
101
- }
102
-
103
- console.log('');
104
- console.log(formatActionHeader(action, { useColor }));
105
- console.log('');
106
- const code = await runCommand(action, { cwd: action.cwd ?? rootDir });
107
- console.log('');
108
- console.log(formatResultMessage(code, { useColor }));
109
- return { cancelled: false, code };
110
- }
111
-
112
- const readKey = () => new Promise((resolve) => {
113
- process.stdin.once('keypress', (_str, key) => resolve(key));
114
- });
115
-
116
- function createKeyReader() {
117
- const queue = [];
118
- const waiters = [];
119
- const onKeypress = (_str, key) => {
120
- const waiter = waiters.shift();
121
- if (waiter) {
122
- clearTimeout(waiter.timer);
123
- waiter.resolve(key);
124
- return;
125
- }
126
- queue.push(key);
127
- };
128
-
129
- process.stdin.on('keypress', onKeypress);
130
-
131
- return {
132
- read(timeoutMs) {
133
- if (queue.length) return Promise.resolve(queue.shift());
134
- return new Promise((resolve) => {
135
- const waiter = {
136
- resolve,
137
- timer: setTimeout(() => {
138
- const index = waiters.indexOf(waiter);
139
- if (index >= 0) waiters.splice(index, 1);
140
- resolve(null);
141
- }, timeoutMs),
148
+ if (args.yes) {
149
+ return {
150
+ ...action,
151
+ description: `Ativa automaticamente o unico draft pronto em ${target}, quando existir.`,
152
+ args: [
153
+ action.args[0],
154
+ '--activate-ready',
155
+ '--target',
156
+ target,
157
+ '--yes',
158
+ ...(args.overwrite ? ['--overwrite'] : []),
159
+ ],
142
160
  };
143
- waiters.push(waiter);
144
- });
145
- },
146
- close() {
147
- for (const waiter of waiters.splice(0)) {
148
- clearTimeout(waiter.timer);
149
- waiter.resolve(null);
150
161
  }
151
- process.stdin.off('keypress', onKeypress);
152
- },
153
- };
154
- }
155
-
156
- function setRawInput(enabled) {
157
- if (typeof process.stdin.setRawMode === 'function') {
158
- process.stdin.setRawMode(enabled);
159
- }
160
- if (enabled) process.stdin.resume();
161
- }
162
162
 
163
- function restoreMenuInput() {
164
- setRawInput(true);
165
- process.stdin.resume();
166
- }
167
-
168
- function enterVisualScreen() {
169
- process.stdout.write(`${CONTROL.alternateScreenIn}${CONTROL.hideCursor}${CONTROL.clearScreen}${CONTROL.cursorHome}`);
170
- }
171
-
172
- function leaveVisualScreen() {
173
- process.stdout.write(`${CONTROL.reset}${CONTROL.showCursor}${CONTROL.alternateScreenOut}`);
174
- }
175
-
176
- function writeStableFrame(frame, { clear = false } = {}) {
177
- const prefix = clear ? CONTROL.clearScreen : '';
178
- process.stdout.write([
179
- CONTROL.syncStart,
180
- CONTROL.cursorHome,
181
- prefix,
182
- frame,
183
- '\n',
184
- CONTROL.clearToEnd,
185
- CONTROL.syncEnd,
186
- ].join(''));
187
- }
188
-
189
- function visualHudAllowed() {
190
- return isInteractiveTerminal()
191
- && process.env.SKILL_MASTER_NO_VISUAL !== '1'
192
- && process.env.CI !== 'true'
193
- && process.env.TERM !== 'dumb';
194
- }
195
-
196
- function renderCyberMenu(selectedIndex, tick, { clear = false } = {}) {
197
- const status = getMenuStatus(rootDir);
198
- const frame = formatCyberMenuFrame(status, commands, selectedIndex, tick, {
199
- columns: process.stdout.columns ?? 120,
200
- rows: process.stdout.rows ?? 32,
201
- useColor: true,
202
- });
203
- writeStableFrame(frame, { clear });
204
- }
205
-
206
- function renderRunningAction(action, tick) {
207
- const status = getMenuStatus(rootDir);
208
- const frame = formatRunningActionFrame(status, action, tick, {
209
- columns: process.stdout.columns ?? 120,
210
- rows: process.stdout.rows ?? 32,
211
- useColor: true,
212
- });
213
- writeStableFrame(frame, { clear: true });
214
- }
215
-
216
- function renderIntro(tick, message) {
217
- const status = getMenuStatus(rootDir);
218
- const frame = formatSkillMasterIntroFrame(status, tick, {
219
- columns: process.stdout.columns ?? 120,
220
- rows: process.stdout.rows ?? 32,
221
- useColor: true,
222
- message,
223
- });
224
- writeStableFrame(frame, { clear: tick === 0 });
225
- }
226
-
227
- function renderConfirmAction(action, tick) {
228
- const status = getMenuStatus(rootDir);
229
- const frame = formatCyberConfirmFrame(status, action, tick, {
230
- columns: process.stdout.columns ?? 120,
231
- rows: process.stdout.rows ?? 32,
232
- useColor: true,
233
- });
234
- writeStableFrame(frame, { clear: tick === 0 });
235
- }
236
-
237
- const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
238
-
239
- async function animateIntro(message = 'skill_master assumindo o workflow', frames = 6) {
240
- for (let frame = 0; frame < frames; frame += 1) {
241
- renderIntro(frame, message);
242
- await sleep(70);
243
- }
244
- }
245
-
246
- async function animateRunningAction(action, startTick) {
247
- for (let frame = 0; frame < 5; frame += 1) {
248
- renderRunningAction(action, startTick + frame);
249
- await sleep(90);
250
- }
251
- }
252
-
253
- async function confirmVisualAction(action, startTick) {
254
- let tick = startTick;
255
- const reader = createKeyReader();
256
-
257
- try {
258
- while (true) {
259
- renderConfirmAction(action, tick);
260
- const key = await reader.read(180);
261
- if (!key) {
262
- tick += 1;
263
- continue;
264
- }
265
-
266
- if (key.ctrl && key.name === 'c') return { confirmed: false, code: 130 };
267
- if (key.name === 'return' || key.name === 'enter' || key.name === 'y') return { confirmed: true, code: 0 };
268
- if (key.name === 'escape' || key.name === 'q' || key.name === 'n') return { confirmed: false, code: 0 };
163
+ throw new Error(`A acao ${action.aliases[0]} precisa de selecao explicita fora do TTY. Use: skill-master-menu --run ${action.aliases[0]} --manifest <manifest.json> --yes, ou skill-master-menu --run ${action.aliases[0]} --yes quando exatamente um draft estiver pronto. Para listar manifests: skill-master-menu --run ${action.aliases[0]} --list`);
269
164
  }
270
- } finally {
271
- reader.close();
272
165
  }
273
- }
274
-
275
- async function waitForAnyKey(message = 'Pressione qualquer tecla para voltar ao menu...') {
276
- process.stdout.write(`\n${message}`);
277
- setRawInput(true);
278
- await readKey();
279
- setRawInput(false);
280
- }
281
-
282
- async function runVisualMenu() {
283
- let selectedIndex = 0;
284
- let tick = 0;
285
- let lastCode = 0;
286
- let keyReader = createKeyReader();
287
- let previousColumns = process.stdout.columns ?? 120;
288
- let previousRows = process.stdout.rows ?? 32;
289
- let needsClear = true;
290
-
291
- enterVisualScreen();
292
- restoreMenuInput();
293
166
 
294
- try {
295
- await animateIntro('skill_master online / carregando menu operacional', 7);
296
-
297
- while (true) {
298
- const columns = process.stdout.columns ?? 120;
299
- const rows = process.stdout.rows ?? 32;
300
- const resized = columns !== previousColumns || rows !== previousRows;
301
- previousColumns = columns;
302
- previousRows = rows;
303
- renderCyberMenu(selectedIndex, tick, { clear: needsClear || resized });
304
- needsClear = false;
305
- const key = await keyReader.read(160);
306
-
307
- if (!key) {
308
- tick += 1;
309
- continue;
310
- }
311
-
312
- if (key.ctrl && key.name === 'c') return 130;
313
- if (key.name === 'escape' || key.name === 'q') return lastCode;
314
- if (key.name === 'up' || key.name === 'k') {
315
- selectedIndex = selectedIndex === 0 ? commands.length - 1 : selectedIndex - 1;
316
- continue;
317
- }
318
- if (key.name === 'down' || key.name === 'j') {
319
- selectedIndex = selectedIndex === commands.length - 1 ? 0 : selectedIndex + 1;
320
- continue;
321
- }
322
- if (key.name === 'return' || key.name === 'enter') {
323
- const action = commands[selectedIndex];
324
- keyReader.close();
325
- if (action.confirmMessage) {
326
- const confirmation = await confirmVisualAction(action, tick);
327
- if (confirmation.code === 130) return 130;
328
- if (!confirmation.confirmed) {
329
- keyReader = createKeyReader();
330
- needsClear = true;
331
- continue;
332
- }
333
- }
334
- await animateRunningAction(action, tick);
335
- setRawInput(false);
336
- leaveVisualScreen();
337
- try {
338
- const result = await runSelectedAction(action, { yes: Boolean(action.confirmMessage), useColor: true });
339
- lastCode = result.code;
340
- } catch (error) {
341
- const message = error instanceof Error ? error.message : String(error);
342
- process.stderr.write(`[skill_master] ${message}\n`);
343
- lastCode = 1;
344
- }
345
- await waitForAnyKey();
346
- keyReader = createKeyReader();
347
- restoreMenuInput();
348
- enterVisualScreen();
349
- needsClear = true;
350
- }
351
- }
352
- } finally {
353
- keyReader.close();
354
- setRawInput(false);
355
- process.stdin.pause();
356
- leaveVisualScreen();
357
- }
167
+ return action;
358
168
  }
359
169
 
360
- async function main() {
361
- const args = parseArgs(process.argv.slice(2));
362
-
363
- if (args.help) {
364
- printHelp();
365
- return 0;
366
- }
367
-
368
- if (args.status) {
369
- printStatus();
370
- return 0;
371
- }
372
-
373
- if (args.run) {
374
- const actionKey = resolveActionKey(args.run, commands);
375
- if (!actionKey) {
376
- throw new Error(`Unknown action: ${args.run}`);
377
- }
170
+ async function runSelectedAction(action, { yes = false, useColor = false, cliArgs = {} } = {}) {
171
+ action = prepareActionForRun(action, { ...cliArgs, yes });
172
+
173
+ if (action.disabledReason) {
174
+ throw new Error(`Action ${action.key} is unavailable here: ${action.disabledReason}`);
175
+ }
176
+
177
+ if (action.confirmMessage && !yes) {
178
+ if (!isInteractiveTerminal()) {
179
+ throw new Error(`Action ${action.key} requires --yes outside an interactive terminal.`);
180
+ }
181
+
182
+ const confirmation = await prompts({
183
+ type: 'confirm',
184
+ name: 'confirmed',
185
+ message: action.confirmMessage,
186
+ initial: false,
187
+ });
188
+
189
+ if (!confirmation.confirmed) {
190
+ return { cancelled: true, code: 0 };
191
+ }
192
+ }
193
+
194
+ console.log('');
195
+ console.log(formatActionHeader(action, { useColor }));
196
+ console.log('');
197
+ const code = await runCommand(action, { cwd: action.cwd ?? rootDir });
198
+ console.log('');
199
+ console.log(formatResultMessage(code, { useColor }));
200
+ return { cancelled: false, code };
201
+ }
202
+
203
+ const readKey = () => new Promise((resolve) => {
204
+ process.stdin.once('keypress', (_str, key) => resolve(key));
205
+ });
206
+
207
+ function createKeyReader() {
208
+ const queue = [];
209
+ const waiters = [];
210
+ const onKeypress = (_str, key) => {
211
+ const waiter = waiters.shift();
212
+ if (waiter) {
213
+ clearTimeout(waiter.timer);
214
+ waiter.resolve(key);
215
+ return;
216
+ }
217
+ queue.push(key);
218
+ };
219
+
220
+ process.stdin.on('keypress', onKeypress);
221
+
222
+ return {
223
+ read(timeoutMs) {
224
+ if (queue.length) return Promise.resolve(queue.shift());
225
+ return new Promise((resolve) => {
226
+ const waiter = {
227
+ resolve,
228
+ timer: setTimeout(() => {
229
+ const index = waiters.indexOf(waiter);
230
+ if (index >= 0) waiters.splice(index, 1);
231
+ resolve(null);
232
+ }, timeoutMs),
233
+ };
234
+ waiters.push(waiter);
235
+ });
236
+ },
237
+ close() {
238
+ for (const waiter of waiters.splice(0)) {
239
+ clearTimeout(waiter.timer);
240
+ waiter.resolve(null);
241
+ }
242
+ process.stdin.off('keypress', onKeypress);
243
+ },
244
+ };
245
+ }
246
+
247
+ function setRawInput(enabled) {
248
+ if (typeof process.stdin.setRawMode === 'function') {
249
+ process.stdin.setRawMode(enabled);
250
+ }
251
+ if (enabled) process.stdin.resume();
252
+ }
253
+
254
+ function restoreMenuInput() {
255
+ setRawInput(true);
256
+ process.stdin.resume();
257
+ }
258
+
259
+ function enterVisualScreen() {
260
+ process.stdout.write(`${CONTROL.alternateScreenIn}${CONTROL.hideCursor}${CONTROL.clearScreen}${CONTROL.cursorHome}`);
261
+ }
262
+
263
+ function leaveVisualScreen() {
264
+ process.stdout.write(`${CONTROL.reset}${CONTROL.showCursor}${CONTROL.alternateScreenOut}`);
265
+ }
266
+
267
+ function writeStableFrame(frame, { clear = false } = {}) {
268
+ const prefix = clear ? CONTROL.clearScreen : '';
269
+ process.stdout.write([
270
+ CONTROL.syncStart,
271
+ CONTROL.cursorHome,
272
+ prefix,
273
+ frame,
274
+ '\n',
275
+ CONTROL.clearToEnd,
276
+ CONTROL.syncEnd,
277
+ ].join(''));
278
+ }
279
+
280
+ function visualHudAllowed() {
281
+ return isInteractiveTerminal()
282
+ && process.env.SKILL_MASTER_NO_VISUAL !== '1'
283
+ && process.env.CI !== 'true'
284
+ && process.env.TERM !== 'dumb';
285
+ }
286
+
287
+ function renderCyberMenu(selectedIndex, tick, { clear = false } = {}) {
288
+ const status = getMenuStatus(rootDir);
289
+ const frame = formatCyberMenuFrame(status, commands, selectedIndex, tick, {
290
+ columns: process.stdout.columns ?? 120,
291
+ rows: process.stdout.rows ?? 32,
292
+ useColor: true,
293
+ });
294
+ writeStableFrame(frame, { clear });
295
+ }
296
+
297
+ function renderRunningAction(action, tick) {
298
+ const status = getMenuStatus(rootDir);
299
+ const frame = formatRunningActionFrame(status, action, tick, {
300
+ columns: process.stdout.columns ?? 120,
301
+ rows: process.stdout.rows ?? 32,
302
+ useColor: true,
303
+ });
304
+ writeStableFrame(frame, { clear: true });
305
+ }
306
+
307
+ function renderIntro(tick, message) {
308
+ const status = getMenuStatus(rootDir);
309
+ const frame = formatSkillMasterIntroFrame(status, tick, {
310
+ columns: process.stdout.columns ?? 120,
311
+ rows: process.stdout.rows ?? 32,
312
+ useColor: true,
313
+ message,
314
+ });
315
+ writeStableFrame(frame, { clear: tick === 0 });
316
+ }
317
+
318
+ function renderDnaHero(tick) {
319
+ const status = getMenuStatus(rootDir);
320
+ const frame = formatSkillMasterDnaHeroFrame(status, tick, {
321
+ columns: process.stdout.columns ?? 120,
322
+ rows: process.stdout.rows ?? 32,
323
+ useColor: true,
324
+ });
325
+ writeStableFrame(frame, { clear: tick === 0 });
326
+ }
327
+
328
+ function renderConfirmAction(action, tick) {
329
+ const status = getMenuStatus(rootDir);
330
+ const frame = formatCyberConfirmFrame(status, action, tick, {
331
+ columns: process.stdout.columns ?? 120,
332
+ rows: process.stdout.rows ?? 32,
333
+ useColor: true,
334
+ });
335
+ writeStableFrame(frame, { clear: tick === 0 });
336
+ }
337
+
338
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
339
+
340
+ async function animateIntro(message = 'skill_master assumindo o workflow', frames = 6) {
341
+ for (let frame = 0; frame < frames; frame += 1) {
342
+ renderIntro(frame, message);
343
+ await sleep(70);
344
+ }
345
+ }
346
+
347
+ async function animateDnaHeroIntro(frames = 5) {
348
+ if (!visualHudAllowed()) return;
349
+ for (let frame = 0; frame < frames; frame += 1) {
350
+ renderDnaHero(frame);
351
+ await sleep(220);
352
+ }
353
+ }
354
+
355
+ async function animateRunningAction(action, startTick) {
356
+ for (let frame = 0; frame < 5; frame += 1) {
357
+ renderRunningAction(action, startTick + frame);
358
+ await sleep(90);
359
+ }
360
+ }
361
+
362
+ async function confirmVisualAction(action, startTick) {
363
+ let tick = startTick;
364
+ const reader = createKeyReader();
365
+
366
+ try {
367
+ while (true) {
368
+ renderConfirmAction(action, tick);
369
+ const key = await reader.read(180);
370
+ if (!key) {
371
+ tick += 1;
372
+ continue;
373
+ }
374
+
375
+ if (key.ctrl && key.name === 'c') return { confirmed: false, code: 130 };
376
+ if (key.name === 'return' || key.name === 'enter' || key.name === 'y') return { confirmed: true, code: 0 };
377
+ if (key.name === 'escape' || key.name === 'q' || key.name === 'n') return { confirmed: false, code: 0 };
378
+ }
379
+ } finally {
380
+ reader.close();
381
+ }
382
+ }
383
+
384
+ async function waitForAnyKey(message = 'Pressione qualquer tecla para voltar ao menu...') {
385
+ process.stdout.write(`\n${message}`);
386
+ setRawInput(true);
387
+ await readKey();
388
+ setRawInput(false);
389
+ }
390
+
391
+ async function runVisualMenu() {
392
+ let selectedIndex = resolveInitialSelectedIndex(getMenuStatus(rootDir), commands);
393
+ let tick = 0;
394
+ let lastCode = 0;
395
+ let keyReader = createKeyReader();
396
+ let previousColumns = process.stdout.columns ?? 120;
397
+ let previousRows = process.stdout.rows ?? 32;
398
+ let needsClear = true;
399
+
400
+ enterVisualScreen();
401
+ restoreMenuInput();
402
+
403
+ try {
404
+ await animateDnaHeroIntro(5);
405
+ await animateIntro('skill_master online / carregando menu operacional', 7);
406
+
407
+ while (true) {
408
+ const columns = process.stdout.columns ?? 120;
409
+ const rows = process.stdout.rows ?? 32;
410
+ const resized = columns !== previousColumns || rows !== previousRows;
411
+ previousColumns = columns;
412
+ previousRows = rows;
413
+ renderCyberMenu(selectedIndex, tick, { clear: needsClear || resized });
414
+ needsClear = false;
415
+ const key = await keyReader.read(160);
416
+
417
+ if (!key) {
418
+ tick += 1;
419
+ continue;
420
+ }
421
+
422
+ if (key.ctrl && key.name === 'c') return 130;
423
+ if (key.name === 'escape' || key.name === 'q') return lastCode;
424
+ if (key.name === 'up' || key.name === 'k') {
425
+ selectedIndex = selectedIndex === 0 ? commands.length - 1 : selectedIndex - 1;
426
+ continue;
427
+ }
428
+ if (key.name === 'down' || key.name === 'j') {
429
+ selectedIndex = selectedIndex === commands.length - 1 ? 0 : selectedIndex + 1;
430
+ continue;
431
+ }
432
+ if (key.name === 'return' || key.name === 'enter') {
433
+ const action = commands[selectedIndex];
434
+ keyReader.close();
435
+ if (action.confirmMessage) {
436
+ const confirmation = await confirmVisualAction(action, tick);
437
+ if (confirmation.code === 130) return 130;
438
+ if (!confirmation.confirmed) {
439
+ keyReader = createKeyReader();
440
+ needsClear = true;
441
+ continue;
442
+ }
443
+ }
444
+ await animateRunningAction(action, tick);
445
+ setRawInput(false);
446
+ leaveVisualScreen();
447
+ try {
448
+ const result = await runSelectedAction(action, { yes: Boolean(action.confirmMessage), useColor: true });
449
+ lastCode = result.code;
450
+ } catch (error) {
451
+ const message = error instanceof Error ? error.message : String(error);
452
+ process.stderr.write(`[skill_master] ${message}\n`);
453
+ lastCode = 1;
454
+ }
455
+ await waitForAnyKey();
456
+ keyReader = createKeyReader();
457
+ restoreMenuInput();
458
+ enterVisualScreen();
459
+ needsClear = true;
460
+ }
461
+ }
462
+ } finally {
463
+ keyReader.close();
464
+ setRawInput(false);
465
+ process.stdin.pause();
466
+ leaveVisualScreen();
467
+ }
468
+ }
469
+
470
+ async function main() {
471
+ const args = parseArgs(process.argv.slice(2));
472
+
473
+ if (args.help) {
474
+ printHelp();
475
+ return 0;
476
+ }
477
+
478
+ if (args.status) {
479
+ printStatus();
480
+ return 0;
481
+ }
482
+
483
+ if (args.run) {
484
+ const actionKey = resolveActionKey(args.run, commands);
485
+ if (!actionKey) {
486
+ throw new Error(`Unknown action: ${args.run}`);
487
+ }
378
488
 
379
489
  const action = commands.find((entry) => entry.key === actionKey);
380
490
  if (visualHudAllowed()) {
381
491
  enterVisualScreen();
382
492
  try {
493
+ await animateDnaHeroIntro(4);
383
494
  await animateIntro(`skill_master executando ${action.label}`, 6);
384
495
  } finally {
385
496
  leaveVisualScreen();
386
497
  }
387
498
  }
388
- const result = await runSelectedAction(action, { yes: args.yes, useColor: isInteractiveTerminal() });
499
+ const result = await runSelectedAction(action, { yes: args.yes, useColor: isInteractiveTerminal(), cliArgs: args });
389
500
  return result.code;
390
501
  }
391
-
392
- if (!isInteractiveTerminal()) {
393
- throw new Error('Interactive menu requires a TTY. Use --run <acao> or --status in automated environments.');
394
- }
395
-
396
- return runVisualMenu();
397
- }
398
-
399
- try {
400
- process.exitCode = await main();
401
- } catch (error) {
402
- const message = error instanceof Error ? error.message : String(error);
403
- process.stderr.write(`[skill_master] ${message}\n`);
404
- process.exitCode = 1;
405
- }
502
+
503
+ if (!isInteractiveTerminal()) {
504
+ throw new Error('Interactive menu requires a TTY. Use --run <acao> or --status in automated environments.');
505
+ }
506
+
507
+ return runVisualMenu();
508
+ }
509
+
510
+ try {
511
+ process.exitCode = await main();
512
+ } catch (error) {
513
+ const message = error instanceof Error ? error.message : String(error);
514
+ process.stderr.write(`[skill_master] ${message}\n`);
515
+ process.exitCode = 1;
516
+ }