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,18 +4,18 @@ const csv = require('csv-parse/sync');
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Read the global skill-manifest.csv and return the set of canonicalIds.
|
|
7
|
-
* These define which directory entries in a target_dir are
|
|
8
|
-
* of whether they happen to start with "
|
|
7
|
+
* These define which directory entries in a target_dir are WIZZ-owned, regardless
|
|
8
|
+
* of whether they happen to start with "wizz-" (custom modules can ship skills
|
|
9
9
|
* with any prefix, e.g. "fred-cool-skill").
|
|
10
10
|
*
|
|
11
|
-
* @param {string}
|
|
11
|
+
* @param {string} wizzDir - Path to the _wizz install directory
|
|
12
12
|
* @returns {Promise<Set<string>>} Set of canonicalIds, or empty set if manifest missing
|
|
13
13
|
*/
|
|
14
|
-
async function getInstalledCanonicalIds(
|
|
14
|
+
async function getInstalledCanonicalIds(wizzDir) {
|
|
15
15
|
const ids = new Set();
|
|
16
|
-
if (!
|
|
16
|
+
if (!wizzDir) return ids;
|
|
17
17
|
|
|
18
|
-
const csvPath = path.join(
|
|
18
|
+
const csvPath = path.join(wizzDir, '_config', 'skill-manifest.csv');
|
|
19
19
|
if (!(await fs.pathExists(csvPath))) return ids;
|
|
20
20
|
|
|
21
21
|
try {
|
|
@@ -32,19 +32,19 @@ async function getInstalledCanonicalIds(bmadDir) {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
|
-
* Test whether a directory entry is
|
|
36
|
-
* Prefers the manifest's canonicalIds; falls back to the legacy "
|
|
37
|
-
* when no manifest is available (early install, ancestor lookup with no
|
|
35
|
+
* Test whether a directory entry is WIZZ-owned.
|
|
36
|
+
* Prefers the manifest's canonicalIds; falls back to the legacy "wizz" prefix
|
|
37
|
+
* when no manifest is available (early install, ancestor lookup with no wizz dir).
|
|
38
38
|
*
|
|
39
39
|
* @param {string} entry - Directory entry name
|
|
40
40
|
* @param {Set<string>|null} canonicalIds - From getInstalledCanonicalIds, or null
|
|
41
41
|
* @returns {boolean}
|
|
42
42
|
*/
|
|
43
|
-
function
|
|
43
|
+
function isWizzOwnedEntry(entry, canonicalIds) {
|
|
44
44
|
if (!entry || typeof entry !== 'string') return false;
|
|
45
|
-
if (entry.toLowerCase().startsWith('
|
|
45
|
+
if (entry.toLowerCase().startsWith('wizz-os-')) return false;
|
|
46
46
|
if (canonicalIds && canonicalIds.size > 0) return canonicalIds.has(entry);
|
|
47
|
-
return entry.toLowerCase().startsWith('
|
|
47
|
+
return entry.toLowerCase().startsWith('wizz');
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
module.exports = { getInstalledCanonicalIds,
|
|
50
|
+
module.exports = { getInstalledCanonicalIds, isWizzOwnedEntry };
|
|
@@ -4,66 +4,66 @@
|
|
|
4
4
|
* Provides utilities to convert hierarchical paths to flat naming conventions.
|
|
5
5
|
*
|
|
6
6
|
* DASH-BASED NAMING (new standard):
|
|
7
|
-
* - Agents:
|
|
8
|
-
* - Workflows/Tasks/Tools:
|
|
7
|
+
* - Agents: wizz-agent-module-name.md (with wizz-agent- prefix)
|
|
8
|
+
* - Workflows/Tasks/Tools: wizz-module-name.md
|
|
9
9
|
*
|
|
10
10
|
* Example outputs:
|
|
11
|
-
* - cis/agents/storymaster.md →
|
|
12
|
-
* - bmm/workflows/plan-project.md →
|
|
13
|
-
* - bmm/tasks/create-story.md →
|
|
14
|
-
* - core/agents/brainstorming.md →
|
|
15
|
-
* - standalone/agents/fred.md →
|
|
11
|
+
* - cis/agents/storymaster.md → wizz-agent-cis-storymaster.md
|
|
12
|
+
* - bmm/workflows/plan-project.md → wizz-bmm-plan-project.md
|
|
13
|
+
* - bmm/tasks/create-story.md → wizz-bmm-create-story.md
|
|
14
|
+
* - core/agents/brainstorming.md → wizz-agent-brainstorming.md (core agents skip module name)
|
|
15
|
+
* - standalone/agents/fred.md → wizz-agent-standalone-fred.md
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
const AGENT_SEGMENT = 'agents';
|
|
19
19
|
|
|
20
|
-
//
|
|
21
|
-
const
|
|
20
|
+
// WIZZ installation folder name - centralized constant for all installers
|
|
21
|
+
const WIZZ_FOLDER_NAME = '_wizz';
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Convert hierarchical path to flat dash-separated name (NEW STANDARD)
|
|
25
|
-
* Converts: 'bmm', 'agents', 'pm' → '
|
|
26
|
-
* Converts: 'bmm', 'workflows', 'correct-course' → '
|
|
27
|
-
* Converts: 'core', 'agents', 'brainstorming' → '
|
|
28
|
-
* Converts: 'standalone', 'agents', 'fred' → '
|
|
25
|
+
* Converts: 'bmm', 'agents', 'pm' → 'wizz-agent-bmm-pm.md'
|
|
26
|
+
* Converts: 'bmm', 'workflows', 'correct-course' → 'wizz-bmm-correct-course.md'
|
|
27
|
+
* Converts: 'core', 'agents', 'brainstorming' → 'wizz-agent-brainstorming.md' (core agents skip module name)
|
|
28
|
+
* Converts: 'standalone', 'agents', 'fred' → 'wizz-agent-standalone-fred.md'
|
|
29
29
|
*
|
|
30
30
|
* @param {string} module - Module name (e.g., 'bmm', 'core', 'standalone')
|
|
31
31
|
* @param {string} type - Artifact type ('agents', 'workflows', 'tasks', 'tools')
|
|
32
32
|
* @param {string} name - Artifact name (e.g., 'pm', 'brainstorming')
|
|
33
|
-
* @returns {string} Flat filename like '
|
|
33
|
+
* @returns {string} Flat filename like 'wizz-agent-bmm-pm.md' or 'wizz-bmm-correct-course.md'
|
|
34
34
|
*/
|
|
35
35
|
function toDashName(module, type, name) {
|
|
36
36
|
const isAgent = type === AGENT_SEGMENT;
|
|
37
37
|
|
|
38
|
-
// For core module, skip the module name: use '
|
|
38
|
+
// For core module, skip the module name: use 'wizz-agent-name.md' instead of 'wizz-agent-core-name.md'
|
|
39
39
|
if (module === 'core') {
|
|
40
|
-
return isAgent ? `
|
|
40
|
+
return isAgent ? `wizz-agent-${name}.md` : `wizz-${name}.md`;
|
|
41
41
|
}
|
|
42
42
|
// For standalone module, include 'standalone' in the name
|
|
43
43
|
if (module === 'standalone') {
|
|
44
|
-
return isAgent ? `
|
|
44
|
+
return isAgent ? `wizz-agent-standalone-${name}.md` : `wizz-standalone-${name}.md`;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
// Module artifacts:
|
|
47
|
+
// Module artifacts: wizz-module-name.md or wizz-agent-module-name.md
|
|
48
48
|
// eslint-disable-next-line unicorn/prefer-string-replace-all -- regex replace is intentional here
|
|
49
49
|
const dashName = name.replace(/\//g, '-'); // Flatten nested paths
|
|
50
|
-
return isAgent ? `
|
|
50
|
+
return isAgent ? `wizz-agent-${module}-${dashName}.md` : `wizz-${module}-${dashName}.md`;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
54
|
* Convert relative path to flat dash-separated name
|
|
55
|
-
* Converts: 'bmm/agents/pm.md' → '
|
|
56
|
-
* Converts: 'bmm/agents/tech-writer/tech-writer.md' → '
|
|
57
|
-
* Converts: 'bmm/workflows/correct-course.md' → '
|
|
58
|
-
* Converts: 'core/agents/brainstorming.md' → '
|
|
55
|
+
* Converts: 'bmm/agents/pm.md' → 'wizz-agent-bmm-pm.md'
|
|
56
|
+
* Converts: 'bmm/agents/tech-writer/tech-writer.md' → 'wizz-agent-bmm-tech-writer.md' (uses folder name)
|
|
57
|
+
* Converts: 'bmm/workflows/correct-course.md' → 'wizz-bmm-correct-course.md'
|
|
58
|
+
* Converts: 'core/agents/brainstorming.md' → 'wizz-agent-brainstorming.md' (core agents skip module name)
|
|
59
59
|
*
|
|
60
60
|
* @param {string} relativePath - Path like 'bmm/agents/pm.md'
|
|
61
|
-
* @returns {string} Flat filename like '
|
|
61
|
+
* @returns {string} Flat filename like 'wizz-agent-bmm-pm.md' or 'wizz-brainstorming.md'
|
|
62
62
|
*/
|
|
63
63
|
function toDashPath(relativePath) {
|
|
64
64
|
if (!relativePath || typeof relativePath !== 'string') {
|
|
65
65
|
// Return a safe default for invalid input
|
|
66
|
-
return '
|
|
66
|
+
return 'wizz-unknown.md';
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
// Strip common file extensions to avoid double extensions in generated filenames
|
|
@@ -90,13 +90,13 @@ function toDashPath(relativePath) {
|
|
|
90
90
|
|
|
91
91
|
/**
|
|
92
92
|
* Create custom agent dash name
|
|
93
|
-
* Creates: '
|
|
93
|
+
* Creates: 'wizz-custom-agent-fred-commit-poet.md'
|
|
94
94
|
*
|
|
95
95
|
* @param {string} agentName - Custom agent name
|
|
96
|
-
* @returns {string} Flat filename like '
|
|
96
|
+
* @returns {string} Flat filename like 'wizz-custom-agent-fred-commit-poet.md'
|
|
97
97
|
*/
|
|
98
98
|
function customAgentDashName(agentName) {
|
|
99
|
-
return `
|
|
99
|
+
return `wizz-custom-agent-${agentName}.md`;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
/**
|
|
@@ -105,17 +105,17 @@ function customAgentDashName(agentName) {
|
|
|
105
105
|
* @returns {boolean} True if filename uses dash format
|
|
106
106
|
*/
|
|
107
107
|
function isDashFormat(filename) {
|
|
108
|
-
return filename.startsWith('
|
|
108
|
+
return filename.startsWith('wizz-') && filename.includes('-');
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
/**
|
|
112
112
|
* Extract parts from a dash-formatted filename
|
|
113
|
-
* Parses: '
|
|
114
|
-
* Parses: '
|
|
115
|
-
* Parses: '
|
|
116
|
-
* Parses: 'wizz-brainstorming.md' → { prefix: '
|
|
117
|
-
* Parses: '
|
|
118
|
-
* Parses: '
|
|
113
|
+
* Parses: 'wizz-agent-bmm-pm.md' → { prefix: 'wizz', module: 'bmm', type: 'agents', name: 'pm' }
|
|
114
|
+
* Parses: 'wizz-bmm-correct-course.md' → { prefix: 'wizz', module: 'bmm', type: 'workflows', name: 'correct-course' }
|
|
115
|
+
* Parses: 'wizz-agent-brainstorming.md' → { prefix: 'wizz', module: 'core', type: 'agents', name: 'brainstorming' } (core agents)
|
|
116
|
+
* Parses: 'wizz-brainstorming.md' → { prefix: 'wizz', module: 'core', type: 'workflows', name: 'brainstorming' } (core workflows)
|
|
117
|
+
* Parses: 'wizz-agent-standalone-fred.md' → { prefix: 'wizz', module: 'standalone', type: 'agents', name: 'fred' }
|
|
118
|
+
* Parses: 'wizz-standalone-foo.md' → { prefix: 'wizz', module: 'standalone', type: 'workflows', name: 'foo' }
|
|
119
119
|
*
|
|
120
120
|
* @param {string} filename - Dash-formatted filename
|
|
121
121
|
* @returns {Object|null} Parsed parts or null if invalid format
|
|
@@ -124,7 +124,7 @@ function parseDashName(filename) {
|
|
|
124
124
|
const withoutExt = filename.replace('.md', '');
|
|
125
125
|
const parts = withoutExt.split('-');
|
|
126
126
|
|
|
127
|
-
if (parts.length < 2 || parts[0] !== '
|
|
127
|
+
if (parts.length < 2 || parts[0] !== 'wizz') {
|
|
128
128
|
return null;
|
|
129
129
|
}
|
|
130
130
|
|
|
@@ -133,9 +133,9 @@ function parseDashName(filename) {
|
|
|
133
133
|
|
|
134
134
|
if (isAgent) {
|
|
135
135
|
// This is an agent file
|
|
136
|
-
// Format:
|
|
136
|
+
// Format: wizz-agent-name (core) or wizz-agent-standalone-name or wizz-agent-module-name
|
|
137
137
|
if (parts.length >= 4 && parts[2] === 'standalone') {
|
|
138
|
-
// Standalone agent:
|
|
138
|
+
// Standalone agent: wizz-agent-standalone-name
|
|
139
139
|
return {
|
|
140
140
|
prefix: parts[0],
|
|
141
141
|
module: 'standalone',
|
|
@@ -144,7 +144,7 @@ function parseDashName(filename) {
|
|
|
144
144
|
};
|
|
145
145
|
}
|
|
146
146
|
if (parts.length === 3) {
|
|
147
|
-
// Core agent:
|
|
147
|
+
// Core agent: wizz-agent-name
|
|
148
148
|
return {
|
|
149
149
|
prefix: parts[0],
|
|
150
150
|
module: 'core',
|
|
@@ -152,7 +152,7 @@ function parseDashName(filename) {
|
|
|
152
152
|
name: parts[2],
|
|
153
153
|
};
|
|
154
154
|
} else {
|
|
155
|
-
// Module agent:
|
|
155
|
+
// Module agent: wizz-agent-module-name
|
|
156
156
|
return {
|
|
157
157
|
prefix: parts[0],
|
|
158
158
|
module: parts[2],
|
|
@@ -163,7 +163,7 @@ function parseDashName(filename) {
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
// Not an agent file - must be a workflow/tool/task
|
|
166
|
-
// If only 2 parts (
|
|
166
|
+
// If only 2 parts (wizz-name), it's a core workflow/tool/task
|
|
167
167
|
if (parts.length === 2) {
|
|
168
168
|
return {
|
|
169
169
|
prefix: parts[0],
|
|
@@ -173,7 +173,7 @@ function parseDashName(filename) {
|
|
|
173
173
|
};
|
|
174
174
|
}
|
|
175
175
|
|
|
176
|
-
// Check for standalone non-agent:
|
|
176
|
+
// Check for standalone non-agent: wizz-standalone-name
|
|
177
177
|
if (parts[1] === 'standalone') {
|
|
178
178
|
return {
|
|
179
179
|
prefix: parts[0],
|
|
@@ -183,7 +183,7 @@ function parseDashName(filename) {
|
|
|
183
183
|
};
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
// Otherwise, it's a module workflow/tool/task (
|
|
186
|
+
// Otherwise, it's a module workflow/tool/task (wizz-module-name)
|
|
187
187
|
return {
|
|
188
188
|
prefix: parts[0],
|
|
189
189
|
module: parts[1],
|
|
@@ -194,11 +194,11 @@ function parseDashName(filename) {
|
|
|
194
194
|
|
|
195
195
|
/**
|
|
196
196
|
* Resolve the skill name for an artifact.
|
|
197
|
-
* Prefers canonicalId from a
|
|
197
|
+
* Prefers canonicalId from a wizz-skill-manifest.yaml sidecar when available,
|
|
198
198
|
* falling back to the path-derived name from toDashPath().
|
|
199
199
|
*
|
|
200
200
|
* @param {Object} artifact - Artifact object (must have relativePath; may have canonicalId)
|
|
201
|
-
* @returns {string} Filename like 'wizz-create-prd.md' or '
|
|
201
|
+
* @returns {string} Filename like 'wizz-create-prd.md' or 'wizz-agent-bmm-pm.md'
|
|
202
202
|
*/
|
|
203
203
|
function resolveSkillName(artifact) {
|
|
204
204
|
if (artifact.canonicalId) {
|
|
@@ -215,5 +215,5 @@ module.exports = {
|
|
|
215
215
|
isDashFormat,
|
|
216
216
|
parseDashName,
|
|
217
217
|
AGENT_SEGMENT,
|
|
218
|
-
|
|
218
|
+
WIZZ_FOLDER_NAME,
|
|
219
219
|
};
|
|
@@ -3,14 +3,14 @@ const fs = require('../../fs-native');
|
|
|
3
3
|
const yaml = require('yaml');
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Load
|
|
6
|
+
* Load wizz-skill-manifest.yaml from a directory.
|
|
7
7
|
* Single-entry manifests (canonicalId at top level) apply to all files in the directory.
|
|
8
8
|
* Multi-entry manifests are keyed by source filename.
|
|
9
|
-
* @param {string} dirPath - Directory to check for
|
|
9
|
+
* @param {string} dirPath - Directory to check for wizz-skill-manifest.yaml
|
|
10
10
|
* @returns {Object|null} Parsed manifest or null
|
|
11
11
|
*/
|
|
12
12
|
async function loadSkillManifest(dirPath) {
|
|
13
|
-
const manifestPath = path.join(dirPath, '
|
|
13
|
+
const manifestPath = path.join(dirPath, 'wizz-skill-manifest.yaml');
|
|
14
14
|
try {
|
|
15
15
|
if (!(await fs.pathExists(manifestPath))) return null;
|
|
16
16
|
const content = await fs.readFile(manifestPath, 'utf8');
|
|
@@ -19,7 +19,7 @@ async function loadSkillManifest(dirPath) {
|
|
|
19
19
|
if (parsed.canonicalId || parsed.type) return { __single: parsed };
|
|
20
20
|
return parsed;
|
|
21
21
|
} catch (error) {
|
|
22
|
-
console.warn(`Warning: Failed to parse
|
|
22
|
+
console.warn(`Warning: Failed to parse wizz-skill-manifest.yaml in ${dirPath}: ${error.message}`);
|
|
23
23
|
return null;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -18,7 +18,7 @@ startMessage: |
|
|
|
18
18
|
⭐ SUPPORT THE PROJECT:
|
|
19
19
|
Star us: https://github.com/wizzcomms/wizz-method/
|
|
20
20
|
|
|
21
|
-
Built on BMAD Core (MIT) by
|
|
21
|
+
Built on BMAD Core (MIT) by Wizz Code — https://github.com/bmad-code-org/WIZZ-METHOD
|
|
22
22
|
|
|
23
23
|
Docs, and latest updates: https://method.wizzcomms.com/
|
|
24
24
|
|
|
@@ -21,7 +21,7 @@ async function readModuleCode(yamlPath) {
|
|
|
21
21
|
/**
|
|
22
22
|
* Discover module.yaml files for officials we can read locally:
|
|
23
23
|
* - core, bmm: bundled in src/ (always present)
|
|
24
|
-
* - external officials: only if previously cloned to ~/.
|
|
24
|
+
* - external officials: only if previously cloned to ~/.wizz/cache/external-modules/
|
|
25
25
|
*
|
|
26
26
|
* Each result's `code` is the `code:` field from the module.yaml when present;
|
|
27
27
|
* that's the value `--set <module>.<key>=<value>` matches against.
|
|
@@ -77,7 +77,7 @@ async function discoverOfficialModuleYamls() {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
// External cache (~/.
|
|
80
|
+
// External cache (~/.wizz/cache/external-modules/<code>/...).
|
|
81
81
|
const cacheRoot = getExternalModuleCachePath('').replace(/\/$/, '');
|
|
82
82
|
if (await fs.pathExists(cacheRoot)) {
|
|
83
83
|
const rawEntries = await fs.readdir(cacheRoot, { withFileTypes: true });
|
|
@@ -164,7 +164,7 @@ async function formatOptionsList(moduleCode) {
|
|
|
164
164
|
'',
|
|
165
165
|
'Built-in modules (core, bmm) are always available. External officials',
|
|
166
166
|
'appear here after they have been installed at least once on this machine',
|
|
167
|
-
'(they are cached under ~/.
|
|
167
|
+
'(they are cached under ~/.wizz/cache/external-modules/).',
|
|
168
168
|
'',
|
|
169
169
|
'For community or custom modules, read the module.yaml file in that',
|
|
170
170
|
"module's source repository directly.",
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* We build the plan from:
|
|
8
8
|
* 1. CLI flags (--channel / --all-* / --next=CODE / --pin CODE=TAG)
|
|
9
9
|
* 2. Interactive answers (the "all stable?" gate + per-module picker)
|
|
10
|
-
* 3. Registry defaults (default_channel from
|
|
10
|
+
* 3. Registry defaults (default_channel from wizz-modules.yaml)
|
|
11
11
|
* 4. Hardcoded fallback 'stable'
|
|
12
12
|
*
|
|
13
13
|
* Precedence: --pin > --next=CODE > --channel (global) > registry default > 'stable'.
|
|
@@ -17,7 +17,7 @@ const semver = require('semver');
|
|
|
17
17
|
|
|
18
18
|
const GITHUB_API_BASE = 'https://api.github.com';
|
|
19
19
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
20
|
-
const USER_AGENT = '
|
|
20
|
+
const USER_AGENT = 'wizz-method-installer';
|
|
21
21
|
|
|
22
22
|
// Per-process cache: { 'owner/repo' => string[] sorted desc } of pure-semver tags.
|
|
23
23
|
const tagCache = new Map();
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// Resolves + installs the command-line tools the agents shell out to.
|
|
2
|
+
//
|
|
3
|
+
// Sibling of modules/mcp-config.js. Where MCPs are *servers* merged into the
|
|
4
|
+
// project's .mcp.json, CLIs are *binaries* the agents call directly (e.g.
|
|
5
|
+
// `agent-browser` for browser verification, `rtk` for token economy). The
|
|
6
|
+
// skills-registry.yaml is the single source of truth for both: each AREA may
|
|
7
|
+
// declare a `clis:` list, plus a top-level `cli_utility:` for cross-cutting
|
|
8
|
+
// tools. Each entry has:
|
|
9
|
+
// id — the command name (used to detect + label)
|
|
10
|
+
// when — when this CLI helps (same disambiguation role as skills' `when`)
|
|
11
|
+
// check — command run to detect if it is ALREADY installed (e.g. `x --version`)
|
|
12
|
+
// install — command run to install it (e.g. `npm install -g x`, `curl … | sh`)
|
|
13
|
+
//
|
|
14
|
+
// Design rules (deliberately conservative, mirroring mcp-config):
|
|
15
|
+
// - DETECT FIRST: never reinstall something already on PATH. `check` decides.
|
|
16
|
+
// - INSTALL IS OPT-IN: the caller (the interactive multiselect / --clis flag)
|
|
17
|
+
// decides what to actually install; everything else is merely recommended
|
|
18
|
+
// by printing its `install` command. Nothing runs without an explicit choice.
|
|
19
|
+
// - NO-OP WHEN ABSENT: missing registry / no CLIs => empty, runs nothing.
|
|
20
|
+
// - FAILURE NEVER THROWS UPSTREAM: installClis collects failures and returns
|
|
21
|
+
// them so a bad network / EACCES never aborts the whole install.
|
|
22
|
+
//
|
|
23
|
+
// The install/check commands come from our own registry (not user input), and
|
|
24
|
+
// running them (npm install -g, curl | sh) is inherently a trust-the-source
|
|
25
|
+
// operation — hence install is opt-in and recommend-only by default.
|
|
26
|
+
|
|
27
|
+
const { exec } = require('node:child_process');
|
|
28
|
+
const { promisify } = require('node:util');
|
|
29
|
+
|
|
30
|
+
const execAsync = promisify(exec);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Default command runner: runs a shell command, never throws. A non-zero exit
|
|
34
|
+
* resolves to `{ ok: false, ... }` so callers branch on `ok`, not exceptions.
|
|
35
|
+
* Uses a shell so registry commands with pipes (`curl … | sh`) work as written.
|
|
36
|
+
* @param {string} command - Full shell command to run
|
|
37
|
+
* @param {{timeoutMs?: number}} [opts]
|
|
38
|
+
* @returns {Promise<{ok: boolean, stdout: string, stderr: string}>}
|
|
39
|
+
*/
|
|
40
|
+
async function defaultExec(command, { timeoutMs = 300_000 } = {}) {
|
|
41
|
+
try {
|
|
42
|
+
const { stdout, stderr } = await execAsync(command, { timeout: timeoutMs });
|
|
43
|
+
return { ok: true, stdout: stdout || '', stderr: stderr || '' };
|
|
44
|
+
} catch (error) {
|
|
45
|
+
return { ok: false, stdout: error.stdout || '', stderr: error.stderr || error.message || '' };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the recommended CLI entries for the chosen areas, deduped by id.
|
|
51
|
+
* Empty / undefined / containing 'all' means every area. The cross-cutting
|
|
52
|
+
* `cli_utility:` tools are always included. Entries missing `id` or `install`
|
|
53
|
+
* are dropped — a CLI we cannot install is not actionable.
|
|
54
|
+
*
|
|
55
|
+
* @param {Object} registry - Parsed skills-registry.yaml
|
|
56
|
+
* @param {string[]} [selectedAreas] - Area keys to resolve
|
|
57
|
+
* @returns {Array<{id: string, when: string, check: string, install: string, areas: string[]}>}
|
|
58
|
+
*/
|
|
59
|
+
function resolveClis(registry, selectedAreas) {
|
|
60
|
+
const byId = new Map();
|
|
61
|
+
const areas = (registry && registry.areas) || {};
|
|
62
|
+
const wantAll = !selectedAreas || selectedAreas.length === 0 || selectedAreas.includes('all');
|
|
63
|
+
const chosen = wantAll ? Object.keys(areas) : selectedAreas;
|
|
64
|
+
|
|
65
|
+
const add = (cli, areaKey) => {
|
|
66
|
+
if (!cli || !cli.id || !cli.install) return; // not actionable without an install command
|
|
67
|
+
const existing = byId.get(cli.id);
|
|
68
|
+
if (existing) {
|
|
69
|
+
if (areaKey && !existing.areas.includes(areaKey)) existing.areas.push(areaKey);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
byId.set(cli.id, {
|
|
73
|
+
id: cli.id,
|
|
74
|
+
when: cli.when || '',
|
|
75
|
+
check: cli.check || '',
|
|
76
|
+
install: cli.install,
|
|
77
|
+
areas: areaKey ? [areaKey] : [],
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
for (const area of chosen) {
|
|
82
|
+
for (const cli of (areas[area] && areas[area].clis) || []) add(cli, area);
|
|
83
|
+
}
|
|
84
|
+
// Cross-cutting tools are offered regardless of area selection.
|
|
85
|
+
for (const cli of (registry && registry.cli_utility) || []) add(cli, null);
|
|
86
|
+
|
|
87
|
+
return [...byId.values()];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The copy-pasteable install command for a CLI entry — used to recommend the
|
|
92
|
+
* tools the user chose NOT to install (nothing is lost; they run it later).
|
|
93
|
+
* @param {{install?: string}} cli - Resolved CLI entry
|
|
94
|
+
* @returns {string} The install command, or '' if none.
|
|
95
|
+
*/
|
|
96
|
+
function renderInstallCommand(cli) {
|
|
97
|
+
return (cli && cli.install) || '';
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Annotate each CLI with `installed: boolean` by running its `check` command.
|
|
102
|
+
* Immutable: returns new objects, never mutates the input. An entry without a
|
|
103
|
+
* `check` cannot be verified, so it is reported as not installed (we offer it
|
|
104
|
+
* rather than silently assume it is present).
|
|
105
|
+
*
|
|
106
|
+
* @param {Array<Object>} clis - Resolved CLI entries
|
|
107
|
+
* @param {Function} [exec] - Injected runner (command, opts) => {ok,...}
|
|
108
|
+
* @returns {Promise<Array<Object>>} Copies with an added `installed` flag.
|
|
109
|
+
*/
|
|
110
|
+
async function detectClis(clis, exec = defaultExec) {
|
|
111
|
+
return Promise.all(
|
|
112
|
+
(clis || []).map(async (cli) => {
|
|
113
|
+
if (!cli.check) return { ...cli, installed: false };
|
|
114
|
+
const res = await exec(cli.check, { timeoutMs: 5000 });
|
|
115
|
+
return { ...cli, installed: !!res.ok };
|
|
116
|
+
}),
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Run the install command for each CLI, collecting outcomes. Never throws:
|
|
122
|
+
* a failed install (network, EACCES, missing command) lands in `failed` with
|
|
123
|
+
* its error so the caller can warn and continue the broader install.
|
|
124
|
+
*
|
|
125
|
+
* @param {Object} args
|
|
126
|
+
* @param {Array<{id: string, install?: string}>} args.clis - Entries to install
|
|
127
|
+
* @param {Function} [args.exec] - Injected runner (command, opts) => {ok,...}
|
|
128
|
+
* @returns {Promise<{installed: string[], failed: Array<{id: string, error: string}>}>}
|
|
129
|
+
*/
|
|
130
|
+
async function installClis({ clis, exec = defaultExec }) {
|
|
131
|
+
const installed = [];
|
|
132
|
+
const failed = [];
|
|
133
|
+
for (const cli of clis || []) {
|
|
134
|
+
if (!cli.install) {
|
|
135
|
+
failed.push({ id: cli.id, error: 'sem comando de instalação no registry' });
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const res = await exec(cli.install, { timeoutMs: 300_000 });
|
|
139
|
+
if (res.ok) installed.push(cli.id);
|
|
140
|
+
else failed.push({ id: cli.id, error: (res.stderr || 'falha desconhecida').trim() });
|
|
141
|
+
}
|
|
142
|
+
return { installed, failed };
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
module.exports = { resolveClis, renderInstallCommand, detectClis, installClis, defaultExec };
|
|
@@ -354,7 +354,7 @@ class CustomModuleManager {
|
|
|
354
354
|
* @returns {string} Path to the custom modules cache directory
|
|
355
355
|
*/
|
|
356
356
|
getCacheDir() {
|
|
357
|
-
return path.join(os.homedir(), '.
|
|
357
|
+
return path.join(os.homedir(), '.wizz', 'cache', 'custom-modules');
|
|
358
358
|
}
|
|
359
359
|
|
|
360
360
|
/**
|
|
@@ -390,11 +390,11 @@ class CustomModuleManager {
|
|
|
390
390
|
};
|
|
391
391
|
|
|
392
392
|
// If an existing cache exists but was cloned at a different version, re-clone.
|
|
393
|
-
// Tracked via .
|
|
393
|
+
// Tracked via .wizz-source.json's recorded version.
|
|
394
394
|
if (await fs.pathExists(repoCacheDir)) {
|
|
395
395
|
let cachedVersion = null;
|
|
396
396
|
try {
|
|
397
|
-
const existing = await fs.readJson(path.join(repoCacheDir, '.
|
|
397
|
+
const existing = await fs.readJson(path.join(repoCacheDir, '.wizz-source.json'));
|
|
398
398
|
cachedVersion = existing?.version || null;
|
|
399
399
|
} catch {
|
|
400
400
|
// no metadata; treat as mismatched to be safe if a version was requested
|
|
@@ -511,7 +511,7 @@ class CustomModuleManager {
|
|
|
511
511
|
} catch {
|
|
512
512
|
// Fallback to previous marker value when symbolic ref is unavailable.
|
|
513
513
|
try {
|
|
514
|
-
const existingMarker = await fs.readJson(path.join(repoCacheDir, '.
|
|
514
|
+
const existingMarker = await fs.readJson(path.join(repoCacheDir, '.wizz-channel.json'));
|
|
515
515
|
if (existingMarker?.channel === 'next' && typeof existingMarker.version === 'string' && existingMarker.version.trim()) {
|
|
516
516
|
defaultRef = existingMarker.version.trim();
|
|
517
517
|
}
|
|
@@ -522,7 +522,7 @@ class CustomModuleManager {
|
|
|
522
522
|
}
|
|
523
523
|
|
|
524
524
|
// Write source metadata for later URL reconstruction
|
|
525
|
-
const metadataPath = path.join(repoCacheDir, '.
|
|
525
|
+
const metadataPath = path.join(repoCacheDir, '.wizz-source.json');
|
|
526
526
|
await fs.writeJson(metadataPath, {
|
|
527
527
|
cloneUrl: parsed.cloneUrl,
|
|
528
528
|
cacheKey: parsed.cacheKey,
|
|
@@ -535,7 +535,7 @@ class CustomModuleManager {
|
|
|
535
535
|
// Keep a channel marker in custom cache too so update paths that rely on
|
|
536
536
|
// channel metadata (same as official-module cache) can treat this clone as
|
|
537
537
|
// refreshable. URL + no explicit ref => next, explicit ref => pinned.
|
|
538
|
-
await fs.writeJson(path.join(repoCacheDir, '.
|
|
538
|
+
await fs.writeJson(path.join(repoCacheDir, '.wizz-channel.json'), {
|
|
539
539
|
channel: effectiveVersion ? 'pinned' : 'next',
|
|
540
540
|
version: effectiveVersion || defaultRef,
|
|
541
541
|
sha: resolvedSha,
|
|
@@ -584,7 +584,7 @@ class CustomModuleManager {
|
|
|
584
584
|
let cloneMetadata = null;
|
|
585
585
|
if (sourceUrl) {
|
|
586
586
|
try {
|
|
587
|
-
cloneMetadata = await fs.readJson(path.join(repoPath, '.
|
|
587
|
+
cloneMetadata = await fs.readJson(path.join(repoPath, '.wizz-source.json'));
|
|
588
588
|
} catch {
|
|
589
589
|
// no metadata — local-source or legacy cache
|
|
590
590
|
}
|
|
@@ -708,7 +708,7 @@ class CustomModuleManager {
|
|
|
708
708
|
// Quick-update path: refresh URL-backed cached repos before reading
|
|
709
709
|
// files from them so re-deploy uses latest commits for `next` and
|
|
710
710
|
// the pinned ref for `pinned`.
|
|
711
|
-
if (options.
|
|
711
|
+
if (options.wizzDir && metadata?.rawInput) {
|
|
712
712
|
await this._refreshRepoCacheOnce(repoPath, metadata);
|
|
713
713
|
}
|
|
714
714
|
|
|
@@ -766,7 +766,7 @@ class CustomModuleManager {
|
|
|
766
766
|
* Refresh one cached repo at most once per process with in-flight dedupe.
|
|
767
767
|
* Prevents concurrent quick-update callers from racing the same cache path.
|
|
768
768
|
* @param {string} repoPath - Absolute cache repo path
|
|
769
|
-
* @param {Object} metadata - Parsed .
|
|
769
|
+
* @param {Object} metadata - Parsed .wizz-source.json metadata
|
|
770
770
|
*/
|
|
771
771
|
async _refreshRepoCacheOnce(repoPath, metadata) {
|
|
772
772
|
if (CustomModuleManager._refreshedRepoPaths.has(repoPath)) return;
|
|
@@ -806,7 +806,7 @@ class CustomModuleManager {
|
|
|
806
806
|
* Used as fallback when the module was installed from a local source (no cache entry).
|
|
807
807
|
* Returns the path only if it still exists on disk; never removes installed files.
|
|
808
808
|
* @param {string} moduleCode - Module code to search for
|
|
809
|
-
* @param {Object} [options] - Options (must include
|
|
809
|
+
* @param {Object} [options] - Options (must include wizzDir or will search common locations)
|
|
810
810
|
* @returns {string|null} Path to the local module source or null
|
|
811
811
|
*/
|
|
812
812
|
async _findLocalSourceFromManifest(moduleCode, options = {}) {
|
|
@@ -814,11 +814,11 @@ class CustomModuleManager {
|
|
|
814
814
|
const { Manifest } = require('../core/manifest');
|
|
815
815
|
const manifestObj = new Manifest();
|
|
816
816
|
|
|
817
|
-
// Try to find
|
|
818
|
-
const
|
|
819
|
-
if (!
|
|
817
|
+
// Try to find wizzDir from options or common locations
|
|
818
|
+
const wizzDir = options.wizzDir;
|
|
819
|
+
if (!wizzDir) return null;
|
|
820
820
|
|
|
821
|
-
const manifestData = await manifestObj.read(
|
|
821
|
+
const manifestData = await manifestObj.read(wizzDir);
|
|
822
822
|
if (!manifestData?.modulesDetailed) return null;
|
|
823
823
|
|
|
824
824
|
const moduleEntry = manifestData.modulesDetailed.find((m) => m.name === moduleCode);
|
|
@@ -837,7 +837,7 @@ class CustomModuleManager {
|
|
|
837
837
|
|
|
838
838
|
/**
|
|
839
839
|
* Recursively find repo root directories within the cache.
|
|
840
|
-
* A repo root is identified by containing .
|
|
840
|
+
* A repo root is identified by containing .wizz-source.json (new) or .claude-plugin/ (legacy).
|
|
841
841
|
* Handles both 3-level (host/owner/repo) and legacy 2-level (owner/repo) cache layouts.
|
|
842
842
|
* @param {string} dir - Directory to search
|
|
843
843
|
* @param {number} [depth=0] - Current recursion depth
|
|
@@ -848,7 +848,7 @@ class CustomModuleManager {
|
|
|
848
848
|
const results = [];
|
|
849
849
|
|
|
850
850
|
// Check if this directory is a repo root
|
|
851
|
-
const metadataPath = path.join(dir, '.
|
|
851
|
+
const metadataPath = path.join(dir, '.wizz-source.json');
|
|
852
852
|
const claudePluginDir = path.join(dir, '.claude-plugin');
|
|
853
853
|
|
|
854
854
|
if (await fs.pathExists(metadataPath)) {
|