wizz-method 1.4.1 → 1.5.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.
- package/README.md +6 -4
- package/package.json +39 -3
- package/skills-registry.yaml +109 -8
- package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +2 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +5 -2
- package/src/core-skills/_shared/handoff-protocol.md +61 -0
- package/src/core-skills/wizz-customize/SKILL.md +2 -2
- package/src/core-skills/wizz-party-mode/references/mode-agent-team.md +1 -1
- package/src/core-skills/wizz-party-mode/references/mode-subagent.md +1 -1
- package/src/core-skills/wizz-review-adversarial-general/SKILL.md +2 -0
- package/src/modules/wizz/README.md +3 -3
- package/src/modules/wizz/_shared/communication-rules.md +13 -0
- package/src/modules/wizz/_shared/encerramento.md +2 -2
- package/src/modules/wizz/agents/wizz-ads/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-copy/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +2 -2
- package/src/modules/wizz/agents/wizz-designer/customize.toml +6 -4
- package/src/modules/wizz/agents/wizz-growth/customize.toml +11 -3
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +9 -5
- package/src/modules/wizz/agents/wizz-maestro/customize.toml +5 -7
- package/src/modules/wizz/agents/wizz-memoria/customize.toml +2 -4
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +5 -5
- package/src/modules/wizz/agents/wizz-qa/customize.toml +9 -7
- package/src/modules/wizz/agents/wizz-seo/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-social/customize.toml +9 -8
- package/src/modules/wizz/module.yaml +1 -1
- package/src/modules/wizz/overrides/wizz-agent-analyst.toml +4 -5
- package/src/modules/wizz/overrides/wizz-agent-architect.toml +11 -3
- package/src/modules/wizz/overrides/wizz-agent-dev.toml +6 -4
- package/src/modules/wizz/overrides/wizz-agent-pm.toml +4 -2
- package/src/modules/wizz/overrides/wizz-agent-tech-writer.toml +3 -5
- package/src/modules/wizz/overrides/wizz-agent-ux-designer.toml +4 -2
- package/src/modules/wizz/scripts/wizz-init.mjs +3 -1
- package/src/scripts/__pycache__/resolve_customization.cpython-314.pyc +0 -0
- package/src/scripts/memlog.py +9 -0
- package/src/scripts/resolve_customization.py +93 -3
- package/src/skills-lib/adversarial-reviewer/SKILL.md +2 -0
- package/src/skills-lib/algorithmic-art/SKILL.md +29 -369
- package/src/skills-lib/algorithmic-art/references/interactive-artifact.md +139 -0
- package/src/skills-lib/algorithmic-art/references/p5js-implementation.md +121 -0
- package/src/skills-lib/algorithmic-art/references/philosophy-creation.md +88 -0
- package/src/skills-lib/canvas-design/SKILL.md +9 -38
- package/src/skills-lib/canvas-design/references/canvas-execution.md +21 -0
- package/src/skills-lib/canvas-design/references/philosophy-examples.md +25 -0
- package/src/skills-lib/cerebro/SKILL.md +8 -273
- package/src/skills-lib/cerebro/references/comandos-pesquisa-e-sync.md +44 -0
- package/src/skills-lib/cerebro/references/comandos-rotina-e-captura.md +94 -0
- package/src/skills-lib/cerebro/references/comandos-sessao.md +122 -0
- package/src/skills-lib/content-strategy/SKILL.md +12 -316
- package/src/skills-lib/content-strategy/references/content-types.md +52 -0
- package/src/skills-lib/content-strategy/references/ideation-sources.md +78 -0
- package/src/skills-lib/content-strategy/references/pillars-and-keywords.md +78 -0
- package/src/skills-lib/content-strategy/references/prioritization-and-output.md +57 -0
- package/src/skills-lib/decision-maker/SKILL.md +13 -466
- package/src/skills-lib/decision-maker/references/commands-and-edge-cases.md +40 -0
- package/src/skills-lib/decision-maker/references/output-format.md +161 -0
- package/src/skills-lib/decision-maker/references/references-and-extraction.md +129 -0
- package/src/skills-lib/decision-maker/references/six-decisions.md +122 -0
- package/src/skills-lib/decision-maker/references/wizz-method-handoff.md +22 -0
- package/src/skills-lib/find-skills/SKILL.md +9 -6
- package/src/skills-lib/form-cro/SKILL.md +12 -390
- package/src/skills-lib/form-cro/references/experiments.md +73 -0
- package/src/skills-lib/form-cro/references/field-optimization.md +92 -0
- package/src/skills-lib/form-cro/references/flow-and-errors.md +71 -0
- package/src/skills-lib/form-cro/references/measurement-output.md +41 -0
- package/src/skills-lib/form-cro/references/trust-and-form-types.md +54 -0
- package/src/skills-lib/graphify/SKILL.md +2 -20
- package/src/skills-lib/huashu-design/SKILL.md +42 -596
- package/src/skills-lib/huashu-design/references/anti-slop-principles.md +62 -0
- package/src/skills-lib/huashu-design/references/audio-design-rules.md +1 -1
- package/src/skills-lib/huashu-design/references/cross-agent-adaptation.md +14 -0
- package/src/skills-lib/huashu-design/references/design-direction-fallback.md +113 -0
- package/src/skills-lib/huashu-design/references/exception-handling.md +18 -0
- package/src/skills-lib/huashu-design/references/fact-verification.md +36 -0
- package/src/skills-lib/huashu-design/references/ios-prototype.md +146 -0
- package/src/skills-lib/huashu-design/references/sfx-library.md +7 -0
- package/src/skills-lib/huashu-design/references/starter-components.md +24 -0
- package/src/skills-lib/huashu-design/references/video-export.md +1 -1
- package/src/skills-lib/huashu-design/references/watermark-policy.md +23 -0
- package/src/skills-lib/huashu-design/scripts/add-music.sh +12 -1
- package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +11 -0
- package/src/skills-lib/humanizer/SKILL.md +23 -431
- package/src/skills-lib/humanizer/references/ai-writing-patterns.md +314 -0
- package/src/skills-lib/humanizer/references/full-example.md +72 -0
- package/src/skills-lib/humanizer/references/personality-and-soul.md +36 -0
- package/src/skills-lib/impeccable/SKILL.md +37 -153
- package/src/skills-lib/impeccable/references/design-rules.md +95 -0
- package/src/skills-lib/impeccable/references/pin-unpin-and-hooks.md +17 -0
- package/src/skills-lib/impeccable/references/routing-rules.md +28 -0
- package/src/skills-lib/implementation-planner/SKILL.md +22 -529
- package/src/skills-lib/implementation-planner/references/folder-structure-and-dependencies.md +132 -0
- package/src/skills-lib/implementation-planner/references/handoff-template.md +34 -0
- package/src/skills-lib/implementation-planner/references/implementation-phases.md +54 -0
- package/src/skills-lib/implementation-planner/references/implementation-types.md +28 -0
- package/src/skills-lib/implementation-planner/references/motion-path-implementation.md +57 -0
- package/src/skills-lib/implementation-planner/references/output-templates.md +92 -0
- package/src/skills-lib/implementation-planner/references/performance-plan.md +52 -0
- package/src/skills-lib/inicio-de-projeto/SKILL.md +4 -224
- package/src/skills-lib/inicio-de-projeto/references/implementacao-api-forms.md +112 -0
- package/src/skills-lib/inicio-de-projeto/references/padroes-arquiteturais-e-pastas.md +71 -0
- package/src/skills-lib/inicio-de-projeto/references/seguranca-e-regras-codigo.md +26 -0
- package/src/skills-lib/launch-strategy/SKILL.md +9 -311
- package/src/skills-lib/launch-strategy/references/five-phase-approach.md +76 -0
- package/src/skills-lib/launch-strategy/references/launch-checklist.md +34 -0
- package/src/skills-lib/launch-strategy/references/orb-framework.md +76 -0
- package/src/skills-lib/launch-strategy/references/post-launch-and-ongoing.md +64 -0
- package/src/skills-lib/launch-strategy/references/product-hunt-strategy.md +52 -0
- package/src/skills-lib/marketing-psychology/SKILL.md +18 -401
- package/src/skills-lib/marketing-psychology/references/design-and-delivery-models.md +56 -0
- package/src/skills-lib/marketing-psychology/references/foundational-thinking-models.md +76 -0
- package/src/skills-lib/marketing-psychology/references/growth-and-scaling-models.md +46 -0
- package/src/skills-lib/marketing-psychology/references/influencing-behavior.md +71 -0
- package/src/skills-lib/marketing-psychology/references/pricing-psychology.md +31 -0
- package/src/skills-lib/marketing-psychology/references/understanding-buyers.md +116 -0
- package/src/skills-lib/motion-3d-director/SKILL.md +23 -370
- package/src/skills-lib/motion-3d-director/references/image-to-video-workflow.md +166 -0
- package/src/skills-lib/motion-3d-director/references/motion-paths.md +119 -0
- package/src/skills-lib/motion-3d-director/references/performance-and-handoff.md +51 -0
- package/src/skills-lib/popup-cro/SKILL.md +11 -414
- package/src/skills-lib/popup-cro/references/design-copy-compliance.md +81 -0
- package/src/skills-lib/popup-cro/references/experiments.md +82 -0
- package/src/skills-lib/popup-cro/references/rules-measurement-output.md +87 -0
- package/src/skills-lib/popup-cro/references/triggers-and-popup-types.md +108 -0
- package/src/skills-lib/signup-flow-cro/SKILL.md +13 -321
- package/src/skills-lib/signup-flow-cro/references/experiments.md +72 -0
- package/src/skills-lib/signup-flow-cro/references/field-optimization.md +49 -0
- package/src/skills-lib/signup-flow-cro/references/flow-structure.md +38 -0
- package/src/skills-lib/signup-flow-cro/references/measurement-output-patterns.md +62 -0
- package/src/skills-lib/signup-flow-cro/references/trust-and-post-submit.md +40 -0
- package/src/skills-lib/taste-redesign/SKILL.md +10 -146
- package/src/skills-lib/taste-redesign/references/design-audit.md +120 -0
- package/src/skills-lib/taste-redesign/references/upgrade-techniques.md +31 -0
- package/src/skills-lib/ui-ux-pro-max/SKILL.md +9 -353
- package/src/skills-lib/ui-ux-pro-max/references/common-rules-checklist.md +76 -0
- package/src/skills-lib/ui-ux-pro-max/references/rules-quick-reference.md +70 -0
- package/src/skills-lib/ui-ux-pro-max/references/search-reference.md +45 -0
- package/src/skills-lib/ui-ux-pro-max/references/workflow-guide.md +157 -0
- package/src/skills-lib/web-security/SKILL.md +13 -187
- package/src/skills-lib/web-security/references/checklist-deploy.md +52 -0
- package/src/skills-lib/web-security/references/headers-rate-limit-cors.md +78 -0
- package/src/skills-lib/web-security/references/owasp-top5-detalhado.md +51 -0
- package/src/skills-lib/wizz-router/SKILL.md +20 -9
- package/src/skills-lib/wizz-router/references/auditoria-360.md +4 -4
- package/src/skills-lib/wizz-router/references/routing-table-flat.md +15 -15
- package/tools/fetch-assets.mjs +277 -0
- package/tools/installer/commands/fetch-assets.js +71 -0
- package/tools/installer/commands/install.js +35 -3
- package/tools/installer/commands/trace-report.js +131 -0
- package/tools/installer/core/config.js +9 -0
- package/tools/installer/core/help-catalog.js +181 -0
- package/tools/installer/core/install-paths.js +48 -3
- package/tools/installer/core/installer.js +253 -618
- package/tools/installer/core/manifest-generator.js +8 -1
- package/tools/installer/core/manifest.js +67 -22
- package/tools/installer/core/module-config-writer.js +110 -0
- package/tools/installer/core/preflight-tools-check.js +82 -0
- package/tools/installer/core/quick-update.js +209 -0
- package/tools/installer/core/user-file-preservation.js +250 -0
- package/tools/installer/modules/channel-resolver.js +34 -2
- package/tools/installer/modules/cli-config.js +127 -34
- package/tools/installer/modules/deps-cache.js +28 -1
- package/tools/installer/modules/env-vars.js +446 -0
- package/tools/installer/modules/external-manager.js +40 -6
- package/tools/installer/modules/mcp-config.js +180 -37
- package/tools/installer/modules/module-help-schema.js +2 -1
- package/tools/installer/modules/official-modules.js +1 -1
- package/tools/installer/modules/registry-resolve.js +74 -0
- package/tools/installer/modules/skills-lib.js +11 -15
- package/tools/installer/ui.js +71 -5
- package/wizz-modules.yaml +15 -5
- package/.claude-plugin/marketplace.json +0 -80
- package/AGENTS.md +0 -12
- package/build/artifacts/llms-full.txt +0 -4049
- package/build/artifacts/llms.txt +0 -28
- package/build/site/404.html +0 -55
- package/build/site/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js +0 -1
- package/build/site/_astro/Search.astro_astro_type_script_index_0_lang.cjYDvRdi.js +0 -1
- package/build/site/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js +0 -1
- package/build/site/_astro/ec.0vx5m.js +0 -3
- package/build/site/_astro/ec.v4551.css +0 -1
- package/build/site/_astro/index.DdjI3lF_.css +0 -1
- package/build/site/_astro/page.B1D-nYk3.js +0 -1
- package/build/site/_astro/print.DNXP8c50.css +0 -1
- package/build/site/_astro/ui-core.D_Lfcn_I.js +0 -2
- package/build/site/diagrams/checkpoint-preview-diagram-fr.webp +0 -0
- package/build/site/diagrams/checkpoint-preview-diagram.png +0 -0
- package/build/site/diagrams/quick-dev-diagram-fr.webp +0 -0
- package/build/site/diagrams/quick-dev-diagram.png +0 -0
- package/build/site/explanation/advanced-elicitation/index.html +0 -105
- package/build/site/explanation/adversarial-review/index.html +0 -109
- package/build/site/explanation/analysis-phase/index.html +0 -129
- package/build/site/explanation/brainstorming/index.html +0 -92
- package/build/site/explanation/checkpoint-preview/index.html +0 -121
- package/build/site/explanation/established-projects-faq/index.html +0 -107
- package/build/site/explanation/forensic-investigation/index.html +0 -167
- package/build/site/explanation/named-agents/index.html +0 -187
- package/build/site/explanation/party-mode/index.html +0 -256
- package/build/site/explanation/preventing-agent-conflicts/index.html +0 -185
- package/build/site/explanation/project-context/index.html +0 -198
- package/build/site/explanation/quick-dev/index.html +0 -113
- package/build/site/explanation/web-bundles/index.html +0 -178
- package/build/site/explanation/why-solutioning-matters/index.html +0 -168
- package/build/site/how-to/customize-wizz/index.html +0 -277
- package/build/site/how-to/established-projects/index.html +0 -165
- package/build/site/how-to/expand-wizz-for-your-org/index.html +0 -245
- package/build/site/how-to/get-answers-about-wizz/index.html +0 -129
- package/build/site/how-to/install-custom-modules/index.html +0 -197
- package/build/site/how-to/install-wizz/index.html +0 -330
- package/build/site/how-to/non-interactive-installation/index.html +0 -73
- package/build/site/how-to/project-context/index.html +0 -141
- package/build/site/how-to/quick-fixes/index.html +0 -122
- package/build/site/how-to/shard-large-documents/index.html +0 -103
- package/build/site/how-to/upgrade-to-v6/index.html +0 -185
- package/build/site/how-to/use-web-bundles/index.html +0 -99
- package/build/site/img/wizz-dark.png +0 -0
- package/build/site/img/wizz-light.png +0 -0
- package/build/site/index.html +0 -128
- package/build/site/llms-full.txt +0 -4049
- package/build/site/llms.txt +0 -28
- package/build/site/pagefind/fragment/en_175de32.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_24258fb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_24f53a6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_27ba8f9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_296ddb9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_2b5aa5c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_49047e0.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_4a187d2.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_514725b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_583316f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_6465dfb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_67825a4.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_82aec61.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_85dcebf.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_887ce56.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_89a1a7a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8ade291.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8c11f8a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8c1bde3.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_92d7cc7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_94bfc21.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_9b57d7d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ab62b53.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_b0d23ee.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ba9fb37.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_bb113eb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_bfc56b6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_c6d9e48.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cdd772f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cdd885c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cefed6a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_d890205.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_da351b7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ea289f9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_f1c3711.pf_fragment +0 -0
- package/build/site/pagefind/index/en_5b9d8c6.pf_index +0 -0
- package/build/site/pagefind/index/en_868614c.pf_index +0 -0
- package/build/site/pagefind/index/en_e4f9bff.pf_index +0 -0
- package/build/site/pagefind/pagefind-entry.json +0 -1
- package/build/site/pagefind/pagefind-highlight.js +0 -1064
- package/build/site/pagefind/pagefind-modular-ui.css +0 -214
- package/build/site/pagefind/pagefind-modular-ui.js +0 -8
- package/build/site/pagefind/pagefind-ui.css +0 -1
- package/build/site/pagefind/pagefind-ui.js +0 -2
- package/build/site/pagefind/pagefind.en_4e69d7f053.pf_meta +0 -0
- package/build/site/pagefind/pagefind.js +0 -6
- package/build/site/pagefind/wasm.en.pagefind +0 -0
- package/build/site/pagefind/wasm.unknown.pagefind +0 -0
- package/build/site/reference/agents/index.html +0 -168
- package/build/site/reference/commands/index.html +0 -254
- package/build/site/reference/core-tools/index.html +0 -384
- package/build/site/reference/modules/index.html +0 -132
- package/build/site/reference/testing/index.html +0 -218
- package/build/site/reference/workflow-map/index.html +0 -266
- package/build/site/roadmap/index.html +0 -77
- package/build/site/robots.txt +0 -37
- package/build/site/sitemap-0.xml +0 -1
- package/build/site/sitemap-index.xml +0 -1
- package/build/site/tutorials/getting-started/index.html +0 -386
- package/build/site/wizz-icon-orange.svg +0 -7
- package/build/site/workflow-map-diagram-fr.html +0 -375
- package/build/site/workflow-map-diagram.html +0 -375
- package/evals/bmm-skills/wizz-product-brief/evals.json +0 -237
- package/evals/bmm-skills/wizz-product-brief/files/branfield-memo.md +0 -46
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/addendum.md +0 -40
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/brief.md +0 -56
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/decision-log.md +0 -27
- package/evals/bmm-skills/wizz-product-brief/files/meridian-mobility-report.md +0 -116
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/addendum.md +0 -41
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/brief.md +0 -57
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/decision-log.md +0 -29
- package/evals/bmm-skills/wizz-product-brief/files/pantry-bridge-interviews.md +0 -90
- package/evals/bmm-skills/wizz-product-brief/files/q2-brainstorm.md +0 -101
- package/evals/bmm-skills/wizz-product-brief/triggers.json +0 -18
- package/evals/routing/dataset.json +0 -290
- package/evals/routing/run-routing-eval.mjs +0 -89
- package/src/skills-lib/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-ad.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tech.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-flip.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-snap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/modal-open.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/stack-collapse.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/achievement.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/error-tone.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/notification-pop.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/success-chime.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/brand-stamp.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/drop-thud.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal-v2.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/delete-key.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/enter.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/space-tap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/ai-process.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/sparkle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/transform.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/complete-done.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/generate-start.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/loading-tick.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/command-execute.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/cursor-blink.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/output-appear.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/dissolve.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/slide-in.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/swipe-horizontal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click-soft.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/focus.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/hover-subtle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/tap-finger.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/toggle-on.mp3 +0 -0
- package/src/squads/README.md +0 -39
- package/src/squads/advisory-board/README.md +0 -34
- package/src/squads/advisory-board/agents/board-chair.md +0 -161
- package/src/squads/advisory-board/agents/brene-brown.md +0 -296
- package/src/squads/advisory-board/agents/charlie-munger.md +0 -590
- package/src/squads/advisory-board/agents/derek-sivers.md +0 -268
- package/src/squads/advisory-board/agents/naval-ravikant.md +0 -251
- package/src/squads/advisory-board/agents/patrick-lencioni.md +0 -394
- package/src/squads/advisory-board/agents/peter-thiel.md +0 -269
- package/src/squads/advisory-board/agents/ray-dalio.md +0 -567
- package/src/squads/advisory-board/agents/reid-hoffman.md +0 -278
- package/src/squads/advisory-board/agents/simon-sinek.md +0 -291
- package/src/squads/advisory-board/agents/yvon-chouinard.md +0 -275
- package/src/squads/advisory-board/squad.yaml +0 -50
- package/src/squads/brand-squad/README.md +0 -60
- package/src/squads/brand-squad/agents/al-ries.md +0 -175
- package/src/squads/brand-squad/agents/alina-wheeler.md +0 -184
- package/src/squads/brand-squad/agents/archetype-consultant.md +0 -215
- package/src/squads/brand-squad/agents/brand-chief.md +0 -158
- package/src/squads/brand-squad/agents/byron-sharp.md +0 -169
- package/src/squads/brand-squad/agents/david-aaker.md +0 -166
- package/src/squads/brand-squad/agents/denise-yohn.md +0 -172
- package/src/squads/brand-squad/agents/domain-scout.md +0 -135
- package/src/squads/brand-squad/agents/donald-miller.md +0 -179
- package/src/squads/brand-squad/agents/emily-heyward.md +0 -147
- package/src/squads/brand-squad/agents/jean-noel-kapferer.md +0 -189
- package/src/squads/brand-squad/agents/kevin-keller.md +0 -199
- package/src/squads/brand-squad/agents/marty-neumeier.md +0 -170
- package/src/squads/brand-squad/agents/miller-sticky-brand.md +0 -180
- package/src/squads/brand-squad/agents/naming-strategist.md +0 -171
- package/src/squads/brand-squad/squad.yaml +0 -117
- package/src/squads/c-level-squad/README.md +0 -29
- package/src/squads/c-level-squad/agents/caio-architect.md +0 -235
- package/src/squads/c-level-squad/agents/cio-engineer.md +0 -209
- package/src/squads/c-level-squad/agents/cmo-architect.md +0 -208
- package/src/squads/c-level-squad/agents/coo-orchestrator.md +0 -193
- package/src/squads/c-level-squad/agents/cto-architect.md +0 -194
- package/src/squads/c-level-squad/agents/vision-chief.md +0 -201
- package/src/squads/c-level-squad/squad.yaml +0 -45
- package/src/squads/claude-code-mastery/README.md +0 -146
- package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +0 -554
- package/src/squads/claude-code-mastery/agents/config-engineer.md +0 -865
- package/src/squads/claude-code-mastery/agents/hooks-architect.md +0 -1013
- package/src/squads/claude-code-mastery/agents/mcp-integrator.md +0 -791
- package/src/squads/claude-code-mastery/agents/project-integrator.md +0 -1196
- package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +0 -931
- package/src/squads/claude-code-mastery/agents/skill-craftsman.md +0 -1250
- package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +0 -1008
- package/src/squads/copy-squad/README.md +0 -65
- package/src/squads/copy-squad/agents/andre-chaperon.md +0 -206
- package/src/squads/copy-squad/agents/ben-settle.md +0 -194
- package/src/squads/copy-squad/agents/claude-hopkins.md +0 -182
- package/src/squads/copy-squad/agents/clayton-makepeace.md +0 -225
- package/src/squads/copy-squad/agents/copy-chief.md +0 -166
- package/src/squads/copy-squad/agents/dan-kennedy.md +0 -202
- package/src/squads/copy-squad/agents/dan-koe.md +0 -223
- package/src/squads/copy-squad/agents/david-deutsch.md +0 -197
- package/src/squads/copy-squad/agents/david-ogilvy.md +0 -198
- package/src/squads/copy-squad/agents/eugene-schwartz.md +0 -238
- package/src/squads/copy-squad/agents/frank-kern.md +0 -195
- package/src/squads/copy-squad/agents/gary-bencivenga.md +0 -197
- package/src/squads/copy-squad/agents/gary-halbert.md +0 -219
- package/src/squads/copy-squad/agents/jim-rutz.md +0 -193
- package/src/squads/copy-squad/agents/joe-sugarman.md +0 -234
- package/src/squads/copy-squad/agents/john-carlton.md +0 -203
- package/src/squads/copy-squad/agents/jon-benson.md +0 -196
- package/src/squads/copy-squad/agents/parris-lampropoulos.md +0 -188
- package/src/squads/copy-squad/agents/robert-collier.md +0 -183
- package/src/squads/copy-squad/agents/russell-brunson.md +0 -229
- package/src/squads/copy-squad/agents/ry-schwartz.md +0 -185
- package/src/squads/copy-squad/agents/stefan-georgi.md +0 -188
- package/src/squads/copy-squad/agents/todd-brown.md +0 -171
- package/src/squads/copy-squad/squad.yaml +0 -87
- package/src/squads/cybersecurity/README.md +0 -38
- package/src/squads/cybersecurity/agents/busterer.md +0 -108
- package/src/squads/cybersecurity/agents/cartographer.md +0 -114
- package/src/squads/cybersecurity/agents/chris-sanders.md +0 -205
- package/src/squads/cybersecurity/agents/command-generator.md +0 -121
- package/src/squads/cybersecurity/agents/cyber-chief.md +0 -120
- package/src/squads/cybersecurity/agents/dirber.md +0 -111
- package/src/squads/cybersecurity/agents/fuzzer.md +0 -121
- package/src/squads/cybersecurity/agents/georgia-weidman.md +0 -178
- package/src/squads/cybersecurity/agents/jim-manico.md +0 -182
- package/src/squads/cybersecurity/agents/marcus-carey.md +0 -200
- package/src/squads/cybersecurity/agents/omar-santos.md +0 -206
- package/src/squads/cybersecurity/agents/peter-kim.md +0 -179
- package/src/squads/cybersecurity/agents/ripper.md +0 -121
- package/src/squads/cybersecurity/agents/rogue.md +0 -116
- package/src/squads/cybersecurity/agents/shannon-runner.md +0 -108
- package/src/squads/cybersecurity/squad.yaml +0 -56
- package/src/squads/data-squad/README.md +0 -30
- package/src/squads/data-squad/agents/avinash-kaushik.md +0 -268
- package/src/squads/data-squad/agents/data-chief.md +0 -167
- package/src/squads/data-squad/agents/david-spinks.md +0 -277
- package/src/squads/data-squad/agents/nick-mehta.md +0 -294
- package/src/squads/data-squad/agents/peter-fader.md +0 -246
- package/src/squads/data-squad/agents/sean-ellis.md +0 -303
- package/src/squads/data-squad/agents/wes-kao.md +0 -268
- package/src/squads/data-squad/squad.yaml +0 -46
- package/src/squads/design-squad/README.md +0 -31
- package/src/squads/design-squad/agents/brad-frost.md +0 -185
- package/src/squads/design-squad/agents/dan-mall.md +0 -178
- package/src/squads/design-squad/agents/dave-malouf.md +0 -198
- package/src/squads/design-squad/agents/design-chief.md +0 -109
- package/src/squads/design-squad/agents/design-system-architect.md +0 -109
- package/src/squads/design-squad/agents/ui-engineer.md +0 -102
- package/src/squads/design-squad/agents/ux-designer.md +0 -105
- package/src/squads/design-squad/agents/visual-generator.md +0 -108
- package/src/squads/design-squad/squad.yaml +0 -48
- package/src/squads/hormozi-squad/README.md +0 -39
- package/src/squads/hormozi-squad/agents/hormozi-ads.md +0 -159
- package/src/squads/hormozi-squad/agents/hormozi-advisor.md +0 -178
- package/src/squads/hormozi-squad/agents/hormozi-audit.md +0 -178
- package/src/squads/hormozi-squad/agents/hormozi-chief.md +0 -111
- package/src/squads/hormozi-squad/agents/hormozi-closer.md +0 -179
- package/src/squads/hormozi-squad/agents/hormozi-content.md +0 -166
- package/src/squads/hormozi-squad/agents/hormozi-copy.md +0 -152
- package/src/squads/hormozi-squad/agents/hormozi-hooks.md +0 -177
- package/src/squads/hormozi-squad/agents/hormozi-launch.md +0 -160
- package/src/squads/hormozi-squad/agents/hormozi-leads.md +0 -198
- package/src/squads/hormozi-squad/agents/hormozi-models.md +0 -191
- package/src/squads/hormozi-squad/agents/hormozi-offers.md +0 -197
- package/src/squads/hormozi-squad/agents/hormozi-pricing.md +0 -151
- package/src/squads/hormozi-squad/agents/hormozi-retention.md +0 -166
- package/src/squads/hormozi-squad/agents/hormozi-scale.md +0 -175
- package/src/squads/hormozi-squad/agents/hormozi-workshop.md +0 -160
- package/src/squads/hormozi-squad/squad.yaml +0 -60
- package/src/squads/movement/README.md +0 -29
- package/src/squads/movement/agents/analista-de-impacto.md +0 -350
- package/src/squads/movement/agents/estrategista-de-ciclo.md +0 -301
- package/src/squads/movement/agents/fenomenologo.md +0 -169
- package/src/squads/movement/agents/identitario.md +0 -265
- package/src/squads/movement/agents/manifestador.md +0 -279
- package/src/squads/movement/agents/movement-architect.md +0 -210
- package/src/squads/movement/agents/movement-chief.md +0 -135
- package/src/squads/movement/squad.yaml +0 -45
- package/src/squads/storytelling/README.md +0 -35
- package/src/squads/storytelling/agents/blake-snyder.md +0 -225
- package/src/squads/storytelling/agents/dan-harmon.md +0 -167
- package/src/squads/storytelling/agents/joseph-campbell.md +0 -184
- package/src/squads/storytelling/agents/keith-johnstone.md +0 -157
- package/src/squads/storytelling/agents/kindra-hall.md +0 -162
- package/src/squads/storytelling/agents/marshall-ganz.md +0 -167
- package/src/squads/storytelling/agents/matthew-dicks.md +0 -152
- package/src/squads/storytelling/agents/nancy-duarte.md +0 -154
- package/src/squads/storytelling/agents/oren-klaff.md +0 -166
- package/src/squads/storytelling/agents/park-howell.md +0 -152
- package/src/squads/storytelling/agents/shawn-coyne.md +0 -208
- package/src/squads/storytelling/agents/story-chief.md +0 -155
- package/src/squads/storytelling/squad.yaml +0 -52
- package/src/squads/traffic-masters/README.md +0 -39
- package/src/squads/traffic-masters/agents/ad-midas.md +0 -149
- package/src/squads/traffic-masters/agents/ads-analyst.md +0 -135
- package/src/squads/traffic-masters/agents/creative-analyst.md +0 -142
- package/src/squads/traffic-masters/agents/depesh-mandalia.md +0 -174
- package/src/squads/traffic-masters/agents/fiscal.md +0 -144
- package/src/squads/traffic-masters/agents/kasim-aslam.md +0 -158
- package/src/squads/traffic-masters/agents/media-buyer.md +0 -159
- package/src/squads/traffic-masters/agents/molly-pittman.md +0 -185
- package/src/squads/traffic-masters/agents/nicholas-kusmich.md +0 -157
- package/src/squads/traffic-masters/agents/pedro-sobral.md +0 -158
- package/src/squads/traffic-masters/agents/performance-analyst.md +0 -135
- package/src/squads/traffic-masters/agents/pixel-specialist.md +0 -144
- package/src/squads/traffic-masters/agents/ralph-burns.md +0 -163
- package/src/squads/traffic-masters/agents/scale-optimizer.md +0 -144
- package/src/squads/traffic-masters/agents/tom-breeze.md +0 -175
- package/src/squads/traffic-masters/agents/traffic-chief.md +0 -97
- package/src/squads/traffic-masters/squad.yaml +0 -59
- package/tools/bundle-web-bundles.js +0 -117
- package/tools/format-workflow-md.js +0 -263
- package/tools/hooks/README.md +0 -17
- package/tools/hooks/security-defensive-context.js +0 -70
- package/tools/hooks/session-rules.js +0 -38
- package/tools/hooks/wizz-router-enforce.js +0 -188
- package/tools/javascript-conventions.md +0 -5
- package/tools/migrate-custom-module-paths.js +0 -124
- package/tools/skill-validator.md +0 -368
- package/tools/sync-global.mjs +0 -84
- package/tools/validate-sidebar-order.js +0 -388
- package/tools/validate-skills.js +0 -708
- package/tools/validate-svg-changes.sh +0 -356
- /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` + `
|
|
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
|
|
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` + `
|
|
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,
|
|
23
|
-
| Novo feature, bug fix, TDD, testes, cobertura |
|
|
24
|
-
| Build quebrado, erros de TypeScript, lint, CI |
|
|
25
|
-
| Arquitetura, design de sistema, decisão técnica | `
|
|
26
|
-
| Fluxo crítico, E2E,
|
|
27
|
-
|
|
|
28
|
-
|
|
|
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,
|
|
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 |
|
|
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),
|
|
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
|
-
|
|
143
|
-
|
|
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
|
|