wizz-method 1.4.1 → 1.5.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 (574) hide show
  1. package/README.md +6 -4
  2. package/package.json +39 -3
  3. package/skills-registry.yaml +102 -7
  4. package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +2 -0
  5. package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +5 -2
  6. package/src/core-skills/_shared/handoff-protocol.md +61 -0
  7. package/src/core-skills/wizz-customize/SKILL.md +2 -2
  8. package/src/core-skills/wizz-party-mode/references/mode-agent-team.md +1 -1
  9. package/src/core-skills/wizz-party-mode/references/mode-subagent.md +1 -1
  10. package/src/core-skills/wizz-review-adversarial-general/SKILL.md +2 -0
  11. package/src/modules/wizz/README.md +3 -3
  12. package/src/modules/wizz/_shared/communication-rules.md +13 -0
  13. package/src/modules/wizz/_shared/encerramento.md +2 -2
  14. package/src/modules/wizz/agents/wizz-ads/customize.toml +5 -3
  15. package/src/modules/wizz/agents/wizz-copy/customize.toml +5 -3
  16. package/src/modules/wizz/agents/wizz-designer/SKILL.md +2 -2
  17. package/src/modules/wizz/agents/wizz-designer/customize.toml +6 -4
  18. package/src/modules/wizz/agents/wizz-growth/customize.toml +11 -3
  19. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +9 -5
  20. package/src/modules/wizz/agents/wizz-maestro/customize.toml +5 -7
  21. package/src/modules/wizz/agents/wizz-memoria/customize.toml +2 -4
  22. package/src/modules/wizz/agents/wizz-qa/SKILL.md +5 -5
  23. package/src/modules/wizz/agents/wizz-qa/customize.toml +9 -7
  24. package/src/modules/wizz/agents/wizz-seo/customize.toml +5 -3
  25. package/src/modules/wizz/agents/wizz-social/customize.toml +9 -8
  26. package/src/modules/wizz/module.yaml +1 -1
  27. package/src/modules/wizz/overrides/wizz-agent-analyst.toml +4 -5
  28. package/src/modules/wizz/overrides/wizz-agent-architect.toml +11 -3
  29. package/src/modules/wizz/overrides/wizz-agent-dev.toml +6 -4
  30. package/src/modules/wizz/overrides/wizz-agent-pm.toml +4 -2
  31. package/src/modules/wizz/overrides/wizz-agent-tech-writer.toml +3 -5
  32. package/src/modules/wizz/overrides/wizz-agent-ux-designer.toml +4 -2
  33. package/src/modules/wizz/scripts/wizz-init.mjs +3 -1
  34. package/src/scripts/__pycache__/resolve_customization.cpython-314.pyc +0 -0
  35. package/src/scripts/memlog.py +9 -0
  36. package/src/scripts/resolve_customization.py +93 -3
  37. package/src/skills-lib/adversarial-reviewer/SKILL.md +2 -0
  38. package/src/skills-lib/algorithmic-art/SKILL.md +29 -369
  39. package/src/skills-lib/algorithmic-art/references/interactive-artifact.md +139 -0
  40. package/src/skills-lib/algorithmic-art/references/p5js-implementation.md +121 -0
  41. package/src/skills-lib/algorithmic-art/references/philosophy-creation.md +88 -0
  42. package/src/skills-lib/canvas-design/SKILL.md +9 -38
  43. package/src/skills-lib/canvas-design/references/canvas-execution.md +21 -0
  44. package/src/skills-lib/canvas-design/references/philosophy-examples.md +25 -0
  45. package/src/skills-lib/cerebro/SKILL.md +8 -273
  46. package/src/skills-lib/cerebro/references/comandos-pesquisa-e-sync.md +44 -0
  47. package/src/skills-lib/cerebro/references/comandos-rotina-e-captura.md +94 -0
  48. package/src/skills-lib/cerebro/references/comandos-sessao.md +122 -0
  49. package/src/skills-lib/content-strategy/SKILL.md +12 -316
  50. package/src/skills-lib/content-strategy/references/content-types.md +52 -0
  51. package/src/skills-lib/content-strategy/references/ideation-sources.md +78 -0
  52. package/src/skills-lib/content-strategy/references/pillars-and-keywords.md +78 -0
  53. package/src/skills-lib/content-strategy/references/prioritization-and-output.md +57 -0
  54. package/src/skills-lib/decision-maker/SKILL.md +13 -466
  55. package/src/skills-lib/decision-maker/references/commands-and-edge-cases.md +40 -0
  56. package/src/skills-lib/decision-maker/references/output-format.md +161 -0
  57. package/src/skills-lib/decision-maker/references/references-and-extraction.md +129 -0
  58. package/src/skills-lib/decision-maker/references/six-decisions.md +122 -0
  59. package/src/skills-lib/decision-maker/references/wizz-method-handoff.md +22 -0
  60. package/src/skills-lib/find-skills/SKILL.md +9 -6
  61. package/src/skills-lib/form-cro/SKILL.md +12 -390
  62. package/src/skills-lib/form-cro/references/experiments.md +73 -0
  63. package/src/skills-lib/form-cro/references/field-optimization.md +92 -0
  64. package/src/skills-lib/form-cro/references/flow-and-errors.md +71 -0
  65. package/src/skills-lib/form-cro/references/measurement-output.md +41 -0
  66. package/src/skills-lib/form-cro/references/trust-and-form-types.md +54 -0
  67. package/src/skills-lib/graphify/SKILL.md +2 -20
  68. package/src/skills-lib/huashu-design/SKILL.md +42 -596
  69. package/src/skills-lib/huashu-design/references/anti-slop-principles.md +62 -0
  70. package/src/skills-lib/huashu-design/references/audio-design-rules.md +1 -1
  71. package/src/skills-lib/huashu-design/references/cross-agent-adaptation.md +14 -0
  72. package/src/skills-lib/huashu-design/references/design-direction-fallback.md +113 -0
  73. package/src/skills-lib/huashu-design/references/exception-handling.md +18 -0
  74. package/src/skills-lib/huashu-design/references/fact-verification.md +36 -0
  75. package/src/skills-lib/huashu-design/references/ios-prototype.md +146 -0
  76. package/src/skills-lib/huashu-design/references/sfx-library.md +7 -0
  77. package/src/skills-lib/huashu-design/references/starter-components.md +24 -0
  78. package/src/skills-lib/huashu-design/references/video-export.md +1 -1
  79. package/src/skills-lib/huashu-design/references/watermark-policy.md +23 -0
  80. package/src/skills-lib/huashu-design/scripts/add-music.sh +12 -1
  81. package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +11 -0
  82. package/src/skills-lib/humanizer/SKILL.md +23 -431
  83. package/src/skills-lib/humanizer/references/ai-writing-patterns.md +314 -0
  84. package/src/skills-lib/humanizer/references/full-example.md +72 -0
  85. package/src/skills-lib/humanizer/references/personality-and-soul.md +36 -0
  86. package/src/skills-lib/impeccable/SKILL.md +37 -153
  87. package/src/skills-lib/impeccable/references/design-rules.md +95 -0
  88. package/src/skills-lib/impeccable/references/pin-unpin-and-hooks.md +17 -0
  89. package/src/skills-lib/impeccable/references/routing-rules.md +28 -0
  90. package/src/skills-lib/implementation-planner/SKILL.md +22 -529
  91. package/src/skills-lib/implementation-planner/references/folder-structure-and-dependencies.md +132 -0
  92. package/src/skills-lib/implementation-planner/references/handoff-template.md +34 -0
  93. package/src/skills-lib/implementation-planner/references/implementation-phases.md +54 -0
  94. package/src/skills-lib/implementation-planner/references/implementation-types.md +28 -0
  95. package/src/skills-lib/implementation-planner/references/motion-path-implementation.md +57 -0
  96. package/src/skills-lib/implementation-planner/references/output-templates.md +92 -0
  97. package/src/skills-lib/implementation-planner/references/performance-plan.md +52 -0
  98. package/src/skills-lib/inicio-de-projeto/SKILL.md +4 -224
  99. package/src/skills-lib/inicio-de-projeto/references/implementacao-api-forms.md +112 -0
  100. package/src/skills-lib/inicio-de-projeto/references/padroes-arquiteturais-e-pastas.md +71 -0
  101. package/src/skills-lib/inicio-de-projeto/references/seguranca-e-regras-codigo.md +26 -0
  102. package/src/skills-lib/launch-strategy/SKILL.md +9 -311
  103. package/src/skills-lib/launch-strategy/references/five-phase-approach.md +76 -0
  104. package/src/skills-lib/launch-strategy/references/launch-checklist.md +34 -0
  105. package/src/skills-lib/launch-strategy/references/orb-framework.md +76 -0
  106. package/src/skills-lib/launch-strategy/references/post-launch-and-ongoing.md +64 -0
  107. package/src/skills-lib/launch-strategy/references/product-hunt-strategy.md +52 -0
  108. package/src/skills-lib/marketing-psychology/SKILL.md +18 -401
  109. package/src/skills-lib/marketing-psychology/references/design-and-delivery-models.md +56 -0
  110. package/src/skills-lib/marketing-psychology/references/foundational-thinking-models.md +76 -0
  111. package/src/skills-lib/marketing-psychology/references/growth-and-scaling-models.md +46 -0
  112. package/src/skills-lib/marketing-psychology/references/influencing-behavior.md +71 -0
  113. package/src/skills-lib/marketing-psychology/references/pricing-psychology.md +31 -0
  114. package/src/skills-lib/marketing-psychology/references/understanding-buyers.md +116 -0
  115. package/src/skills-lib/motion-3d-director/SKILL.md +23 -370
  116. package/src/skills-lib/motion-3d-director/references/image-to-video-workflow.md +166 -0
  117. package/src/skills-lib/motion-3d-director/references/motion-paths.md +119 -0
  118. package/src/skills-lib/motion-3d-director/references/performance-and-handoff.md +51 -0
  119. package/src/skills-lib/popup-cro/SKILL.md +11 -414
  120. package/src/skills-lib/popup-cro/references/design-copy-compliance.md +81 -0
  121. package/src/skills-lib/popup-cro/references/experiments.md +82 -0
  122. package/src/skills-lib/popup-cro/references/rules-measurement-output.md +87 -0
  123. package/src/skills-lib/popup-cro/references/triggers-and-popup-types.md +108 -0
  124. package/src/skills-lib/signup-flow-cro/SKILL.md +13 -321
  125. package/src/skills-lib/signup-flow-cro/references/experiments.md +72 -0
  126. package/src/skills-lib/signup-flow-cro/references/field-optimization.md +49 -0
  127. package/src/skills-lib/signup-flow-cro/references/flow-structure.md +38 -0
  128. package/src/skills-lib/signup-flow-cro/references/measurement-output-patterns.md +62 -0
  129. package/src/skills-lib/signup-flow-cro/references/trust-and-post-submit.md +40 -0
  130. package/src/skills-lib/taste-redesign/SKILL.md +10 -146
  131. package/src/skills-lib/taste-redesign/references/design-audit.md +120 -0
  132. package/src/skills-lib/taste-redesign/references/upgrade-techniques.md +31 -0
  133. package/src/skills-lib/ui-ux-pro-max/SKILL.md +9 -353
  134. package/src/skills-lib/ui-ux-pro-max/references/common-rules-checklist.md +76 -0
  135. package/src/skills-lib/ui-ux-pro-max/references/rules-quick-reference.md +70 -0
  136. package/src/skills-lib/ui-ux-pro-max/references/search-reference.md +45 -0
  137. package/src/skills-lib/ui-ux-pro-max/references/workflow-guide.md +157 -0
  138. package/src/skills-lib/web-security/SKILL.md +13 -187
  139. package/src/skills-lib/web-security/references/checklist-deploy.md +52 -0
  140. package/src/skills-lib/web-security/references/headers-rate-limit-cors.md +78 -0
  141. package/src/skills-lib/web-security/references/owasp-top5-detalhado.md +51 -0
  142. package/src/skills-lib/wizz-router/SKILL.md +20 -9
  143. package/src/skills-lib/wizz-router/references/auditoria-360.md +4 -4
  144. package/src/skills-lib/wizz-router/references/routing-table-flat.md +15 -15
  145. package/tools/fetch-assets.mjs +277 -0
  146. package/tools/installer/commands/fetch-assets.js +71 -0
  147. package/tools/installer/commands/install.js +35 -3
  148. package/tools/installer/commands/trace-report.js +131 -0
  149. package/tools/installer/core/config.js +9 -0
  150. package/tools/installer/core/help-catalog.js +181 -0
  151. package/tools/installer/core/install-paths.js +48 -3
  152. package/tools/installer/core/installer.js +253 -618
  153. package/tools/installer/core/manifest-generator.js +8 -1
  154. package/tools/installer/core/manifest.js +67 -22
  155. package/tools/installer/core/module-config-writer.js +110 -0
  156. package/tools/installer/core/preflight-tools-check.js +82 -0
  157. package/tools/installer/core/quick-update.js +209 -0
  158. package/tools/installer/core/user-file-preservation.js +250 -0
  159. package/tools/installer/modules/channel-resolver.js +34 -2
  160. package/tools/installer/modules/cli-config.js +127 -34
  161. package/tools/installer/modules/deps-cache.js +28 -1
  162. package/tools/installer/modules/env-vars.js +446 -0
  163. package/tools/installer/modules/external-manager.js +40 -6
  164. package/tools/installer/modules/mcp-config.js +180 -37
  165. package/tools/installer/modules/module-help-schema.js +2 -1
  166. package/tools/installer/modules/official-modules.js +1 -1
  167. package/tools/installer/modules/registry-resolve.js +74 -0
  168. package/tools/installer/modules/skills-lib.js +11 -15
  169. package/tools/installer/ui.js +71 -5
  170. package/wizz-modules.yaml +15 -5
  171. package/.claude-plugin/marketplace.json +0 -80
  172. package/AGENTS.md +0 -12
  173. package/build/artifacts/llms-full.txt +0 -4049
  174. package/build/artifacts/llms.txt +0 -28
  175. package/build/site/404.html +0 -55
  176. package/build/site/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js +0 -1
  177. package/build/site/_astro/Search.astro_astro_type_script_index_0_lang.cjYDvRdi.js +0 -1
  178. package/build/site/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js +0 -1
  179. package/build/site/_astro/ec.0vx5m.js +0 -3
  180. package/build/site/_astro/ec.v4551.css +0 -1
  181. package/build/site/_astro/index.DdjI3lF_.css +0 -1
  182. package/build/site/_astro/page.B1D-nYk3.js +0 -1
  183. package/build/site/_astro/print.DNXP8c50.css +0 -1
  184. package/build/site/_astro/ui-core.D_Lfcn_I.js +0 -2
  185. package/build/site/diagrams/checkpoint-preview-diagram-fr.webp +0 -0
  186. package/build/site/diagrams/checkpoint-preview-diagram.png +0 -0
  187. package/build/site/diagrams/quick-dev-diagram-fr.webp +0 -0
  188. package/build/site/diagrams/quick-dev-diagram.png +0 -0
  189. package/build/site/explanation/advanced-elicitation/index.html +0 -105
  190. package/build/site/explanation/adversarial-review/index.html +0 -109
  191. package/build/site/explanation/analysis-phase/index.html +0 -129
  192. package/build/site/explanation/brainstorming/index.html +0 -92
  193. package/build/site/explanation/checkpoint-preview/index.html +0 -121
  194. package/build/site/explanation/established-projects-faq/index.html +0 -107
  195. package/build/site/explanation/forensic-investigation/index.html +0 -167
  196. package/build/site/explanation/named-agents/index.html +0 -187
  197. package/build/site/explanation/party-mode/index.html +0 -256
  198. package/build/site/explanation/preventing-agent-conflicts/index.html +0 -185
  199. package/build/site/explanation/project-context/index.html +0 -198
  200. package/build/site/explanation/quick-dev/index.html +0 -113
  201. package/build/site/explanation/web-bundles/index.html +0 -178
  202. package/build/site/explanation/why-solutioning-matters/index.html +0 -168
  203. package/build/site/how-to/customize-wizz/index.html +0 -277
  204. package/build/site/how-to/established-projects/index.html +0 -165
  205. package/build/site/how-to/expand-wizz-for-your-org/index.html +0 -245
  206. package/build/site/how-to/get-answers-about-wizz/index.html +0 -129
  207. package/build/site/how-to/install-custom-modules/index.html +0 -197
  208. package/build/site/how-to/install-wizz/index.html +0 -330
  209. package/build/site/how-to/non-interactive-installation/index.html +0 -73
  210. package/build/site/how-to/project-context/index.html +0 -141
  211. package/build/site/how-to/quick-fixes/index.html +0 -122
  212. package/build/site/how-to/shard-large-documents/index.html +0 -103
  213. package/build/site/how-to/upgrade-to-v6/index.html +0 -185
  214. package/build/site/how-to/use-web-bundles/index.html +0 -99
  215. package/build/site/img/wizz-dark.png +0 -0
  216. package/build/site/img/wizz-light.png +0 -0
  217. package/build/site/index.html +0 -128
  218. package/build/site/llms-full.txt +0 -4049
  219. package/build/site/llms.txt +0 -28
  220. package/build/site/pagefind/fragment/en_175de32.pf_fragment +0 -0
  221. package/build/site/pagefind/fragment/en_24258fb.pf_fragment +0 -0
  222. package/build/site/pagefind/fragment/en_24f53a6.pf_fragment +0 -0
  223. package/build/site/pagefind/fragment/en_27ba8f9.pf_fragment +0 -0
  224. package/build/site/pagefind/fragment/en_296ddb9.pf_fragment +0 -0
  225. package/build/site/pagefind/fragment/en_2b5aa5c.pf_fragment +0 -0
  226. package/build/site/pagefind/fragment/en_49047e0.pf_fragment +0 -0
  227. package/build/site/pagefind/fragment/en_4a187d2.pf_fragment +0 -0
  228. package/build/site/pagefind/fragment/en_514725b.pf_fragment +0 -0
  229. package/build/site/pagefind/fragment/en_583316f.pf_fragment +0 -0
  230. package/build/site/pagefind/fragment/en_6465dfb.pf_fragment +0 -0
  231. package/build/site/pagefind/fragment/en_67825a4.pf_fragment +0 -0
  232. package/build/site/pagefind/fragment/en_82aec61.pf_fragment +0 -0
  233. package/build/site/pagefind/fragment/en_85dcebf.pf_fragment +0 -0
  234. package/build/site/pagefind/fragment/en_887ce56.pf_fragment +0 -0
  235. package/build/site/pagefind/fragment/en_89a1a7a.pf_fragment +0 -0
  236. package/build/site/pagefind/fragment/en_8ade291.pf_fragment +0 -0
  237. package/build/site/pagefind/fragment/en_8c11f8a.pf_fragment +0 -0
  238. package/build/site/pagefind/fragment/en_8c1bde3.pf_fragment +0 -0
  239. package/build/site/pagefind/fragment/en_92d7cc7.pf_fragment +0 -0
  240. package/build/site/pagefind/fragment/en_94bfc21.pf_fragment +0 -0
  241. package/build/site/pagefind/fragment/en_9b57d7d.pf_fragment +0 -0
  242. package/build/site/pagefind/fragment/en_ab62b53.pf_fragment +0 -0
  243. package/build/site/pagefind/fragment/en_b0d23ee.pf_fragment +0 -0
  244. package/build/site/pagefind/fragment/en_ba9fb37.pf_fragment +0 -0
  245. package/build/site/pagefind/fragment/en_bb113eb.pf_fragment +0 -0
  246. package/build/site/pagefind/fragment/en_bfc56b6.pf_fragment +0 -0
  247. package/build/site/pagefind/fragment/en_c6d9e48.pf_fragment +0 -0
  248. package/build/site/pagefind/fragment/en_cdd772f.pf_fragment +0 -0
  249. package/build/site/pagefind/fragment/en_cdd885c.pf_fragment +0 -0
  250. package/build/site/pagefind/fragment/en_cefed6a.pf_fragment +0 -0
  251. package/build/site/pagefind/fragment/en_d890205.pf_fragment +0 -0
  252. package/build/site/pagefind/fragment/en_da351b7.pf_fragment +0 -0
  253. package/build/site/pagefind/fragment/en_ea289f9.pf_fragment +0 -0
  254. package/build/site/pagefind/fragment/en_f1c3711.pf_fragment +0 -0
  255. package/build/site/pagefind/index/en_5b9d8c6.pf_index +0 -0
  256. package/build/site/pagefind/index/en_868614c.pf_index +0 -0
  257. package/build/site/pagefind/index/en_e4f9bff.pf_index +0 -0
  258. package/build/site/pagefind/pagefind-entry.json +0 -1
  259. package/build/site/pagefind/pagefind-highlight.js +0 -1064
  260. package/build/site/pagefind/pagefind-modular-ui.css +0 -214
  261. package/build/site/pagefind/pagefind-modular-ui.js +0 -8
  262. package/build/site/pagefind/pagefind-ui.css +0 -1
  263. package/build/site/pagefind/pagefind-ui.js +0 -2
  264. package/build/site/pagefind/pagefind.en_4e69d7f053.pf_meta +0 -0
  265. package/build/site/pagefind/pagefind.js +0 -6
  266. package/build/site/pagefind/wasm.en.pagefind +0 -0
  267. package/build/site/pagefind/wasm.unknown.pagefind +0 -0
  268. package/build/site/reference/agents/index.html +0 -168
  269. package/build/site/reference/commands/index.html +0 -254
  270. package/build/site/reference/core-tools/index.html +0 -384
  271. package/build/site/reference/modules/index.html +0 -132
  272. package/build/site/reference/testing/index.html +0 -218
  273. package/build/site/reference/workflow-map/index.html +0 -266
  274. package/build/site/roadmap/index.html +0 -77
  275. package/build/site/robots.txt +0 -37
  276. package/build/site/sitemap-0.xml +0 -1
  277. package/build/site/sitemap-index.xml +0 -1
  278. package/build/site/tutorials/getting-started/index.html +0 -386
  279. package/build/site/wizz-icon-orange.svg +0 -7
  280. package/build/site/workflow-map-diagram-fr.html +0 -375
  281. package/build/site/workflow-map-diagram.html +0 -375
  282. package/evals/bmm-skills/wizz-product-brief/evals.json +0 -237
  283. package/evals/bmm-skills/wizz-product-brief/files/branfield-memo.md +0 -46
  284. package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/addendum.md +0 -40
  285. package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/brief.md +0 -56
  286. package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/decision-log.md +0 -27
  287. package/evals/bmm-skills/wizz-product-brief/files/meridian-mobility-report.md +0 -116
  288. package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/addendum.md +0 -41
  289. package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/brief.md +0 -57
  290. package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/decision-log.md +0 -29
  291. package/evals/bmm-skills/wizz-product-brief/files/pantry-bridge-interviews.md +0 -90
  292. package/evals/bmm-skills/wizz-product-brief/files/q2-brainstorm.md +0 -101
  293. package/evals/bmm-skills/wizz-product-brief/triggers.json +0 -18
  294. package/evals/routing/dataset.json +0 -290
  295. package/evals/routing/run-routing-eval.mjs +0 -89
  296. package/src/skills-lib/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  297. package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  298. package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  299. package/src/skills-lib/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  300. package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  301. package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  302. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  303. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  304. package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  305. package/src/skills-lib/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  306. package/src/skills-lib/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  307. package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  308. package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  309. package/src/skills-lib/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  310. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  311. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  312. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  313. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  314. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  315. package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  316. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  317. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  318. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  319. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  320. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  321. package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  322. package/src/skills-lib/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  323. package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  324. package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  325. package/src/skills-lib/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  326. package/src/skills-lib/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  327. package/src/skills-lib/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  328. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  329. package/src/skills-lib/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  330. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  331. package/src/skills-lib/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  332. package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  333. package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  334. package/src/skills-lib/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  335. package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  336. package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  337. package/src/skills-lib/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  338. package/src/skills-lib/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  339. package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  340. package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  341. package/src/skills-lib/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  342. package/src/skills-lib/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  343. package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  344. package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  345. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  346. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  347. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  348. package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  349. package/src/skills-lib/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  350. package/src/skills-lib/huashu-design/assets/bgm-ad.mp3 +0 -0
  351. package/src/skills-lib/huashu-design/assets/bgm-educational-alt.mp3 +0 -0
  352. package/src/skills-lib/huashu-design/assets/bgm-educational.mp3 +0 -0
  353. package/src/skills-lib/huashu-design/assets/bgm-tech.mp3 +0 -0
  354. package/src/skills-lib/huashu-design/assets/bgm-tutorial-alt.mp3 +0 -0
  355. package/src/skills-lib/huashu-design/assets/bgm-tutorial.mp3 +0 -0
  356. package/src/skills-lib/huashu-design/assets/sfx/container/card-flip.mp3 +0 -0
  357. package/src/skills-lib/huashu-design/assets/sfx/container/card-snap.mp3 +0 -0
  358. package/src/skills-lib/huashu-design/assets/sfx/container/modal-open.mp3 +0 -0
  359. package/src/skills-lib/huashu-design/assets/sfx/container/stack-collapse.mp3 +0 -0
  360. package/src/skills-lib/huashu-design/assets/sfx/feedback/achievement.mp3 +0 -0
  361. package/src/skills-lib/huashu-design/assets/sfx/feedback/error-tone.mp3 +0 -0
  362. package/src/skills-lib/huashu-design/assets/sfx/feedback/notification-pop.mp3 +0 -0
  363. package/src/skills-lib/huashu-design/assets/sfx/feedback/success-chime.mp3 +0 -0
  364. package/src/skills-lib/huashu-design/assets/sfx/impact/brand-stamp.mp3 +0 -0
  365. package/src/skills-lib/huashu-design/assets/sfx/impact/drop-thud.mp3 +0 -0
  366. package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal-v2.mp3 +0 -0
  367. package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal.mp3 +0 -0
  368. package/src/skills-lib/huashu-design/assets/sfx/keyboard/delete-key.mp3 +0 -0
  369. package/src/skills-lib/huashu-design/assets/sfx/keyboard/enter.mp3 +0 -0
  370. package/src/skills-lib/huashu-design/assets/sfx/keyboard/space-tap.mp3 +0 -0
  371. package/src/skills-lib/huashu-design/assets/sfx/keyboard/type-fast.mp3 +0 -0
  372. package/src/skills-lib/huashu-design/assets/sfx/keyboard/type.mp3 +0 -0
  373. package/src/skills-lib/huashu-design/assets/sfx/magic/ai-process.mp3 +0 -0
  374. package/src/skills-lib/huashu-design/assets/sfx/magic/sparkle.mp3 +0 -0
  375. package/src/skills-lib/huashu-design/assets/sfx/magic/transform.mp3 +0 -0
  376. package/src/skills-lib/huashu-design/assets/sfx/progress/complete-done.mp3 +0 -0
  377. package/src/skills-lib/huashu-design/assets/sfx/progress/generate-start.mp3 +0 -0
  378. package/src/skills-lib/huashu-design/assets/sfx/progress/loading-tick.mp3 +0 -0
  379. package/src/skills-lib/huashu-design/assets/sfx/terminal/command-execute.mp3 +0 -0
  380. package/src/skills-lib/huashu-design/assets/sfx/terminal/cursor-blink.mp3 +0 -0
  381. package/src/skills-lib/huashu-design/assets/sfx/terminal/output-appear.mp3 +0 -0
  382. package/src/skills-lib/huashu-design/assets/sfx/transition/dissolve.mp3 +0 -0
  383. package/src/skills-lib/huashu-design/assets/sfx/transition/slide-in.mp3 +0 -0
  384. package/src/skills-lib/huashu-design/assets/sfx/transition/swipe-horizontal.mp3 +0 -0
  385. package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh-fast.mp3 +0 -0
  386. package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh.mp3 +0 -0
  387. package/src/skills-lib/huashu-design/assets/sfx/ui/click-soft.mp3 +0 -0
  388. package/src/skills-lib/huashu-design/assets/sfx/ui/click.mp3 +0 -0
  389. package/src/skills-lib/huashu-design/assets/sfx/ui/focus.mp3 +0 -0
  390. package/src/skills-lib/huashu-design/assets/sfx/ui/hover-subtle.mp3 +0 -0
  391. package/src/skills-lib/huashu-design/assets/sfx/ui/tap-finger.mp3 +0 -0
  392. package/src/skills-lib/huashu-design/assets/sfx/ui/toggle-on.mp3 +0 -0
  393. package/src/squads/README.md +0 -39
  394. package/src/squads/advisory-board/README.md +0 -34
  395. package/src/squads/advisory-board/agents/board-chair.md +0 -161
  396. package/src/squads/advisory-board/agents/brene-brown.md +0 -296
  397. package/src/squads/advisory-board/agents/charlie-munger.md +0 -590
  398. package/src/squads/advisory-board/agents/derek-sivers.md +0 -268
  399. package/src/squads/advisory-board/agents/naval-ravikant.md +0 -251
  400. package/src/squads/advisory-board/agents/patrick-lencioni.md +0 -394
  401. package/src/squads/advisory-board/agents/peter-thiel.md +0 -269
  402. package/src/squads/advisory-board/agents/ray-dalio.md +0 -567
  403. package/src/squads/advisory-board/agents/reid-hoffman.md +0 -278
  404. package/src/squads/advisory-board/agents/simon-sinek.md +0 -291
  405. package/src/squads/advisory-board/agents/yvon-chouinard.md +0 -275
  406. package/src/squads/advisory-board/squad.yaml +0 -50
  407. package/src/squads/brand-squad/README.md +0 -60
  408. package/src/squads/brand-squad/agents/al-ries.md +0 -175
  409. package/src/squads/brand-squad/agents/alina-wheeler.md +0 -184
  410. package/src/squads/brand-squad/agents/archetype-consultant.md +0 -215
  411. package/src/squads/brand-squad/agents/brand-chief.md +0 -158
  412. package/src/squads/brand-squad/agents/byron-sharp.md +0 -169
  413. package/src/squads/brand-squad/agents/david-aaker.md +0 -166
  414. package/src/squads/brand-squad/agents/denise-yohn.md +0 -172
  415. package/src/squads/brand-squad/agents/domain-scout.md +0 -135
  416. package/src/squads/brand-squad/agents/donald-miller.md +0 -179
  417. package/src/squads/brand-squad/agents/emily-heyward.md +0 -147
  418. package/src/squads/brand-squad/agents/jean-noel-kapferer.md +0 -189
  419. package/src/squads/brand-squad/agents/kevin-keller.md +0 -199
  420. package/src/squads/brand-squad/agents/marty-neumeier.md +0 -170
  421. package/src/squads/brand-squad/agents/miller-sticky-brand.md +0 -180
  422. package/src/squads/brand-squad/agents/naming-strategist.md +0 -171
  423. package/src/squads/brand-squad/squad.yaml +0 -117
  424. package/src/squads/c-level-squad/README.md +0 -29
  425. package/src/squads/c-level-squad/agents/caio-architect.md +0 -235
  426. package/src/squads/c-level-squad/agents/cio-engineer.md +0 -209
  427. package/src/squads/c-level-squad/agents/cmo-architect.md +0 -208
  428. package/src/squads/c-level-squad/agents/coo-orchestrator.md +0 -193
  429. package/src/squads/c-level-squad/agents/cto-architect.md +0 -194
  430. package/src/squads/c-level-squad/agents/vision-chief.md +0 -201
  431. package/src/squads/c-level-squad/squad.yaml +0 -45
  432. package/src/squads/claude-code-mastery/README.md +0 -146
  433. package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +0 -554
  434. package/src/squads/claude-code-mastery/agents/config-engineer.md +0 -865
  435. package/src/squads/claude-code-mastery/agents/hooks-architect.md +0 -1013
  436. package/src/squads/claude-code-mastery/agents/mcp-integrator.md +0 -791
  437. package/src/squads/claude-code-mastery/agents/project-integrator.md +0 -1196
  438. package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +0 -931
  439. package/src/squads/claude-code-mastery/agents/skill-craftsman.md +0 -1250
  440. package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +0 -1008
  441. package/src/squads/copy-squad/README.md +0 -65
  442. package/src/squads/copy-squad/agents/andre-chaperon.md +0 -206
  443. package/src/squads/copy-squad/agents/ben-settle.md +0 -194
  444. package/src/squads/copy-squad/agents/claude-hopkins.md +0 -182
  445. package/src/squads/copy-squad/agents/clayton-makepeace.md +0 -225
  446. package/src/squads/copy-squad/agents/copy-chief.md +0 -166
  447. package/src/squads/copy-squad/agents/dan-kennedy.md +0 -202
  448. package/src/squads/copy-squad/agents/dan-koe.md +0 -223
  449. package/src/squads/copy-squad/agents/david-deutsch.md +0 -197
  450. package/src/squads/copy-squad/agents/david-ogilvy.md +0 -198
  451. package/src/squads/copy-squad/agents/eugene-schwartz.md +0 -238
  452. package/src/squads/copy-squad/agents/frank-kern.md +0 -195
  453. package/src/squads/copy-squad/agents/gary-bencivenga.md +0 -197
  454. package/src/squads/copy-squad/agents/gary-halbert.md +0 -219
  455. package/src/squads/copy-squad/agents/jim-rutz.md +0 -193
  456. package/src/squads/copy-squad/agents/joe-sugarman.md +0 -234
  457. package/src/squads/copy-squad/agents/john-carlton.md +0 -203
  458. package/src/squads/copy-squad/agents/jon-benson.md +0 -196
  459. package/src/squads/copy-squad/agents/parris-lampropoulos.md +0 -188
  460. package/src/squads/copy-squad/agents/robert-collier.md +0 -183
  461. package/src/squads/copy-squad/agents/russell-brunson.md +0 -229
  462. package/src/squads/copy-squad/agents/ry-schwartz.md +0 -185
  463. package/src/squads/copy-squad/agents/stefan-georgi.md +0 -188
  464. package/src/squads/copy-squad/agents/todd-brown.md +0 -171
  465. package/src/squads/copy-squad/squad.yaml +0 -87
  466. package/src/squads/cybersecurity/README.md +0 -38
  467. package/src/squads/cybersecurity/agents/busterer.md +0 -108
  468. package/src/squads/cybersecurity/agents/cartographer.md +0 -114
  469. package/src/squads/cybersecurity/agents/chris-sanders.md +0 -205
  470. package/src/squads/cybersecurity/agents/command-generator.md +0 -121
  471. package/src/squads/cybersecurity/agents/cyber-chief.md +0 -120
  472. package/src/squads/cybersecurity/agents/dirber.md +0 -111
  473. package/src/squads/cybersecurity/agents/fuzzer.md +0 -121
  474. package/src/squads/cybersecurity/agents/georgia-weidman.md +0 -178
  475. package/src/squads/cybersecurity/agents/jim-manico.md +0 -182
  476. package/src/squads/cybersecurity/agents/marcus-carey.md +0 -200
  477. package/src/squads/cybersecurity/agents/omar-santos.md +0 -206
  478. package/src/squads/cybersecurity/agents/peter-kim.md +0 -179
  479. package/src/squads/cybersecurity/agents/ripper.md +0 -121
  480. package/src/squads/cybersecurity/agents/rogue.md +0 -116
  481. package/src/squads/cybersecurity/agents/shannon-runner.md +0 -108
  482. package/src/squads/cybersecurity/squad.yaml +0 -56
  483. package/src/squads/data-squad/README.md +0 -30
  484. package/src/squads/data-squad/agents/avinash-kaushik.md +0 -268
  485. package/src/squads/data-squad/agents/data-chief.md +0 -167
  486. package/src/squads/data-squad/agents/david-spinks.md +0 -277
  487. package/src/squads/data-squad/agents/nick-mehta.md +0 -294
  488. package/src/squads/data-squad/agents/peter-fader.md +0 -246
  489. package/src/squads/data-squad/agents/sean-ellis.md +0 -303
  490. package/src/squads/data-squad/agents/wes-kao.md +0 -268
  491. package/src/squads/data-squad/squad.yaml +0 -46
  492. package/src/squads/design-squad/README.md +0 -31
  493. package/src/squads/design-squad/agents/brad-frost.md +0 -185
  494. package/src/squads/design-squad/agents/dan-mall.md +0 -178
  495. package/src/squads/design-squad/agents/dave-malouf.md +0 -198
  496. package/src/squads/design-squad/agents/design-chief.md +0 -109
  497. package/src/squads/design-squad/agents/design-system-architect.md +0 -109
  498. package/src/squads/design-squad/agents/ui-engineer.md +0 -102
  499. package/src/squads/design-squad/agents/ux-designer.md +0 -105
  500. package/src/squads/design-squad/agents/visual-generator.md +0 -108
  501. package/src/squads/design-squad/squad.yaml +0 -48
  502. package/src/squads/hormozi-squad/README.md +0 -39
  503. package/src/squads/hormozi-squad/agents/hormozi-ads.md +0 -159
  504. package/src/squads/hormozi-squad/agents/hormozi-advisor.md +0 -178
  505. package/src/squads/hormozi-squad/agents/hormozi-audit.md +0 -178
  506. package/src/squads/hormozi-squad/agents/hormozi-chief.md +0 -111
  507. package/src/squads/hormozi-squad/agents/hormozi-closer.md +0 -179
  508. package/src/squads/hormozi-squad/agents/hormozi-content.md +0 -166
  509. package/src/squads/hormozi-squad/agents/hormozi-copy.md +0 -152
  510. package/src/squads/hormozi-squad/agents/hormozi-hooks.md +0 -177
  511. package/src/squads/hormozi-squad/agents/hormozi-launch.md +0 -160
  512. package/src/squads/hormozi-squad/agents/hormozi-leads.md +0 -198
  513. package/src/squads/hormozi-squad/agents/hormozi-models.md +0 -191
  514. package/src/squads/hormozi-squad/agents/hormozi-offers.md +0 -197
  515. package/src/squads/hormozi-squad/agents/hormozi-pricing.md +0 -151
  516. package/src/squads/hormozi-squad/agents/hormozi-retention.md +0 -166
  517. package/src/squads/hormozi-squad/agents/hormozi-scale.md +0 -175
  518. package/src/squads/hormozi-squad/agents/hormozi-workshop.md +0 -160
  519. package/src/squads/hormozi-squad/squad.yaml +0 -60
  520. package/src/squads/movement/README.md +0 -29
  521. package/src/squads/movement/agents/analista-de-impacto.md +0 -350
  522. package/src/squads/movement/agents/estrategista-de-ciclo.md +0 -301
  523. package/src/squads/movement/agents/fenomenologo.md +0 -169
  524. package/src/squads/movement/agents/identitario.md +0 -265
  525. package/src/squads/movement/agents/manifestador.md +0 -279
  526. package/src/squads/movement/agents/movement-architect.md +0 -210
  527. package/src/squads/movement/agents/movement-chief.md +0 -135
  528. package/src/squads/movement/squad.yaml +0 -45
  529. package/src/squads/storytelling/README.md +0 -35
  530. package/src/squads/storytelling/agents/blake-snyder.md +0 -225
  531. package/src/squads/storytelling/agents/dan-harmon.md +0 -167
  532. package/src/squads/storytelling/agents/joseph-campbell.md +0 -184
  533. package/src/squads/storytelling/agents/keith-johnstone.md +0 -157
  534. package/src/squads/storytelling/agents/kindra-hall.md +0 -162
  535. package/src/squads/storytelling/agents/marshall-ganz.md +0 -167
  536. package/src/squads/storytelling/agents/matthew-dicks.md +0 -152
  537. package/src/squads/storytelling/agents/nancy-duarte.md +0 -154
  538. package/src/squads/storytelling/agents/oren-klaff.md +0 -166
  539. package/src/squads/storytelling/agents/park-howell.md +0 -152
  540. package/src/squads/storytelling/agents/shawn-coyne.md +0 -208
  541. package/src/squads/storytelling/agents/story-chief.md +0 -155
  542. package/src/squads/storytelling/squad.yaml +0 -52
  543. package/src/squads/traffic-masters/README.md +0 -39
  544. package/src/squads/traffic-masters/agents/ad-midas.md +0 -149
  545. package/src/squads/traffic-masters/agents/ads-analyst.md +0 -135
  546. package/src/squads/traffic-masters/agents/creative-analyst.md +0 -142
  547. package/src/squads/traffic-masters/agents/depesh-mandalia.md +0 -174
  548. package/src/squads/traffic-masters/agents/fiscal.md +0 -144
  549. package/src/squads/traffic-masters/agents/kasim-aslam.md +0 -158
  550. package/src/squads/traffic-masters/agents/media-buyer.md +0 -159
  551. package/src/squads/traffic-masters/agents/molly-pittman.md +0 -185
  552. package/src/squads/traffic-masters/agents/nicholas-kusmich.md +0 -157
  553. package/src/squads/traffic-masters/agents/pedro-sobral.md +0 -158
  554. package/src/squads/traffic-masters/agents/performance-analyst.md +0 -135
  555. package/src/squads/traffic-masters/agents/pixel-specialist.md +0 -144
  556. package/src/squads/traffic-masters/agents/ralph-burns.md +0 -163
  557. package/src/squads/traffic-masters/agents/scale-optimizer.md +0 -144
  558. package/src/squads/traffic-masters/agents/tom-breeze.md +0 -175
  559. package/src/squads/traffic-masters/agents/traffic-chief.md +0 -97
  560. package/src/squads/traffic-masters/squad.yaml +0 -59
  561. package/tools/bundle-web-bundles.js +0 -117
  562. package/tools/format-workflow-md.js +0 -263
  563. package/tools/hooks/README.md +0 -17
  564. package/tools/hooks/security-defensive-context.js +0 -70
  565. package/tools/hooks/session-rules.js +0 -38
  566. package/tools/hooks/wizz-router-enforce.js +0 -188
  567. package/tools/javascript-conventions.md +0 -5
  568. package/tools/migrate-custom-module-paths.js +0 -124
  569. package/tools/skill-validator.md +0 -368
  570. package/tools/sync-global.mjs +0 -84
  571. package/tools/validate-sidebar-order.js +0 -388
  572. package/tools/validate-skills.js +0 -708
  573. package/tools/validate-svg-changes.sh +0 -356
  574. /package/tools/installer/{cli-utils.js → banner.js} +0 -0
