wizz-method 1.4.1 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/package.json +39 -3
- package/skills-registry.yaml +109 -8
- package/src/bmm-skills/4-implementation/wizz-code-review/SKILL.md +2 -0
- package/src/bmm-skills/4-implementation/wizz-quick-dev/SKILL.md +5 -2
- package/src/core-skills/_shared/handoff-protocol.md +61 -0
- package/src/core-skills/wizz-customize/SKILL.md +2 -2
- package/src/core-skills/wizz-party-mode/references/mode-agent-team.md +1 -1
- package/src/core-skills/wizz-party-mode/references/mode-subagent.md +1 -1
- package/src/core-skills/wizz-review-adversarial-general/SKILL.md +2 -0
- package/src/modules/wizz/README.md +3 -3
- package/src/modules/wizz/_shared/communication-rules.md +13 -0
- package/src/modules/wizz/_shared/encerramento.md +2 -2
- package/src/modules/wizz/agents/wizz-ads/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-copy/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-designer/SKILL.md +2 -2
- package/src/modules/wizz/agents/wizz-designer/customize.toml +6 -4
- package/src/modules/wizz/agents/wizz-growth/customize.toml +11 -3
- package/src/modules/wizz/agents/wizz-maestro/SKILL.md +9 -5
- package/src/modules/wizz/agents/wizz-maestro/customize.toml +5 -7
- package/src/modules/wizz/agents/wizz-memoria/customize.toml +2 -4
- package/src/modules/wizz/agents/wizz-qa/SKILL.md +5 -5
- package/src/modules/wizz/agents/wizz-qa/customize.toml +9 -7
- package/src/modules/wizz/agents/wizz-seo/customize.toml +5 -3
- package/src/modules/wizz/agents/wizz-social/customize.toml +9 -8
- package/src/modules/wizz/module.yaml +1 -1
- package/src/modules/wizz/overrides/wizz-agent-analyst.toml +4 -5
- package/src/modules/wizz/overrides/wizz-agent-architect.toml +11 -3
- package/src/modules/wizz/overrides/wizz-agent-dev.toml +6 -4
- package/src/modules/wizz/overrides/wizz-agent-pm.toml +4 -2
- package/src/modules/wizz/overrides/wizz-agent-tech-writer.toml +3 -5
- package/src/modules/wizz/overrides/wizz-agent-ux-designer.toml +4 -2
- package/src/modules/wizz/scripts/wizz-init.mjs +3 -1
- package/src/scripts/__pycache__/resolve_customization.cpython-314.pyc +0 -0
- package/src/scripts/memlog.py +9 -0
- package/src/scripts/resolve_customization.py +93 -3
- package/src/skills-lib/adversarial-reviewer/SKILL.md +2 -0
- package/src/skills-lib/algorithmic-art/SKILL.md +29 -369
- package/src/skills-lib/algorithmic-art/references/interactive-artifact.md +139 -0
- package/src/skills-lib/algorithmic-art/references/p5js-implementation.md +121 -0
- package/src/skills-lib/algorithmic-art/references/philosophy-creation.md +88 -0
- package/src/skills-lib/canvas-design/SKILL.md +9 -38
- package/src/skills-lib/canvas-design/references/canvas-execution.md +21 -0
- package/src/skills-lib/canvas-design/references/philosophy-examples.md +25 -0
- package/src/skills-lib/cerebro/SKILL.md +8 -273
- package/src/skills-lib/cerebro/references/comandos-pesquisa-e-sync.md +44 -0
- package/src/skills-lib/cerebro/references/comandos-rotina-e-captura.md +94 -0
- package/src/skills-lib/cerebro/references/comandos-sessao.md +122 -0
- package/src/skills-lib/content-strategy/SKILL.md +12 -316
- package/src/skills-lib/content-strategy/references/content-types.md +52 -0
- package/src/skills-lib/content-strategy/references/ideation-sources.md +78 -0
- package/src/skills-lib/content-strategy/references/pillars-and-keywords.md +78 -0
- package/src/skills-lib/content-strategy/references/prioritization-and-output.md +57 -0
- package/src/skills-lib/decision-maker/SKILL.md +13 -466
- package/src/skills-lib/decision-maker/references/commands-and-edge-cases.md +40 -0
- package/src/skills-lib/decision-maker/references/output-format.md +161 -0
- package/src/skills-lib/decision-maker/references/references-and-extraction.md +129 -0
- package/src/skills-lib/decision-maker/references/six-decisions.md +122 -0
- package/src/skills-lib/decision-maker/references/wizz-method-handoff.md +22 -0
- package/src/skills-lib/find-skills/SKILL.md +9 -6
- package/src/skills-lib/form-cro/SKILL.md +12 -390
- package/src/skills-lib/form-cro/references/experiments.md +73 -0
- package/src/skills-lib/form-cro/references/field-optimization.md +92 -0
- package/src/skills-lib/form-cro/references/flow-and-errors.md +71 -0
- package/src/skills-lib/form-cro/references/measurement-output.md +41 -0
- package/src/skills-lib/form-cro/references/trust-and-form-types.md +54 -0
- package/src/skills-lib/graphify/SKILL.md +2 -20
- package/src/skills-lib/huashu-design/SKILL.md +42 -596
- package/src/skills-lib/huashu-design/references/anti-slop-principles.md +62 -0
- package/src/skills-lib/huashu-design/references/audio-design-rules.md +1 -1
- package/src/skills-lib/huashu-design/references/cross-agent-adaptation.md +14 -0
- package/src/skills-lib/huashu-design/references/design-direction-fallback.md +113 -0
- package/src/skills-lib/huashu-design/references/exception-handling.md +18 -0
- package/src/skills-lib/huashu-design/references/fact-verification.md +36 -0
- package/src/skills-lib/huashu-design/references/ios-prototype.md +146 -0
- package/src/skills-lib/huashu-design/references/sfx-library.md +7 -0
- package/src/skills-lib/huashu-design/references/starter-components.md +24 -0
- package/src/skills-lib/huashu-design/references/video-export.md +1 -1
- package/src/skills-lib/huashu-design/references/watermark-policy.md +23 -0
- package/src/skills-lib/huashu-design/scripts/add-music.sh +12 -1
- package/src/skills-lib/huashu-design/scripts/mix-voiceover.sh +11 -0
- package/src/skills-lib/humanizer/SKILL.md +23 -431
- package/src/skills-lib/humanizer/references/ai-writing-patterns.md +314 -0
- package/src/skills-lib/humanizer/references/full-example.md +72 -0
- package/src/skills-lib/humanizer/references/personality-and-soul.md +36 -0
- package/src/skills-lib/impeccable/SKILL.md +37 -153
- package/src/skills-lib/impeccable/references/design-rules.md +95 -0
- package/src/skills-lib/impeccable/references/pin-unpin-and-hooks.md +17 -0
- package/src/skills-lib/impeccable/references/routing-rules.md +28 -0
- package/src/skills-lib/implementation-planner/SKILL.md +22 -529
- package/src/skills-lib/implementation-planner/references/folder-structure-and-dependencies.md +132 -0
- package/src/skills-lib/implementation-planner/references/handoff-template.md +34 -0
- package/src/skills-lib/implementation-planner/references/implementation-phases.md +54 -0
- package/src/skills-lib/implementation-planner/references/implementation-types.md +28 -0
- package/src/skills-lib/implementation-planner/references/motion-path-implementation.md +57 -0
- package/src/skills-lib/implementation-planner/references/output-templates.md +92 -0
- package/src/skills-lib/implementation-planner/references/performance-plan.md +52 -0
- package/src/skills-lib/inicio-de-projeto/SKILL.md +4 -224
- package/src/skills-lib/inicio-de-projeto/references/implementacao-api-forms.md +112 -0
- package/src/skills-lib/inicio-de-projeto/references/padroes-arquiteturais-e-pastas.md +71 -0
- package/src/skills-lib/inicio-de-projeto/references/seguranca-e-regras-codigo.md +26 -0
- package/src/skills-lib/launch-strategy/SKILL.md +9 -311
- package/src/skills-lib/launch-strategy/references/five-phase-approach.md +76 -0
- package/src/skills-lib/launch-strategy/references/launch-checklist.md +34 -0
- package/src/skills-lib/launch-strategy/references/orb-framework.md +76 -0
- package/src/skills-lib/launch-strategy/references/post-launch-and-ongoing.md +64 -0
- package/src/skills-lib/launch-strategy/references/product-hunt-strategy.md +52 -0
- package/src/skills-lib/marketing-psychology/SKILL.md +18 -401
- package/src/skills-lib/marketing-psychology/references/design-and-delivery-models.md +56 -0
- package/src/skills-lib/marketing-psychology/references/foundational-thinking-models.md +76 -0
- package/src/skills-lib/marketing-psychology/references/growth-and-scaling-models.md +46 -0
- package/src/skills-lib/marketing-psychology/references/influencing-behavior.md +71 -0
- package/src/skills-lib/marketing-psychology/references/pricing-psychology.md +31 -0
- package/src/skills-lib/marketing-psychology/references/understanding-buyers.md +116 -0
- package/src/skills-lib/motion-3d-director/SKILL.md +23 -370
- package/src/skills-lib/motion-3d-director/references/image-to-video-workflow.md +166 -0
- package/src/skills-lib/motion-3d-director/references/motion-paths.md +119 -0
- package/src/skills-lib/motion-3d-director/references/performance-and-handoff.md +51 -0
- package/src/skills-lib/popup-cro/SKILL.md +11 -414
- package/src/skills-lib/popup-cro/references/design-copy-compliance.md +81 -0
- package/src/skills-lib/popup-cro/references/experiments.md +82 -0
- package/src/skills-lib/popup-cro/references/rules-measurement-output.md +87 -0
- package/src/skills-lib/popup-cro/references/triggers-and-popup-types.md +108 -0
- package/src/skills-lib/signup-flow-cro/SKILL.md +13 -321
- package/src/skills-lib/signup-flow-cro/references/experiments.md +72 -0
- package/src/skills-lib/signup-flow-cro/references/field-optimization.md +49 -0
- package/src/skills-lib/signup-flow-cro/references/flow-structure.md +38 -0
- package/src/skills-lib/signup-flow-cro/references/measurement-output-patterns.md +62 -0
- package/src/skills-lib/signup-flow-cro/references/trust-and-post-submit.md +40 -0
- package/src/skills-lib/taste-redesign/SKILL.md +10 -146
- package/src/skills-lib/taste-redesign/references/design-audit.md +120 -0
- package/src/skills-lib/taste-redesign/references/upgrade-techniques.md +31 -0
- package/src/skills-lib/ui-ux-pro-max/SKILL.md +9 -353
- package/src/skills-lib/ui-ux-pro-max/references/common-rules-checklist.md +76 -0
- package/src/skills-lib/ui-ux-pro-max/references/rules-quick-reference.md +70 -0
- package/src/skills-lib/ui-ux-pro-max/references/search-reference.md +45 -0
- package/src/skills-lib/ui-ux-pro-max/references/workflow-guide.md +157 -0
- package/src/skills-lib/web-security/SKILL.md +13 -187
- package/src/skills-lib/web-security/references/checklist-deploy.md +52 -0
- package/src/skills-lib/web-security/references/headers-rate-limit-cors.md +78 -0
- package/src/skills-lib/web-security/references/owasp-top5-detalhado.md +51 -0
- package/src/skills-lib/wizz-router/SKILL.md +20 -9
- package/src/skills-lib/wizz-router/references/auditoria-360.md +4 -4
- package/src/skills-lib/wizz-router/references/routing-table-flat.md +15 -15
- package/tools/fetch-assets.mjs +277 -0
- package/tools/installer/commands/fetch-assets.js +71 -0
- package/tools/installer/commands/install.js +35 -3
- package/tools/installer/commands/trace-report.js +131 -0
- package/tools/installer/core/config.js +9 -0
- package/tools/installer/core/help-catalog.js +181 -0
- package/tools/installer/core/install-paths.js +48 -3
- package/tools/installer/core/installer.js +253 -618
- package/tools/installer/core/manifest-generator.js +8 -1
- package/tools/installer/core/manifest.js +67 -22
- package/tools/installer/core/module-config-writer.js +110 -0
- package/tools/installer/core/preflight-tools-check.js +82 -0
- package/tools/installer/core/quick-update.js +209 -0
- package/tools/installer/core/user-file-preservation.js +250 -0
- package/tools/installer/modules/channel-resolver.js +34 -2
- package/tools/installer/modules/cli-config.js +127 -34
- package/tools/installer/modules/deps-cache.js +28 -1
- package/tools/installer/modules/env-vars.js +446 -0
- package/tools/installer/modules/external-manager.js +40 -6
- package/tools/installer/modules/mcp-config.js +180 -37
- package/tools/installer/modules/module-help-schema.js +2 -1
- package/tools/installer/modules/official-modules.js +1 -1
- package/tools/installer/modules/registry-resolve.js +74 -0
- package/tools/installer/modules/skills-lib.js +11 -15
- package/tools/installer/ui.js +71 -5
- package/wizz-modules.yaml +15 -5
- package/.claude-plugin/marketplace.json +0 -80
- package/AGENTS.md +0 -12
- package/build/artifacts/llms-full.txt +0 -4049
- package/build/artifacts/llms.txt +0 -28
- package/build/site/404.html +0 -55
- package/build/site/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js +0 -1
- package/build/site/_astro/Search.astro_astro_type_script_index_0_lang.cjYDvRdi.js +0 -1
- package/build/site/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js +0 -1
- package/build/site/_astro/ec.0vx5m.js +0 -3
- package/build/site/_astro/ec.v4551.css +0 -1
- package/build/site/_astro/index.DdjI3lF_.css +0 -1
- package/build/site/_astro/page.B1D-nYk3.js +0 -1
- package/build/site/_astro/print.DNXP8c50.css +0 -1
- package/build/site/_astro/ui-core.D_Lfcn_I.js +0 -2
- package/build/site/diagrams/checkpoint-preview-diagram-fr.webp +0 -0
- package/build/site/diagrams/checkpoint-preview-diagram.png +0 -0
- package/build/site/diagrams/quick-dev-diagram-fr.webp +0 -0
- package/build/site/diagrams/quick-dev-diagram.png +0 -0
- package/build/site/explanation/advanced-elicitation/index.html +0 -105
- package/build/site/explanation/adversarial-review/index.html +0 -109
- package/build/site/explanation/analysis-phase/index.html +0 -129
- package/build/site/explanation/brainstorming/index.html +0 -92
- package/build/site/explanation/checkpoint-preview/index.html +0 -121
- package/build/site/explanation/established-projects-faq/index.html +0 -107
- package/build/site/explanation/forensic-investigation/index.html +0 -167
- package/build/site/explanation/named-agents/index.html +0 -187
- package/build/site/explanation/party-mode/index.html +0 -256
- package/build/site/explanation/preventing-agent-conflicts/index.html +0 -185
- package/build/site/explanation/project-context/index.html +0 -198
- package/build/site/explanation/quick-dev/index.html +0 -113
- package/build/site/explanation/web-bundles/index.html +0 -178
- package/build/site/explanation/why-solutioning-matters/index.html +0 -168
- package/build/site/how-to/customize-wizz/index.html +0 -277
- package/build/site/how-to/established-projects/index.html +0 -165
- package/build/site/how-to/expand-wizz-for-your-org/index.html +0 -245
- package/build/site/how-to/get-answers-about-wizz/index.html +0 -129
- package/build/site/how-to/install-custom-modules/index.html +0 -197
- package/build/site/how-to/install-wizz/index.html +0 -330
- package/build/site/how-to/non-interactive-installation/index.html +0 -73
- package/build/site/how-to/project-context/index.html +0 -141
- package/build/site/how-to/quick-fixes/index.html +0 -122
- package/build/site/how-to/shard-large-documents/index.html +0 -103
- package/build/site/how-to/upgrade-to-v6/index.html +0 -185
- package/build/site/how-to/use-web-bundles/index.html +0 -99
- package/build/site/img/wizz-dark.png +0 -0
- package/build/site/img/wizz-light.png +0 -0
- package/build/site/index.html +0 -128
- package/build/site/llms-full.txt +0 -4049
- package/build/site/llms.txt +0 -28
- package/build/site/pagefind/fragment/en_175de32.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_24258fb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_24f53a6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_27ba8f9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_296ddb9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_2b5aa5c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_49047e0.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_4a187d2.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_514725b.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_583316f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_6465dfb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_67825a4.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_82aec61.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_85dcebf.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_887ce56.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_89a1a7a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8ade291.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8c11f8a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_8c1bde3.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_92d7cc7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_94bfc21.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_9b57d7d.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ab62b53.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_b0d23ee.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ba9fb37.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_bb113eb.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_bfc56b6.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_c6d9e48.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cdd772f.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cdd885c.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_cefed6a.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_d890205.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_da351b7.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_ea289f9.pf_fragment +0 -0
- package/build/site/pagefind/fragment/en_f1c3711.pf_fragment +0 -0
- package/build/site/pagefind/index/en_5b9d8c6.pf_index +0 -0
- package/build/site/pagefind/index/en_868614c.pf_index +0 -0
- package/build/site/pagefind/index/en_e4f9bff.pf_index +0 -0
- package/build/site/pagefind/pagefind-entry.json +0 -1
- package/build/site/pagefind/pagefind-highlight.js +0 -1064
- package/build/site/pagefind/pagefind-modular-ui.css +0 -214
- package/build/site/pagefind/pagefind-modular-ui.js +0 -8
- package/build/site/pagefind/pagefind-ui.css +0 -1
- package/build/site/pagefind/pagefind-ui.js +0 -2
- package/build/site/pagefind/pagefind.en_4e69d7f053.pf_meta +0 -0
- package/build/site/pagefind/pagefind.js +0 -6
- package/build/site/pagefind/wasm.en.pagefind +0 -0
- package/build/site/pagefind/wasm.unknown.pagefind +0 -0
- package/build/site/reference/agents/index.html +0 -168
- package/build/site/reference/commands/index.html +0 -254
- package/build/site/reference/core-tools/index.html +0 -384
- package/build/site/reference/modules/index.html +0 -132
- package/build/site/reference/testing/index.html +0 -218
- package/build/site/reference/workflow-map/index.html +0 -266
- package/build/site/roadmap/index.html +0 -77
- package/build/site/robots.txt +0 -37
- package/build/site/sitemap-0.xml +0 -1
- package/build/site/sitemap-index.xml +0 -1
- package/build/site/tutorials/getting-started/index.html +0 -386
- package/build/site/wizz-icon-orange.svg +0 -7
- package/build/site/workflow-map-diagram-fr.html +0 -375
- package/build/site/workflow-map-diagram.html +0 -375
- package/evals/bmm-skills/wizz-product-brief/evals.json +0 -237
- package/evals/bmm-skills/wizz-product-brief/files/branfield-memo.md +0 -46
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/addendum.md +0 -40
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/brief.md +0 -56
- package/evals/bmm-skills/wizz-product-brief/files/forkbird-brief/decision-log.md +0 -27
- package/evals/bmm-skills/wizz-product-brief/files/meridian-mobility-report.md +0 -116
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/addendum.md +0 -41
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/brief.md +0 -57
- package/evals/bmm-skills/wizz-product-brief/files/mossridge-brief/decision-log.md +0 -29
- package/evals/bmm-skills/wizz-product-brief/files/pantry-bridge-interviews.md +0 -90
- package/evals/bmm-skills/wizz-product-brief/files/q2-brainstorm.md +0 -101
- package/evals/bmm-skills/wizz-product-brief/triggers.json +0 -18
- package/evals/routing/dataset.json +0 -290
- package/evals/routing/run-routing-eval.mjs +0 -89
- package/src/skills-lib/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/src/skills-lib/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-ad.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-educational.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tech.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial-alt.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/bgm-tutorial.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-flip.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/card-snap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/modal-open.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/container/stack-collapse.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/achievement.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/error-tone.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/notification-pop.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/feedback/success-chime.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/brand-stamp.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/drop-thud.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal-v2.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/impact/logo-reveal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/delete-key.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/enter.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/space-tap.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/keyboard/type.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/ai-process.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/sparkle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/magic/transform.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/complete-done.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/generate-start.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/progress/loading-tick.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/command-execute.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/cursor-blink.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/terminal/output-appear.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/dissolve.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/slide-in.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/swipe-horizontal.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh-fast.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/transition/whoosh.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click-soft.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/click.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/focus.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/hover-subtle.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/tap-finger.mp3 +0 -0
- package/src/skills-lib/huashu-design/assets/sfx/ui/toggle-on.mp3 +0 -0
- package/src/squads/README.md +0 -39
- package/src/squads/advisory-board/README.md +0 -34
- package/src/squads/advisory-board/agents/board-chair.md +0 -161
- package/src/squads/advisory-board/agents/brene-brown.md +0 -296
- package/src/squads/advisory-board/agents/charlie-munger.md +0 -590
- package/src/squads/advisory-board/agents/derek-sivers.md +0 -268
- package/src/squads/advisory-board/agents/naval-ravikant.md +0 -251
- package/src/squads/advisory-board/agents/patrick-lencioni.md +0 -394
- package/src/squads/advisory-board/agents/peter-thiel.md +0 -269
- package/src/squads/advisory-board/agents/ray-dalio.md +0 -567
- package/src/squads/advisory-board/agents/reid-hoffman.md +0 -278
- package/src/squads/advisory-board/agents/simon-sinek.md +0 -291
- package/src/squads/advisory-board/agents/yvon-chouinard.md +0 -275
- package/src/squads/advisory-board/squad.yaml +0 -50
- package/src/squads/brand-squad/README.md +0 -60
- package/src/squads/brand-squad/agents/al-ries.md +0 -175
- package/src/squads/brand-squad/agents/alina-wheeler.md +0 -184
- package/src/squads/brand-squad/agents/archetype-consultant.md +0 -215
- package/src/squads/brand-squad/agents/brand-chief.md +0 -158
- package/src/squads/brand-squad/agents/byron-sharp.md +0 -169
- package/src/squads/brand-squad/agents/david-aaker.md +0 -166
- package/src/squads/brand-squad/agents/denise-yohn.md +0 -172
- package/src/squads/brand-squad/agents/domain-scout.md +0 -135
- package/src/squads/brand-squad/agents/donald-miller.md +0 -179
- package/src/squads/brand-squad/agents/emily-heyward.md +0 -147
- package/src/squads/brand-squad/agents/jean-noel-kapferer.md +0 -189
- package/src/squads/brand-squad/agents/kevin-keller.md +0 -199
- package/src/squads/brand-squad/agents/marty-neumeier.md +0 -170
- package/src/squads/brand-squad/agents/miller-sticky-brand.md +0 -180
- package/src/squads/brand-squad/agents/naming-strategist.md +0 -171
- package/src/squads/brand-squad/squad.yaml +0 -117
- package/src/squads/c-level-squad/README.md +0 -29
- package/src/squads/c-level-squad/agents/caio-architect.md +0 -235
- package/src/squads/c-level-squad/agents/cio-engineer.md +0 -209
- package/src/squads/c-level-squad/agents/cmo-architect.md +0 -208
- package/src/squads/c-level-squad/agents/coo-orchestrator.md +0 -193
- package/src/squads/c-level-squad/agents/cto-architect.md +0 -194
- package/src/squads/c-level-squad/agents/vision-chief.md +0 -201
- package/src/squads/c-level-squad/squad.yaml +0 -45
- package/src/squads/claude-code-mastery/README.md +0 -146
- package/src/squads/claude-code-mastery/agents/claude-mastery-chief.md +0 -554
- package/src/squads/claude-code-mastery/agents/config-engineer.md +0 -865
- package/src/squads/claude-code-mastery/agents/hooks-architect.md +0 -1013
- package/src/squads/claude-code-mastery/agents/mcp-integrator.md +0 -791
- package/src/squads/claude-code-mastery/agents/project-integrator.md +0 -1196
- package/src/squads/claude-code-mastery/agents/roadmap-sentinel.md +0 -931
- package/src/squads/claude-code-mastery/agents/skill-craftsman.md +0 -1250
- package/src/squads/claude-code-mastery/agents/swarm-orchestrator.md +0 -1008
- package/src/squads/copy-squad/README.md +0 -65
- package/src/squads/copy-squad/agents/andre-chaperon.md +0 -206
- package/src/squads/copy-squad/agents/ben-settle.md +0 -194
- package/src/squads/copy-squad/agents/claude-hopkins.md +0 -182
- package/src/squads/copy-squad/agents/clayton-makepeace.md +0 -225
- package/src/squads/copy-squad/agents/copy-chief.md +0 -166
- package/src/squads/copy-squad/agents/dan-kennedy.md +0 -202
- package/src/squads/copy-squad/agents/dan-koe.md +0 -223
- package/src/squads/copy-squad/agents/david-deutsch.md +0 -197
- package/src/squads/copy-squad/agents/david-ogilvy.md +0 -198
- package/src/squads/copy-squad/agents/eugene-schwartz.md +0 -238
- package/src/squads/copy-squad/agents/frank-kern.md +0 -195
- package/src/squads/copy-squad/agents/gary-bencivenga.md +0 -197
- package/src/squads/copy-squad/agents/gary-halbert.md +0 -219
- package/src/squads/copy-squad/agents/jim-rutz.md +0 -193
- package/src/squads/copy-squad/agents/joe-sugarman.md +0 -234
- package/src/squads/copy-squad/agents/john-carlton.md +0 -203
- package/src/squads/copy-squad/agents/jon-benson.md +0 -196
- package/src/squads/copy-squad/agents/parris-lampropoulos.md +0 -188
- package/src/squads/copy-squad/agents/robert-collier.md +0 -183
- package/src/squads/copy-squad/agents/russell-brunson.md +0 -229
- package/src/squads/copy-squad/agents/ry-schwartz.md +0 -185
- package/src/squads/copy-squad/agents/stefan-georgi.md +0 -188
- package/src/squads/copy-squad/agents/todd-brown.md +0 -171
- package/src/squads/copy-squad/squad.yaml +0 -87
- package/src/squads/cybersecurity/README.md +0 -38
- package/src/squads/cybersecurity/agents/busterer.md +0 -108
- package/src/squads/cybersecurity/agents/cartographer.md +0 -114
- package/src/squads/cybersecurity/agents/chris-sanders.md +0 -205
- package/src/squads/cybersecurity/agents/command-generator.md +0 -121
- package/src/squads/cybersecurity/agents/cyber-chief.md +0 -120
- package/src/squads/cybersecurity/agents/dirber.md +0 -111
- package/src/squads/cybersecurity/agents/fuzzer.md +0 -121
- package/src/squads/cybersecurity/agents/georgia-weidman.md +0 -178
- package/src/squads/cybersecurity/agents/jim-manico.md +0 -182
- package/src/squads/cybersecurity/agents/marcus-carey.md +0 -200
- package/src/squads/cybersecurity/agents/omar-santos.md +0 -206
- package/src/squads/cybersecurity/agents/peter-kim.md +0 -179
- package/src/squads/cybersecurity/agents/ripper.md +0 -121
- package/src/squads/cybersecurity/agents/rogue.md +0 -116
- package/src/squads/cybersecurity/agents/shannon-runner.md +0 -108
- package/src/squads/cybersecurity/squad.yaml +0 -56
- package/src/squads/data-squad/README.md +0 -30
- package/src/squads/data-squad/agents/avinash-kaushik.md +0 -268
- package/src/squads/data-squad/agents/data-chief.md +0 -167
- package/src/squads/data-squad/agents/david-spinks.md +0 -277
- package/src/squads/data-squad/agents/nick-mehta.md +0 -294
- package/src/squads/data-squad/agents/peter-fader.md +0 -246
- package/src/squads/data-squad/agents/sean-ellis.md +0 -303
- package/src/squads/data-squad/agents/wes-kao.md +0 -268
- package/src/squads/data-squad/squad.yaml +0 -46
- package/src/squads/design-squad/README.md +0 -31
- package/src/squads/design-squad/agents/brad-frost.md +0 -185
- package/src/squads/design-squad/agents/dan-mall.md +0 -178
- package/src/squads/design-squad/agents/dave-malouf.md +0 -198
- package/src/squads/design-squad/agents/design-chief.md +0 -109
- package/src/squads/design-squad/agents/design-system-architect.md +0 -109
- package/src/squads/design-squad/agents/ui-engineer.md +0 -102
- package/src/squads/design-squad/agents/ux-designer.md +0 -105
- package/src/squads/design-squad/agents/visual-generator.md +0 -108
- package/src/squads/design-squad/squad.yaml +0 -48
- package/src/squads/hormozi-squad/README.md +0 -39
- package/src/squads/hormozi-squad/agents/hormozi-ads.md +0 -159
- package/src/squads/hormozi-squad/agents/hormozi-advisor.md +0 -178
- package/src/squads/hormozi-squad/agents/hormozi-audit.md +0 -178
- package/src/squads/hormozi-squad/agents/hormozi-chief.md +0 -111
- package/src/squads/hormozi-squad/agents/hormozi-closer.md +0 -179
- package/src/squads/hormozi-squad/agents/hormozi-content.md +0 -166
- package/src/squads/hormozi-squad/agents/hormozi-copy.md +0 -152
- package/src/squads/hormozi-squad/agents/hormozi-hooks.md +0 -177
- package/src/squads/hormozi-squad/agents/hormozi-launch.md +0 -160
- package/src/squads/hormozi-squad/agents/hormozi-leads.md +0 -198
- package/src/squads/hormozi-squad/agents/hormozi-models.md +0 -191
- package/src/squads/hormozi-squad/agents/hormozi-offers.md +0 -197
- package/src/squads/hormozi-squad/agents/hormozi-pricing.md +0 -151
- package/src/squads/hormozi-squad/agents/hormozi-retention.md +0 -166
- package/src/squads/hormozi-squad/agents/hormozi-scale.md +0 -175
- package/src/squads/hormozi-squad/agents/hormozi-workshop.md +0 -160
- package/src/squads/hormozi-squad/squad.yaml +0 -60
- package/src/squads/movement/README.md +0 -29
- package/src/squads/movement/agents/analista-de-impacto.md +0 -350
- package/src/squads/movement/agents/estrategista-de-ciclo.md +0 -301
- package/src/squads/movement/agents/fenomenologo.md +0 -169
- package/src/squads/movement/agents/identitario.md +0 -265
- package/src/squads/movement/agents/manifestador.md +0 -279
- package/src/squads/movement/agents/movement-architect.md +0 -210
- package/src/squads/movement/agents/movement-chief.md +0 -135
- package/src/squads/movement/squad.yaml +0 -45
- package/src/squads/storytelling/README.md +0 -35
- package/src/squads/storytelling/agents/blake-snyder.md +0 -225
- package/src/squads/storytelling/agents/dan-harmon.md +0 -167
- package/src/squads/storytelling/agents/joseph-campbell.md +0 -184
- package/src/squads/storytelling/agents/keith-johnstone.md +0 -157
- package/src/squads/storytelling/agents/kindra-hall.md +0 -162
- package/src/squads/storytelling/agents/marshall-ganz.md +0 -167
- package/src/squads/storytelling/agents/matthew-dicks.md +0 -152
- package/src/squads/storytelling/agents/nancy-duarte.md +0 -154
- package/src/squads/storytelling/agents/oren-klaff.md +0 -166
- package/src/squads/storytelling/agents/park-howell.md +0 -152
- package/src/squads/storytelling/agents/shawn-coyne.md +0 -208
- package/src/squads/storytelling/agents/story-chief.md +0 -155
- package/src/squads/storytelling/squad.yaml +0 -52
- package/src/squads/traffic-masters/README.md +0 -39
- package/src/squads/traffic-masters/agents/ad-midas.md +0 -149
- package/src/squads/traffic-masters/agents/ads-analyst.md +0 -135
- package/src/squads/traffic-masters/agents/creative-analyst.md +0 -142
- package/src/squads/traffic-masters/agents/depesh-mandalia.md +0 -174
- package/src/squads/traffic-masters/agents/fiscal.md +0 -144
- package/src/squads/traffic-masters/agents/kasim-aslam.md +0 -158
- package/src/squads/traffic-masters/agents/media-buyer.md +0 -159
- package/src/squads/traffic-masters/agents/molly-pittman.md +0 -185
- package/src/squads/traffic-masters/agents/nicholas-kusmich.md +0 -157
- package/src/squads/traffic-masters/agents/pedro-sobral.md +0 -158
- package/src/squads/traffic-masters/agents/performance-analyst.md +0 -135
- package/src/squads/traffic-masters/agents/pixel-specialist.md +0 -144
- package/src/squads/traffic-masters/agents/ralph-burns.md +0 -163
- package/src/squads/traffic-masters/agents/scale-optimizer.md +0 -144
- package/src/squads/traffic-masters/agents/tom-breeze.md +0 -175
- package/src/squads/traffic-masters/agents/traffic-chief.md +0 -97
- package/src/squads/traffic-masters/squad.yaml +0 -59
- package/tools/bundle-web-bundles.js +0 -117
- package/tools/format-workflow-md.js +0 -263
- package/tools/hooks/README.md +0 -17
- package/tools/hooks/security-defensive-context.js +0 -70
- package/tools/hooks/session-rules.js +0 -38
- package/tools/hooks/wizz-router-enforce.js +0 -188
- package/tools/javascript-conventions.md +0 -5
- package/tools/migrate-custom-module-paths.js +0 -124
- package/tools/skill-validator.md +0 -368
- package/tools/sync-global.mjs +0 -84
- package/tools/validate-sidebar-order.js +0 -388
- package/tools/validate-skills.js +0 -708
- package/tools/validate-svg-changes.sh +0 -356
- /package/tools/installer/{cli-utils.js → banner.js} +0 -0
|
@@ -56,7 +56,14 @@ class ManifestGenerator {
|
|
|
56
56
|
this.updatedModules = allModules; // Include ALL modules (including custom) for scanning
|
|
57
57
|
|
|
58
58
|
this.wizzDir = wizzDir;
|
|
59
|
-
|
|
59
|
+
// The folder name embedded into skill-manifest.csv's `path` column must be
|
|
60
|
+
// the FINAL name, not necessarily wizzDir's current basename: a fresh
|
|
61
|
+
// install (A14, atomic install) calls generateManifests while wizzDir is
|
|
62
|
+
// still the `_wizz.tmp-<pid>/` scaffold, ahead of the tmp→real rename.
|
|
63
|
+
// The installer passes `options.wizzFolderName` (the real, post-swap
|
|
64
|
+
// name) in that case; everything else (updates, direct callers that
|
|
65
|
+
// don't pass the option) keeps deriving it from the directory itself.
|
|
66
|
+
this.wizzFolderName = options.wizzFolderName || path.basename(wizzDir);
|
|
60
67
|
this.allInstalledFiles = installedFiles;
|
|
61
68
|
|
|
62
69
|
if (!Object.prototype.hasOwnProperty.call(options, 'ides')) {
|
|
@@ -11,6 +11,65 @@ const execFileAsync = promisify(execFile);
|
|
|
11
11
|
const NPM_LOOKUP_TIMEOUT_MS = 10_000;
|
|
12
12
|
const NPM_PACKAGE_NAME_PATTERN = /^(?:@[a-z0-9][a-z0-9._~-]*\/)?[a-z0-9][a-z0-9._~-]*$/;
|
|
13
13
|
|
|
14
|
+
// Retry pontual (1 re-tentativa, backoff curto) para o lookup no registry npm.
|
|
15
|
+
// Só re-tenta em erro de rede transitório (timeout, ECONNRESET, ENOTFOUND,
|
|
16
|
+
// EAI_AGAIN, 5xx). Erros lógicos (4xx, JSON inválido) não são re-tentados.
|
|
17
|
+
const NPM_LOOKUP_RETRY_DELAY_MS = 300;
|
|
18
|
+
const TRANSIENT_ERROR_CODES = new Set(['ECONNRESET', 'ENOTFOUND', 'EAI_AGAIN', 'ETIMEDOUT']);
|
|
19
|
+
|
|
20
|
+
function isTransientNetworkError(error) {
|
|
21
|
+
if (!error) return false;
|
|
22
|
+
if (typeof error.statusCode === 'number') return error.statusCode >= 500;
|
|
23
|
+
if (error.code && TRANSIENT_ERROR_CODES.has(error.code)) return true;
|
|
24
|
+
return /timed out/i.test(error.message || '');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function delay(ms) {
|
|
28
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Uma única tentativa de GET no registry npm; rejeita em erro de rede,
|
|
32
|
+
// timeout ou status 5xx (para o wrapper com retry decidir).
|
|
33
|
+
function fetchNpmRegistryOnce(packageName, timeoutMs) {
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const url = `https://registry.npmjs.org/${encodeURIComponent(packageName)}`;
|
|
36
|
+
const request = https.get(url, (res) => {
|
|
37
|
+
let data = '';
|
|
38
|
+
res.on('data', (chunk) => (data += chunk));
|
|
39
|
+
res.on('end', () => {
|
|
40
|
+
if (res.statusCode >= 500) {
|
|
41
|
+
const err = new Error(`npm registry returned ${res.statusCode} for ${packageName}`);
|
|
42
|
+
err.statusCode = res.statusCode;
|
|
43
|
+
reject(err);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
resolve(data);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
request.setTimeout(timeoutMs, () => {
|
|
51
|
+
request.destroy();
|
|
52
|
+
const err = new Error(`npm registry request timed out for ${packageName}`);
|
|
53
|
+
err.code = 'ETIMEDOUT';
|
|
54
|
+
reject(err);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
request.on('error', reject);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Wrapper com 1 re-tentativa em erro transitório. Erro não-transitório
|
|
62
|
+
// (ex.: 4xx, resposta malformada) propaga direto, sem retry.
|
|
63
|
+
async function fetchNpmRegistryWithRetry(packageName, timeoutMs) {
|
|
64
|
+
try {
|
|
65
|
+
return await fetchNpmRegistryOnce(packageName, timeoutMs);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
if (!isTransientNetworkError(error)) throw error;
|
|
68
|
+
await delay(NPM_LOOKUP_RETRY_DELAY_MS);
|
|
69
|
+
return fetchNpmRegistryOnce(packageName, timeoutMs);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
14
73
|
function isValidNpmPackageName(packageName) {
|
|
15
74
|
return typeof packageName === 'string' && NPM_PACKAGE_NAME_PATTERN.test(packageName);
|
|
16
75
|
}
|
|
@@ -364,28 +423,14 @@ class Manifest {
|
|
|
364
423
|
});
|
|
365
424
|
return stdout.trim();
|
|
366
425
|
} catch {
|
|
367
|
-
// Fallback to npm registry API
|
|
368
|
-
|
|
369
|
-
const
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
resolve(pkg['dist-tags']?.latest || pkg.version || null);
|
|
376
|
-
} catch {
|
|
377
|
-
resolve(null);
|
|
378
|
-
}
|
|
379
|
-
});
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
request.setTimeout(NPM_LOOKUP_TIMEOUT_MS, () => {
|
|
383
|
-
request.destroy();
|
|
384
|
-
resolve(null);
|
|
385
|
-
});
|
|
386
|
-
|
|
387
|
-
request.on('error', () => resolve(null));
|
|
388
|
-
});
|
|
426
|
+
// Fallback to npm registry API (com 1 retry pontual em falha transitória)
|
|
427
|
+
try {
|
|
428
|
+
const data = await fetchNpmRegistryWithRetry(packageName, NPM_LOOKUP_TIMEOUT_MS);
|
|
429
|
+
const pkg = JSON.parse(data);
|
|
430
|
+
return pkg['dist-tags']?.latest || pkg.version || null;
|
|
431
|
+
} catch {
|
|
432
|
+
return null;
|
|
433
|
+
}
|
|
389
434
|
}
|
|
390
435
|
} catch {
|
|
391
436
|
return null;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-module `config.yaml` generation.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `Installer.generateModuleConfigs` (installer god-object
|
|
5
|
+
* breakup, A15/A17, auditoria 2026-07-07, item 3.1). Pure-ish function: the
|
|
6
|
+
* only state it needs from the caller is a `trackFile` callback (in place of
|
|
7
|
+
* the original `this.installedFiles.add`).
|
|
8
|
+
*/
|
|
9
|
+
const path = require('node:path');
|
|
10
|
+
const fs = require('../fs-native');
|
|
11
|
+
const { getProjectRoot } = require('../project-root');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Generate clean config.yaml files for each installed module.
|
|
15
|
+
* @param {string} wizzDir - WIZZ installation directory
|
|
16
|
+
* @param {Object} moduleConfigs - Collected configuration values
|
|
17
|
+
* @param {Object} deps - Injected dependencies
|
|
18
|
+
* @param {(filePath: string) => void} deps.trackFile - Records a written file as installed
|
|
19
|
+
*/
|
|
20
|
+
async function generateModuleConfigs(wizzDir, moduleConfigs, { trackFile }) {
|
|
21
|
+
const yaml = require('yaml');
|
|
22
|
+
|
|
23
|
+
// Extract core config values to share with other modules
|
|
24
|
+
const coreConfig = moduleConfigs.core || {};
|
|
25
|
+
|
|
26
|
+
// Get all installed module directories
|
|
27
|
+
const entries = await fs.readdir(wizzDir, { withFileTypes: true });
|
|
28
|
+
const nonModuleDirs = new Set(['_config', '_memory', 'memory', 'docs', 'scripts', 'custom']);
|
|
29
|
+
const installedModules = entries.filter((entry) => entry.isDirectory() && !nonModuleDirs.has(entry.name)).map((entry) => entry.name);
|
|
30
|
+
|
|
31
|
+
// Generate config.yaml for each installed module
|
|
32
|
+
for (const moduleName of installedModules) {
|
|
33
|
+
const modulePath = path.join(wizzDir, moduleName);
|
|
34
|
+
|
|
35
|
+
// Get module-specific config or use empty object if none
|
|
36
|
+
const config = moduleConfigs[moduleName] || {};
|
|
37
|
+
|
|
38
|
+
if (await fs.pathExists(modulePath)) {
|
|
39
|
+
const configPath = path.join(modulePath, 'config.yaml');
|
|
40
|
+
|
|
41
|
+
// Create header
|
|
42
|
+
const packageJson = require(path.join(getProjectRoot(), 'package.json'));
|
|
43
|
+
const header = `# ${moduleName.toUpperCase()} Module Configuration
|
|
44
|
+
# Generated by Wizz Method installer
|
|
45
|
+
# Version: ${packageJson.version}
|
|
46
|
+
# Date: ${new Date().toISOString()}
|
|
47
|
+
|
|
48
|
+
`;
|
|
49
|
+
|
|
50
|
+
// For non-core modules, add core config values directly
|
|
51
|
+
let finalConfig = { ...config };
|
|
52
|
+
let coreSection = '';
|
|
53
|
+
|
|
54
|
+
if (moduleName !== 'core' && coreConfig && Object.keys(coreConfig).length > 0) {
|
|
55
|
+
// Add core values directly to the module config
|
|
56
|
+
// These will be available for reference in the module
|
|
57
|
+
finalConfig = {
|
|
58
|
+
...config,
|
|
59
|
+
...coreConfig, // Spread core config values directly into the module config
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Create a comment section to identify core values
|
|
63
|
+
coreSection = '\n# Core Configuration Values\n';
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Clean the config to remove any non-serializable values (like functions)
|
|
67
|
+
const cleanConfig = structuredClone(finalConfig);
|
|
68
|
+
|
|
69
|
+
// Convert config to YAML
|
|
70
|
+
let yamlContent = yaml.stringify(cleanConfig, {
|
|
71
|
+
indent: 2,
|
|
72
|
+
lineWidth: 0,
|
|
73
|
+
minContentWidth: 0,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// If we have core values, reorganize the YAML to group them with their comment
|
|
77
|
+
if (coreSection && moduleName !== 'core') {
|
|
78
|
+
// Split the YAML into lines
|
|
79
|
+
const lines = yamlContent.split('\n');
|
|
80
|
+
const moduleConfigLines = [];
|
|
81
|
+
const coreConfigLines = [];
|
|
82
|
+
|
|
83
|
+
// Separate module-specific and core config lines
|
|
84
|
+
for (const line of lines) {
|
|
85
|
+
const key = line.split(':')[0].trim();
|
|
86
|
+
if (Object.prototype.hasOwnProperty.call(coreConfig, key)) {
|
|
87
|
+
coreConfigLines.push(line);
|
|
88
|
+
} else {
|
|
89
|
+
moduleConfigLines.push(line);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Rebuild YAML with module config first, then core config with comment
|
|
94
|
+
yamlContent = moduleConfigLines.join('\n');
|
|
95
|
+
if (coreConfigLines.length > 0) {
|
|
96
|
+
yamlContent += coreSection + coreConfigLines.join('\n');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Write the clean config file with POSIX-compliant final newline
|
|
101
|
+
const content = header + yamlContent;
|
|
102
|
+
await fs.writeFile(configPath, content.endsWith('\n') ? content : content + '\n', 'utf8');
|
|
103
|
+
|
|
104
|
+
// Track the config file in installedFiles
|
|
105
|
+
trackFile(configPath);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
module.exports = { generateModuleConfigs };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preflight check for `git`/`curl` in PATH (Tarefa 3.5c da auditoria,
|
|
3
|
+
* parte 2 item D6: "dependência de git/curl no PATH não checada antes dos
|
|
4
|
+
* installs → mensagem amigável em vez de stderr cru").
|
|
5
|
+
*
|
|
6
|
+
* `git` is a hard dependency of the install flow: official/custom module
|
|
7
|
+
* fetch and the changelog/version resolution all shell out to `git clone`/
|
|
8
|
+
* `git fetch`/`git rev-parse` deep inside custom-module-manager.js and
|
|
9
|
+
* external-manager.js. Without this check, a missing `git` surfaces as a
|
|
10
|
+
* raw `Command failed: git clone ...` / `ENOENT` stack trace from wherever
|
|
11
|
+
* the first git call happens to live — this check fails fast, once, with a
|
|
12
|
+
* plain-language message instead.
|
|
13
|
+
*
|
|
14
|
+
* `curl` is only used by specific optional CLI `install:` commands in
|
|
15
|
+
* skills-registry.yaml (e.g. `curl ... | sh`), which are opt-in and
|
|
16
|
+
* user-triggered, never run automatically during a plain install. Missing
|
|
17
|
+
* `curl` is therefore a warning, not a blocking error.
|
|
18
|
+
*
|
|
19
|
+
* Deliberately NOT wired into tools/installer/core/installer.js (that file
|
|
20
|
+
* is in scope for a separate god-object extraction pass) — this is called
|
|
21
|
+
* directly from the CLI entry point (commands/install.js), same pattern as
|
|
22
|
+
* ../core/wsl-node-check.js.
|
|
23
|
+
*/
|
|
24
|
+
const { execFileSync } = require('node:child_process');
|
|
25
|
+
const prompts = require('../prompts');
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {string} bin
|
|
29
|
+
* @param {(bin: string, args: string[]) => Buffer} runner injectable for tests
|
|
30
|
+
* @returns {boolean}
|
|
31
|
+
*/
|
|
32
|
+
function isOnPath(bin, runner = defaultRunner) {
|
|
33
|
+
try {
|
|
34
|
+
runner(bin, ['--version']);
|
|
35
|
+
return true;
|
|
36
|
+
} catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function defaultRunner(bin, args) {
|
|
42
|
+
return execFileSync(bin, args, { stdio: 'pipe' });
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @param {{ runner?: Function }} [deps] injectable for tests
|
|
47
|
+
* @returns {{ git: boolean, curl: boolean }}
|
|
48
|
+
*/
|
|
49
|
+
function detectRequiredTools(deps = {}) {
|
|
50
|
+
const runner = deps.runner || defaultRunner;
|
|
51
|
+
return {
|
|
52
|
+
git: isOnPath('git', runner),
|
|
53
|
+
curl: isOnPath('curl', runner),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async function checkRequiredTools(deps = {}) {
|
|
58
|
+
const detection = detectRequiredTools(deps);
|
|
59
|
+
|
|
60
|
+
if (!detection.git) {
|
|
61
|
+
await prompts.log.error(
|
|
62
|
+
[
|
|
63
|
+
'`git` was not found on your PATH.',
|
|
64
|
+
'',
|
|
65
|
+
'The Wizz Method installer needs git to fetch official and custom modules.',
|
|
66
|
+
'Install git (https://git-scm.com/downloads) and rerun this command.',
|
|
67
|
+
].join('\n'),
|
|
68
|
+
);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (!detection.curl) {
|
|
73
|
+
await prompts.log.warn(
|
|
74
|
+
'`curl` was not found on your PATH. Most of the installer works fine without it, ' +
|
|
75
|
+
'but some optional CLI installs from the registry (skills-registry.yaml `install:` commands) shell out to curl and will fail until it is installed.',
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return detection;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
module.exports = { checkRequiredTools, detectRequiredTools, isOnPath };
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick Update orchestration.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `Installer.quickUpdate` (installer god-object breakup,
|
|
5
|
+
* A15/A17, auditoria 2026-07-07, item 3.1). Kept as composition rather than
|
|
6
|
+
* a method on `Installer`: this function takes the `Installer` instance as
|
|
7
|
+
* an explicit parameter and calls its public surface (`findWizzDir`,
|
|
8
|
+
* `externalModuleManager`, `manifest`, `install`) instead of inheriting from
|
|
9
|
+
* it, so it can be tested/reasoned about independently.
|
|
10
|
+
*/
|
|
11
|
+
const path = require('node:path');
|
|
12
|
+
const fs = require('../fs-native');
|
|
13
|
+
const { OfficialModules } = require('../modules/official-modules');
|
|
14
|
+
const { ExistingInstall } = require('./existing-install');
|
|
15
|
+
const { getProjectRoot } = require('../project-root');
|
|
16
|
+
const prompts = require('../prompts');
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Quick update: preserves all settings and only prompts for new config fields.
|
|
20
|
+
* @param {import('./installer').Installer} installer - Installer instance (composition, not inheritance)
|
|
21
|
+
* @param {Object} config - Configuration with directory
|
|
22
|
+
* @returns {Object} Update result
|
|
23
|
+
*/
|
|
24
|
+
async function quickUpdate(installer, config) {
|
|
25
|
+
const projectDir = path.resolve(config.directory);
|
|
26
|
+
const { wizzDir } = await installer.findWizzDir(projectDir);
|
|
27
|
+
|
|
28
|
+
// Check if wizz directory exists
|
|
29
|
+
if (!(await fs.pathExists(wizzDir))) {
|
|
30
|
+
throw new Error(`Wizz not installed at ${wizzDir}. Use regular install for first-time setup.`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Announce the scope up front: Quick Update only refreshes already
|
|
34
|
+
// installed modules with preserved settings. It never provisions global
|
|
35
|
+
// skills, MCP servers, or CLIs (see the isQuickUpdate() gate below, in
|
|
36
|
+
// _installAndConfigure); that only happens on a fresh install or
|
|
37
|
+
// Modify. Surfacing this before any work starts avoids the confusion of
|
|
38
|
+
// "I updated and skills didn't come" (see project memory).
|
|
39
|
+
await prompts.log.info(
|
|
40
|
+
'Quick Update: atualiza os módulos já instalados com as configurações preservadas. Skills globais, MCPs e CLIs novos não são provisionados neste modo; rode install e escolha "Modify Wizz Installation" para isso.',
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
// Detect existing installation
|
|
44
|
+
const existingInstall = await ExistingInstall.detect(wizzDir);
|
|
45
|
+
const installedModules = existingInstall.moduleIds;
|
|
46
|
+
const configuredIdes = existingInstall.ides;
|
|
47
|
+
const projectRoot = path.dirname(wizzDir);
|
|
48
|
+
|
|
49
|
+
// Get available modules (what we have source for)
|
|
50
|
+
const availableModulesData = await new OfficialModules().listAvailable();
|
|
51
|
+
const availableModules = [...availableModulesData.modules];
|
|
52
|
+
|
|
53
|
+
// Add external official modules to available modules
|
|
54
|
+
const externalModules = await installer.externalModuleManager.listAvailable();
|
|
55
|
+
for (const externalModule of externalModules) {
|
|
56
|
+
if (installedModules.includes(externalModule.code) && !availableModules.some((m) => m.id === externalModule.code)) {
|
|
57
|
+
availableModules.push({
|
|
58
|
+
id: externalModule.code,
|
|
59
|
+
name: externalModule.name,
|
|
60
|
+
isExternal: true,
|
|
61
|
+
fromExternal: true,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Add installed custom modules to available modules
|
|
67
|
+
const { CustomModuleManager } = require('../modules/custom-module-manager');
|
|
68
|
+
const customMgr = new CustomModuleManager();
|
|
69
|
+
for (const moduleId of installedModules) {
|
|
70
|
+
if (!availableModules.some((m) => m.id === moduleId)) {
|
|
71
|
+
const customSource = await customMgr.findModuleSourceByCode(moduleId, { wizzDir });
|
|
72
|
+
if (customSource) {
|
|
73
|
+
availableModules.push({
|
|
74
|
+
id: moduleId,
|
|
75
|
+
name: moduleId,
|
|
76
|
+
isExternal: true,
|
|
77
|
+
fromCustom: true,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const availableModuleIds = new Set(availableModules.map((m) => m.id));
|
|
84
|
+
|
|
85
|
+
// Only update modules that are BOTH installed AND available (we have source for)
|
|
86
|
+
const modulesToUpdate = installedModules.filter((id) => availableModuleIds.has(id));
|
|
87
|
+
const skippedModules = installedModules.filter((id) => !availableModuleIds.has(id));
|
|
88
|
+
|
|
89
|
+
if (skippedModules.length > 0) {
|
|
90
|
+
await prompts.log.warn(`Skipping ${skippedModules.length} module(s) - no source available: ${skippedModules.join(', ')}`);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Build channel options from the existing manifest FIRST so the config
|
|
94
|
+
// collector below (which triggers external-module clones via
|
|
95
|
+
// findModuleSource) knows each module's recorded channel and doesn't
|
|
96
|
+
// silently redecide it. Without this, modules previously on 'next' or
|
|
97
|
+
// 'pinned' would trigger a stable-channel tag lookup at config-collection
|
|
98
|
+
// time, burning GitHub API quota and potentially failing.
|
|
99
|
+
const manifestData = await installer.manifest.read(wizzDir);
|
|
100
|
+
const channelOptions = { global: null, nextSet: new Set(), pins: new Map(), warnings: [] };
|
|
101
|
+
if (manifestData?.modulesDetailed) {
|
|
102
|
+
const { fetchStableTags, classifyUpgrade, parseGitHubRepo } = require('../modules/channel-resolver');
|
|
103
|
+
for (const entry of manifestData.modulesDetailed) {
|
|
104
|
+
if (!entry?.name || !entry?.channel) continue;
|
|
105
|
+
if (entry.channel === 'pinned' && entry.version) {
|
|
106
|
+
channelOptions.pins.set(entry.name, entry.version);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (entry.channel === 'next') {
|
|
110
|
+
channelOptions.nextSet.add(entry.name);
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
// Stable: classify the available upgrade. Patches and minors fall
|
|
114
|
+
// through (stable default picks up the top tag). A major upgrade
|
|
115
|
+
// requires opt-in, so under quick-update's non-interactive semantics
|
|
116
|
+
// we pin to the current version to prevent a silent breaking jump.
|
|
117
|
+
if (entry.channel === 'stable' && entry.version && entry.repoUrl) {
|
|
118
|
+
const parsed = parseGitHubRepo(entry.repoUrl);
|
|
119
|
+
if (!parsed) continue;
|
|
120
|
+
try {
|
|
121
|
+
const tags = await fetchStableTags(parsed.owner, parsed.repo);
|
|
122
|
+
if (tags.length === 0) continue;
|
|
123
|
+
const topTag = tags[0].tag;
|
|
124
|
+
const cls = classifyUpgrade(entry.version, topTag);
|
|
125
|
+
if (cls === 'major') {
|
|
126
|
+
channelOptions.pins.set(entry.name, entry.version);
|
|
127
|
+
await prompts.log.warn(
|
|
128
|
+
`${entry.name} ${entry.version} → ${topTag} is a new major release; staying on ${entry.version}. ` +
|
|
129
|
+
`Run \`wizz install\` (Modify) with \`--pin ${entry.name}=${topTag}\` to accept.`,
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
} catch (error) {
|
|
133
|
+
// Tag lookup failed (offline, rate-limited). Stay on the current
|
|
134
|
+
// version rather than guessing — the existing cache is already
|
|
135
|
+
// at that ref, so re-using it keeps the install stable.
|
|
136
|
+
channelOptions.pins.set(entry.name, entry.version);
|
|
137
|
+
await prompts.log.warn(`Could not check ${entry.name} for updates (${error.message}); staying on ${entry.version}.`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Load existing configs and collect new fields (if any)
|
|
144
|
+
await prompts.log.info('Checking for new configuration options...');
|
|
145
|
+
const quickModules = new OfficialModules({ channelOptions });
|
|
146
|
+
await quickModules.loadExistingConfig(projectDir);
|
|
147
|
+
|
|
148
|
+
let promptedForNewFields = false;
|
|
149
|
+
|
|
150
|
+
const corePrompted = await quickModules.collectModuleConfigQuick('core', projectDir, true);
|
|
151
|
+
if (corePrompted) {
|
|
152
|
+
promptedForNewFields = true;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
for (const moduleName of modulesToUpdate) {
|
|
156
|
+
if (moduleName === 'core') continue; // Already collected above
|
|
157
|
+
const modulePrompted = await quickModules.collectModuleConfigQuick(moduleName, projectDir, true);
|
|
158
|
+
if (modulePrompted) {
|
|
159
|
+
promptedForNewFields = true;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (!promptedForNewFields) {
|
|
164
|
+
await prompts.log.success('All configuration is up to date, no new options to configure');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
quickModules.collectedConfig._meta = {
|
|
168
|
+
version: require(path.join(getProjectRoot(), 'package.json')).version,
|
|
169
|
+
installDate: new Date().toISOString(),
|
|
170
|
+
lastModified: new Date().toISOString(),
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
// Build config and delegate to install()
|
|
174
|
+
const installConfig = {
|
|
175
|
+
directory: projectDir,
|
|
176
|
+
modules: modulesToUpdate,
|
|
177
|
+
ides: configuredIdes,
|
|
178
|
+
coreConfig: quickModules.collectedConfig.core,
|
|
179
|
+
moduleConfigs: quickModules.collectedConfig,
|
|
180
|
+
// Forward `--set` overrides so the post-install patch step
|
|
181
|
+
// (`applySetOverrides`) runs at the end of quick-update too. The
|
|
182
|
+
// installer.install path applies them after writeCentralConfig.
|
|
183
|
+
setOverrides: config.setOverrides || {},
|
|
184
|
+
actionType: 'install',
|
|
185
|
+
_quickUpdate: true,
|
|
186
|
+
_preserveModules: skippedModules,
|
|
187
|
+
_existingModules: installedModules,
|
|
188
|
+
channelOptions,
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
const installResult = await installer.install(installConfig);
|
|
192
|
+
|
|
193
|
+
return {
|
|
194
|
+
// Quick Update delegates to install() under the hood; propagate its
|
|
195
|
+
// real success/errors/warnings instead of always reporting success so
|
|
196
|
+
// a partial failure (e.g. an IDE setup step) isn't hidden behind a
|
|
197
|
+
// green "Quick update complete!" (see M24 in the installer audit).
|
|
198
|
+
success: installResult.success,
|
|
199
|
+
moduleCount: modulesToUpdate.length,
|
|
200
|
+
hadNewFields: promptedForNewFields,
|
|
201
|
+
modules: modulesToUpdate,
|
|
202
|
+
skippedModules: skippedModules,
|
|
203
|
+
ides: configuredIdes,
|
|
204
|
+
errors: installResult.errors || 0,
|
|
205
|
+
warnings: installResult.warnings || 0,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
module.exports = { quickUpdate };
|