wizz-method 1.0.2 → 1.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/.claude-plugin/marketplace.json +9 -9
- package/README.md +4 -4
- package/build/artifacts/llms-full.txt +218 -218
- package/build/artifacts/llms.txt +4 -4
- package/build/site/explanation/advanced-elicitation/index.html +2 -2
- package/build/site/explanation/adversarial-review/index.html +2 -2
- package/build/site/explanation/analysis-phase/index.html +2 -2
- package/build/site/explanation/brainstorming/index.html +2 -2
- package/build/site/explanation/checkpoint-preview/index.html +2 -2
- package/build/site/explanation/established-projects-faq/index.html +2 -2
- package/build/site/explanation/forensic-investigation/index.html +2 -2
- package/build/site/explanation/named-agents/index.html +6 -6
- package/build/site/explanation/party-mode/index.html +3 -3
- package/build/site/explanation/preventing-agent-conflicts/index.html +2 -2
- package/build/site/explanation/project-context/index.html +2 -2
- package/build/site/explanation/quick-dev/index.html +2 -2
- package/build/site/explanation/web-bundles/index.html +2 -2
- package/build/site/explanation/why-solutioning-matters/index.html +2 -2
- package/build/site/how-to/{customize-bmad → customize-wizz}/index.html +6 -6
- package/build/site/how-to/established-projects/index.html +2 -2
- package/build/site/how-to/{expand-bmad-for-your-org → expand-wizz-for-your-org}/index.html +7 -7
- package/build/site/how-to/{get-answers-about-bmad → get-answers-about-wizz}/index.html +3 -3
- package/build/site/how-to/install-custom-modules/index.html +3 -3
- package/build/site/how-to/{install-bmad → install-wizz}/index.html +6 -6
- package/build/site/how-to/non-interactive-installation/index.html +3 -3
- package/build/site/how-to/project-context/index.html +2 -2
- package/build/site/how-to/quick-fixes/index.html +2 -2
- package/build/site/how-to/shard-large-documents/index.html +2 -2
- package/build/site/how-to/upgrade-to-v6/index.html +8 -8
- package/build/site/how-to/use-web-bundles/index.html +2 -2
- package/build/site/index.html +3 -3
- package/build/site/llms-full.txt +218 -218
- package/build/site/llms.txt +4 -4
- package/build/site/pagefind/fragment/en_296ddb9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_583316f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_67825a4.pf_fragment +0 -0
- package/build/site/pagefind/fragment/{en_41cab15.pf_fragment → en_887ce56.pf_fragment} +0 -0
- package/build/site/pagefind/fragment/en_92d7cc7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/{en_56b1635.pf_fragment → en_9b57d7d.pf_fragment} +0 -0
- package/build/site/pagefind/fragment/en_ba9fb37.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_cdd885c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_d890205.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 +1 -1
- package/build/site/pagefind/pagefind.en_4e69d7f053.pf_meta +0 -0
- package/build/site/reference/agents/index.html +2 -2
- package/build/site/reference/commands/index.html +3 -3
- package/build/site/reference/core-tools/index.html +3 -3
- package/build/site/reference/modules/index.html +4 -4
- package/build/site/reference/testing/index.html +2 -2
- package/build/site/reference/workflow-map/index.html +2 -2
- package/build/site/roadmap/index.html +2 -2
- package/build/site/sitemap-0.xml +1 -1
- package/build/site/tutorials/getting-started/index.html +4 -4
- package/build/site/workflow-map-diagram-fr.html +2 -2
- package/package.json +11 -9
- package/removals.txt +46 -46
- package/skills-registry.yaml +318 -0
- package/src/bmm-skills/1-analysis/research/wizz-domain-research/customize.toml +1 -1
- package/src/bmm-skills/1-analysis/research/wizz-market-research/customize.toml +1 -1
- package/src/bmm-skills/1-analysis/research/wizz-technical-research/customize.toml +2 -1
- package/src/bmm-skills/1-analysis/wizz-agent-analyst/customize.toml +2 -2
- package/src/bmm-skills/1-analysis/wizz-agent-tech-writer/customize.toml +2 -2
- package/src/bmm-skills/1-analysis/wizz-document-project/customize.toml +1 -1
- package/src/bmm-skills/1-analysis/wizz-document-project/templates/index-template.md +1 -1
- package/src/bmm-skills/1-analysis/wizz-document-project/templates/project-overview-template.md +1 -1
- package/src/bmm-skills/1-analysis/wizz-document-project/templates/source-tree-template.md +1 -1
- package/src/bmm-skills/1-analysis/wizz-prfaq/customize.toml +1 -1
- package/src/bmm-skills/1-analysis/wizz-product-brief/SKILL.md +1 -1
- package/src/bmm-skills/1-analysis/wizz-product-brief/customize.toml +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-agent-pm/customize.toml +2 -2
- package/src/bmm-skills/2-plan-workflows/wizz-agent-ux-designer/customize.toml +2 -2
- package/src/bmm-skills/2-plan-workflows/wizz-create-prd/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-create-prd/customize.toml +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-edit-prd/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-edit-prd/customize.toml +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-prd/SKILL.md +3 -3
- package/src/bmm-skills/2-plan-workflows/wizz-prd/customize.toml +2 -2
- package/src/bmm-skills/2-plan-workflows/wizz-ux/SKILL.md +2 -2
- package/src/bmm-skills/2-plan-workflows/wizz-validate-prd/SKILL.md +1 -1
- package/src/bmm-skills/2-plan-workflows/wizz-validate-prd/customize.toml +1 -1
- package/src/bmm-skills/3-solutioning/wizz-agent-architect/customize.toml +2 -2
- package/src/bmm-skills/3-solutioning/wizz-architecture/SKILL.md +2 -2
- package/src/bmm-skills/3-solutioning/wizz-architecture/customize.toml +4 -2
- package/src/bmm-skills/3-solutioning/wizz-check-implementation-readiness/customize.toml +1 -1
- package/src/bmm-skills/3-solutioning/wizz-create-architecture/SKILL.md +1 -1
- package/src/bmm-skills/3-solutioning/wizz-create-architecture/customize.toml +1 -1
- package/src/bmm-skills/3-solutioning/wizz-create-epics-and-stories/customize.toml +1 -1
- package/src/bmm-skills/3-solutioning/wizz-generate-project-context/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-agent-dev/customize.toml +3 -2
- package/src/bmm-skills/4-implementation/wizz-checkpoint-preview/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-code-review/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-correct-course/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-create-story/SKILL.md +2 -2
- package/src/bmm-skills/4-implementation/wizz-create-story/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-dev-story/SKILL.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-dev-story/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-investigate/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-qa-generate-e2e-tests/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +7 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-quick-dev/step-01-clarify-and-route.md +1 -1
- package/src/bmm-skills/4-implementation/wizz-retrospective/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-sprint-planning/customize.toml +1 -1
- package/src/bmm-skills/4-implementation/wizz-sprint-status/SKILL.md +5 -5
- package/src/bmm-skills/4-implementation/wizz-sprint-status/customize.toml +1 -1
- package/src/bmm-skills/module-help.csv +32 -32
- package/src/bmm-skills/module.yaml +1 -1
- package/src/core-skills/module-help.csv +3 -3
- package/src/core-skills/module.yaml +4 -4
- package/src/core-skills/wizz-brainstorming/SKILL.md +1 -1
- package/src/core-skills/wizz-brainstorming/analysis/catalog-analysis.md +4 -4
- package/src/core-skills/wizz-brainstorming/assets/brain-selector.html +5 -5
- package/src/core-skills/wizz-brainstorming/customize.toml +1 -1
- package/src/core-skills/wizz-brainstorming/references/finalize.md +1 -1
- package/src/core-skills/wizz-brainstorming/scripts/brain.py +5 -5
- package/src/core-skills/wizz-brainstorming/scripts/tests/test_brain.py +1 -1
- package/src/core-skills/wizz-brainstorming/scripts/tests/test_memlog.py +3 -3
- package/src/core-skills/wizz-customize/SKILL.md +6 -6
- package/src/core-skills/wizz-customize/scripts/list_customizable_skills.py +3 -3
- package/src/core-skills/wizz-customize/scripts/tests/test_list_customizable_skills.py +13 -13
- package/src/core-skills/wizz-editorial-review-prose/SKILL.md +20 -45
- package/src/core-skills/wizz-editorial-review-structure/SKILL.md +1 -1
- package/src/core-skills/wizz-help/SKILL.md +3 -3
- package/src/core-skills/wizz-party-mode/SKILL.md +5 -3
- package/src/core-skills/wizz-party-mode/customize.toml +896 -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 +2 -2
- package/src/core-skills/wizz-party-mode/scripts/tests/test-resolve_party.py +1 -1
- package/src/core-skills/wizz-review-adversarial-general/SKILL.md +23 -12
- package/src/core-skills/wizz-spec/SKILL.md +3 -3
- package/src/core-skills/wizz-spec/customize.toml +2 -2
- package/src/modules/wizz/README.md +5 -5
- package/src/modules/wizz/agents/wizz-ads/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-copy/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-growth/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +48 -24
- package/src/modules/wizz/agents/wizz-memoria/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +1 -1
- package/src/modules/wizz/agents/wizz-seo/SKILL.md +1 -1
- package/src/modules/wizz/overrides/{bmad-agent-analyst.toml → wizz-agent-analyst.toml} +1 -1
- package/src/modules/wizz/overrides/{bmad-agent-architect.toml → wizz-agent-architect.toml} +1 -1
- package/src/modules/wizz/overrides/{bmad-agent-dev.toml → wizz-agent-dev.toml} +1 -1
- package/src/modules/wizz/overrides/{bmad-agent-pm.toml → wizz-agent-pm.toml} +1 -1
- package/src/modules/wizz/overrides/{bmad-agent-tech-writer.toml → wizz-agent-tech-writer.toml} +1 -1
- package/src/modules/wizz/overrides/{bmad-agent-ux-designer.toml → wizz-agent-ux-designer.toml} +1 -1
- package/src/modules/wizz/scripts/wizz-init.mjs +7 -7
- package/src/scripts/resolve_config.py +7 -7
- package/src/scripts/resolve_customization.py +2 -2
- package/src/scripts/tests/test_memlog.py +1 -1
- package/src/skills-lib/ab-test-setup/SKILL.md +266 -0
- package/src/skills-lib/ab-test-setup/evals/evals.json +105 -0
- package/src/skills-lib/ab-test-setup/references/sample-size-guide.md +263 -0
- package/src/skills-lib/ab-test-setup/references/test-templates.md +277 -0
- package/src/skills-lib/ad-creative/SKILL.md +362 -0
- package/src/skills-lib/ad-creative/evals/evals.json +90 -0
- package/src/skills-lib/ad-creative/references/generative-tools.md +637 -0
- package/src/skills-lib/ad-creative/references/platform-specs.md +213 -0
- package/src/skills-lib/adversarial-reviewer/SKILL.md +122 -0
- package/src/skills-lib/agent-browser/SKILL.md +139 -0
- package/src/skills-lib/ai-seo/SKILL.md +398 -0
- package/src/skills-lib/ai-seo/evals/evals.json +90 -0
- package/src/skills-lib/ai-seo/references/content-patterns.md +285 -0
- package/src/skills-lib/ai-seo/references/platform-ranking-factors.md +152 -0
- package/src/skills-lib/analytics-tracking/SKILL.md +309 -0
- package/src/skills-lib/analytics-tracking/evals/evals.json +90 -0
- package/src/skills-lib/analytics-tracking/references/event-library.md +260 -0
- package/src/skills-lib/analytics-tracking/references/ga4-implementation.md +300 -0
- package/src/skills-lib/analytics-tracking/references/gtm-implementation.md +390 -0
- package/src/skills-lib/auth-and-secrets/SKILL.md +82 -0
- package/src/skills-lib/caching-and-queues/SKILL.md +58 -0
- package/src/skills-lib/cerebro/SKILL.md +368 -0
- package/src/skills-lib/churn-prevention/SKILL.md +424 -0
- package/src/skills-lib/churn-prevention/evals/evals.json +93 -0
- package/src/skills-lib/churn-prevention/references/cancel-flow-patterns.md +316 -0
- package/src/skills-lib/churn-prevention/references/dunning-playbook.md +408 -0
- package/src/skills-lib/cloud-and-infra/SKILL.md +36 -0
- package/src/skills-lib/cold-email/SKILL.md +158 -0
- package/src/skills-lib/cold-email/evals/evals.json +94 -0
- package/src/skills-lib/cold-email/references/benchmarks.md +83 -0
- package/src/skills-lib/cold-email/references/follow-up-sequences.md +81 -0
- package/src/skills-lib/cold-email/references/frameworks.md +90 -0
- package/src/skills-lib/cold-email/references/personalization.md +79 -0
- package/src/skills-lib/cold-email/references/subject-lines.md +53 -0
- package/src/skills-lib/competitor-alternatives/SKILL.md +256 -0
- package/src/skills-lib/competitor-alternatives/evals/evals.json +93 -0
- package/src/skills-lib/competitor-alternatives/references/content-architecture.md +271 -0
- package/src/skills-lib/competitor-alternatives/references/templates.md +223 -0
- package/src/skills-lib/content-strategy/SKILL.md +359 -0
- package/src/skills-lib/content-strategy/evals/evals.json +90 -0
- package/src/skills-lib/copy-editing/SKILL.md +447 -0
- package/src/skills-lib/copy-editing/evals/evals.json +89 -0
- package/src/skills-lib/copy-editing/references/plain-english-alternatives.md +394 -0
- package/src/skills-lib/copywriting/SKILL.md +252 -0
- package/src/skills-lib/copywriting/evals/evals.json +111 -0
- package/src/skills-lib/copywriting/references/copy-frameworks.md +344 -0
- package/src/skills-lib/copywriting/references/natural-transitions.md +272 -0
- package/src/skills-lib/database-and-deps/SKILL.md +80 -0
- package/src/skills-lib/database-scaling/SKILL.md +44 -0
- package/src/skills-lib/decision-maker/SKILL.md +534 -0
- package/src/skills-lib/desktop-security/SKILL.md +43 -0
- package/src/skills-lib/email-sequence/SKILL.md +309 -0
- package/src/skills-lib/email-sequence/evals/evals.json +93 -0
- package/src/skills-lib/email-sequence/references/copy-guidelines.md +113 -0
- package/src/skills-lib/email-sequence/references/email-types.md +515 -0
- package/src/skills-lib/email-sequence/references/sequence-templates.md +168 -0
- package/src/skills-lib/enhance-prompt/README.md +34 -0
- package/src/skills-lib/enhance-prompt/SKILL.md +204 -0
- package/src/skills-lib/enhance-prompt/references/KEYWORDS.md +114 -0
- package/src/skills-lib/find-skills/SKILL.md +181 -0
- package/src/skills-lib/form-cro/SKILL.md +429 -0
- package/src/skills-lib/form-cro/evals/evals.json +90 -0
- package/src/skills-lib/free-tool-strategy/SKILL.md +178 -0
- package/src/skills-lib/free-tool-strategy/evals/evals.json +90 -0
- package/src/skills-lib/free-tool-strategy/references/tool-types.md +217 -0
- package/src/skills-lib/graphify/.graphify_version +1 -0
- package/src/skills-lib/graphify/SKILL.md +1217 -0
- package/src/skills-lib/huashu-design/LICENSE +21 -0
- package/src/skills-lib/huashu-design/README.en.md +309 -0
- package/src/skills-lib/huashu-design/README.md +348 -0
- package/src/skills-lib/huashu-design/SKILL.md +631 -0
- package/src/skills-lib/huashu-design/assets/android_frame.jsx +175 -0
- package/src/skills-lib/huashu-design/assets/animations.jsx +348 -0
- package/src/skills-lib/huashu-design/assets/banner.svg +198 -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/browser_window.jsx +166 -0
- package/src/skills-lib/huashu-design/assets/deck_index.html +348 -0
- package/src/skills-lib/huashu-design/assets/deck_stage.js +420 -0
- package/src/skills-lib/huashu-design/assets/design_canvas.jsx +205 -0
- package/src/skills-lib/huashu-design/assets/director-notes-samples/launch-film-30s-sample.md +1713 -0
- package/src/skills-lib/huashu-design/assets/ios_frame.jsx +192 -0
- package/src/skills-lib/huashu-design/assets/macos_window.jsx +96 -0
- package/src/skills-lib/huashu-design/assets/narration_stage.jsx +476 -0
- package/src/skills-lib/huashu-design/assets/personal-asset-index.example.json +71 -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/skills-lib/huashu-design/assets/showcases/INDEX.md +115 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.html +235 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.html +229 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.html +288 -0
- package/src/skills-lib/huashu-design/assets/showcases/cover/cover-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.html +503 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.html +600 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.html +670 -0
- package/src/skills-lib/huashu-design/assets/showcases/infographic/infographic-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.html +382 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.html +536 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.html +497 -0
- package/src/skills-lib/huashu-design/assets/showcases/ppt/ppt-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.html +385 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.html +422 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.html +499 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-nav/ainav-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.html +562 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.html +548 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.html +696 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-ai-writing/aiwriting-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.html +372 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.html +460 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.html +494 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-devdocs/devdocs-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.html +367 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.html +368 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.html +459 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-homepage/homepage-takram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.html +493 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-build.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.html +556 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-pentagram.png +0 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.html +604 -0
- package/src/skills-lib/huashu-design/assets/showcases/website-saas/saas-takram.png +0 -0
- package/src/skills-lib/huashu-design/demos/c1-ios-prototype-en.html +1145 -0
- package/src/skills-lib/huashu-design/demos/c1-ios-prototype.html +1142 -0
- package/src/skills-lib/huashu-design/demos/c2-slides-pptx-en.html +1055 -0
- package/src/skills-lib/huashu-design/demos/c2-slides-pptx.html +1055 -0
- package/src/skills-lib/huashu-design/demos/c3-motion-design-en.html +1134 -0
- package/src/skills-lib/huashu-design/demos/c3-motion-design.html +1134 -0
- package/src/skills-lib/huashu-design/demos/c4-tweaks-en.html +989 -0
- package/src/skills-lib/huashu-design/demos/c4-tweaks.html +989 -0
- package/src/skills-lib/huashu-design/demos/c5-infographic-en.html +816 -0
- package/src/skills-lib/huashu-design/demos/c5-infographic.html +813 -0
- package/src/skills-lib/huashu-design/demos/c6-expert-review-en.html +885 -0
- package/src/skills-lib/huashu-design/demos/c6-expert-review.html +894 -0
- package/src/skills-lib/huashu-design/demos/hero-animation-v10-en.html +1498 -0
- package/src/skills-lib/huashu-design/demos/md-html-narration/md-html-demo.html +615 -0
- package/src/skills-lib/huashu-design/demos/md-html-narration/script.md +69 -0
- package/src/skills-lib/huashu-design/demos/voiceover-demo/script.md +17 -0
- package/src/skills-lib/huashu-design/demos/voiceover-demo//344/273/200/344/271/210/346/230/257token.html +201 -0
- package/src/skills-lib/huashu-design/demos/w1-brand-protocol-en.html +684 -0
- package/src/skills-lib/huashu-design/demos/w1-brand-protocol.html +696 -0
- package/src/skills-lib/huashu-design/demos/w2-junior-designer-en.html +983 -0
- package/src/skills-lib/huashu-design/demos/w2-junior-designer.html +994 -0
- package/src/skills-lib/huashu-design/demos/w3-fallback-advisor-en.html +647 -0
- package/src/skills-lib/huashu-design/demos/w3-fallback-advisor.html +704 -0
- package/src/skills-lib/huashu-design/package-lock.json +846 -0
- package/src/skills-lib/huashu-design/package.json +8 -0
- package/src/skills-lib/huashu-design/references/animation-best-practices.md +506 -0
- package/src/skills-lib/huashu-design/references/animation-pitfalls.md +402 -0
- package/src/skills-lib/huashu-design/references/animations.md +249 -0
- package/src/skills-lib/huashu-design/references/apple-gallery-showcase.md +338 -0
- package/src/skills-lib/huashu-design/references/audio-design-rules.md +260 -0
- package/src/skills-lib/huashu-design/references/brand-asset-protocol.md +250 -0
- package/src/skills-lib/huashu-design/references/cinematic-patterns.md +264 -0
- package/src/skills-lib/huashu-design/references/content-guidelines.md +260 -0
- package/src/skills-lib/huashu-design/references/critique-guide.md +199 -0
- package/src/skills-lib/huashu-design/references/design-context.md +213 -0
- package/src/skills-lib/huashu-design/references/design-styles.md +370 -0
- package/src/skills-lib/huashu-design/references/editable-pptx.md +334 -0
- package/src/skills-lib/huashu-design/references/hero-animation-case-study.md +250 -0
- package/src/skills-lib/huashu-design/references/launch-film-director-notes.md +293 -0
- package/src/skills-lib/huashu-design/references/multi-perspective-parallel-case-study.md +267 -0
- package/src/skills-lib/huashu-design/references/react-setup.md +276 -0
- package/src/skills-lib/huashu-design/references/scene-templates.md +262 -0
- package/src/skills-lib/huashu-design/references/sfx-library.md +226 -0
- package/src/skills-lib/huashu-design/references/slide-decks.md +745 -0
- package/src/skills-lib/huashu-design/references/tweaks-system.md +313 -0
- package/src/skills-lib/huashu-design/references/verification.md +183 -0
- package/src/skills-lib/huashu-design/references/video-export.md +232 -0
- package/src/skills-lib/huashu-design/references/voiceover-pipeline.md +397 -0
- package/src/skills-lib/huashu-design/references/workflow.md +216 -0
- package/src/skills-lib/huashu-design/scripts/add-music.sh +108 -0
- package/src/skills-lib/huashu-design/scripts/convert-formats.sh +83 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_pdf.mjs +98 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_pptx.mjs +107 -0
- package/src/skills-lib/huashu-design/scripts/export_deck_stage_pdf.mjs +130 -0
- package/src/skills-lib/huashu-design/scripts/fetch_images.py +94 -0
- package/src/skills-lib/huashu-design/scripts/gen_deck_thumbs.mjs +55 -0
- package/src/skills-lib/huashu-design/scripts/html2pptx.js +1178 -0
- package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +127 -0
- package/src/skills-lib/huashu-design/scripts/narrate-pipeline.mjs +315 -0
- package/src/skills-lib/huashu-design/scripts/render-narration.sh +151 -0
- package/src/skills-lib/huashu-design/scripts/render-video-seek.js +238 -0
- package/src/skills-lib/huashu-design/scripts/render-video.js +289 -0
- package/src/skills-lib/huashu-design/scripts/tts-doubao.mjs +184 -0
- package/src/skills-lib/huashu-design/scripts/verify.py +154 -0
- package/src/skills-lib/huashu-design/test-prompts.json +38 -0
- package/src/skills-lib/humanizer/LICENSE +21 -0
- package/src/skills-lib/humanizer/README.md +145 -0
- package/src/skills-lib/humanizer/SKILL.md +474 -0
- package/src/skills-lib/humanizer/WARP.md +53 -0
- package/src/skills-lib/impeccable/SKILL.md +186 -0
- package/src/skills-lib/implementation-planner/SKILL.md +630 -0
- package/src/skills-lib/infrastructure/SKILL.md +34 -0
- package/src/skills-lib/inicio-de-projeto/SKILL.md +313 -0
- package/src/skills-lib/launch-strategy/SKILL.md +353 -0
- package/src/skills-lib/launch-strategy/evals/evals.json +91 -0
- package/src/skills-lib/marketing-ideas/SKILL.md +167 -0
- package/src/skills-lib/marketing-ideas/evals/evals.json +90 -0
- package/src/skills-lib/marketing-ideas/references/ideas-by-category.md +366 -0
- package/src/skills-lib/marketing-psychology/SKILL.md +455 -0
- package/src/skills-lib/marketing-psychology/evals/evals.json +88 -0
- package/src/skills-lib/motion-3d-director/SKILL.md +485 -0
- package/src/skills-lib/onboarding-cro/SKILL.md +220 -0
- package/src/skills-lib/onboarding-cro/evals/evals.json +92 -0
- package/src/skills-lib/onboarding-cro/references/experiments.md +258 -0
- package/src/skills-lib/page-cro/SKILL.md +182 -0
- package/src/skills-lib/page-cro/evals/evals.json +111 -0
- package/src/skills-lib/page-cro/references/experiments.md +248 -0
- package/src/skills-lib/paid-ads/SKILL.md +315 -0
- package/src/skills-lib/paid-ads/evals/evals.json +90 -0
- package/src/skills-lib/paid-ads/references/ad-copy-templates.md +207 -0
- package/src/skills-lib/paid-ads/references/audience-targeting.md +243 -0
- package/src/skills-lib/paid-ads/references/platform-setup-checklists.md +277 -0
- package/src/skills-lib/paywall-upgrade-cro/SKILL.md +227 -0
- package/src/skills-lib/paywall-upgrade-cro/evals/evals.json +93 -0
- package/src/skills-lib/paywall-upgrade-cro/references/experiments.md +164 -0
- package/src/skills-lib/popup-cro/SKILL.md +453 -0
- package/src/skills-lib/popup-cro/evals/evals.json +94 -0
- package/src/skills-lib/premium-landing-ui-researcher/SKILL.md +2090 -0
- package/src/skills-lib/pricing-strategy/SKILL.md +231 -0
- package/src/skills-lib/pricing-strategy/evals/evals.json +90 -0
- package/src/skills-lib/pricing-strategy/references/research-methods.md +152 -0
- package/src/skills-lib/pricing-strategy/references/tier-structure.md +232 -0
- package/src/skills-lib/product-marketing-context/SKILL.md +241 -0
- package/src/skills-lib/product-marketing-context/evals/evals.json +85 -0
- package/src/skills-lib/programmatic-seo/SKILL.md +238 -0
- package/src/skills-lib/programmatic-seo/evals/evals.json +94 -0
- package/src/skills-lib/programmatic-seo/references/playbooks.md +308 -0
- package/src/skills-lib/react-components/README.md +36 -0
- package/src/skills-lib/react-components/SKILL.md +51 -0
- package/src/skills-lib/react-components/examples/gold-standard-card.tsx +80 -0
- package/src/skills-lib/react-components/package-lock.json +231 -0
- package/src/skills-lib/react-components/package.json +16 -0
- package/src/skills-lib/react-components/resources/architecture-checklist.md +15 -0
- package/src/skills-lib/react-components/resources/component-template.tsx +37 -0
- package/src/skills-lib/react-components/resources/stitch-api-reference.md +14 -0
- package/src/skills-lib/react-components/resources/style-guide.json +27 -0
- package/src/skills-lib/react-components/scripts/fetch-stitch.sh +30 -0
- package/src/skills-lib/react-components/scripts/validate.js +70 -0
- package/src/skills-lib/references/premium-agency-rules.md +79 -0
- package/src/skills-lib/referral-program/SKILL.md +255 -0
- package/src/skills-lib/referral-program/evals/evals.json +89 -0
- package/src/skills-lib/referral-program/references/affiliate-programs.md +164 -0
- package/src/skills-lib/referral-program/references/program-examples.md +143 -0
- package/src/skills-lib/remotion-best-practices/SKILL.md +61 -0
- package/src/skills-lib/remotion-best-practices/rules/3d.md +86 -0
- package/src/skills-lib/remotion-best-practices/rules/animations.md +27 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/charts-bar-chart.tsx +173 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-typewriter.tsx +100 -0
- package/src/skills-lib/remotion-best-practices/rules/assets/text-animations-word-highlight.tsx +103 -0
- package/src/skills-lib/remotion-best-practices/rules/assets.md +78 -0
- package/src/skills-lib/remotion-best-practices/rules/audio-visualization.md +198 -0
- package/src/skills-lib/remotion-best-practices/rules/audio.md +169 -0
- package/src/skills-lib/remotion-best-practices/rules/calculate-metadata.md +134 -0
- package/src/skills-lib/remotion-best-practices/rules/can-decode.md +75 -0
- package/src/skills-lib/remotion-best-practices/rules/charts.md +120 -0
- package/src/skills-lib/remotion-best-practices/rules/compositions.md +154 -0
- package/src/skills-lib/remotion-best-practices/rules/display-captions.md +184 -0
- package/src/skills-lib/remotion-best-practices/rules/extract-frames.md +229 -0
- package/src/skills-lib/remotion-best-practices/rules/ffmpeg.md +38 -0
- package/src/skills-lib/remotion-best-practices/rules/fonts.md +152 -0
- package/src/skills-lib/remotion-best-practices/rules/get-audio-duration.md +58 -0
- package/src/skills-lib/remotion-best-practices/rules/get-video-dimensions.md +68 -0
- package/src/skills-lib/remotion-best-practices/rules/get-video-duration.md +60 -0
- package/src/skills-lib/remotion-best-practices/rules/gifs.md +141 -0
- package/src/skills-lib/remotion-best-practices/rules/images.md +134 -0
- package/src/skills-lib/remotion-best-practices/rules/import-srt-captions.md +69 -0
- package/src/skills-lib/remotion-best-practices/rules/light-leaks.md +73 -0
- package/src/skills-lib/remotion-best-practices/rules/lottie.md +70 -0
- package/src/skills-lib/remotion-best-practices/rules/maps.md +412 -0
- package/src/skills-lib/remotion-best-practices/rules/measuring-dom-nodes.md +34 -0
- package/src/skills-lib/remotion-best-practices/rules/measuring-text.md +140 -0
- package/src/skills-lib/remotion-best-practices/rules/parameters.md +109 -0
- package/src/skills-lib/remotion-best-practices/rules/sequencing.md +118 -0
- package/src/skills-lib/remotion-best-practices/rules/sfx.md +26 -0
- package/src/skills-lib/remotion-best-practices/rules/subtitles.md +36 -0
- package/src/skills-lib/remotion-best-practices/rules/tailwind.md +11 -0
- package/src/skills-lib/remotion-best-practices/rules/text-animations.md +20 -0
- package/src/skills-lib/remotion-best-practices/rules/timing.md +179 -0
- package/src/skills-lib/remotion-best-practices/rules/transcribe-captions.md +70 -0
- package/src/skills-lib/remotion-best-practices/rules/transitions.md +197 -0
- package/src/skills-lib/remotion-best-practices/rules/transparent-videos.md +106 -0
- package/src/skills-lib/remotion-best-practices/rules/trimming.md +51 -0
- package/src/skills-lib/remotion-best-practices/rules/videos.md +171 -0
- package/src/skills-lib/remotion-best-practices/rules/voiceover.md +99 -0
- package/src/skills-lib/revops/SKILL.md +343 -0
- package/src/skills-lib/revops/evals/evals.json +91 -0
- package/src/skills-lib/revops/references/automation-playbooks.md +290 -0
- package/src/skills-lib/revops/references/lifecycle-definitions.md +278 -0
- package/src/skills-lib/revops/references/routing-rules.md +203 -0
- package/src/skills-lib/revops/references/scoring-models.md +247 -0
- package/src/skills-lib/sales-enablement/SKILL.md +349 -0
- package/src/skills-lib/sales-enablement/evals/evals.json +91 -0
- package/src/skills-lib/sales-enablement/references/deck-frameworks.md +263 -0
- package/src/skills-lib/sales-enablement/references/demo-scripts.md +355 -0
- package/src/skills-lib/sales-enablement/references/objection-library.md +270 -0
- package/src/skills-lib/sales-enablement/references/one-pager-templates.md +208 -0
- package/src/skills-lib/schema-markup/SKILL.md +179 -0
- package/src/skills-lib/schema-markup/evals/evals.json +87 -0
- package/src/skills-lib/schema-markup/references/schema-examples.md +398 -0
- package/src/skills-lib/seo-audit/SKILL.md +412 -0
- package/src/skills-lib/seo-audit/evals/evals.json +136 -0
- package/src/skills-lib/seo-audit/references/ai-writing-detection.md +200 -0
- package/src/skills-lib/signup-flow-cro/SKILL.md +359 -0
- package/src/skills-lib/signup-flow-cro/evals/evals.json +88 -0
- package/src/skills-lib/site-architecture/SKILL.md +357 -0
- package/src/skills-lib/site-architecture/evals/evals.json +88 -0
- package/src/skills-lib/site-architecture/references/mermaid-templates.md +216 -0
- package/src/skills-lib/site-architecture/references/navigation-patterns.md +305 -0
- package/src/skills-lib/site-architecture/references/site-type-templates.md +293 -0
- package/src/skills-lib/social-content/SKILL.md +278 -0
- package/src/skills-lib/social-content/evals/evals.json +92 -0
- package/src/skills-lib/social-content/references/platforms.md +170 -0
- package/src/skills-lib/social-content/references/post-templates.md +177 -0
- package/src/skills-lib/social-content/references/reverse-engineering.md +195 -0
- package/src/skills-lib/supabase-postgres-best-practices/AGENTS.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/CLAUDE.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/README.md +116 -0
- package/src/skills-lib/supabase-postgres-best-practices/SKILL.md +64 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_contributing.md +171 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_sections.md +39 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/_template.md +34 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/advanced-full-text-search.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/advanced-jsonb-indexing.md +49 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-idle-timeout.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-limits.md +44 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-pooling.md +41 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/conn-prepared-statements.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-batch-inserts.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-n-plus-one.md +53 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-pagination.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/data-upsert.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-advisory.md +56 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-deadlock-prevention.md +68 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-short-transactions.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/lock-skip-locked.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-explain-analyze.md +45 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-pg-stat-statements.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/monitor-vacuum-analyze.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-composite-indexes.md +44 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-covering-indexes.md +40 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-index-types.md +48 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-missing-indexes.md +43 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/query-partial-indexes.md +45 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-constraints.md +80 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-data-types.md +46 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-foreign-key-indexes.md +59 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-lowercase-identifiers.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-partitioning.md +55 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/schema-primary-keys.md +61 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-privileges.md +54 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-basics.md +50 -0
- package/src/skills-lib/supabase-postgres-best-practices/references/security-rls-performance.md +57 -0
- package/src/skills-lib/taste-redesign/SKILL.md +178 -0
- package/src/skills-lib/taste-skill/SKILL.md +1206 -0
- package/src/skills-lib/ui-component-curator/SKILL.md +102 -0
- package/src/skills-lib/ui-ux-pro-max/SKILL.md +377 -0
- package/src/skills-lib/ui-ux-pro-max/data/charts.csv +26 -0
- package/src/skills-lib/ui-ux-pro-max/data/colors.csv +97 -0
- package/src/skills-lib/ui-ux-pro-max/data/icons.csv +101 -0
- package/src/skills-lib/ui-ux-pro-max/data/landing.csv +31 -0
- package/src/skills-lib/ui-ux-pro-max/data/products.csv +97 -0
- package/src/skills-lib/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/src/skills-lib/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/src/skills-lib/ui-ux-pro-max/data/styles.csv +68 -0
- package/src/skills-lib/ui-ux-pro-max/data/typography.csv +58 -0
- package/src/skills-lib/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/src/skills-lib/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/src/skills-lib/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +0 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/core.py +253 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/0964cef300f753b5cee0cc49777ca97035c85d45c212099405d9ee4da36e523f.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/21a40f6810c3a6f17acc3580f106171daf78c7b41bbd066bc80448a821ea0adf.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/graphify-out/cache/69ea15a020ac81b8459e37ef63654398a50c1035fc01c43d8069df217389f7f3.json +1 -0
- package/src/skills-lib/ui-ux-pro-max/scripts/search.py +114 -0
- package/src/skills-lib/web-security/SKILL.md +147 -0
- package/src/skills-lib/wizz-router/SKILL.md +257 -0
- package/src/squads/README.md +39 -0
- package/src/squads/advisory-board/README.md +34 -0
- package/src/squads/advisory-board/agents/board-chair.md +161 -0
- package/src/squads/advisory-board/agents/brene-brown.md +296 -0
- package/src/squads/advisory-board/agents/charlie-munger.md +590 -0
- package/src/squads/advisory-board/agents/derek-sivers.md +268 -0
- package/src/squads/advisory-board/agents/naval-ravikant.md +251 -0
- package/src/squads/advisory-board/agents/patrick-lencioni.md +394 -0
- package/src/squads/advisory-board/agents/peter-thiel.md +269 -0
- package/src/squads/advisory-board/agents/ray-dalio.md +587 -0
- package/src/squads/advisory-board/agents/reid-hoffman.md +278 -0
- package/src/squads/advisory-board/agents/simon-sinek.md +291 -0
- package/src/squads/advisory-board/agents/yvon-chouinard.md +275 -0
- package/src/squads/advisory-board/squad.yaml +50 -0
- package/src/squads/brand-squad/README.md +60 -0
- package/src/squads/brand-squad/agents/al-ries.md +175 -0
- package/src/squads/brand-squad/agents/alina-wheeler.md +184 -0
- package/src/squads/brand-squad/agents/archetype-consultant.md +215 -0
- package/src/squads/brand-squad/agents/brand-chief.md +158 -0
- package/src/squads/brand-squad/agents/byron-sharp.md +169 -0
- package/src/squads/brand-squad/agents/david-aaker.md +166 -0
- package/src/squads/brand-squad/agents/denise-yohn.md +172 -0
- package/src/squads/brand-squad/agents/domain-scout.md +135 -0
- package/src/squads/brand-squad/agents/donald-miller.md +179 -0
- package/src/squads/brand-squad/agents/emily-heyward.md +147 -0
- package/src/squads/brand-squad/agents/jean-noel-kapferer.md +189 -0
- package/src/squads/brand-squad/agents/kevin-keller.md +199 -0
- package/src/squads/brand-squad/agents/marty-neumeier.md +170 -0
- package/src/squads/brand-squad/agents/miller-sticky-brand.md +180 -0
- package/src/squads/brand-squad/agents/naming-strategist.md +171 -0
- package/src/squads/brand-squad/squad.yaml +117 -0
- package/src/squads/c-level-squad/README.md +29 -0
- package/src/squads/c-level-squad/agents/caio-architect.md +235 -0
- package/src/squads/c-level-squad/agents/cio-engineer.md +209 -0
- package/src/squads/c-level-squad/agents/cmo-architect.md +208 -0
- package/src/squads/c-level-squad/agents/coo-orchestrator.md +193 -0
- package/src/squads/c-level-squad/agents/cto-architect.md +194 -0
- package/src/squads/c-level-squad/agents/vision-chief.md +201 -0
- package/src/squads/c-level-squad/squad.yaml +45 -0
- package/src/squads/claude-code-mastery/README.md +146 -0
- package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +554 -0
- package/src/squads/claude-code-mastery/agents/config-engineer.md +865 -0
- package/src/squads/claude-code-mastery/agents/hooks-architect.md +1013 -0
- package/src/squads/claude-code-mastery/agents/mcp-integrator.md +791 -0
- package/src/squads/claude-code-mastery/agents/project-integrator.md +1196 -0
- package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +931 -0
- package/src/squads/claude-code-mastery/agents/skill-craftsman.md +1250 -0
- package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +1008 -0
- package/src/squads/copy-squad/README.md +65 -0
- package/src/squads/copy-squad/agents/andre-chaperon.md +206 -0
- package/src/squads/copy-squad/agents/ben-settle.md +194 -0
- package/src/squads/copy-squad/agents/claude-hopkins.md +182 -0
- package/src/squads/copy-squad/agents/clayton-makepeace.md +225 -0
- package/src/squads/copy-squad/agents/copy-chief.md +166 -0
- package/src/squads/copy-squad/agents/dan-kennedy.md +202 -0
- package/src/squads/copy-squad/agents/dan-koe.md +223 -0
- package/src/squads/copy-squad/agents/david-deutsch.md +197 -0
- package/src/squads/copy-squad/agents/david-ogilvy.md +198 -0
- package/src/squads/copy-squad/agents/eugene-schwartz.md +238 -0
- package/src/squads/copy-squad/agents/frank-kern.md +195 -0
- package/src/squads/copy-squad/agents/gary-bencivenga.md +197 -0
- package/src/squads/copy-squad/agents/gary-halbert.md +219 -0
- package/src/squads/copy-squad/agents/jim-rutz.md +193 -0
- package/src/squads/copy-squad/agents/joe-sugarman.md +234 -0
- package/src/squads/copy-squad/agents/john-carlton.md +203 -0
- package/src/squads/copy-squad/agents/jon-benson.md +196 -0
- package/src/squads/copy-squad/agents/parris-lampropoulos.md +188 -0
- package/src/squads/copy-squad/agents/robert-collier.md +183 -0
- package/src/squads/copy-squad/agents/russell-brunson.md +229 -0
- package/src/squads/copy-squad/agents/ry-schwartz.md +185 -0
- package/src/squads/copy-squad/agents/stefan-georgi.md +188 -0
- package/src/squads/copy-squad/agents/todd-brown.md +171 -0
- package/src/squads/copy-squad/squad.yaml +87 -0
- package/src/squads/cybersecurity/README.md +38 -0
- package/src/squads/cybersecurity/agents/busterer.md +108 -0
- package/src/squads/cybersecurity/agents/cartographer.md +114 -0
- package/src/squads/cybersecurity/agents/chris-sanders.md +205 -0
- package/src/squads/cybersecurity/agents/command-generator.md +121 -0
- package/src/squads/cybersecurity/agents/cyber-chief.md +120 -0
- package/src/squads/cybersecurity/agents/dirber.md +111 -0
- package/src/squads/cybersecurity/agents/fuzzer.md +121 -0
- package/src/squads/cybersecurity/agents/georgia-weidman.md +178 -0
- package/src/squads/cybersecurity/agents/jim-manico.md +182 -0
- package/src/squads/cybersecurity/agents/marcus-carey.md +200 -0
- package/src/squads/cybersecurity/agents/omar-santos.md +206 -0
- package/src/squads/cybersecurity/agents/peter-kim.md +179 -0
- package/src/squads/cybersecurity/agents/ripper.md +121 -0
- package/src/squads/cybersecurity/agents/rogue.md +116 -0
- package/src/squads/cybersecurity/agents/shannon-runner.md +108 -0
- package/src/squads/cybersecurity/squad.yaml +56 -0
- package/src/squads/data-squad/README.md +30 -0
- package/src/squads/data-squad/agents/avinash-kaushik.md +268 -0
- package/src/squads/data-squad/agents/data-chief.md +167 -0
- package/src/squads/data-squad/agents/david-spinks.md +277 -0
- package/src/squads/data-squad/agents/nick-mehta.md +294 -0
- package/src/squads/data-squad/agents/peter-fader.md +246 -0
- package/src/squads/data-squad/agents/sean-ellis.md +303 -0
- package/src/squads/data-squad/agents/wes-kao.md +268 -0
- package/src/squads/data-squad/squad.yaml +46 -0
- package/src/squads/design-squad/README.md +31 -0
- package/src/squads/design-squad/agents/brad-frost.md +185 -0
- package/src/squads/design-squad/agents/dan-mall.md +178 -0
- package/src/squads/design-squad/agents/dave-malouf.md +198 -0
- package/src/squads/design-squad/agents/design-chief.md +109 -0
- package/src/squads/design-squad/agents/design-system-architect.md +109 -0
- package/src/squads/design-squad/agents/ui-engineer.md +102 -0
- package/src/squads/design-squad/agents/ux-designer.md +105 -0
- package/src/squads/design-squad/agents/visual-generator.md +108 -0
- package/src/squads/design-squad/squad.yaml +48 -0
- package/src/squads/hormozi-squad/README.md +39 -0
- package/src/squads/hormozi-squad/agents/hormozi-ads.md +159 -0
- package/src/squads/hormozi-squad/agents/hormozi-advisor.md +178 -0
- package/src/squads/hormozi-squad/agents/hormozi-audit.md +178 -0
- package/src/squads/hormozi-squad/agents/hormozi-chief.md +111 -0
- package/src/squads/hormozi-squad/agents/hormozi-closer.md +179 -0
- package/src/squads/hormozi-squad/agents/hormozi-content.md +166 -0
- package/src/squads/hormozi-squad/agents/hormozi-copy.md +152 -0
- package/src/squads/hormozi-squad/agents/hormozi-hooks.md +177 -0
- package/src/squads/hormozi-squad/agents/hormozi-launch.md +160 -0
- package/src/squads/hormozi-squad/agents/hormozi-leads.md +198 -0
- package/src/squads/hormozi-squad/agents/hormozi-models.md +191 -0
- package/src/squads/hormozi-squad/agents/hormozi-offers.md +197 -0
- package/src/squads/hormozi-squad/agents/hormozi-pricing.md +151 -0
- package/src/squads/hormozi-squad/agents/hormozi-retention.md +166 -0
- package/src/squads/hormozi-squad/agents/hormozi-scale.md +175 -0
- package/src/squads/hormozi-squad/agents/hormozi-workshop.md +160 -0
- package/src/squads/hormozi-squad/squad.yaml +60 -0
- package/src/squads/movement/README.md +29 -0
- package/src/squads/movement/agents/analista-de-impacto.md +350 -0
- package/src/squads/movement/agents/estrategista-de-ciclo.md +301 -0
- package/src/squads/movement/agents/fenomenologo.md +169 -0
- package/src/squads/movement/agents/identitario.md +265 -0
- package/src/squads/movement/agents/manifestador.md +279 -0
- package/src/squads/movement/agents/movement-architect.md +210 -0
- package/src/squads/movement/agents/movement-chief.md +135 -0
- package/src/squads/movement/squad.yaml +45 -0
- package/src/squads/storytelling/README.md +35 -0
- package/src/squads/storytelling/agents/blake-snyder.md +225 -0
- package/src/squads/storytelling/agents/dan-harmon.md +167 -0
- package/src/squads/storytelling/agents/joseph-campbell.md +184 -0
- package/src/squads/storytelling/agents/keith-johnstone.md +157 -0
- package/src/squads/storytelling/agents/kindra-hall.md +162 -0
- package/src/squads/storytelling/agents/marshall-ganz.md +167 -0
- package/src/squads/storytelling/agents/matthew-dicks.md +152 -0
- package/src/squads/storytelling/agents/nancy-duarte.md +154 -0
- package/src/squads/storytelling/agents/oren-klaff.md +166 -0
- package/src/squads/storytelling/agents/park-howell.md +152 -0
- package/src/squads/storytelling/agents/shawn-coyne.md +208 -0
- package/src/squads/storytelling/agents/story-chief.md +155 -0
- package/src/squads/storytelling/squad.yaml +52 -0
- package/src/squads/traffic-masters/README.md +39 -0
- package/src/squads/traffic-masters/agents/ad-midas.md +149 -0
- package/src/squads/traffic-masters/agents/ads-analyst.md +135 -0
- package/src/squads/traffic-masters/agents/creative-analyst.md +142 -0
- package/src/squads/traffic-masters/agents/depesh-mandalia.md +174 -0
- package/src/squads/traffic-masters/agents/fiscal.md +144 -0
- package/src/squads/traffic-masters/agents/kasim-aslam.md +158 -0
- package/src/squads/traffic-masters/agents/media-buyer.md +159 -0
- package/src/squads/traffic-masters/agents/molly-pittman.md +185 -0
- package/src/squads/traffic-masters/agents/nicholas-kusmich.md +157 -0
- package/src/squads/traffic-masters/agents/pedro-sobral.md +158 -0
- package/src/squads/traffic-masters/agents/performance-analyst.md +135 -0
- package/src/squads/traffic-masters/agents/pixel-specialist.md +144 -0
- package/src/squads/traffic-masters/agents/ralph-burns.md +163 -0
- package/src/squads/traffic-masters/agents/scale-optimizer.md +144 -0
- package/src/squads/traffic-masters/agents/tom-breeze.md +175 -0
- package/src/squads/traffic-masters/agents/traffic-chief.md +97 -0
- package/src/squads/traffic-masters/squad.yaml +59 -0
- package/tools/bundle-web-bundles.js +1 -1
- package/tools/format-workflow-md.js +2 -2
- package/tools/installer/commands/install.js +13 -1
- package/tools/installer/commands/status.js +9 -9
- package/tools/installer/commands/uninstall.js +5 -5
- package/tools/installer/core/config.js +20 -0
- package/tools/installer/core/existing-install.js +8 -8
- package/tools/installer/core/install-paths.js +13 -13
- package/tools/installer/core/installer.js +202 -102
- package/tools/installer/core/legacy-warnings.js +16 -16
- package/tools/installer/core/manifest-generator.js +44 -33
- package/tools/installer/core/manifest.js +30 -30
- package/tools/installer/core/python-check.js +7 -7
- package/tools/installer/ide/_config-driven.js +97 -97
- package/tools/installer/ide/manager.js +17 -17
- package/tools/installer/ide/platform-codes.yaml +5 -5
- package/tools/installer/ide/shared/installed-skills.js +13 -13
- package/tools/installer/ide/shared/path-utils.js +46 -46
- package/tools/installer/ide/shared/skill-manifest.js +4 -4
- package/tools/installer/install-messages.yaml +1 -1
- package/tools/installer/list-options.js +3 -3
- package/tools/installer/modules/channel-plan.js +1 -1
- package/tools/installer/modules/channel-resolver.js +1 -1
- package/tools/installer/modules/cli-config.js +145 -0
- package/tools/installer/modules/custom-module-manager.js +16 -16
- package/tools/installer/modules/external-manager.js +6 -6
- package/tools/installer/modules/mcp-config.js +137 -0
- package/tools/installer/modules/official-modules.js +42 -42
- package/tools/installer/modules/plugin-resolver.js +3 -3
- package/tools/installer/modules/skills-lib.js +135 -0
- package/tools/installer/project-root.js +13 -13
- package/tools/installer/prompts.js +1 -1
- package/tools/installer/set-overrides.js +6 -6
- package/tools/installer/ui.js +239 -29
- package/tools/installer/yaml-format.js +1 -1
- package/tools/migrate-custom-module-paths.js +11 -11
- package/tools/skill-validator.md +6 -6
- package/tools/validate-skills.js +10 -5
- package/web-bundles/README.md +4 -4
- package/web-bundles/brainstorming-coach/INSTRUCTIONS.md +1 -1
- package/web-bundles/bundles.json +6 -6
- package/web-bundles/market-and-industry-research/INSTRUCTIONS.md +1 -1
- package/web-bundles/prd-coach/INSTRUCTIONS.md +3 -3
- package/web-bundles/prfaq-coach/INSTRUCTIONS.md +3 -3
- package/web-bundles/product-brief-coach/INSTRUCTIONS.md +3 -3
- package/web-bundles/ux-coach/INSTRUCTIONS.md +1 -1
- package/{bmad-modules.yaml → wizz-modules.yaml} +15 -15
- package/build/site/pagefind/fragment/en_5ad92a9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_7aea5bc.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_81bcd7f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_938e9c4.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_b51d75b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_c9fea21.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_e07e982.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_f4389af.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_f52c9f9.pf_fragment +0 -0
- package/build/site/pagefind/index/en_82c64dc.pf_index +0 -0
- package/build/site/pagefind/index/en_d0dd3c7.pf_index +0 -0
- package/build/site/pagefind/index/en_e890f88.pf_index +0 -0
- package/build/site/pagefind/pagefind.en_ee1b8a17c8.pf_meta +0 -0
- /package/build/site/img/{bmad-dark.png → wizz-dark.png} +0 -0
- /package/build/site/img/{bmad-light.png → wizz-light.png} +0 -0
- /package/src/bmm-skills/1-analysis/wizz-prfaq/{bmad-manifest.json → wizz-manifest.json} +0 -0
- /package/tools/installer/{bmad-cli.js → wizz-cli.js} +0 -0
|
@@ -4,21 +4,21 @@ const yaml = require('yaml');
|
|
|
4
4
|
const fs = require('./fs-native');
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* Find the
|
|
8
|
-
* or specific
|
|
7
|
+
* Find the WIZZ project root directory by looking for package.json
|
|
8
|
+
* or specific WIZZ markers
|
|
9
9
|
*/
|
|
10
10
|
function findProjectRoot(startPath = __dirname) {
|
|
11
11
|
let currentPath = path.resolve(startPath);
|
|
12
12
|
|
|
13
|
-
// Keep going up until we find package.json with
|
|
13
|
+
// Keep going up until we find package.json with wizz-method
|
|
14
14
|
while (currentPath !== path.dirname(currentPath)) {
|
|
15
15
|
const packagePath = path.join(currentPath, 'package.json');
|
|
16
16
|
|
|
17
17
|
if (fs.existsSync(packagePath)) {
|
|
18
18
|
try {
|
|
19
19
|
const pkg = fs.readJsonSync(packagePath);
|
|
20
|
-
// Check if this is the
|
|
21
|
-
if (pkg.name === '
|
|
20
|
+
// Check if this is the WIZZ project
|
|
21
|
+
if (pkg.name === 'wizz-method' || fs.existsSync(path.join(currentPath, 'src', 'core-skills'))) {
|
|
22
22
|
return currentPath;
|
|
23
23
|
}
|
|
24
24
|
} catch {
|
|
@@ -77,7 +77,7 @@ function getModulePath(moduleName, ...segments) {
|
|
|
77
77
|
* by ExternalModuleManager during install and are not copied into <src>/modules/.
|
|
78
78
|
*/
|
|
79
79
|
function getExternalModuleCachePath(moduleName, ...segments) {
|
|
80
|
-
const base = process.env.
|
|
80
|
+
const base = process.env.WIZZ_EXTERNAL_MODULES_CACHE || path.join(os.homedir(), '.wizz', 'cache', 'external-modules');
|
|
81
81
|
return path.join(base, moduleName, ...segments);
|
|
82
82
|
}
|
|
83
83
|
|
|
@@ -85,9 +85,9 @@ function getExternalModuleCachePath(moduleName, ...segments) {
|
|
|
85
85
|
* Locate an installed module's `module.yaml` by filesystem lookup only.
|
|
86
86
|
*
|
|
87
87
|
* Built-in modules (core, bmm) live under <src>. External official modules are
|
|
88
|
-
* cloned into ~/.
|
|
88
|
+
* cloned into ~/.wizz/cache/external-modules/<name>/ with varying internal
|
|
89
89
|
* layouts (some at src/module.yaml, some at skills/module.yaml, some nested).
|
|
90
|
-
* Url-source custom modules are cloned into ~/.
|
|
90
|
+
* Url-source custom modules are cloned into ~/.wizz/cache/custom-modules/<host>/<owner>/<repo>/
|
|
91
91
|
* and are resolved by walking the cache and matching `code` or `name` from the
|
|
92
92
|
* discovered module.yaml. Local custom-source modules are not cached; their
|
|
93
93
|
* path is read from the CustomModuleManager resolution cache set during the
|
|
@@ -155,11 +155,11 @@ async function resolveInstalledModuleYaml(moduleName) {
|
|
|
155
155
|
if (found) return found;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
// Community modules are cloned to ~/.
|
|
158
|
+
// Community modules are cloned to ~/.wizz/cache/community-modules/<name>/
|
|
159
159
|
// (parallel to the external-modules cache used above). Search there too so
|
|
160
160
|
// collectAgentsFromModuleYaml and writeCentralConfig can locate community
|
|
161
161
|
// module.yaml files regardless of how nested the layout is.
|
|
162
|
-
const communityCacheRoot = path.join(os.homedir(), '.
|
|
162
|
+
const communityCacheRoot = path.join(os.homedir(), '.wizz', 'cache', 'community-modules', moduleName);
|
|
163
163
|
if (await fs.pathExists(communityCacheRoot)) {
|
|
164
164
|
const found = await searchRoot(communityCacheRoot);
|
|
165
165
|
if (found) return found;
|
|
@@ -180,15 +180,15 @@ async function resolveInstalledModuleYaml(moduleName) {
|
|
|
180
180
|
// Resolution cache unavailable — continue
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
// Fallback: url-source custom modules cloned to ~/.
|
|
183
|
+
// Fallback: url-source custom modules cloned to ~/.wizz/cache/custom-modules/.
|
|
184
184
|
// Walk every cached repo, enumerate ALL module.yaml files via searchRootAll
|
|
185
185
|
// (a single repo can host multiple plugins in discovery mode), and match by
|
|
186
186
|
// the yaml's `code` or `name` field. This works on re-install runs where
|
|
187
187
|
// _resolutionCache is empty and covers both discovery-mode (with marketplace.json)
|
|
188
|
-
// and direct-mode modules, since we identify repo roots by .
|
|
188
|
+
// and direct-mode modules, since we identify repo roots by .wizz-source.json
|
|
189
189
|
// (written by cloneRepo) or .claude-plugin/ rather than by marketplace.json.
|
|
190
190
|
try {
|
|
191
|
-
const customCacheDir = path.join(os.homedir(), '.
|
|
191
|
+
const customCacheDir = path.join(os.homedir(), '.wizz', 'cache', 'custom-modules');
|
|
192
192
|
if (await fs.pathExists(customCacheDir)) {
|
|
193
193
|
const { CustomModuleManager } = require('./modules/custom-module-manager');
|
|
194
194
|
const customMgr = new CustomModuleManager();
|
|
@@ -230,16 +230,16 @@ async function tomlHasKey(filePath, section, key) {
|
|
|
230
230
|
* (not in either file yet), team scope is the safe default.
|
|
231
231
|
*
|
|
232
232
|
* @param {Object<string, Object<string, string>>} overrides
|
|
233
|
-
* @param {string}
|
|
233
|
+
* @param {string} wizzDir absolute path to `_wizz/`
|
|
234
234
|
* @returns {Promise<Array<{module:string,key:string,scope:'team'|'user',file:string}>>}
|
|
235
235
|
* a list of applied entries (for caller logging)
|
|
236
236
|
*/
|
|
237
|
-
async function applySetOverrides(overrides,
|
|
237
|
+
async function applySetOverrides(overrides, wizzDir) {
|
|
238
238
|
const applied = [];
|
|
239
239
|
if (!overrides || typeof overrides !== 'object') return applied;
|
|
240
240
|
|
|
241
|
-
const teamPath = path.join(
|
|
242
|
-
const userPath = path.join(
|
|
241
|
+
const teamPath = path.join(wizzDir, 'config.toml');
|
|
242
|
+
const userPath = path.join(wizzDir, 'config.user.toml');
|
|
243
243
|
|
|
244
244
|
for (const moduleCode of Object.keys(overrides)) {
|
|
245
245
|
// Skip overrides for modules not actually installed. The installer writes
|
|
@@ -247,7 +247,7 @@ async function applySetOverrides(overrides, bmadDir) {
|
|
|
247
247
|
// so its presence is a reliable "is this module here?" signal that works
|
|
248
248
|
// for both fresh installs and quick-updates without coupling to caller-
|
|
249
249
|
// supplied module lists.
|
|
250
|
-
const moduleConfigYaml = path.join(
|
|
250
|
+
const moduleConfigYaml = path.join(wizzDir, moduleCode, 'config.yaml');
|
|
251
251
|
if (!(await fs.pathExists(moduleConfigYaml))) {
|
|
252
252
|
continue;
|
|
253
253
|
}
|
|
@@ -291,7 +291,7 @@ async function applySetOverrides(overrides, bmadDir) {
|
|
|
291
291
|
// value lives in the per-module yaml but won't be re-emitted into
|
|
292
292
|
// config.toml on the next install (the schema-strict partition drops
|
|
293
293
|
// it); re-pass `--set` if you need it sticky.
|
|
294
|
-
const moduleYamlPath = path.join(
|
|
294
|
+
const moduleYamlPath = path.join(wizzDir, moduleCode, 'config.yaml');
|
|
295
295
|
if (await fs.pathExists(moduleYamlPath)) {
|
|
296
296
|
try {
|
|
297
297
|
const text = await fs.readFile(moduleYamlPath, 'utf8');
|
package/tools/installer/ui.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
const path = require('node:path');
|
|
2
2
|
const os = require('node:os');
|
|
3
3
|
const semver = require('semver');
|
|
4
|
+
const yaml = require('yaml');
|
|
4
5
|
const fs = require('./fs-native');
|
|
6
|
+
const { getProjectRoot } = require('./project-root');
|
|
5
7
|
const installerPackageJson = require('../../package.json');
|
|
6
8
|
const { CLIUtils } = require('./cli-utils');
|
|
7
9
|
const { ExternalModuleManager } = require('./modules/external-manager');
|
|
@@ -15,6 +17,8 @@ const {
|
|
|
15
17
|
bundledTargetWarnings,
|
|
16
18
|
} = require('./modules/channel-plan');
|
|
17
19
|
const channelResolver = require('./modules/channel-resolver');
|
|
20
|
+
const { resolveMcps } = require('./modules/mcp-config');
|
|
21
|
+
const { resolveClis, detectClis } = require('./modules/cli-config');
|
|
18
22
|
const prompts = require('./prompts');
|
|
19
23
|
const { parseSetEntries } = require('./set-overrides');
|
|
20
24
|
|
|
@@ -110,7 +114,7 @@ async function getModuleVersion(moduleCode, { repoUrl = null, registryDefault =
|
|
|
110
114
|
* UI utilities for the installer
|
|
111
115
|
*/
|
|
112
116
|
class UI {
|
|
113
|
-
async _retainUnavailableInstalledModules(selectedModules, installedModuleIds,
|
|
117
|
+
async _retainUnavailableInstalledModules(selectedModules, installedModuleIds, wizzDir, options = {}) {
|
|
114
118
|
const { OfficialModules } = require('./modules/official-modules');
|
|
115
119
|
const officialCodes = new Set(['core']);
|
|
116
120
|
|
|
@@ -135,7 +139,7 @@ class UI {
|
|
|
135
139
|
if (!selectedSet.has(moduleId) && !options.preserveUnselected) continue;
|
|
136
140
|
if (officialCodes.has(moduleId)) continue;
|
|
137
141
|
|
|
138
|
-
const customSource = await customMgr.findModuleSourceByCode(moduleId, {
|
|
142
|
+
const customSource = await customMgr.findModuleSourceByCode(moduleId, { wizzDir });
|
|
139
143
|
if (!customSource) {
|
|
140
144
|
preserveModules.push(moduleId);
|
|
141
145
|
}
|
|
@@ -161,7 +165,7 @@ class UI {
|
|
|
161
165
|
const messageLoader = new MessageLoader();
|
|
162
166
|
await messageLoader.displayStartMessage();
|
|
163
167
|
|
|
164
|
-
// Probe the local Python before any other prompts: several
|
|
168
|
+
// Probe the local Python before any other prompts: several WIZZ features
|
|
165
169
|
// (memlog session memory, TOML config resolution) need Python 3.11+ at
|
|
166
170
|
// runtime. Warn-don't-block, but require an explicit ack so the warning
|
|
167
171
|
// can't scroll past unseen. The installer runs in the destination
|
|
@@ -213,10 +217,10 @@ class UI {
|
|
|
213
217
|
|
|
214
218
|
const { Installer } = require('./core/installer');
|
|
215
219
|
const installer = new Installer();
|
|
216
|
-
const {
|
|
220
|
+
const { wizzDir } = await installer.findWizzDir(confirmedDirectory);
|
|
217
221
|
|
|
218
|
-
// Check if there's an existing
|
|
219
|
-
const hasExistingInstall = await fs.pathExists(
|
|
222
|
+
// Check if there's an existing WIZZ installation
|
|
223
|
+
const hasExistingInstall = await fs.pathExists(wizzDir);
|
|
220
224
|
|
|
221
225
|
// Track action type (only set if there's an existing installation)
|
|
222
226
|
let actionType;
|
|
@@ -224,7 +228,7 @@ class UI {
|
|
|
224
228
|
// Only show action menu if there's an existing installation
|
|
225
229
|
if (hasExistingInstall) {
|
|
226
230
|
// Get version information
|
|
227
|
-
const { existingInstall,
|
|
231
|
+
const { existingInstall, wizzDir } = await this.getExistingInstallation(confirmedDirectory);
|
|
228
232
|
|
|
229
233
|
// Build menu choices dynamically
|
|
230
234
|
const choices = [];
|
|
@@ -321,7 +325,7 @@ class UI {
|
|
|
321
325
|
selectedModules.unshift('core');
|
|
322
326
|
}
|
|
323
327
|
|
|
324
|
-
const retainedModuleResult = await this._retainUnavailableInstalledModules(selectedModules, installedModuleIds,
|
|
328
|
+
const retainedModuleResult = await this._retainUnavailableInstalledModules(selectedModules, installedModuleIds, wizzDir, {
|
|
325
329
|
preserveUnselected: options.yes && !options.modules,
|
|
326
330
|
});
|
|
327
331
|
selectedModules = retainedModuleResult.selectedModules;
|
|
@@ -339,7 +343,7 @@ class UI {
|
|
|
339
343
|
// default Y, major default N). Legacy entries with no channel are
|
|
340
344
|
// migrated here too. Mutates channelOptions.pins to lock rejections.
|
|
341
345
|
await this._resolveUpdateChannels({
|
|
342
|
-
|
|
346
|
+
wizzDir,
|
|
343
347
|
selectedModules,
|
|
344
348
|
channelOptions,
|
|
345
349
|
yes: options.yes || false,
|
|
@@ -427,6 +431,9 @@ class UI {
|
|
|
427
431
|
await this._interactiveChannelGate({ options, channelOptions, selectedModules });
|
|
428
432
|
|
|
429
433
|
let toolSelection = await this.promptToolSelection(confirmedDirectory, options);
|
|
434
|
+
const selectedAreas = await this.selectSkillAreas(selectedModules, options);
|
|
435
|
+
const mcpPlan = await this.selectMcps(selectedModules, selectedAreas, options);
|
|
436
|
+
const cliPlan = await this.selectClis(selectedModules, selectedAreas, options);
|
|
430
437
|
const { moduleConfigs, setOverrides } = await this.collectModuleConfigs(confirmedDirectory, selectedModules, {
|
|
431
438
|
...options,
|
|
432
439
|
channelOptions,
|
|
@@ -451,6 +458,9 @@ class UI {
|
|
|
451
458
|
modules: selectedModules,
|
|
452
459
|
ides: toolSelection.ides,
|
|
453
460
|
skipIde: toolSelection.skipIde,
|
|
461
|
+
selectedAreas,
|
|
462
|
+
mcpPlan,
|
|
463
|
+
cliPlan,
|
|
454
464
|
coreConfig: moduleConfigs.core || {},
|
|
455
465
|
moduleConfigs: moduleConfigs,
|
|
456
466
|
setOverrides,
|
|
@@ -459,6 +469,206 @@ class UI {
|
|
|
459
469
|
};
|
|
460
470
|
}
|
|
461
471
|
|
|
472
|
+
/**
|
|
473
|
+
* Load and parse skills-registry.yaml from the package root.
|
|
474
|
+
* @returns {Object|null} Parsed registry, or null when absent/unreadable
|
|
475
|
+
*/
|
|
476
|
+
_loadSkillsRegistry() {
|
|
477
|
+
try {
|
|
478
|
+
const registryPath = path.join(getProjectRoot(), 'skills-registry.yaml');
|
|
479
|
+
if (!fs.existsSync(registryPath)) return null;
|
|
480
|
+
return yaml.parse(fs.readFileSync(registryPath, 'utf8'));
|
|
481
|
+
} catch {
|
|
482
|
+
return null;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* Prompt for which global-skill AREAS to install (designer, copy, seo, ...).
|
|
488
|
+
* Only relevant when the `wizz` (agency/method) module is selected. Areas come
|
|
489
|
+
* straight from skills-registry.yaml so this never diverges from the routing.
|
|
490
|
+
* Returns an empty array to mean "all areas" (the installSkillsLib sentinel).
|
|
491
|
+
* @param {string[]} selectedModules - Modules chosen for install
|
|
492
|
+
* @param {Object} options - Command-line options
|
|
493
|
+
* @returns {Promise<string[]>} Chosen area keys, or [] for all
|
|
494
|
+
*/
|
|
495
|
+
async selectSkillAreas(selectedModules, options = {}) {
|
|
496
|
+
if (!selectedModules.includes('wizz')) return [];
|
|
497
|
+
|
|
498
|
+
const registry = this._loadSkillsRegistry();
|
|
499
|
+
if (!registry || !registry.areas) return [];
|
|
500
|
+
const areaKeys = Object.keys(registry.areas);
|
|
501
|
+
if (areaKeys.length === 0) return [];
|
|
502
|
+
|
|
503
|
+
// CLI: --areas a,b,c (or 'all')
|
|
504
|
+
if (options.areas !== undefined) {
|
|
505
|
+
const raw = String(options.areas)
|
|
506
|
+
.split(',')
|
|
507
|
+
.map((s) => s.trim())
|
|
508
|
+
.filter(Boolean);
|
|
509
|
+
if (raw.includes('all')) return [];
|
|
510
|
+
const unknown = raw.filter((a) => !areaKeys.includes(a));
|
|
511
|
+
if (unknown.length > 0) {
|
|
512
|
+
await prompts.log.warn(`Áreas desconhecidas ignoradas: ${unknown.join(', ')}`);
|
|
513
|
+
}
|
|
514
|
+
return raw.filter((a) => areaKeys.includes(a));
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// Non-interactive (--yes): install every area.
|
|
518
|
+
if (options.yes) return [];
|
|
519
|
+
|
|
520
|
+
const areaOptions = areaKeys.map((key) => {
|
|
521
|
+
const summary = registry.areas[key].summary || '';
|
|
522
|
+
return { label: summary ? `${key} (${summary})` : key, value: key };
|
|
523
|
+
});
|
|
524
|
+
|
|
525
|
+
const selected = await prompts.autocompleteMultiselect({
|
|
526
|
+
message: 'Quais áreas de skills globais instalar? (vazio = todas)',
|
|
527
|
+
options: areaOptions,
|
|
528
|
+
initialValues: areaKeys,
|
|
529
|
+
required: false,
|
|
530
|
+
maxItems: 12,
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
// Empty or full selection both collapse to the "all areas" sentinel.
|
|
534
|
+
if (!selected || selected.length === 0 || selected.length === areaKeys.length) return [];
|
|
535
|
+
return selected;
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
/**
|
|
539
|
+
* Prompt for which recommended MCP servers to configure for the chosen areas.
|
|
540
|
+
* Reads the same skills-registry.yaml the installer/maestro use, so the offered
|
|
541
|
+
* servers never diverge from routing. Returns a split plan:
|
|
542
|
+
* - toWrite: entries to MERGE into the project `.mcp.json` (placeholder secrets)
|
|
543
|
+
* - toRecommend: entries to merely print as `claude mcp add ...` (nothing lost)
|
|
544
|
+
* Non-interactive (--yes/CI) writes nothing and recommends everything, so the
|
|
545
|
+
* install never touches MCP config without an explicit choice.
|
|
546
|
+
* @param {string[]} selectedModules - Modules chosen for install
|
|
547
|
+
* @param {string[]} selectedAreas - Areas resolved by selectSkillAreas ([]=all)
|
|
548
|
+
* @param {Object} options - Command-line options
|
|
549
|
+
* @returns {Promise<{toWrite: Object[], toRecommend: Object[]}>}
|
|
550
|
+
*/
|
|
551
|
+
async selectMcps(selectedModules, selectedAreas, options = {}) {
|
|
552
|
+
if (!selectedModules.includes('wizz')) return { toWrite: [], toRecommend: [] };
|
|
553
|
+
|
|
554
|
+
const registry = this._loadSkillsRegistry();
|
|
555
|
+
const resolved = resolveMcps(registry, selectedAreas);
|
|
556
|
+
if (resolved.length === 0) return { toWrite: [], toRecommend: [] };
|
|
557
|
+
|
|
558
|
+
const byId = new Map(resolved.map((m) => [m.id, m]));
|
|
559
|
+
const split = (writeIds) => {
|
|
560
|
+
const writeSet = new Set(writeIds);
|
|
561
|
+
return {
|
|
562
|
+
toWrite: resolved.filter((m) => writeSet.has(m.id)),
|
|
563
|
+
toRecommend: resolved.filter((m) => !writeSet.has(m.id)),
|
|
564
|
+
};
|
|
565
|
+
};
|
|
566
|
+
|
|
567
|
+
// CLI: --mcps a,b,c | 'all' | 'none'
|
|
568
|
+
if (options.mcps !== undefined) {
|
|
569
|
+
const raw = String(options.mcps)
|
|
570
|
+
.split(',')
|
|
571
|
+
.map((s) => s.trim())
|
|
572
|
+
.filter(Boolean);
|
|
573
|
+
if (raw.includes('none')) return split([]);
|
|
574
|
+
if (raw.includes('all')) return split(resolved.map((m) => m.id));
|
|
575
|
+
const unknown = raw.filter((id) => !byId.has(id));
|
|
576
|
+
if (unknown.length > 0) {
|
|
577
|
+
await prompts.log.warn(`MCPs desconhecidos ignorados: ${unknown.join(', ')}`);
|
|
578
|
+
}
|
|
579
|
+
return split(raw.filter((id) => byId.has(id)));
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
// Non-interactive: don't touch config, just recommend everything.
|
|
583
|
+
if (options.yes) return { toWrite: [], toRecommend: resolved };
|
|
584
|
+
|
|
585
|
+
const selected = await prompts.multiselect({
|
|
586
|
+
message: 'Quais MCPs configurar no .mcp.json? (não marcados viram comando pra rodar depois)',
|
|
587
|
+
options: resolved.map((m) => ({
|
|
588
|
+
label: m.id,
|
|
589
|
+
value: m.id,
|
|
590
|
+
hint: m.when,
|
|
591
|
+
})),
|
|
592
|
+
initialValues: resolved.map((m) => m.id),
|
|
593
|
+
required: false,
|
|
594
|
+
});
|
|
595
|
+
|
|
596
|
+
return split(selected || []);
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* Prompt for which recommended CLIs to install for the chosen areas.
|
|
601
|
+
* Reads the same skills-registry.yaml as the installer/maestro. CLIs are the
|
|
602
|
+
* tools agents shell out to (agent-browser, rtk), not MCP servers. We DETECT
|
|
603
|
+
* what's already installed first (never reinstall), then offer the missing
|
|
604
|
+
* ones. Install runs a system command (npm install -g, curl | sh), so the
|
|
605
|
+
* default is RECOMMEND-only: nothing is installed without an explicit choice.
|
|
606
|
+
* Returns a split plan:
|
|
607
|
+
* - toInstall: entries whose `install` command we run now
|
|
608
|
+
* - toRecommend: entries we merely print as a command to run later
|
|
609
|
+
* Already-installed CLIs go to neither (reported as present, no action).
|
|
610
|
+
* @param {string[]} selectedModules - Modules chosen for install
|
|
611
|
+
* @param {string[]} selectedAreas - Areas resolved by selectSkillAreas ([]=all)
|
|
612
|
+
* @param {Object} options - Command-line options
|
|
613
|
+
* @returns {Promise<{toInstall: Object[], toRecommend: Object[], alreadyInstalled: Object[]}>}
|
|
614
|
+
*/
|
|
615
|
+
async selectClis(selectedModules, selectedAreas, options = {}) {
|
|
616
|
+
const empty = { toInstall: [], toRecommend: [], alreadyInstalled: [] };
|
|
617
|
+
if (!selectedModules.includes('wizz')) return empty;
|
|
618
|
+
|
|
619
|
+
const registry = this._loadSkillsRegistry();
|
|
620
|
+
const resolved = resolveClis(registry, selectedAreas);
|
|
621
|
+
if (resolved.length === 0) return empty;
|
|
622
|
+
|
|
623
|
+
// Detect what's already on PATH so we never offer to reinstall it.
|
|
624
|
+
const detected = await detectClis(resolved);
|
|
625
|
+
const alreadyInstalled = detected.filter((c) => c.installed);
|
|
626
|
+
const missing = detected.filter((c) => !c.installed);
|
|
627
|
+
if (missing.length === 0) return { toInstall: [], toRecommend: [], alreadyInstalled };
|
|
628
|
+
|
|
629
|
+
const byId = new Map(missing.map((c) => [c.id, c]));
|
|
630
|
+
const split = (installIds) => {
|
|
631
|
+
const installSet = new Set(installIds);
|
|
632
|
+
return {
|
|
633
|
+
toInstall: missing.filter((c) => installSet.has(c.id)),
|
|
634
|
+
toRecommend: missing.filter((c) => !installSet.has(c.id)),
|
|
635
|
+
alreadyInstalled,
|
|
636
|
+
};
|
|
637
|
+
};
|
|
638
|
+
|
|
639
|
+
// CLI: --clis a,b,c | 'all' | 'none'
|
|
640
|
+
if (options.clis !== undefined) {
|
|
641
|
+
const raw = String(options.clis)
|
|
642
|
+
.split(',')
|
|
643
|
+
.map((s) => s.trim())
|
|
644
|
+
.filter(Boolean);
|
|
645
|
+
if (raw.includes('none')) return split([]);
|
|
646
|
+
if (raw.includes('all')) return split(missing.map((c) => c.id));
|
|
647
|
+
const unknown = raw.filter((id) => !byId.has(id));
|
|
648
|
+
if (unknown.length > 0) {
|
|
649
|
+
await prompts.log.warn(`CLIs desconhecidos/já instalados ignorados: ${unknown.join(', ')}`);
|
|
650
|
+
}
|
|
651
|
+
return split(raw.filter((id) => byId.has(id)));
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
// Non-interactive: don't run system commands, just recommend everything.
|
|
655
|
+
if (options.yes) return { toInstall: [], toRecommend: missing, alreadyInstalled };
|
|
656
|
+
|
|
657
|
+
// Default UNCHECKED: install runs a system command, so opt-in only.
|
|
658
|
+
const selected = await prompts.multiselect({
|
|
659
|
+
message: 'Quais CLIs instalar agora? (não marcados viram comando pra rodar depois)',
|
|
660
|
+
options: missing.map((c) => ({
|
|
661
|
+
label: c.id,
|
|
662
|
+
value: c.id,
|
|
663
|
+
hint: c.when,
|
|
664
|
+
})),
|
|
665
|
+
initialValues: [],
|
|
666
|
+
required: false,
|
|
667
|
+
});
|
|
668
|
+
|
|
669
|
+
return split(selected || []);
|
|
670
|
+
}
|
|
671
|
+
|
|
462
672
|
/**
|
|
463
673
|
* Prompt for tool/IDE selection (called after module configuration)
|
|
464
674
|
* Uses a split prompt approach:
|
|
@@ -503,8 +713,8 @@ class UI {
|
|
|
503
713
|
const { ExistingInstall } = require('./core/existing-install');
|
|
504
714
|
const { Installer } = require('./core/installer');
|
|
505
715
|
const installer = new Installer();
|
|
506
|
-
const {
|
|
507
|
-
const existingInstall = await ExistingInstall.detect(
|
|
716
|
+
const { wizzDir } = await installer.findWizzDir(projectDir || process.cwd());
|
|
717
|
+
const existingInstall = await ExistingInstall.detect(wizzDir);
|
|
508
718
|
const configuredIdes = existingInstall.ides;
|
|
509
719
|
|
|
510
720
|
// Get IDE manager to fetch available IDEs dynamically
|
|
@@ -732,17 +942,17 @@ class UI {
|
|
|
732
942
|
/**
|
|
733
943
|
* Get existing installation info and installed modules
|
|
734
944
|
* @param {string} directory - Installation directory
|
|
735
|
-
* @returns {Object} Object with existingInstall, installedModuleIds, installedModuleVersions, and
|
|
945
|
+
* @returns {Object} Object with existingInstall, installedModuleIds, installedModuleVersions, and wizzDir
|
|
736
946
|
*/
|
|
737
947
|
async getExistingInstallation(directory) {
|
|
738
948
|
const { ExistingInstall } = require('./core/existing-install');
|
|
739
949
|
const { Installer } = require('./core/installer');
|
|
740
950
|
const installer = new Installer();
|
|
741
|
-
const {
|
|
742
|
-
const existingInstall = await ExistingInstall.detect(
|
|
951
|
+
const { wizzDir } = await installer.findWizzDir(directory);
|
|
952
|
+
const existingInstall = await ExistingInstall.detect(wizzDir);
|
|
743
953
|
const installedModuleIds = new Set(existingInstall.moduleIds);
|
|
744
954
|
const installedModuleVersions = new Map();
|
|
745
|
-
const manifestModules = await manifest.getAllModuleVersions(
|
|
955
|
+
const manifestModules = await manifest.getAllModuleVersions(wizzDir);
|
|
746
956
|
|
|
747
957
|
for (const module of manifestModules) {
|
|
748
958
|
if (module?.name && module.version) {
|
|
@@ -760,7 +970,7 @@ class UI {
|
|
|
760
970
|
installedModuleVersions.set('core', existingInstall.version);
|
|
761
971
|
}
|
|
762
972
|
|
|
763
|
-
return { existingInstall, installedModuleIds, installedModuleVersions,
|
|
973
|
+
return { existingInstall, installedModuleIds, installedModuleVersions, wizzDir };
|
|
764
974
|
}
|
|
765
975
|
|
|
766
976
|
/**
|
|
@@ -1355,15 +1565,15 @@ class UI {
|
|
|
1355
1565
|
if (stats.isDirectory()) {
|
|
1356
1566
|
const files = await fs.readdir(directory);
|
|
1357
1567
|
if (files.length > 0) {
|
|
1358
|
-
// Check for any
|
|
1568
|
+
// Check for any wizz installation (any folder with _config/manifest.yaml)
|
|
1359
1569
|
const { Installer } = require('./core/installer');
|
|
1360
1570
|
const installer = new Installer();
|
|
1361
|
-
const
|
|
1362
|
-
const
|
|
1363
|
-
(await fs.pathExists(
|
|
1571
|
+
const wizzResult = await installer.findWizzDir(directory);
|
|
1572
|
+
const hasWizzInstall =
|
|
1573
|
+
(await fs.pathExists(wizzResult.wizzDir)) && (await fs.pathExists(path.join(wizzResult.wizzDir, '_config', 'manifest.yaml')));
|
|
1364
1574
|
|
|
1365
|
-
const
|
|
1366
|
-
await prompts.log.message(`Directory exists and contains ${files.length} item(s)${
|
|
1575
|
+
const wizzNote = hasWizzInstall ? ` including existing Wizz installation (${path.basename(wizzResult.wizzDir)})` : '';
|
|
1576
|
+
await prompts.log.message(`Directory exists and contains ${files.length} item(s)${wizzNote}`);
|
|
1367
1577
|
} else {
|
|
1368
1578
|
await prompts.log.message('Directory exists and is empty');
|
|
1369
1579
|
}
|
|
@@ -1601,8 +1811,8 @@ class UI {
|
|
|
1601
1811
|
const { ExistingInstall } = require('./core/existing-install');
|
|
1602
1812
|
const { Installer } = require('./core/installer');
|
|
1603
1813
|
const installer = new Installer();
|
|
1604
|
-
const {
|
|
1605
|
-
const existingInstall = await ExistingInstall.detect(
|
|
1814
|
+
const { wizzDir } = await installer.findWizzDir(directory);
|
|
1815
|
+
const existingInstall = await ExistingInstall.detect(wizzDir);
|
|
1606
1816
|
return existingInstall.ides;
|
|
1607
1817
|
}
|
|
1608
1818
|
|
|
@@ -1695,12 +1905,12 @@ class UI {
|
|
|
1695
1905
|
* @param {Object} statusData - Status data with modules, installation info, and available updates
|
|
1696
1906
|
*/
|
|
1697
1907
|
async displayStatus(statusData) {
|
|
1698
|
-
const { installation, modules, availableUpdates,
|
|
1908
|
+
const { installation, modules, availableUpdates, wizzDir } = statusData;
|
|
1699
1909
|
|
|
1700
1910
|
// Installation info
|
|
1701
1911
|
const infoLines = [
|
|
1702
1912
|
`Version: ${installation.version || 'unknown'}`,
|
|
1703
|
-
`Location: ${
|
|
1913
|
+
`Location: ${wizzDir}`,
|
|
1704
1914
|
`Installed: ${new Date(installation.installDate).toLocaleDateString()}`,
|
|
1705
1915
|
`Last Updated: ${installation.lastUpdated ? new Date(installation.lastUpdated).toLocaleDateString() : 'unknown'}`,
|
|
1706
1916
|
];
|
|
@@ -1855,10 +2065,10 @@ class UI {
|
|
|
1855
2065
|
* Decisions that freeze the current version are applied by adding a pin to
|
|
1856
2066
|
* `channelOptions.pins` so downstream clone logic honors them.
|
|
1857
2067
|
*/
|
|
1858
|
-
async _resolveUpdateChannels({
|
|
2068
|
+
async _resolveUpdateChannels({ wizzDir, selectedModules, channelOptions, yes }) {
|
|
1859
2069
|
const { Manifest } = require('./core/manifest');
|
|
1860
2070
|
const manifestObj = new Manifest();
|
|
1861
|
-
const manifest = await manifestObj.read(
|
|
2071
|
+
const manifest = await manifestObj.read(wizzDir);
|
|
1862
2072
|
const existingByName = new Map();
|
|
1863
2073
|
for (const m of manifest?.modulesDetailed || []) {
|
|
1864
2074
|
if (m?.name) existingByName.set(m.name, m);
|
|
@@ -1899,7 +2109,7 @@ class UI {
|
|
|
1899
2109
|
if (!info) continue;
|
|
1900
2110
|
// Bundled modules (core/bmm) ship with the installer binary itself —
|
|
1901
2111
|
// their version is stapled to the CLI version, not a git tag. Skip
|
|
1902
|
-
// tag-API lookups for them; the "upgrade" mechanism is `npx
|
|
2112
|
+
// tag-API lookups for them; the "upgrade" mechanism is `npx wizz@X install`.
|
|
1903
2113
|
if (info.builtIn) continue;
|
|
1904
2114
|
|
|
1905
2115
|
const repoUrl = info.url;
|
|
@@ -9,15 +9,15 @@ const yaml = require('yaml');
|
|
|
9
9
|
const chalk = require('chalk');
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Find
|
|
12
|
+
* Find WIZZ directory in project
|
|
13
13
|
*/
|
|
14
|
-
function
|
|
14
|
+
function findWizzDir(projectDir = process.cwd()) {
|
|
15
15
|
const possibleNames = ['_wizz'];
|
|
16
16
|
|
|
17
17
|
for (const name of possibleNames) {
|
|
18
|
-
const
|
|
19
|
-
if (fs.existsSync(
|
|
20
|
-
return
|
|
18
|
+
const wizzDir = path.join(projectDir, name);
|
|
19
|
+
if (fs.existsSync(wizzDir)) {
|
|
20
|
+
return wizzDir;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
@@ -84,18 +84,18 @@ async function updateManifest(manifestPath, projectRoot) {
|
|
|
84
84
|
*/
|
|
85
85
|
async function migrate(directory) {
|
|
86
86
|
const projectRoot = path.resolve(directory || process.cwd());
|
|
87
|
-
const
|
|
87
|
+
const wizzDir = findWizzDir(projectRoot);
|
|
88
88
|
|
|
89
|
-
if (!
|
|
90
|
-
console.error(chalk.red('✗ No
|
|
89
|
+
if (!wizzDir) {
|
|
90
|
+
console.error(chalk.red('✗ No WIZZ installation found in directory'));
|
|
91
91
|
process.exit(1);
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
console.log(chalk.blue.bold('🔄
|
|
94
|
+
console.log(chalk.blue.bold('🔄 WIZZ Custom Module Path Migration'));
|
|
95
95
|
console.log(chalk.dim(`Project: ${projectRoot}`));
|
|
96
|
-
console.log(chalk.dim(`
|
|
96
|
+
console.log(chalk.dim(`WIZZ Directory: ${wizzDir}`));
|
|
97
97
|
|
|
98
|
-
const manifestPath = path.join(
|
|
98
|
+
const manifestPath = path.join(wizzDir, '_config', 'manifest.yaml');
|
|
99
99
|
|
|
100
100
|
if (!fs.existsSync(manifestPath)) {
|
|
101
101
|
console.error(chalk.red('✗ No manifest.yaml found'));
|
package/tools/skill-validator.md
CHANGED
|
@@ -68,9 +68,9 @@ If no findings are generated (from either pass), the skill passes validation.
|
|
|
68
68
|
|
|
69
69
|
- **Severity:** HIGH
|
|
70
70
|
- **Applies to:** `SKILL.md`
|
|
71
|
-
- **Rule:** The `name` value must start with `
|
|
72
|
-
- **Detection:** Regex test: `^(
|
|
73
|
-
- **Fix:** Rename to comply with the format (e.g., `wizz-my-skill` ou `
|
|
71
|
+
- **Rule:** The `name` value must start with `wizz-` (motor) or `wizz-` (camada Wizz), use only lowercase letters, numbers, and single hyphens between segments.
|
|
72
|
+
- **Detection:** Regex test: `^(wizz|wizz)-[a-z0-9]+(-[a-z0-9]+)*$`.
|
|
73
|
+
- **Fix:** Rename to comply with the format (e.g., `wizz-my-skill` ou `wizz-my-skill`).
|
|
74
74
|
|
|
75
75
|
### SKILL-05 — `name` Must Match Directory Name
|
|
76
76
|
|
|
@@ -85,8 +85,8 @@ If no findings are generated (from either pass), the skill passes validation.
|
|
|
85
85
|
- **Severity:** MEDIUM
|
|
86
86
|
- **Applies to:** `SKILL.md`
|
|
87
87
|
- **Rule:** The `description` must state both what the skill does AND when to use it. Max 1024 characters.
|
|
88
|
-
- **Detection:** Check length. Look for trigger phrases like "Use when" or "Use
|
|
89
|
-
- **Fix:** Append a "Use when..." clause to the description.
|
|
88
|
+
- **Detection:** Check length. Look for trigger phrases like "Use when", "Use if", "Use para", or "Use quando" — their absence suggests the description only says _what_ but not _when_.
|
|
89
|
+
- **Fix:** Append a "Use when..." or "Use para..." clause to the description.
|
|
90
90
|
|
|
91
91
|
### SKILL-07 — SKILL.md Must Have Body Content
|
|
92
92
|
|
|
@@ -281,7 +281,7 @@ If no findings are generated (from either pass), the skill passes validation.
|
|
|
281
281
|
- **Severity:** HIGH
|
|
282
282
|
- **Applies to:** all files
|
|
283
283
|
- **Rule:** When a skill references another skill by name, the surrounding instruction must use the word "invoke". The canonical form is `Invoke the \`skill-name\` skill`. Phrases like "Read fully and follow", "Execute", "Run", "Load", "Open", or "Follow" are invalid — they imply file-level operations on a document, not skill invocation. A skill is a unit that is invoked, not a file that is read.
|
|
284
|
-
- **Detection:** Find all references to other skills by name (typically backtick-quoted skill names like \`
|
|
284
|
+
- **Detection:** Find all references to other skills by name (typically backtick-quoted skill names like \`wizz-foo\`). Check the surrounding instruction text (same sentence or directive) for file-oriented verbs: "read", "follow", "load", "execute", "run", "open". Flag any that do not use "invoke" (or a close synonym like "activate" or "launch").
|
|
285
285
|
- **Fix:** Replace the instruction with `Invoke the \`skill-name\` skill`. Remove any "read fully and follow" or similar file-oriented phrasing. Do NOT add a `skill:` prefix to the name — use natural language.
|
|
286
286
|
|
|
287
287
|
---
|