@@ -2,34 +2,34 @@
2
2
 
3
3
  Use esta tabela **só fora de projeto Wizz** (sem `_wizz/`), quando o router mapeia skills/CLIs/MCPs direto. Dentro de projeto Wizz a delegação é decidida pela regra de dispatch no SKILL.md (maestro vs agente de área) e esta tabela não é necessária.
4
4
 
5
+ **Verificação de existência:** antes de oferecer qualquer skill, confirme que ela existe no ambiente (catálogo de skills da sessão ou `ls ~/.claude/skills`); se não existir, não ofereça: use o protocolo de skill faltante (`find-skills`).
6
+
5
7
  ## Área Técnica — Backend / Dados / Infra
6
8
 
7
9
  | Intenção / palavras-chave | Skills a oferecer | Prioridade |
8
10
  |---|---|---|
9
- | Banco lento, queries, índices, N+1, sharding, connection pool | `database-scaling` + `database-reviewer` | 1 |
11
+ | Banco lento, queries, índices, N+1, sharding, connection pool | `database-scaling` + `supabase-postgres-best-practices` | 1 |
10
12
  | Cache, Redis, filas, BullMQ, SQS, Kafka, job assíncrono | `caching-and-queues` | 1 |
11
13
  | Kubernetes, auto-scaling, CDN, capacidade, SLO, load test | `infrastructure` | 1 |
