wizz-method 2.0.0 → 2.1.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.
- package/LICENSE +60 -30
- package/README.md +80 -31
- package/SECURITY.md +24 -0
- package/THIRD-PARTY-NOTICES.md +136 -0
- package/package.json +31 -17
- package/skills-registry.yaml +128 -7
- package/src/bmm-skills/1-analysis/research/wizz-domain-research/SKILL.md +3 -4
- package/src/bmm-skills/1-analysis/research/wizz-domain-research/domain-steps/step-06-research-synthesis.md +1 -1
- package/src/bmm-skills/1-analysis/research/wizz-market-research/SKILL.md +3 -4
- package/src/bmm-skills/1-analysis/research/wizz-market-research/steps/step-06-research-completion.md +1 -1
- package/src/bmm-skills/1-analysis/research/wizz-technical-research/SKILL.md +3 -4
- package/src/bmm-skills/1-analysis/research/wizz-technical-research/technical-steps/step-06-research-synthesis.md +1 -1
- package/src/bmm-skills/1-analysis/wizz-agent-analyst/SKILL.md +3 -4
- package/src/bmm-skills/1-analysis/wizz-agent-tech-writer/SKILL.md +3 -4
- package/src/bmm-skills/1-analysis/wizz-document-project/SKILL.md +3 -4
- package/src/bmm-skills/1-analysis/wizz-document-project/workflows/deep-dive-instructions.md +1 -1
- package/src/bmm-skills/1-analysis/wizz-document-project/workflows/full-scan-instructions.md +1 -1
- package/src/bmm-skills/1-analysis/wizz-prfaq/SKILL.md +3 -4
- package/src/bmm-skills/1-analysis/wizz-prfaq/references/verdict.md +1 -1
- package/src/bmm-skills/1-analysis/wizz-product-brief/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-agent-pm/SKILL.md +3 -4
- package/src/bmm-skills/2-plan-workflows/wizz-agent-ux-designer/SKILL.md +3 -4
- package/src/bmm-skills/2-plan-workflows/wizz-create-prd/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-edit-prd/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-prd/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-ux/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-validate-prd/SKILL.md +1 -1
- package/src/bmm-skills/3-solutioning/wizz-agent-architect/SKILL.md +3 -4
- package/src/bmm-skills/3-solutioning/wizz-architecture/SKILL.md +9 -9
- package/src/bmm-skills/3-solutioning/wizz-architecture/references/headless.md +1 -1
- package/src/bmm-skills/3-solutioning/wizz-check-implementation-readiness/SKILL.md +3 -4
- package/src/bmm-skills/3-solutioning/wizz-check-implementation-readiness/steps/step-06-final-assessment.md +1 -1
- package/src/bmm-skills/3-solutioning/wizz-create-architecture/SKILL.md +1 -1
- package/src/bmm-skills/3-solutioning/wizz-create-epics-and-stories/SKILL.md +3 -4
- package/src/bmm-skills/3-solutioning/wizz-create-epics-and-stories/steps/step-04-final-validation.md +1 -1
- package/src/bmm-skills/3-solutioning/wizz-generate-project-context/SKILL.md +3 -4
- package/src/bmm-skills/3-solutioning/wizz-generate-project-context/steps/step-03-complete.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-agent-dev/SKILL.md +3 -4
- package/src/bmm-skills/4-implementation/wizz-checkpoint-preview/SKILL.md +3 -4
- package/src/bmm-skills/4-implementation/wizz-checkpoint-preview/step-05-wrapup.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +3 -4
- package/src/bmm-skills/4-implementation/wizz-code-review/customize.toml +3 -8
- package/src/bmm-skills/4-implementation/wizz-code-review/review-prompts/blind-hunter.md +20 -0
- package/src/bmm-skills/4-implementation/wizz-code-review/steps/step-04-present.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-correct-course/SKILL.md +4 -5
- package/src/bmm-skills/4-implementation/wizz-create-story/SKILL.md +4 -5
- package/src/bmm-skills/4-implementation/wizz-dev-story/SKILL.md +4 -5
- package/src/bmm-skills/4-implementation/wizz-investigate/SKILL.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-qa-generate-e2e-tests/SKILL.md +4 -5
- package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +4 -5
- package/src/bmm-skills/4-implementation/wizz-quick-dev/customize.toml +10 -22
- package/src/bmm-skills/4-implementation/wizz-quick-dev/review-prompts/blind-hunter.md +20 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/step-05-present.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-quick-dev/step-oneshot.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-retrospective/SKILL.md +1 -2
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/SKILL.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-sprint-status/SKILL.md +5 -6
- package/src/core-skills/_shared/handoff-protocol.md +9 -0
- package/src/core-skills/wizz-advanced-elicitation/SKILL.md +2 -2
- package/src/core-skills/wizz-brainstorming/SKILL.md +6 -6
- package/src/core-skills/wizz-brainstorming/references/converge.md +1 -1
- package/src/core-skills/wizz-brainstorming/references/finalize.md +1 -1
- package/src/core-skills/wizz-brainstorming/references/headless.md +3 -3
- package/src/core-skills/wizz-brainstorming/references/mode-autonomous.md +1 -1
- package/src/core-skills/wizz-customize/SKILL.md +13 -10
- package/src/core-skills/wizz-forge-idea/SKILL.md +6 -6
- package/src/core-skills/wizz-forge-idea/scripts/__pycache__/resolve_personas.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-forge-idea/scripts/resolve_personas.py +17 -1
- package/src/core-skills/wizz-party-mode/SKILL.md +3 -3
- package/src/core-skills/wizz-party-mode/references/create-party.md +1 -1
- package/src/core-skills/wizz-party-mode/references/party-memory.md +2 -2
- package/src/core-skills/wizz-party-mode/scripts/__pycache__/resolve_party.cpython-314.pyc +0 -0
- package/src/core-skills/wizz-party-mode/scripts/resolve_party.py +17 -1
- package/src/core-skills/wizz-review-adversarial-general/SKILL.md +1 -1
- package/src/core-skills/wizz-spec/SKILL.md +5 -5
- package/src/modules/lowticket/README.md +6 -6
- package/src/modules/lowticket/module.yaml +4 -1
- package/src/modules/lowticket/skills/{lowticket-funil → wizz-lowticket-funil}/SKILL.md +4 -4
- package/src/modules/lowticket/skills/{lowticket-funil → wizz-lowticket-funil}/references/copy-das-paginas.md +1 -1
- package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/SKILL.md +1 -1
- package/src/modules/lowticket/skills/{lowticket-minerador → wizz-lowticket-minerador}/SKILL.md +3 -3
- package/src/modules/lowticket/skills/{lowticket-minerador → wizz-lowticket-minerador}/references/rubrica.md +1 -1
- package/src/modules/lowticket/skills/{lowticket-pagina → wizz-lowticket-pagina}/SKILL.md +4 -4
- package/src/modules/lowticket/skills/{lowticket-trafego → wizz-lowticket-trafego}/SKILL.md +3 -3
- package/src/modules/lowticket/skills/{lowticket-trafego → wizz-lowticket-trafego}/references/reguas.md +1 -1
- package/src/modules/wizz/_shared/communication-rules.md +1 -1
- package/src/modules/wizz/_shared/despacho-barato.md +9 -0
- package/src/modules/wizz/_shared/token-economy.md +7 -0
- package/src/modules/wizz/agents/wizz-ads/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-ads/customize.toml +1 -2
- package/src/modules/wizz/agents/wizz-copy/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-copy/customize.toml +1 -2
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-designer/customize.toml +1 -2
- package/src/modules/wizz/agents/wizz-growth/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-growth/customize.toml +1 -2
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +5 -5
- package/src/modules/wizz/agents/wizz-maestro/customize.toml +4 -8
- package/src/modules/wizz/agents/wizz-memoria/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-memoria/customize.toml +1 -2
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-qa/customize.toml +1 -2
- package/src/modules/wizz/agents/wizz-seo/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-seo/customize.toml +1 -2
- package/src/modules/wizz/agents/wizz-social/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-social/customize.toml +1 -2
- package/src/modules/wizz/module.yaml +3 -0
- package/src/modules/wizz/overrides/wizz-agent-analyst.toml +1 -2
- package/src/modules/wizz/overrides/wizz-agent-architect.toml +1 -2
- package/src/modules/wizz/overrides/wizz-agent-dev.toml +1 -2
- package/src/modules/wizz/overrides/wizz-agent-pm.toml +1 -2
- package/src/modules/wizz/overrides/wizz-agent-tech-writer.toml +1 -2
- package/src/modules/wizz/overrides/wizz-agent-ux-designer.toml +1 -2
- package/src/modules/wizz/subagents/codex/wizz-exec-haiku.toml +2 -0
- package/src/modules/wizz/subagents/codex/wizz-exec-opus.toml +2 -0
- package/src/modules/wizz/subagents/codex/wizz-exec-review.toml +2 -0
- package/src/modules/wizz/subagents/codex/wizz-exec-sonnet.toml +2 -0
- package/src/modules/wizz/subagents/gemini/wizz-exec-haiku.md +4 -1
- package/src/modules/wizz/subagents/gemini/wizz-exec-opus.md +4 -1
- package/src/modules/wizz/subagents/gemini/wizz-exec-review.md +4 -1
- package/src/modules/wizz/subagents/gemini/wizz-exec-sonnet.md +4 -1
- package/src/modules/wizz/subagents/opencode/wizz-exec-haiku.md +4 -1
- package/src/modules/wizz/subagents/opencode/wizz-exec-opus.md +4 -1
- package/src/modules/wizz/subagents/opencode/wizz-exec-review.md +4 -1
- package/src/modules/wizz/subagents/opencode/wizz-exec-sonnet.md +4 -1
- package/src/modules/wizz/subagents/spec.yaml +148 -0
- package/src/modules/wizz/subagents/wizz-exec-haiku.md +4 -1
- package/src/modules/wizz/subagents/wizz-exec-opus.md +4 -1
- package/src/modules/wizz/subagents/wizz-exec-review.md +4 -1
- package/src/modules/wizz/subagents/wizz-exec-sonnet.md +4 -1
- package/src/scripts/__pycache__/resolve_customization.cpython-314.pyc +0 -0
- package/src/scripts/memlog.js +368 -0
- package/src/scripts/resolve_customization.py +124 -15
- package/src/skills-lib/_shared/complexity-signal.md +14 -0
- package/src/skills-lib/wizz-canvas-design/canvas-fonts/InstrumentSerif-OFL.txt +93 -0
- package/src/skills-lib/wizz-huashu-design/references/sfx-library.md +1 -1
- package/src/skills-lib/wizz-huashu-design/scripts/add-music.sh +1 -1
- package/src/skills-lib/wizz-huashu-design/scripts/mix-voiceover.sh +1 -1
- package/src/skills-lib/wizz-impeccable/LICENSE.txt +202 -0
- package/src/skills-lib/wizz-offer-forge/SKILL.md +1 -1
- package/src/skills-lib/wizz-react-components/LICENSE.txt +202 -0
- package/src/skills-lib/wizz-router/SKILL.md +2 -2
- package/src/skills-lib/wizz-supabase-postgres-best-practices/LICENSE +21 -0
- package/src/skills-lib/wizz-taste-skill/SKILL.md +1 -1
- package/src/skills-lib/wizz-tracking-audit/SKILL.md +1 -1
- package/tools/fetch-assets.mjs +62 -37
- package/tools/hooks/README.md +22 -0
- package/tools/hooks/rtk-rewrite.sh +280 -0
- package/tools/hooks/security-defensive-context.js +70 -0
- package/tools/hooks/session-rules.js +368 -0
- package/tools/hooks/wizz-decision-trace.js +389 -0
- package/tools/hooks/wizz-router-enforce.js +258 -0
- package/tools/installer/banner.js +1 -1
- package/tools/installer/commands/doctor.js +124 -0
- package/tools/installer/commands/install.js +1 -1
- package/tools/installer/commands/resolve.js +95 -0
- package/tools/installer/core/doctor.js +648 -0
- package/tools/installer/core/hash-cache.js +156 -0
- package/tools/installer/core/help-catalog.js +4 -1
- package/tools/installer/core/hooks-settings.js +178 -0
- package/tools/installer/core/installer.js +297 -15
- package/tools/installer/core/legacy-warnings.js +0 -4
- package/tools/installer/core/manifest-generator.js +121 -43
- package/tools/installer/core/manifest.js +36 -32
- package/tools/installer/core/module-config-writer.js +4 -1
- package/tools/installer/core/python-check.js +60 -63
- package/tools/installer/core/quick-update.js +76 -43
- package/tools/installer/core/resolved-config.js +168 -0
- package/tools/installer/core/resolved-customizations.js +736 -0
- package/tools/installer/core/resolved-includes.js +262 -0
- package/tools/installer/core/resolved-schema.js +148 -0
- package/tools/installer/core/user-file-preservation.js +40 -8
- package/tools/installer/core/wizz-dir.js +117 -0
- package/tools/installer/core/yaml-cache.js +105 -0
- package/tools/installer/fs-native.js +97 -6
- package/tools/installer/ide/_config-driven.js +12 -75
- package/tools/installer/ide/platform-codes.js +111 -16
- package/tools/installer/ide/platform-codes.yaml +45 -100
- package/tools/installer/ide/shared/path-utils.js +6 -208
- package/tools/installer/install-messages.yaml +4 -14
- package/tools/installer/modules/channel-plan.js +15 -2
- package/tools/installer/modules/config-collector.js +762 -0
- package/tools/installer/modules/config-values.js +352 -0
- package/tools/installer/modules/custom-module-manager.js +161 -28
- package/tools/installer/modules/env-vars.js +119 -0
- package/tools/installer/modules/external-manager.js +133 -60
- package/tools/installer/modules/git-cache-utils.js +125 -0
- package/tools/installer/modules/module-catalog.js +565 -0
- package/tools/installer/modules/module-installer.js +618 -0
- package/tools/installer/modules/module-interface.js +86 -0
- package/tools/installer/modules/official-modules.js +98 -2172
- package/tools/installer/modules/pin-spec.js +125 -0
- package/tools/installer/modules/plugin-resolver.js +4 -0
- package/tools/installer/modules/skills-lib.js +3 -6
- package/tools/installer/prompts.js +0 -3
- package/tools/installer/ui.js +89 -54
- package/tools/installer/wizz-cli.js +1 -1
- package/tools/lib/frontmatter.js +139 -0
- package/tools/lib/sync-targets.mjs +49 -0
- package/tools/lib/walk.js +93 -0
- package/wizz-modules.yaml +9 -0
- package/src/scripts/__pycache__/memlog.cpython-313.pyc +0 -0
- package/src/scripts/memlog.py +0 -233
- package/src/scripts/tests/__pycache__/test_memlog.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-313-pytest-9.1.1.pyc +0 -0
- package/src/scripts/tests/test_memlog.py +0 -306
- package/src/skills-lib/wizz-huashu-design/assets/showcases/INDEX.md +0 -115
- package/src/skills-lib/wizz-huashu-design/assets/showcases/cover/cover-build.html +0 -235
- package/src/skills-lib/wizz-huashu-design/assets/showcases/cover/cover-build.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/cover/cover-pentagram.html +0 -229
- package/src/skills-lib/wizz-huashu-design/assets/showcases/cover/cover-pentagram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/cover/cover-takram.html +0 -288
- package/src/skills-lib/wizz-huashu-design/assets/showcases/cover/cover-takram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/infographic/infographic-build.html +0 -503
- package/src/skills-lib/wizz-huashu-design/assets/showcases/infographic/infographic-build.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/infographic/infographic-pentagram.html +0 -600
- package/src/skills-lib/wizz-huashu-design/assets/showcases/infographic/infographic-pentagram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/infographic/infographic-takram.html +0 -670
- package/src/skills-lib/wizz-huashu-design/assets/showcases/infographic/infographic-takram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/ppt/ppt-build.html +0 -382
- package/src/skills-lib/wizz-huashu-design/assets/showcases/ppt/ppt-build.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/ppt/ppt-pentagram.html +0 -536
- package/src/skills-lib/wizz-huashu-design/assets/showcases/ppt/ppt-pentagram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/ppt/ppt-takram.html +0 -497
- package/src/skills-lib/wizz-huashu-design/assets/showcases/ppt/ppt-takram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-nav/ainav-build.html +0 -385
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-nav/ainav-build.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.html +0 -422
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-nav/ainav-takram.html +0 -499
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-nav/ainav-takram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-writing/aiwriting-build.html +0 -562
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-writing/aiwriting-build.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.html +0 -548
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.html +0 -696
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-devdocs/devdocs-build.html +0 -372
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-devdocs/devdocs-build.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.html +0 -460
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-devdocs/devdocs-takram.html +0 -494
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-devdocs/devdocs-takram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-homepage/homepage-build.html +0 -367
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-homepage/homepage-build.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-homepage/homepage-pentagram.html +0 -368
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-homepage/homepage-pentagram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-homepage/homepage-takram.html +0 -459
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-homepage/homepage-takram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-saas/saas-build.html +0 -493
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-saas/saas-build.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-saas/saas-pentagram.html +0 -556
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-saas/saas-pentagram.png +0 -0
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-saas/saas-takram.html +0 -604
- package/src/skills-lib/wizz-huashu-design/assets/showcases/website-saas/saas-takram.png +0 -0
- package/tools/installer/file-ops.js +0 -204
- package/tools/installer/ide/shared/skill-manifest.js +0 -57
- package/tools/installer/yaml-format.js +0 -245
- package/web-bundles/README.md +0 -46
- package/web-bundles/brainstorming-coach/INSTRUCTIONS.md +0 -86
- package/web-bundles/brainstorming-coach/SKILL.md +0 -83
- package/web-bundles/brainstorming-coach/brain-methods.csv +0 -62
- package/web-bundles/bundles.json +0 -139
- package/web-bundles/market-and-industry-research/INSTRUCTIONS.md +0 -88
- package/web-bundles/market-and-industry-research/SKILL.md +0 -59
- package/web-bundles/prd-coach/INSTRUCTIONS.md +0 -86
- package/web-bundles/prd-coach/SKILL.md +0 -101
- package/web-bundles/prd-coach/prd-template.md +0 -165
- package/web-bundles/prd-coach/prd-validation-checklist.md +0 -135
- package/web-bundles/prfaq-coach/INSTRUCTIONS.md +0 -86
- package/web-bundles/prfaq-coach/SKILL.md +0 -139
- package/web-bundles/product-brief-coach/INSTRUCTIONS.md +0 -86
- package/web-bundles/product-brief-coach/SKILL.md +0 -113
- package/web-bundles/ux-coach/INSTRUCTIONS.md +0 -92
- package/web-bundles/ux-coach/SKILL.md +0 -187
- package/web-bundles/ux-coach/ux-validation.md +0 -100
- /package/src/modules/lowticket/skills/{lowticket-funil → wizz-lowticket-funil}/references/mapa-do-funil.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/CATALOGO.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/01-principios.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/02-diagnostico-funil.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/03-campanha-bidcap.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/04-criativos.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/04a-criativos-ia.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/04b-criativos-formatos.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/05-oferta.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/06-pagina-vendas.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/06a-instagram.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/06b-player-vsl.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/07-funil-upsell.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/07a-copy-humanizacao.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/08-pesquisa-publico.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/09-especialista-coproducao.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/10-levantar-caixa.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/11-checklist-roi.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/12-mineracao-ofertas.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/12a-mineracao-veredito.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/12b-fabrica-de-ofertas.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/12c-anatomia-low-ticket.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/13-benchmarks-vsl.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/14-vocabulario.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/15-como-estender.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/17-rastreamento.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/18-copy-desejo-oferta.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/INDEX.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/guardrails.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/knowledge/pontos-em-aberto.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-metodologia → wizz-lowticket-metodologia}/references/swipe-file.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-pagina → wizz-lowticket-pagina}/references/metas-e-medicao.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-pagina → wizz-lowticket-pagina}/references/padroes-de-codigo.md +0 -0
- /package/src/modules/lowticket/skills/{lowticket-trafego → wizz-lowticket-trafego}/references/formato-do-diagnostico.md +0 -0
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers puros de valor da coleta de configuração — item 20
|
|
3
|
+
* (auditoria 2026-09-11).
|
|
4
|
+
*
|
|
5
|
+
* Extraídos de config-collector.js, que passou de 1043 linhas (regra: 800).
|
|
6
|
+
* Tudo aqui é livre de prompt, de spinner e de I/O: substituição de
|
|
7
|
+
* placeholder, resolução de chave entre módulos, normalização de valor
|
|
8
|
+
* persistido e montagem das `choices` de uma pergunta.
|
|
9
|
+
*
|
|
10
|
+
* Continuam sendo MÉTODOS: o objeto é espalhado de volta em
|
|
11
|
+
* `ConfigCollectorMethods` (config-collector.js) e daí para o prototype de
|
|
12
|
+
* OfficialModules, então nenhum caller muda e o estado (`allAnswers`,
|
|
13
|
+
* `collectedConfig`, `_existingConfig`, `currentProjectDir`) continua na mesma
|
|
14
|
+
* instância.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const path = require('node:path');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Build the `choices` array and the prompt widget type for a config item.
|
|
21
|
+
* Pure: depends only on the item definition, the stored value and the default
|
|
22
|
+
* already resolved by the caller.
|
|
23
|
+
* @param {Object} item - Config item definition from module.yaml
|
|
24
|
+
* @param {*} existingValue - Previously stored value (already normalized)
|
|
25
|
+
* @param {*} defaultValue - Default value resolved so far
|
|
26
|
+
* @returns {{questionType: string, choices: Array|null}}
|
|
27
|
+
*/
|
|
28
|
+
function buildQuestionChoices(item, existingValue, defaultValue) {
|
|
29
|
+
if (item['single-select']) {
|
|
30
|
+
return {
|
|
31
|
+
questionType: 'list',
|
|
32
|
+
choices: item['single-select'].map((choice) => {
|
|
33
|
+
// If choice is an object with label and value
|
|
34
|
+
if (typeof choice === 'object' && choice.label && choice.value !== undefined) {
|
|
35
|
+
return {
|
|
36
|
+
name: choice.label,
|
|
37
|
+
value: choice.value,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Otherwise it's a simple string choice
|
|
41
|
+
return {
|
|
42
|
+
name: choice,
|
|
43
|
+
value: choice,
|
|
44
|
+
};
|
|
45
|
+
}),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (item['multi-select']) {
|
|
50
|
+
return {
|
|
51
|
+
questionType: 'checkbox',
|
|
52
|
+
choices: item['multi-select'].map((choice) => {
|
|
53
|
+
// If choice is an object with label and value
|
|
54
|
+
if (typeof choice === 'object' && choice.label && choice.value !== undefined) {
|
|
55
|
+
return {
|
|
56
|
+
name: choice.label,
|
|
57
|
+
value: choice.value,
|
|
58
|
+
checked: existingValue
|
|
59
|
+
? existingValue.includes(choice.value)
|
|
60
|
+
: item.default && Array.isArray(item.default)
|
|
61
|
+
? item.default.includes(choice.value)
|
|
62
|
+
: false,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// Otherwise it's a simple string choice
|
|
66
|
+
return {
|
|
67
|
+
name: choice,
|
|
68
|
+
value: choice,
|
|
69
|
+
checked: existingValue
|
|
70
|
+
? existingValue.includes(choice)
|
|
71
|
+
: item.default && Array.isArray(item.default)
|
|
72
|
+
? item.default.includes(choice)
|
|
73
|
+
: false,
|
|
74
|
+
};
|
|
75
|
+
}),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (typeof defaultValue === 'boolean') {
|
|
80
|
+
return { questionType: 'confirm', choices: null };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return { questionType: 'input', choices: null };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const ConfigValueMethods = {
|
|
87
|
+
/**
|
|
88
|
+
* Process a result template with value substitution
|
|
89
|
+
* @param {*} resultTemplate - The result template
|
|
90
|
+
* @param {*} value - The value to substitute
|
|
91
|
+
* @returns {*} Processed result
|
|
92
|
+
*/
|
|
93
|
+
processResultTemplate(resultTemplate, value) {
|
|
94
|
+
let result = resultTemplate;
|
|
95
|
+
|
|
96
|
+
if (typeof result === 'string' && value !== undefined) {
|
|
97
|
+
if (typeof value === 'string') {
|
|
98
|
+
result = result.replace('{value}', value);
|
|
99
|
+
} else if (typeof value === 'boolean' || typeof value === 'number') {
|
|
100
|
+
if (result === '{value}') {
|
|
101
|
+
result = value;
|
|
102
|
+
} else {
|
|
103
|
+
result = result.replace('{value}', value);
|
|
104
|
+
}
|
|
105
|
+
} else {
|
|
106
|
+
result = value;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (typeof result === 'string') {
|
|
110
|
+
result = result.replaceAll(/{([^}]+)}/g, (match, configKey) => {
|
|
111
|
+
if (configKey === 'project-root') {
|
|
112
|
+
return '{project-root}';
|
|
113
|
+
}
|
|
114
|
+
if (configKey === 'value') {
|
|
115
|
+
return match;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
let configValue = this.allAnswers[configKey];
|
|
119
|
+
if (!configValue) {
|
|
120
|
+
for (const [answerKey, answerValue] of Object.entries(this.allAnswers)) {
|
|
121
|
+
if (answerKey.endsWith(`_${configKey}`)) {
|
|
122
|
+
configValue = answerValue;
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (!configValue) {
|
|
129
|
+
for (const mod of Object.keys(this.collectedConfig)) {
|
|
130
|
+
if (mod !== '_meta' && this.collectedConfig[mod] && this.collectedConfig[mod][configKey]) {
|
|
131
|
+
configValue = this.collectedConfig[mod][configKey];
|
|
132
|
+
if (typeof configValue === 'string' && configValue.includes('{project-root}/')) {
|
|
133
|
+
configValue = configValue.replace('{project-root}/', '');
|
|
134
|
+
}
|
|
135
|
+
break;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return configValue || match;
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return result;
|
|
146
|
+
},
|
|
147
|
+
/**
|
|
148
|
+
* Get the default username from the system
|
|
149
|
+
* @returns {string} Capitalized username
|
|
150
|
+
*/
|
|
151
|
+
getDefaultUsername() {
|
|
152
|
+
let result = 'Wizz';
|
|
153
|
+
try {
|
|
154
|
+
const os = require('node:os');
|
|
155
|
+
const userInfo = os.userInfo();
|
|
156
|
+
if (userInfo && userInfo.username) {
|
|
157
|
+
const username = userInfo.username;
|
|
158
|
+
result = username.charAt(0).toUpperCase() + username.slice(1);
|
|
159
|
+
}
|
|
160
|
+
} catch {
|
|
161
|
+
// Do nothing, just return 'Wizz'
|
|
162
|
+
}
|
|
163
|
+
return result;
|
|
164
|
+
},
|
|
165
|
+
/**
|
|
166
|
+
* Replace placeholders in a string with collected config values
|
|
167
|
+
* @param {string} str - String with placeholders
|
|
168
|
+
* @param {string} currentModule - Current module name (to look up defaults in same module)
|
|
169
|
+
* @param {Object} moduleConfig - Current module's config schema (to look up defaults)
|
|
170
|
+
* @returns {string} String with placeholders replaced
|
|
171
|
+
*/
|
|
172
|
+
replacePlaceholders(str, currentModule = null, moduleConfig = null) {
|
|
173
|
+
if (typeof str !== 'string') {
|
|
174
|
+
return str;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return str.replaceAll(/{([^}]+)}/g, (match, configKey) => {
|
|
178
|
+
// Preserve special placeholders
|
|
179
|
+
if (configKey === 'project-root' || configKey === 'value' || configKey === 'directory_name') {
|
|
180
|
+
return match;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const configValue = this.resolveConfigValue(configKey, currentModule, moduleConfig);
|
|
184
|
+
|
|
185
|
+
return configValue || match;
|
|
186
|
+
});
|
|
187
|
+
},
|
|
188
|
+
/**
|
|
189
|
+
* Clean a stored path-like value for prompt display/input reuse.
|
|
190
|
+
* @param {*} value - Stored value
|
|
191
|
+
* @returns {*} Cleaned value
|
|
192
|
+
*/
|
|
193
|
+
cleanPromptValue(value) {
|
|
194
|
+
if (typeof value === 'string' && value.startsWith('{project-root}/')) {
|
|
195
|
+
return value.replace('{project-root}/', '');
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return value;
|
|
199
|
+
},
|
|
200
|
+
/**
|
|
201
|
+
* Resolve a config key from answers, collected config, existing config, or schema defaults.
|
|
202
|
+
* @param {string} configKey - Config key to resolve
|
|
203
|
+
* @param {string} currentModule - Current module name
|
|
204
|
+
* @param {Object} moduleConfig - Current module config schema
|
|
205
|
+
* @returns {*} Resolved value
|
|
206
|
+
*/
|
|
207
|
+
resolveConfigValue(configKey, currentModule = null, moduleConfig = null) {
|
|
208
|
+
// Look for the config value in allAnswers (already answered questions)
|
|
209
|
+
let configValue = this.allAnswers?.[configKey] || this.allAnswers?.[`core_${configKey}`];
|
|
210
|
+
|
|
211
|
+
if (!configValue && this.allAnswers) {
|
|
212
|
+
for (const [answerKey, answerValue] of Object.entries(this.allAnswers)) {
|
|
213
|
+
if (answerKey.endsWith(`_${configKey}`)) {
|
|
214
|
+
configValue = answerValue;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Prefer the current module's persisted value when re-prompting an existing install
|
|
221
|
+
if (!configValue && currentModule && this._existingConfig?.[currentModule]?.[configKey] !== undefined) {
|
|
222
|
+
configValue = this._existingConfig[currentModule][configKey];
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Check in already collected config
|
|
226
|
+
if (!configValue) {
|
|
227
|
+
for (const mod of Object.keys(this.collectedConfig)) {
|
|
228
|
+
if (mod !== '_meta' && this.collectedConfig[mod] && this.collectedConfig[mod][configKey]) {
|
|
229
|
+
configValue = this.collectedConfig[mod][configKey];
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Fall back to other existing module config values
|
|
236
|
+
if (!configValue && this._existingConfig) {
|
|
237
|
+
for (const mod of Object.keys(this._existingConfig)) {
|
|
238
|
+
if (mod !== '_meta' && this._existingConfig[mod] && this._existingConfig[mod][configKey]) {
|
|
239
|
+
configValue = this._existingConfig[mod][configKey];
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// If still not found and we're in the same module, use the default from the config schema
|
|
246
|
+
if (!configValue && currentModule && moduleConfig && moduleConfig[configKey]) {
|
|
247
|
+
const referencedItem = moduleConfig[configKey];
|
|
248
|
+
if (referencedItem && referencedItem.default !== undefined) {
|
|
249
|
+
configValue = referencedItem.default;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return this.cleanPromptValue(configValue);
|
|
254
|
+
},
|
|
255
|
+
/**
|
|
256
|
+
* Convert an existing stored value back into the prompt-facing value for templated fields.
|
|
257
|
+
* For example, "{test_artifacts}/{value}" + "_wizz-output/test-artifacts/test-design"
|
|
258
|
+
* becomes "test-design" so the template is not applied twice on modify.
|
|
259
|
+
* @param {*} existingValue - Stored config value
|
|
260
|
+
* @param {string} moduleName - Module name
|
|
261
|
+
* @param {Object} item - Config item definition
|
|
262
|
+
* @param {Object} moduleConfig - Current module config schema
|
|
263
|
+
* @returns {*} Prompt-facing default value
|
|
264
|
+
*/
|
|
265
|
+
normalizeExistingValueForPrompt(existingValue, moduleName, item, moduleConfig = null) {
|
|
266
|
+
const cleanedValue = this.cleanPromptValue(existingValue);
|
|
267
|
+
|
|
268
|
+
if (typeof cleanedValue !== 'string' || typeof item?.result !== 'string' || !item.result.includes('{value}')) {
|
|
269
|
+
return cleanedValue;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const [prefixTemplate = '', suffixTemplate = ''] = item.result.split('{value}');
|
|
273
|
+
const prefix = this.cleanPromptValue(this.replacePlaceholders(prefixTemplate, moduleName, moduleConfig));
|
|
274
|
+
const suffix = this.cleanPromptValue(this.replacePlaceholders(suffixTemplate, moduleName, moduleConfig));
|
|
275
|
+
|
|
276
|
+
if ((prefix && !cleanedValue.startsWith(prefix)) || (suffix && !cleanedValue.endsWith(suffix))) {
|
|
277
|
+
return cleanedValue;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const startIndex = prefix.length;
|
|
281
|
+
const endIndex = suffix ? cleanedValue.length - suffix.length : cleanedValue.length;
|
|
282
|
+
if (endIndex < startIndex) {
|
|
283
|
+
return cleanedValue;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
let promptValue = cleanedValue.slice(startIndex, endIndex);
|
|
287
|
+
if (promptValue.startsWith('/')) {
|
|
288
|
+
promptValue = promptValue.slice(1);
|
|
289
|
+
}
|
|
290
|
+
if (promptValue.endsWith('/')) {
|
|
291
|
+
promptValue = promptValue.slice(0, -1);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return promptValue || cleanedValue;
|
|
295
|
+
},
|
|
296
|
+
/**
|
|
297
|
+
* Resolve a schema default into the value shown in the prompt.
|
|
298
|
+
*
|
|
299
|
+
* Handles, in order: `{directory_name}` (from the project dir being
|
|
300
|
+
* installed into), detection of same-module references (which must stay
|
|
301
|
+
* unresolved so buildQuestion can turn them into a function default
|
|
302
|
+
* evaluated against the answers of the current batch), placeholder
|
|
303
|
+
* substitution and the `{project-root}/` strip.
|
|
304
|
+
* @param {*} defaultValue - Raw `default` from the module.yaml item
|
|
305
|
+
* @param {string} moduleName - Module name
|
|
306
|
+
* @param {Object} moduleConfig - Full module config schema
|
|
307
|
+
* @returns {{defaultValue: *, dynamicDefault: boolean}}
|
|
308
|
+
*/
|
|
309
|
+
resolveQuestionDefault(defaultValue, moduleName, moduleConfig = null) {
|
|
310
|
+
// Check if default contains references to other fields in the same module
|
|
311
|
+
const hasSameModuleReference = typeof defaultValue === 'string' && defaultValue.match(/{([^}]+)}/);
|
|
312
|
+
let dynamicDefault = false;
|
|
313
|
+
|
|
314
|
+
// Replace placeholders in default value with collected config values
|
|
315
|
+
if (typeof defaultValue === 'string') {
|
|
316
|
+
if (defaultValue.includes('{directory_name}') && this.currentProjectDir) {
|
|
317
|
+
const dirName = path.basename(this.currentProjectDir);
|
|
318
|
+
defaultValue = defaultValue.replaceAll('{directory_name}', dirName);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// Check if this references another field in the same module (for dynamic defaults)
|
|
322
|
+
if (hasSameModuleReference && moduleConfig) {
|
|
323
|
+
const matches = defaultValue.match(/{([^}]+)}/g);
|
|
324
|
+
if (matches) {
|
|
325
|
+
for (const match of matches) {
|
|
326
|
+
const fieldName = match.slice(1, -1); // Remove { }
|
|
327
|
+
// Check if this field exists in the same module config
|
|
328
|
+
if (moduleConfig[fieldName]) {
|
|
329
|
+
dynamicDefault = true;
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// If not dynamic, replace placeholders now
|
|
337
|
+
if (!dynamicDefault) {
|
|
338
|
+
defaultValue = this.replacePlaceholders(defaultValue, moduleName, moduleConfig);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Strip {project-root}/ from defaults since it will be added back by result template
|
|
342
|
+
// This makes the display cleaner and user input simpler
|
|
343
|
+
if (defaultValue.includes('{project-root}/')) {
|
|
344
|
+
defaultValue = defaultValue.replace('{project-root}/', '');
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
return { defaultValue, dynamicDefault };
|
|
349
|
+
},
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
module.exports = { ConfigValueMethods, buildQuestionChoices };
|