12
14
  | Cloud spend, custo de infra, right-sizing, AWS/GCP billing | `cloud-and-infra` | 1 |
13
- | Auth, secrets, tokens, OAuth, JWT, Clerk, permissões | `auth-and-secrets` + `security-reviewer` | 1 |
15
+ | Auth, secrets, tokens, OAuth, JWT, Clerk, permissões | `auth-and-secrets` + `web-security` | 1 |
14
16
  | Dependências, packages, vulnerabilidades, npm audit | `database-and-deps` | 2 |
15
- | Segurança, XSS, CSRF, SQLi, IDOR, OWASP, rate limit, CORS, clickjacking, PII na resposta, enumeração de usuário, headers | `web-security` + `security-reviewer` + `auth-and-secrets` | 1 |
17
+ | Segurança, XSS, CSRF, SQLi, IDOR, OWASP, rate limit, CORS, clickjacking, PII na resposta, enumeração de usuário, headers | `web-security` + `auth-and-secrets` | 1 |
16
18
  | Desktop, Electron, contextIsolation, code signing | `desktop-security` | 2 |
17
19
 
18
20
  ## Área Técnica — Código e Qualidade
19
21
 
20
22
  | Intenção / palavras-chave | Skills a oferecer | Prioridade |
21
23
  |---|---|---|
22
- | Revisar código, code review, qualidade, refatorar | `code-reviewer` (agente nativo) | 1 |
23
- | Novo feature, bug fix, TDD, testes, cobertura | `tdd-guide` (agente nativo) | 1 |
24
- | Build quebrado, erros de TypeScript, lint, CI | `build-error-resolver` (agente nativo) | 1 |
25
- | Arquitetura, design de sistema, decisão técnica | `architect` (agente nativo) | 1 |
26
- | Fluxo crítico, E2E, testes de ponta a ponta | `e2e-runner` (agente nativo) | 2 |
27
- | Dead code, limpeza, refactoring, knip | `refactor-cleaner` (agente nativo) | 2 |
28
- | SQL, schema, migrations, Supabase, RLS, performance de queries | `database-reviewer` (agente nativo) | 1 |
29
- | Segunda opinião, revisão crítica adversarial | `adversarial-reviewer` | 2 |
30
- | Plano técnico, breakdown de tasks, handoff de dev | `implementation-planner` | 2 |
24
+ | Revisar código, code review, qualidade, segunda opinião adversarial | `adversarial-reviewer` | 1 |
25
+ | Novo feature, bug fix, TDD, testes, cobertura | execução direta com TDD (rules globais) e verificação end-to-end ao final | 1 |
26
+ | Build quebrado, erros de TypeScript, lint, CI | execução direta (fix mínimo até build verde) | 2 |
27
+ | Arquitetura, design de sistema, decisão técnica, plano técnico, breakdown, handoff | `implementation-planner` | 1 |
28
+ | Fluxo crítico, E2E, verificação visual no browser | `agent-browser` | 2 |
29
+ | SQL, schema, migrations, Supabase, RLS, performance de queries | `supabase-postgres-best-practices` + `database-scaling` | 1 |
30
+ | Dead code, limpeza, refactoring | execução direta + `adversarial-reviewer` na revisão | 2 |
31
31
  | Novo projeto, iniciar app, ponto de partida, onboarding dev | `inicio-de-projeto` | 1 |
32
- | Construir/melhorar agente ou produto de IA, escrever/revisar system prompt, persona/tom, guardrails, few-shot, chain-of-thought, orquestração multi-agente, avaliar saída de IA | `ai-product-design` | 1 |
32
+ | Construir/melhorar agente ou produto de IA, system prompt, tool definitions | `ai-product-design` | 1 |
33
33
 
34
34
  ## Área de Design e UI
35
35
 
@@ -71,7 +71,7 @@ Use esta tabela **só fora de projeto Wizz** (sem `_wizz/`), quando o router map
71
71
  | Ferramenta grátis de captação de leads | `free-tool-strategy` | 2 |
72
72
  | A/B test, variações, experimentos de conversão | `ab-test-setup` + `analytics-tracking` | 2 |
73
73
  | Copywriting, copy, persuasão, texto de venda | `copywriting` + `humanizer` | 1 |
74
- | Pesquisa de mercado, inteligência competitiva | agentes nativos: `market-research` / `deep-research` | 2 |
74
+ | Pesquisa de mercado, inteligência competitiva | `deep-research` | 2 |
75
75
 
76
76
  ## Contexto e Memória
77
77
 
@@ -90,6 +90,6 @@ Quando nenhuma skill/MCP instalado cobrir o pedido, **classifique o que falta**
90
90
 
91
91
  **Falta um MCP:** informe → `claude mcp list` → consulte `skills-registry.yaml` (`mcps:`/`mcp_utility:`, com `server` pronto) → proponha `claude mcp add <id> [-e VAR=$VAR] -- <command> [args]`. Secrets sempre via env/placeholder, nunca token real.
92
92
 
93
- MCPs comuns: context7 (docs de libs), magic/21st (UI), supabase (Postgres), playwright (browser E2E), meta-ads (Meta), exa (pesquisa).
93
+ MCPs comuns: context7 (docs de libs), magic/21st (UI), supabase (Postgres), meta-ads (Meta), exa (pesquisa). Browser/E2E é sempre via CLI `agent-browser`, nunca via MCP Playwright.
94
94
 
95
95
  Para paid ads Meta, o MCP `mcp-meta-ads` dá acesso real à API Meta Marketing (campanhas, ad sets, ads, métricas, criativos). Combine com `paid-ads` + `ad-creative` + `analytics-tracking`. O `META_ACCESS_TOKEN` vem de env local: nunca exponha em logs ou código commitado.
@@ -0,0 +1,277 @@
1
+ // fetch-assets.mjs — downloader sob demanda dos assets pesados (MP3/fontes)
2
+ // removidos do pacote npm na Tarefa 2.8 da auditoria (assets lazy).
3
+ //
4
+ // Por que existe: `huashu-design/assets/**/*.mp3` (~30MB) e
5
+ // `canvas-design/canvas-fonts/**/*.ttf` (~5.5MB) inflavam o pacote npm em
6
+ // ~73%, mas só são necessários no primeiro uso real de export de vídeo
7
+ // (BGM/SFX) ou de uma variante de fonte específica. Os arquivos continuam no
8
+ // git (fonte de verdade); só saem do tarball publicado. Este script baixa o
9
+ // bundle certo, no lugar certo, verificando sha256 (mesmo espírito do pin
10
+ // com checksum do rtk — nunca extrai um bundle adulterado).
11
+ //
12
+ // Uso:
13
+ // node tools/fetch-assets.mjs <bundle> [--dest <dir>] [--force]
14
+ // node tools/fetch-assets.mjs --all
15
+ // node tools/fetch-assets.mjs --url <url> --sha256 <hash> --dest <dir> [--marker <file>] [--force]
16
+ //
17
+ // Bundles conhecidos: huashu-audio, canvas-fonts (ver BUNDLES abaixo).
18
+ //
19
+ // Cache: se o arquivo-marcador do bundle já existe no destino, não baixa de
20
+ // novo (a menos que --force). Sem dependência nova: usa `node:https`/
21
+ // `node:http` para o download e o binário `tar` do sistema (macOS/Linux/WSL,
22
+ // mesmo escopo de suporte declarado do resto do framework) para extrair.
23
+
24
+ import fs from 'node:fs';
25
+ import path from 'node:path';
26
+ import crypto from 'node:crypto';
27
+ import http from 'node:http';
28
+ import https from 'node:https';
29
+ import os from 'node:os';
30
+ import { execFileSync } from 'node:child_process';
31
+ import { fileURLToPath } from 'node:url';
32
+
33
+ const __filename = fileURLToPath(import.meta.url);
34
+ const __dirname = path.dirname(__filename);
35
+ const PACKAGE_ROOT = path.resolve(__dirname, '..');
36
+
37
+ const RELEASE_BASE = 'https://github.com/wizzcomms/wizz-method/releases/download/assets-v1';
38
+
39
+ // Fonte única dos bundles conhecidos. `dest` é relativo ao root do pacote
40
+ // (repo em dev, node_modules/wizz-method quando instalado via npm — a mesma
41
+ // árvore src/skills-lib/ existe nos dois casos). `marker` é um arquivo que só
42
+ // existe depois de extraído com sucesso; presença dele = cache hit.
43
+ export const BUNDLES = {
44
+ 'huashu-audio': {
45
+ url: `${RELEASE_BASE}/huashu-audio.tar.gz`,
46
+ sha256: 'd20ddaefb7fd560837dec8d57ae8698ee51ef553d61a1367f0491183c613129f',
47
+ dest: 'src/skills-lib/huashu-design/assets',
48
+ marker: 'bgm-ad.mp3',
49
+ description: '6 trilhas BGM + SFX (huashu-design/assets/**/*.mp3, ~27MB)',
50
+ },
51
+ 'canvas-fonts': {
52
+ url: `${RELEASE_BASE}/canvas-fonts.tar.gz`,
53
+ sha256: '7ac839f1dee2883b8e9a7022f246cfece4e203a2fd6ea23c81a5ffa49b812396',
54
+ dest: 'src/skills-lib/canvas-design/canvas-fonts',
55
+ marker: 'Outfit-Regular.ttf',
56
+ description: '~54 variantes de fonte (canvas-design/canvas-fonts/*.ttf, ~2.5MB)',
57
+ },
58
+ };
59
+
60
+ const NETWORK_ERROR_CODES = new Set(['ECONNREFUSED', 'ECONNRESET', 'ENOTFOUND', 'ETIMEDOUT', 'EAI_AGAIN', 'ENETUNREACH']);
61
+
62
+ function isNetworkError(err) {
63
+ return Boolean(err && (NETWORK_ERROR_CODES.has(err.code) || err.name === 'AbortError'));
64
+ }
65
+
66
+ /** Baixa `url` para `destFile`, seguindo redirects (GitHub release assets fazem 302). */
67
+ function download(url, destFile, { maxRedirects = 5, timeoutMs = 30_000 } = {}) {
68
+ return new Promise((resolve, reject) => {
69
+ const client = url.startsWith('https:') ? https : http;
70
+ const req = client.get(url, { timeout: timeoutMs }, (res) => {
71
+ if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
72
+ res.resume();
73
+ if (maxRedirects <= 0) {
74
+ reject(new Error(`Muitos redirects ao baixar ${url}`));
75
+ return;
76
+ }
77
+ const nextUrl = new URL(res.headers.location, url).toString();
78
+ download(nextUrl, destFile, { maxRedirects: maxRedirects - 1, timeoutMs }).then(resolve, reject);
79
+ return;
80
+ }
81
+ if (res.statusCode !== 200) {
82
+ res.resume();
83
+ reject(new Error(`HTTP ${res.statusCode} ao baixar ${url}`));
84
+ return;
85
+ }
86
+ const fileStream = fs.createWriteStream(destFile);
87
+ res.pipe(fileStream);
88
+ fileStream.on('finish', () => fileStream.close(() => resolve()));
89
+ fileStream.on('error', reject);
90
+ res.on('error', reject);
91
+ });
92
+ req.on('timeout', () => req.destroy(new Error(`Timeout ao baixar ${url}`)));
93
+ req.on('error', reject);
94
+ });
95
+ }
96
+
97
+ function sha256File(filePath) {
98
+ return new Promise((resolve, reject) => {
99
+ const hash = crypto.createHash('sha256');
100
+ const stream = fs.createReadStream(filePath);
101
+ stream.on('data', (chunk) => hash.update(chunk));
102
+ stream.on('end', () => resolve(hash.digest('hex')));
103
+ stream.on('error', reject);
104
+ });
105
+ }
106
+
107
+ function extractTarGz(tarFile, destDir) {
108
+ fs.mkdirSync(destDir, { recursive: true });
109
+ execFileSync('tar', ['-xzf', tarFile, '-C', destDir], { stdio: 'pipe' });
110
+ }
111
+
112
+ function isCached(destDir, marker) {
113
+ if (!marker) {
114
+ return fs.existsSync(destDir) && fs.readdirSync(destDir).length > 0;
115
+ }
116
+ return fs.existsSync(path.join(destDir, marker));
117
+ }
118
+
119
+ /**
120
+ * Baixa, verifica sha256 e extrai um bundle. Não escreve nada no destino se
121
+ * o sha256 não bater (aborta antes do extract). Cache: pula o download se o
122
+ * marcador já existir em `dest`, a menos que `force`.
123
+ *
124
+ * @returns {Promise<{ cached: boolean }>}
125
+ */
126
+ export async function fetchBundle({ url, sha256, dest, marker, force = false }) {
127
+ const destDir = path.isAbsolute(dest) ? dest : path.join(PACKAGE_ROOT, dest);
128
+
129
+ if (!force && isCached(destDir, marker)) {
130
+ return { cached: true, dest: destDir };
131
+ }
132
+
133
+ const tmpFile = path.join(os.tmpdir(), `wizz-fetch-assets-${crypto.randomBytes(6).toString('hex')}.tar.gz`);
134
+ try {
135
+ await download(url, tmpFile);
136
+ } catch (error) {
137
+ fs.rmSync(tmpFile, { force: true });
138
+ if (isNetworkError(error)) {
139
+ throw new FetchAssetsError(
140
+ `Sem conexão para baixar o asset (${error.code || error.message}).\n` +
141
+ ` Baixe manualmente: ${url}\n` +
142
+ ` E extraia em: ${destDir}`,
143
+ { cause: error },
144
+ );
145
+ }
146
+ throw error;
147
+ }
148
+
149
+ const actualSha256 = await sha256File(tmpFile);
150
+ if (actualSha256 !== sha256) {
151
+ fs.rmSync(tmpFile, { force: true });
152
+ throw new FetchAssetsError(
153
+ `sha256 não confere para ${url}\n esperado: ${sha256}\n obtido: ${actualSha256}\n` +
154
+ `Download abortado, nada foi extraído (bundle pode estar corrompido ou adulterado).`,
155
+ );
156
+ }
157
+
158
+ try {
159
+ extractTarGz(tmpFile, destDir);
160
+ } finally {
161
+ fs.rmSync(tmpFile, { force: true });
162
+ }
163
+
164
+ return { cached: false, dest: destDir };
165
+ }
166
+
167
+ export class FetchAssetsError extends Error {}
168
+
169
+ async function fetchNamedBundle(name, { dest, force } = {}) {
170
+ const bundle = BUNDLES[name];
171
+ if (!bundle) {
172
+ throw new FetchAssetsError(`Bundle desconhecido: "${name}". Disponíveis: ${Object.keys(BUNDLES).join(', ')}`);
173
+ }
174
+ return fetchBundle({
175
+ url: bundle.url,
176
+ sha256: bundle.sha256,
177
+ dest: dest || bundle.dest,
178
+ marker: bundle.marker,
179
+ force,
180
+ });
181
+ }
182
+
183
+ function parseArgs(argv) {
184
+ const opts = { positional: [], force: false, all: false };
185
+ for (let i = 0; i < argv.length; i += 1) {
186
+ const arg = argv[i];
187
+ switch (arg) {
188
+ case '--force': {
189
+ opts.force = true;
190
+ break;
191
+ }
192
+ case '--all': {
193
+ opts.all = true;
194
+ break;
195
+ }
196
+ case '--dest': {
197
+ opts.dest = argv[++i];
198
+ break;
199
+ }
200
+ case '--url': {
201
+ opts.url = argv[++i];
202
+ break;
203
+ }
204
+ case '--sha256': {
205
+ opts.sha256 = argv[++i];
206
+ break;
207
+ }
208
+ case '--marker': {
209
+ opts.marker = argv[++i];
210
+ break;
211
+ }
212
+ default: {
213
+ opts.positional.push(arg);
214
+ }
215
+ }
216
+ }
217
+ return opts;
218
+ }
219
+
220
+ async function main(argv) {
221
+ const opts = parseArgs(argv);
222
+
223
+ if (opts.all) {
224
+ let exitCode = 0;
225
+ for (const name of Object.keys(BUNDLES)) {
226
+ try {
227
+ const result = await fetchNamedBundle(name, { force: opts.force });
228
+ console.log(result.cached ? `✓ ${name}: já em cache (${result.dest})` : `✓ ${name}: baixado em ${result.dest}`);
229
+ } catch (error) {
230
+ exitCode = 1;
231
+ console.error(`✗ ${name}: ${error.message}`);
232
+ }
233
+ }
234
+ process.exitCode = exitCode;
235
+ return;
236
+ }
237
+
238
+ if (opts.url && opts.sha256 && opts.dest) {
239
+ try {
240
+ const result = await fetchBundle({ url: opts.url, sha256: opts.sha256, dest: opts.dest, marker: opts.marker, force: opts.force });
241
+ console.log(result.cached ? `✓ já em cache (${result.dest})` : `✓ baixado em ${result.dest}`);
242
+ } catch (error) {
243
+ console.error(`✗ ${error.message}`);
244
+ process.exitCode = 1;
245
+ }
246
+ return;
247
+ }
248
+
249
+ const bundleName = opts.positional[0];
250
+ if (!bundleName) {
251
+ console.error(
252
+ 'Uso: node tools/fetch-assets.mjs <bundle> [--dest <dir>] [--force]\n' +
253
+ ' node tools/fetch-assets.mjs --all\n' +
254
+ `Bundles: ${Object.entries(BUNDLES)
255
+ .map(([id, b]) => `\n ${id} — ${b.description}`)
256
+ .join('')}`,
257
+ );
258
+ process.exitCode = 1;
259
+ return;
260
+ }
261
+
262
+ try {
263
+ const result = await fetchNamedBundle(bundleName, { dest: opts.dest, force: opts.force });
264
+ console.log(result.cached ? `✓ ${bundleName}: já em cache (${result.dest})` : `✓ ${bundleName}: baixado em ${result.dest}`);
265
+ } catch (error) {
266
+ console.error(`✗ ${error.message}`);
267
+ process.exitCode = 1;
268
+ }
269
+ }
270
+
271
+ const isMain = process.argv[1] && path.resolve(process.argv[1]) === __filename;
272
+ if (isMain) {
273
+ main(process.argv.slice(2)).catch((error) => {
274
+ console.error(`✗ Erro inesperado: ${error.stack || error.message}`);
275
+ process.exitCode = 1;
276
+ });
277
+ }
@@ -0,0 +1,71 @@
1
+ // `wizz fetch-assets` — baixa sob demanda os assets pesados removidos do
2
+ // pacote npm (Tarefa 2.8 da auditoria): MP3 do huashu-design e fontes do
3
+ // canvas-design. Wrapper fino de commander sobre tools/fetch-assets.mjs (ESM
4
+ // puro, sem dependência nova) — o motor real fica lá; este arquivo só expõe
5
+ // o comando pro CLI e traduz flags/erros pro padrão dos outros comandos.
6
+ //
7
+ // `--bundle` (não posicional): o loader genérico em wizz-cli.js registra
8
+ // `program.command(name)` sem placeholder de argumento pros comandos deste
9
+ // diretório (todos os outros — install/status/uninstall — são só opções),
10
+ // então um positional aqui quebraria com "too many arguments". Mantém a
11
+ // mesma convenção do resto do CLI em vez de mexer no loader compartilhado.
12
+ //
13
+ // Por que uma flag --dest é essencial: uma skill instalada globalmente
14
+ // (~/.claude/skills/huashu-design/) ou num projeto (.claude/skills/...) é uma
15
+ // CÓPIA separada do pacote npm de origem — baixar só no pacote de origem não
16
+ // ajuda a cópia já instalada. `npx wizz-method fetch-assets --bundle
17
+ // huashu-audio --dest <pasta-da-skill>/assets`, rodado de dentro da skill
18
+ // instalada, resolve os dois casos (skill local ao repo em dev, ou instalada
19
+ // em qualquer lugar) sem a skill precisar saber onde o pacote wizz-method mora.
20
+
21
+ module.exports = {
22
+ command: 'fetch-assets',
23
+ description: 'Baixa sob demanda os assets pesados (MP3 do huashu-design, fontes do canvas-design)',
24
+ options: [
25
+ ['--bundle <name>', 'Bundle a baixar (huashu-audio | canvas-fonts)'],
26
+ ['--dest <dir>', 'Destino da extração (default: local do bundle dentro do pacote wizz-method)'],
27
+ ['--force', 'Ignora o cache e rebaixa mesmo se os arquivos já existirem'],
28
+ ['--all', 'Baixa todos os bundles conhecidos'],
29
+ ],
30
+ action: async (options) => {
31
+ const { fetchBundle, BUNDLES } = await import('../../fetch-assets.mjs');
32
+
33
+ const targets = options.all ? Object.keys(BUNDLES) : options.bundle ? [options.bundle] : [];
34
+
35
+ if (targets.length === 0) {
36
+ console.error(
37
+ 'Uso: wizz fetch-assets --bundle <nome> [--dest <dir>] [--force]\n' +
38
+ ' wizz fetch-assets --all\n' +
39
+ `Bundles: ${Object.entries(BUNDLES)
40
+ .map(([id, b]) => `\n ${id} — ${b.description}`)
41
+ .join('')}`,
42
+ );
43
+ process.exitCode = 1;
44
+ return;
45
+ }
46
+
47
+ let exitCode = 0;
48
+ for (const name of targets) {
49
+ const meta = BUNDLES[name];
50
+ if (!meta) {
51
+ console.error(`✗ Bundle desconhecido: "${name}". Disponíveis: ${Object.keys(BUNDLES).join(', ')}`);
52
+ exitCode = 1;
53
+ continue;
54
+ }
55
+ try {
56
+ const result = await fetchBundle({
57
+ url: meta.url,
58
+ sha256: meta.sha256,
59
+ dest: options.dest || meta.dest,
60
+ marker: meta.marker,
61
+ force: options.force,
62
+ });
63
+ console.log(result.cached ? `✓ ${name}: já em cache (${result.dest})` : `✓ ${name}: baixado em ${result.dest}`);
64
+ } catch (error) {
65
+ exitCode = 1;
66
+ console.error(`✗ ${name}: ${error.message}`);
67
+ }
68
+ }
69
+ process.exitCode = exitCode;
70
+ },
71
+ };
@@ -90,6 +90,9 @@ module.exports = {
90
90
  const { checkWindowsNodeFromWsl } = require('../core/wsl-node-check');
91
91
  await checkWindowsNodeFromWsl();
92
92
 
93
+ const { checkRequiredTools } = require('../core/preflight-tools-check');
94
+ await checkRequiredTools();
95
+
93
96
  // Set debug flag as environment variable for all components
94
97
  if (options.debug) {
95
98
  process.env.WIZZ_DEBUG_MANIFEST = 'true';
@@ -127,6 +130,20 @@ module.exports = {
127
130
  const result = await installer.quickUpdate(config);
128
131
  await prompts.log.success('Quick update complete!');
129
132
  await prompts.log.info(`Updated ${result.moduleCount} modules with preserved settings (${result.modules.join(', ')})`);
133
+ // Quick Update never provisions global skills/MCPs/CLIs (see the
134
+ // isQuickUpdate() gate in core/installer.js). Say so in the final
135
+ // summary too, not just as a menu hint and an in-run log line, so
136
+ // the "no new skills" outcome is never a silent surprise.
137
+ await prompts.log.info(
138
+ 'Skills/MCPs/CLIs não foram alterados (Quick Update). Para provisioná-los, rode install e escolha "Modify Wizz Installation".',
139
+ );
140
+ if (result.warnings > 0) {
141
+ await prompts.log.warn(`Concluído com ${result.warnings} aviso(s). Veja o resumo acima para detalhes.`);
142
+ }
143
+ if (result.errors > 0) {
144
+ await prompts.log.error(`Concluído com ${result.errors} falha(s) real(is). Veja o resumo acima para detalhes.`);
145
+ process.exit(1);
146
+ }
130
147
  process.exit(0);
131
148
  }
132
149
 
@@ -138,9 +155,24 @@ module.exports = {
138
155
  process.exit(0);
139
156
  }
140
157
 
141
- // Check if installation succeeded
142
- if (result && result.success) {
143
- process.exit(0);
158
+ // Check if installation succeeded. Best-effort steps (IDE setup, global
159
+ // skills/MCP/CLI provisioning) never throw, so a real per-step failure
160
+ // used to leave `result.success` unset and the process to exit 0 by
161
+ // falling off the end of this handler with nothing left pending. Make
162
+ // the signal explicit and structured instead (see M24 in the
163
+ // installer audit): warn count is informational; a nonzero error
164
+ // count means a real failure happened and the exit code must reflect it.
165
+ if (result) {
166
+ if (result.warnings > 0) {
167
+ await prompts.log.warn(`Concluído com ${result.warnings} aviso(s). Veja o resumo acima para detalhes.`);
168
+ }
169
+ if (result.errors > 0) {
170
+ await prompts.log.error(`Concluído com ${result.errors} falha(s) real(is). Veja o resumo acima para detalhes.`);
171
+ process.exit(1);
172
+ }
173
+ if (result.success) {
174
+ process.exit(0);
175
+ }
144
176
  }
145
177
  } catch (error) {
146
178
  try {
@@ -0,0 +1,131 @@
1
+ // `wizz trace-report` — resume o arquivo de trace local do roteamento
2
+ // (Tarefa 3.8-E2 da auditoria 360°, ver `_audit/`). Só leitura: agrega o
3
+ // JSONL escrito pelo hook global `tools/hooks/wizz-router-enforce.js`
4
+ // (função `traceLine`, opt-in via WIZZ_TRACE=1) e imprime um resumo.
5
+ //
6
+ // A fórmula do caminho do arquivo replica `getTraceFile()` de
7
+ // tools/hooks/wizz-router-enforce.js (linha ~170) — os dois arquivos vivem
8
+ // em árvores independentes (tools/hooks/ vs tools/installer/), então
9
+ // duplicar as 2 linhas é aceitável; qualquer mudança na fórmula do hook
10
+ // precisa ser espelhada aqui.
11
+
12
+ const os = require('node:os');
13
+ const path = require('node:path');
14
+ const fs = require('../fs-native');
15
+ const prompts = require('../prompts');
16
+
17
+ function getTraceFile() {
18
+ return process.env.WIZZ_TRACE_FILE || path.join(os.homedir(), '.claude', 'wizz-trace.jsonl');
19
+ }
20
+
21
+ // Faz o parse de 1 linha JSONL. Retorna `null` (em vez de lançar) para
22
+ // linhas corrompidas — fail-open, mesmo espírito do resto do framework: o
23
+ // trace nunca pode quebrar quem o lê.
24
+ function parseLine(line) {
25
+ try {
26
+ return JSON.parse(line);
27
+ } catch {
28
+ return null;
29
+ }
30
+ }
31
+
32
+ // Agrega as entradas já parseadas em contadores/período. Função pura, sem
33
+ // I/O, para ser testável isoladamente do disco.
34
+ function aggregate(entries) {
35
+ const byMode = { wizz: 0, flat: 0, null: 0 };
36
+ let trivialCount = 0;
37
+ let warningsCount = 0;
38
+ let firstTs = null;
39
+ let lastTs = null;
40
+
41
+ for (const entry of entries) {
42
+ if (entry.isTrivial) {
43
+ trivialCount++;
44
+ } else {
45
+ const modeKey = entry.mode === 'wizz' || entry.mode === 'flat' ? entry.mode : 'null';
46
+ byMode[modeKey]++;
47
+ if (Array.isArray(entry.warnings) && entry.warnings.length > 0) warningsCount++;
48
+ }
49
+
50
+ if (typeof entry.ts === 'string') {
51
+ if (firstTs === null || entry.ts < firstTs) firstTs = entry.ts;
52
+ if (lastTs === null || entry.ts > lastTs) lastTs = entry.ts;
53
+ }
54
+ }
55
+
56
+ return {
57
+ total: entries.length,
58
+ trivialCount,
59
+ routedCount: entries.length - trivialCount,
60
+ byMode,
61
+ warningsCount,
62
+ firstTs,
63
+ lastTs,
64
+ };
65
+ }
66
+
67
+ function formatSummary(stats, traceFile) {
68
+ const lines = [
69
+ `Arquivo: ${traceFile}`,
70
+ `Total de linhas: ${stats.total}`,
71
+ `Triviais: ${stats.trivialCount}`,
72
+ `Roteados: ${stats.routedCount}`,
73
+ ` modo wizz: ${stats.byMode.wizz}`,
74
+ ` modo flat: ${stats.byMode.flat}`,
75
+ ` modo nulo: ${stats.byMode.null}`,
76
+ `Com warnings: ${stats.warningsCount}`,
77
+ `Período: ${stats.firstTs || '—'} → ${stats.lastTs || '—'}`,
78
+ ];
79
+ if (stats.corruptedCount > 0) {
80
+ lines.push(`Linhas ignoradas (corrompidas): ${stats.corruptedCount}`);
81
+ }
82
+ return lines.join('\n');
83
+ }
84
+
85
+ module.exports = {
86
+ command: 'trace-report',
87
+ description: 'Resume o arquivo local de trace do roteamento (WIZZ_TRACE)',
88
+ options: [],
89
+ action: async (options) => {
90
+ try {
91
+ const traceFile = getTraceFile();
92
+
93
+ if (!(await fs.pathExists(traceFile))) {
94
+ await prompts.log.warn('Nenhum trace encontrado.');
95
+ await prompts.log.message(`Local esperado: ${traceFile}`);
96
+ await prompts.log.message('Rode o install e ligue o medidor de roteamento, ou exporte WIZZ_TRACE=1.');
97
+ process.exit(0);
98
+ return;
99
+ }
100
+
101
+ const raw = await fs.readFile(traceFile, 'utf8');
102
+ const rawLines = raw.split('\n').filter((line) => line.trim().length > 0);
103
+
104
+ const entries = [];
105
+ let corruptedCount = 0;
106
+ for (const line of rawLines) {
107
+ const parsed = parseLine(line);
108
+ if (parsed === null) {
109
+ corruptedCount++;
110
+ } else {
111
+ entries.push(parsed);
112
+ }
113
+ }
114
+
115
+ const stats = { ...aggregate(entries), corruptedCount };
116
+
117
+ await prompts.box(formatSummary(stats, traceFile), 'Wizz Trace Report');
118
+
119
+ process.exit(0);
120
+ } catch (error) {
121
+ await prompts.log.error(`Trace report failed: ${error.message}`);
122
+ if (process.env.WIZZ_DEBUG) {
123
+ await prompts.log.message(error.stack);
124
+ }
125
+ process.exit(1);
126
+ }
127
+ },
128
+ // Exportado só para teste unitário direto da agregação, sem precisar
129
+ // spawnar o processo pra cada caso de borda.
130
+ _internal: { aggregate, parseLine, formatSummary },
131
+ };
@@ -18,6 +18,7 @@ class Config {
18
18
  quickUpdate,
19
19
  channelOptions,
20
20
  setOverrides,
21
+ traceEnabled,
21
22
  }) {
22
23
  this.directory = directory;
23
24
  this.modules = Object.freeze([...modules]);
@@ -49,6 +50,13 @@ class Config {
49
50
  // Intentionally NOT integrated with the prompt/template/schema flow; see
50
51
  // `tools/installer/set-overrides.js` for the rationale and tradeoffs.
51
52
  this.setOverrides = setOverrides || {};
53
+ // 3.8-E1: whether the user opted into the local routing-trace measurement
54
+ // (WIZZ_TRACE=1, persisted into .claude/settings.local.json by the UI
55
+ // layer BEFORE install() runs — see ui.js#promptTraceOptIn). Tri-state on
56
+ // purpose: `null` means "never asked" (quick-update, update, or a module
57
+ // set that doesn't include bmm) so renderInstallSummary can omit the line
58
+ // entirely instead of misreporting an unasked question as "desligado".
59
+ this.traceEnabled = traceEnabled === undefined ? null : traceEnabled;
52
60
  Object.freeze(this);
53
61
  }
54
62
 
@@ -78,6 +86,7 @@ class Config {
78
86
  quickUpdate: userInput._quickUpdate || false,
79
87
  channelOptions: userInput.channelOptions || null,
80
88
  setOverrides: userInput.setOverrides || {},
89
+ traceEnabled: userInput.traceEnabled === undefined ? null : userInput.traceEnabled,
81
90
  });
82
91
  }
83
92