bmad-method 6.0.0-alpha.2 → 6.0.0-alpha.21
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/.coderabbit.yaml +40 -0
- package/.github/CODE_OF_CONDUCT.md +128 -0
- package/.github/ISSUE_TEMPLATE/idea_submission.md +2 -2
- package/.github/scripts/discord-helpers.sh +34 -0
- package/.github/workflows/bundle-latest.yaml +329 -0
- package/.github/workflows/discord.yaml +302 -8
- package/.github/workflows/docs.yaml +72 -0
- package/.github/workflows/manual-release.yaml +35 -18
- package/.github/workflows/quality.yaml +94 -0
- package/.husky/pre-commit +4 -0
- package/.markdownlint-cli2.yaml +42 -0
- package/.prettierignore +7 -0
- package/.vscode/settings.json +4 -2
- package/CHANGELOG.md +772 -13
- package/CONTRIBUTING.md +2 -16
- package/LICENSE +1 -1
- package/README.md +159 -177
- package/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
- package/docs/agent-customization-guide.md +208 -0
- package/docs/custom-content-installation.md +149 -0
- package/docs/custom-content.md +122 -0
- package/docs/document-sharding-guide.md +449 -0
- package/docs/getting-started/installation.md +76 -0
- package/docs/ide-info/crush.md +1 -1
- package/docs/ide-info/cursor.md +7 -7
- package/docs/ide-info/iflow.md +3 -3
- package/docs/ide-info/index.md +24 -0
- package/docs/ide-info/opencode.md +1 -1
- package/docs/ide-info/rovo-dev.md +22 -0
- package/docs/index.md +143 -0
- package/docs/v4-to-v6-upgrade.md +38 -36
- package/docs/web-bundles-gemini-gpt-guide.md +21 -0
- package/eslint.config.mjs +23 -2
- package/package.json +25 -10
- package/samples/sample-custom-modules/README.md +11 -0
- package/samples/sample-custom-modules/sample-unitary-module/README.md +8 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/commit-poet/commit-poet.agent.yaml +129 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +161 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
- package/samples/sample-custom-modules/sample-unitary-module/agents/toolsmith/toolsmith.agent.yaml +109 -0
- package/samples/sample-custom-modules/sample-unitary-module/module.yaml +8 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-01-init.md +168 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-02-q1.md +155 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-03-q2.md +89 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-04-q3.md +36 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-05-q4.md +36 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-06-q5.md +36 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-07-q6.md +36 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-08-q7.md +36 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-09-q8.md +36 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-10-q9.md +36 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-11-q10.md +36 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/steps/step-12-results.md +150 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/templates/csv-headers.template +1 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/quiz-master/workflow.md +54 -0
- package/samples/sample-custom-modules/sample-unitary-module/workflows/wassup/workflow.md +26 -0
- package/samples/sample-custom-modules/sample-wellness-module/README.md +6 -0
- package/samples/sample-custom-modules/sample-wellness-module/agents/meditation-guide.agent.yaml +136 -0
- package/samples/sample-custom-modules/sample-wellness-module/agents/wellness-companion/foo.md +3 -0
- package/samples/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/addition1.md +1 -0
- package/samples/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
- package/samples/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
- package/samples/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
- package/samples/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
- package/samples/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion.agent.yaml +120 -0
- package/samples/sample-custom-modules/sample-wellness-module/module.yaml +17 -0
- package/samples/sample-custom-modules/sample-wellness-module/workflows/daily-checkin/README.md +32 -0
- package/samples/sample-custom-modules/sample-wellness-module/workflows/daily-checkin/workflow.md +45 -0
- package/samples/sample-custom-modules/sample-wellness-module/workflows/guided-meditation/README.md +31 -0
- package/samples/sample-custom-modules/sample-wellness-module/workflows/guided-meditation/workflow.md +45 -0
- package/samples/sample-custom-modules/sample-wellness-module/workflows/wellness-journal/README.md +31 -0
- package/samples/sample-custom-modules/sample-wellness-module/workflows/wellness-journal/workflow.md +45 -0
- package/src/core/_module-installer/installer.js +1 -9
- package/src/core/agents/bmad-master.agent.yaml +9 -18
- package/src/core/module.yaml +25 -0
- package/src/core/resources/excalidraw/README.md +160 -0
- package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
- package/src/core/resources/excalidraw/library-loader.md +50 -0
- package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
- package/src/core/tasks/advanced-elicitation-methods.csv +51 -0
- package/src/core/tasks/advanced-elicitation.xml +116 -0
- package/src/core/tasks/index-docs.xml +1 -1
- package/src/core/tasks/review-adversarial-general.xml +41 -0
- package/src/core/tasks/validate-workflow.xml +1 -1
- package/src/core/tasks/workflow.xml +126 -57
- package/src/core/tools/shard-doc.xml +53 -44
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +196 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +121 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +224 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +236 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +208 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +263 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +339 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +302 -0
- package/src/core/workflows/brainstorming/template.md +13 -100
- package/src/core/workflows/brainstorming/workflow.md +51 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +203 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +158 -0
- package/src/core/workflows/party-mode/workflow.md +206 -0
- package/src/modules/bmb/README.md +12 -119
- package/src/modules/bmb/agents/agent-builder.agent.yaml +36 -0
- package/src/modules/bmb/agents/module-builder.agent.yaml +48 -0
- package/src/modules/bmb/agents/workflow-builder.agent.yaml +40 -0
- package/src/modules/bmb/docs/agents/agent-compilation.md +340 -0
- package/src/modules/bmb/docs/agents/agent-menu-patterns.md +523 -0
- package/src/modules/bmb/docs/agents/expert-agent-architecture.md +363 -0
- package/src/modules/bmb/docs/agents/index.md +55 -0
- package/src/modules/bmb/docs/agents/kb.csv +0 -0
- package/src/modules/bmb/docs/agents/simple-agent-architecture.md +257 -0
- package/src/modules/bmb/docs/agents/understanding-agent-types.md +184 -0
- package/src/modules/bmb/docs/index.md +247 -0
- package/src/modules/bmb/docs/workflows/architecture.md +220 -0
- package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +19 -0
- package/src/modules/bmb/docs/workflows/csv-data-file-standards.md +206 -0
- package/src/modules/bmb/docs/workflows/index.md +45 -0
- package/src/modules/bmb/docs/workflows/intent-vs-prescriptive-spectrum.md +220 -0
- package/src/modules/bmb/docs/workflows/kb.csv +0 -0
- package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -0
- package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +223 -0
- package/src/modules/bmb/docs/workflows/templates/step-file.md +139 -0
- package/src/modules/bmb/docs/workflows/templates/step-template.md +290 -0
- package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
- package/src/modules/bmb/docs/workflows/templates/workflow.md +58 -0
- package/src/modules/bmb/docs/workflows/terms.md +97 -0
- package/src/modules/bmb/module.yaml +16 -0
- package/src/modules/bmb/reference/README.md +3 -0
- package/src/modules/bmb/reference/agents/simple-examples/README.md +223 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +176 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +120 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +153 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-agent/data/agent-validation-checklist.md +174 -0
- package/src/modules/bmb/workflows/create-agent/data/brainstorm-context.md +153 -0
- package/src/modules/bmb/workflows/create-agent/data/communication-presets.csv +61 -0
- package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +29 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/README.md +3 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +242 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +24 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +108 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +46 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +39 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +153 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +48 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +48 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +53 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +223 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +126 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +150 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +152 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +305 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +145 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +206 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +260 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +237 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +232 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +186 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +234 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-08-celebrate.md +218 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent-plan.template.md +3 -0
- package/src/modules/bmb/workflows/create-agent/templates/expert-agent.template.md +364 -0
- package/src/modules/bmb/workflows/create-agent/templates/simple-agent.template.md +257 -0
- package/src/modules/bmb/workflows/create-agent/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +155 -0
- package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +169 -0
- package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +217 -0
- package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +267 -0
- package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +228 -0
- package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +233 -0
- package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +296 -0
- package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +228 -0
- package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +186 -0
- package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +309 -0
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +337 -0
- package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +335 -0
- package/src/modules/bmb/workflows/create-module/templates/agent.template.md +313 -0
- package/src/modules/bmb/workflows/create-module/templates/installer.template.js +47 -0
- package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +5 -0
- package/src/modules/bmb/workflows/create-module/templates/module.template.yaml +53 -0
- package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -0
- package/src/modules/bmb/workflows/create-module/validation.md +126 -0
- package/src/modules/bmb/workflows/create-module/workflow.md +55 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +157 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +211 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +250 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +216 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +289 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +271 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +308 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +284 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
- package/src/modules/bmb/workflows/create-workflow/workflow.md +58 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +134 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +202 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +157 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +150 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +150 -0
- package/src/modules/bmb/workflows/edit-agent/workflow.md +58 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +217 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +253 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +217 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +193 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +245 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/completion-summary.md +75 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/improvement-goals.md +68 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/improvement-log.md +40 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/validation-results.md +51 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/workflow-analysis.md +56 -0
- package/src/modules/bmb/workflows/edit-workflow/workflow.md +58 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +152 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +243 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +274 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +295 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +264 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +360 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +258 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +301 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/templates/compliance-report.md +140 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +58 -0
- package/src/modules/bmb/workflows-legacy/edit-module/README.md +171 -0
- package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +163 -0
- package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +340 -0
- package/src/modules/bmb/workflows-legacy/edit-module/workflow.yaml +34 -0
- package/src/modules/bmb/workflows-legacy/module-brief/README.md +264 -0
- package/src/modules/bmb/workflows-legacy/module-brief/checklist.md +116 -0
- package/src/modules/bmb/workflows-legacy/module-brief/instructions.md +268 -0
- package/src/modules/bmb/workflows-legacy/module-brief/workflow.yaml +36 -0
- package/src/modules/bmgd/_module-installer/installer.js +160 -0
- package/src/modules/bmgd/_module-installer/platform-specifics/claude-code.js +23 -0
- package/src/modules/bmgd/_module-installer/platform-specifics/windsurf.js +18 -0
- package/src/modules/bmgd/agents/game-architect.agent.yaml +43 -0
- package/src/modules/bmgd/agents/game-designer.agent.yaml +48 -0
- package/src/modules/bmgd/agents/game-dev.agent.yaml +52 -0
- package/src/modules/bmgd/agents/game-qa.agent.yaml +60 -0
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +59 -0
- package/src/modules/bmgd/agents/game-solo-dev.agent.yaml +52 -0
- package/src/modules/bmgd/docs/agents-guide.md +407 -0
- package/src/modules/bmgd/docs/game-types-guide.md +503 -0
- package/src/modules/bmgd/docs/glossary.md +294 -0
- package/src/modules/bmgd/docs/index.md +180 -0
- package/src/modules/bmgd/docs/quick-flow-guide.md +288 -0
- package/src/modules/bmgd/docs/quick-start.md +250 -0
- package/src/modules/bmgd/docs/troubleshooting.md +259 -0
- package/src/modules/bmgd/docs/workflow-overview.jpg +0 -0
- package/src/modules/bmgd/docs/workflows-guide.md +463 -0
- package/src/modules/bmgd/gametest/knowledge/balance-testing.md +220 -0
- package/src/modules/bmgd/gametest/knowledge/certification-testing.md +319 -0
- package/src/modules/bmgd/gametest/knowledge/compatibility-testing.md +228 -0
- package/src/modules/bmgd/gametest/knowledge/godot-testing.md +376 -0
- package/src/modules/bmgd/gametest/knowledge/input-testing.md +315 -0
- package/src/modules/bmgd/gametest/knowledge/localization-testing.md +304 -0
- package/src/modules/bmgd/gametest/knowledge/multiplayer-testing.md +322 -0
- package/src/modules/bmgd/gametest/knowledge/performance-testing.md +204 -0
- package/src/modules/bmgd/gametest/knowledge/playtesting.md +384 -0
- package/src/modules/bmgd/gametest/knowledge/qa-automation.md +190 -0
- package/src/modules/bmgd/gametest/knowledge/regression-testing.md +280 -0
- package/src/modules/bmgd/gametest/knowledge/save-testing.md +280 -0
- package/src/modules/bmgd/gametest/knowledge/smoke-testing.md +404 -0
- package/src/modules/bmgd/gametest/knowledge/test-priorities.md +271 -0
- package/src/modules/bmgd/gametest/knowledge/unity-testing.md +383 -0
- package/src/modules/bmgd/gametest/knowledge/unreal-testing.md +388 -0
- package/src/modules/bmgd/gametest/qa-index.csv +17 -0
- package/src/modules/bmgd/module.yaml +64 -0
- package/src/modules/bmgd/teams/default-party.csv +12 -0
- package/src/modules/bmgd/teams/team-gamedev.yaml +29 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +130 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-01-init.md +164 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-02-context.md +210 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-03-ideation.md +289 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/steps/step-04-complete.md +275 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.md +49 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +62 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +373 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01-init.md +223 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-01b-continue.md +151 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-02-vision.md +218 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-03-market.md +218 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-04-fundamentals.md +231 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-05-scope.md +242 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-06-references.md +224 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-07-content.md +282 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/steps/step-08-complete.md +296 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.md +62 -0
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +67 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01-init.md +248 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-01b-continue.md +173 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-02-context.md +332 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-03-platforms.md +245 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-04-vision.md +229 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-05-core-gameplay.md +258 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-06-mechanics.md +249 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-07-game-type.md +266 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-08-progression.md +272 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-09-levels.md +264 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-10-art-audio.md +255 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-11-technical.md +275 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-12-epics.md +284 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-13-metrics.md +250 -0
- package/src/modules/bmgd/workflows/2-design/gdd/steps/step-14-complete.md +335 -0
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.md +61 -0
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +101 -0
- package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +604 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01-init.md +228 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-01b-continue.md +163 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-02-foundation.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-03-story.md +238 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-04-characters.md +297 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-05-world.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-06-dialogue.md +250 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-07-environmental.md +244 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-08-delivery.md +264 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-09-integration.md +254 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-10-production.md +262 -0
- package/src/modules/bmgd/workflows/2-design/narrative/steps/step-11-complete.md +331 -0
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.md +57 -0
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +77 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +321 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +240 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +701 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01-init.md +223 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-01b-continue.md +153 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-02-context.md +262 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-03-starter.md +290 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-04-decisions.md +300 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-05-crosscutting.md +319 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-06-structure.md +304 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-07-patterns.md +349 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-08-validation.md +293 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/steps/step-09-complete.md +356 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/templates/architecture-template.md +103 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.md +55 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +98 -0
- package/src/modules/bmgd/workflows/3-technical/generate-project-context/project-context-template.md +20 -0
- package/src/modules/bmgd/workflows/3-technical/generate-project-context/steps/step-01-discover.md +201 -0
- package/src/modules/bmgd/workflows/3-technical/generate-project-context/steps/step-02-generate.md +373 -0
- package/src/modules/bmgd/workflows/3-technical/generate-project-context/steps/step-03-complete.md +279 -0
- package/src/modules/bmgd/workflows/3-technical/generate-project-context/workflow.md +48 -0
- package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +23 -0
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.xml +225 -0
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +64 -0
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +279 -0
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +206 -0
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +63 -0
- package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +358 -0
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.xml +298 -0
- package/src/modules/bmgd/workflows/4-production/create-story/template.md +49 -0
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +79 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +80 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.xml +409 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +68 -0
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +1443 -0
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +62 -0
- package/src/modules/bmgd/workflows/4-production/sprint-planning/checklist.md +33 -0
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +234 -0
- package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +55 -0
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +56 -0
- package/src/modules/bmgd/workflows/4-production/sprint-status/instructions.md +229 -0
- package/src/modules/bmgd/workflows/4-production/sprint-status/workflow.yaml +35 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/instructions.md +140 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/create-tech-spec/workflow.yaml +27 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/checklist.md +37 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/instructions.md +220 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-dev/workflow.yaml +45 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/checklist.md +26 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/instructions.md +156 -0
- package/src/modules/bmgd/workflows/bmgd-quick-flow/quick-prototype/workflow.yaml +36 -0
- package/src/modules/bmgd/workflows/gametest/automate/checklist.md +93 -0
- package/src/modules/bmgd/workflows/gametest/automate/instructions.md +317 -0
- package/src/modules/bmgd/workflows/gametest/automate/workflow.yaml +50 -0
- package/src/modules/bmgd/workflows/gametest/performance/checklist.md +96 -0
- package/src/modules/bmgd/workflows/gametest/performance/instructions.md +323 -0
- package/src/modules/bmgd/workflows/gametest/performance/performance-template.md +256 -0
- package/src/modules/bmgd/workflows/gametest/performance/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/checklist.md +93 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/instructions.md +297 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/playtest-template.md +208 -0
- package/src/modules/bmgd/workflows/gametest/playtest-plan/workflow.yaml +59 -0
- package/src/modules/bmgd/workflows/gametest/test-design/checklist.md +98 -0
- package/src/modules/bmgd/workflows/gametest/test-design/instructions.md +280 -0
- package/src/modules/bmgd/workflows/gametest/test-design/test-design-template.md +205 -0
- package/src/modules/bmgd/workflows/gametest/test-design/workflow.yaml +47 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/checklist.md +103 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/instructions.md +348 -0
- package/src/modules/bmgd/workflows/gametest/test-framework/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/gametest/test-review/checklist.md +87 -0
- package/src/modules/bmgd/workflows/gametest/test-review/instructions.md +272 -0
- package/src/modules/bmgd/workflows/gametest/test-review/test-review-template.md +203 -0
- package/src/modules/bmgd/workflows/gametest/test-review/workflow.yaml +48 -0
- package/src/modules/bmgd/workflows/workflow-status/init/instructions.md +299 -0
- package/src/modules/bmgd/workflows/workflow-status/init/workflow.yaml +29 -0
- package/src/modules/bmgd/workflows/workflow-status/instructions.md +395 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/gamedev-brownfield.yaml +65 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/gamedev-greenfield.yaml +71 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-brownfield.yaml +29 -0
- package/src/modules/bmgd/workflows/workflow-status/paths/quickflow-greenfield.yaml +39 -0
- package/src/modules/bmgd/workflows/workflow-status/project-levels.yaml +63 -0
- package/src/modules/bmgd/workflows/workflow-status/workflow-status-template.yaml +24 -0
- package/src/modules/bmgd/workflows/workflow-status/workflow.yaml +30 -0
- package/src/modules/bmm/README.md +78 -92
- package/src/modules/bmm/_module-installer/installer.js +3 -37
- package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +1 -1
- package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +1 -1
- package/src/modules/bmm/agents/analyst.agent.yaml +27 -30
- package/src/modules/bmm/agents/architect.agent.yaml +16 -26
- package/src/modules/bmm/agents/dev.agent.yaml +29 -28
- package/src/modules/bmm/agents/pm.agent.yaml +27 -36
- package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +31 -0
- package/src/modules/bmm/agents/sm.agent.yaml +31 -52
- package/src/modules/bmm/agents/tea.agent.yaml +41 -35
- package/src/modules/bmm/agents/tech-writer.agent.yaml +54 -0
- package/src/modules/bmm/agents/ux-designer.agent.yaml +21 -18
- package/src/modules/bmm/data/README.md +29 -0
- package/src/modules/bmm/data/documentation-standards.md +262 -0
- package/src/modules/bmm/data/project-context-template.md +40 -0
- package/src/modules/bmm/docs/agents-guide.md +144 -0
- package/src/modules/bmm/docs/bmad-quick-flow.md +506 -0
- package/src/modules/bmm/docs/brownfield-guide.md +748 -0
- package/src/modules/bmm/docs/enterprise-agentic-development.md +686 -0
- package/src/modules/bmm/docs/faq.md +542 -0
- package/src/modules/bmm/docs/glossary.md +306 -0
- package/src/modules/bmm/docs/images/README.md +37 -0
- package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +5034 -0
- package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +4 -0
- package/src/modules/bmm/docs/index.md +168 -0
- package/src/modules/bmm/docs/party-mode.md +224 -0
- package/src/modules/bmm/docs/quick-flow-solo-dev.md +337 -0
- package/src/modules/bmm/docs/quick-spec-flow.md +638 -0
- package/src/modules/bmm/docs/quick-start.md +366 -0
- package/src/modules/bmm/docs/scale-adaptive-system.md +618 -0
- package/src/modules/bmm/docs/test-architecture.md +455 -0
- package/src/modules/bmm/docs/troubleshooting.md +661 -0
- package/src/modules/bmm/docs/workflow-architecture-reference.md +366 -0
- package/src/modules/bmm/docs/workflow-document-project-reference.md +489 -0
- package/src/modules/bmm/docs/workflows-analysis.md +266 -0
- package/src/modules/bmm/docs/workflows-implementation.md +210 -0
- package/src/modules/bmm/docs/workflows-planning.md +451 -0
- package/src/modules/bmm/docs/workflows-solutioning.md +509 -0
- package/src/modules/bmm/module.yaml +56 -0
- package/src/modules/bmm/teams/default-party.csv +21 -0
- package/src/modules/bmm/teams/team-fullstack.yaml +1 -0
- package/src/modules/bmm/testarch/knowledge/api-request.md +303 -0
- package/src/modules/bmm/testarch/knowledge/auth-session.md +356 -0
- package/src/modules/bmm/testarch/knowledge/burn-in.md +273 -0
- package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
- package/src/modules/bmm/testarch/knowledge/file-utils.md +260 -0
- package/src/modules/bmm/testarch/knowledge/fixtures-composition.md +382 -0
- package/src/modules/bmm/testarch/knowledge/intercept-network-call.md +280 -0
- package/src/modules/bmm/testarch/knowledge/log.md +294 -0
- package/src/modules/bmm/testarch/knowledge/network-error-monitor.md +272 -0
- package/src/modules/bmm/testarch/knowledge/network-recorder.md +265 -0
- package/src/modules/bmm/testarch/knowledge/overview.md +283 -0
- package/src/modules/bmm/testarch/knowledge/recurse.md +296 -0
- package/src/modules/bmm/testarch/tea-index.csv +11 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +181 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +165 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +203 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +206 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +209 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +223 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +198 -0
- package/src/modules/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +136 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +228 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +237 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +205 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +233 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +442 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +181 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +236 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +199 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +248 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +258 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +176 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +474 -0
- package/src/modules/bmm/workflows/1-analysis/research/research.template.md +29 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +136 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +238 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +247 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +201 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +238 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +485 -0
- package/src/modules/bmm/workflows/1-analysis/research/workflow.md +173 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +134 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +126 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +189 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +215 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +218 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +233 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +251 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +253 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +240 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +247 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +236 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +263 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +227 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +6 -138
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +13 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +7 -58
- package/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv +11 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +196 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +165 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +420 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +289 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +290 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +270 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +261 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +257 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +298 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +269 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +293 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +185 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +61 -0
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +189 -0
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +177 -0
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +178 -0
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +138 -0
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +251 -0
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +132 -0
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/modules/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +163 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +223 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +330 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +317 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +358 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +378 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +358 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +351 -0
- package/src/modules/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +258 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +232 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +271 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +144 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +2 -1
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +225 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +34 -36
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +7 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +42 -27
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +332 -214
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +344 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/template.md +3 -5
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +38 -27
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +65 -23
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +409 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +9 -10
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +1208 -244
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +38 -26
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +59 -55
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +14 -14
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +21 -8
- package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +36 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/instructions.md +115 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +28 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +156 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +140 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +51 -0
- package/src/modules/bmm/workflows/document-project/checklist.md +1 -1
- package/src/modules/bmm/workflows/document-project/instructions.md +31 -32
- package/src/modules/bmm/workflows/document-project/workflow.yaml +4 -10
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +6 -6
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
- package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +13 -13
- package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
- package/src/modules/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
- package/src/modules/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/generate-project-context/project-context-template.md +21 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +183 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +317 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +277 -0
- package/src/modules/bmm/workflows/generate-project-context/workflow.md +48 -0
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +10 -9
- package/src/modules/bmm/workflows/testarch/atdd/checklist.md +1 -0
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +26 -5
- package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -9
- package/src/modules/bmm/workflows/testarch/automate/checklist.md +2 -0
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +25 -4
- package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -11
- package/src/modules/bmm/workflows/testarch/ci/checklist.md +7 -5
- package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +36 -3
- package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +25 -4
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +23 -4
- package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -10
- package/src/modules/bmm/workflows/testarch/framework/checklist.md +4 -4
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +28 -2
- package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -8
- package/src/modules/bmm/workflows/testarch/nfr-assess/checklist.md +2 -0
- package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +2 -0
- package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -11
- package/src/modules/bmm/workflows/testarch/test-design/checklist.md +7 -6
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +182 -15
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +13 -4
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +13 -11
- package/src/modules/bmm/workflows/testarch/test-review/checklist.md +2 -0
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +29 -9
- package/src/modules/bmm/workflows/testarch/test-review/test-review-template.md +2 -0
- package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -9
- package/src/modules/bmm/workflows/testarch/trace/checklist.md +1 -0
- package/src/modules/bmm/workflows/testarch/trace/instructions.md +11 -9
- package/src/modules/bmm/workflows/testarch/trace/trace-template.md +2 -0
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -13
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +259 -210
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +6 -5
- package/src/modules/bmm/workflows/workflow-status/instructions.md +188 -117
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +122 -0
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +110 -0
- package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +106 -0
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +96 -0
- package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
- package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +24 -0
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +7 -5
- package/src/modules/cis/_module-installer/installer.js +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +7 -10
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +7 -10
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +7 -10
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +7 -10
- package/src/modules/cis/agents/presentation-master.agent.yaml +52 -0
- package/src/modules/cis/agents/storyteller/storyteller-sidecar/stories-told.md +7 -0
- package/src/modules/cis/agents/storyteller/storyteller-sidecar/story-preferences.md +7 -0
- package/src/modules/cis/agents/storyteller/storyteller.agent.yaml +25 -0
- package/src/modules/cis/docs/index.md +149 -0
- package/src/modules/cis/module.yaml +11 -0
- package/src/modules/cis/teams/creative-squad.yaml +1 -0
- package/src/modules/cis/teams/default-party.csv +12 -0
- package/src/modules/cis/workflows/README.md +102 -30
- package/src/modules/cis/workflows/design-thinking/instructions.md +4 -2
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -12
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +7 -5
- package/src/modules/cis/workflows/innovation-strategy/template.md +3 -3
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -12
- package/src/modules/cis/workflows/problem-solving/instructions.md +4 -2
- package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -12
- package/src/modules/cis/workflows/storytelling/instructions.md +14 -4
- package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -12
- package/src/utility/agent-components/activation-rules.txt +7 -0
- package/src/utility/agent-components/activation-steps.txt +13 -0
- package/src/utility/agent-components/agent-command-header.md +1 -0
- package/src/utility/agent-components/agent.customize.template.yaml +41 -0
- package/src/utility/agent-components/handler-action.txt +4 -0
- package/src/utility/agent-components/handler-exec.txt +6 -0
- package/src/utility/agent-components/handler-multi.txt +14 -0
- package/src/utility/agent-components/handler-tmpl.txt +5 -0
- package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
- package/src/utility/agent-components/handler-workflow.txt +10 -0
- package/src/utility/agent-components/menu-handlers.txt +6 -0
- package/test/README.md +2 -2
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +24 -0
- package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +24 -0
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +1 -3
- package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +30 -0
- package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +23 -0
- package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +22 -0
- package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +23 -0
- package/test/test-agent-schema.js +2 -2
- package/test/test-installation-components.js +214 -0
- package/tools/build-docs.js +630 -0
- package/tools/cli/README.md +1 -588
- package/tools/cli/commands/install.js +61 -20
- package/tools/cli/installers/install-messages.yaml +52 -0
- package/tools/cli/installers/lib/core/config-collector.js +596 -99
- package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
- package/tools/cli/installers/lib/core/dependency-resolver.js +2 -2
- package/tools/cli/installers/lib/core/detector.js +75 -16
- package/tools/cli/installers/lib/core/ide-config-manager.js +12 -8
- package/tools/cli/installers/lib/core/installer.js +1279 -724
- package/tools/cli/installers/lib/core/manifest-generator.js +285 -142
- package/tools/cli/installers/lib/core/manifest.js +74 -20
- package/tools/cli/installers/lib/custom/handler.js +363 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +94 -12
- package/tools/cli/installers/lib/ide/antigravity.js +507 -0
- package/tools/cli/installers/lib/ide/auggie.js +148 -240
- package/tools/cli/installers/lib/ide/claude-code.js +95 -35
- package/tools/cli/installers/lib/ide/cline.js +64 -18
- package/tools/cli/installers/lib/ide/codex.js +226 -72
- package/tools/cli/installers/lib/ide/crush.js +79 -55
- package/tools/cli/installers/lib/ide/cursor.js +144 -20
- package/tools/cli/installers/lib/ide/gemini.js +180 -35
- package/tools/cli/installers/lib/ide/github-copilot.js +155 -58
- package/tools/cli/installers/lib/ide/iflow.js +79 -30
- package/tools/cli/installers/lib/ide/kilo.js +94 -16
- package/tools/cli/installers/lib/ide/kiro-cli.js +327 -0
- package/tools/cli/installers/lib/ide/manager.js +50 -0
- package/tools/cli/installers/lib/ide/opencode.js +66 -22
- package/tools/cli/installers/lib/ide/qwen.js +93 -11
- package/tools/cli/installers/lib/ide/roo.js +158 -176
- package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +96 -0
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +34 -19
- package/tools/cli/installers/lib/ide/shared/module-injections.js +2 -2
- package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +119 -0
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +241 -0
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/ide/trae.js +67 -32
- package/tools/cli/installers/lib/ide/windsurf.js +65 -8
- package/tools/cli/installers/lib/message-loader.js +85 -0
- package/tools/cli/installers/lib/modules/manager.js +785 -97
- package/tools/cli/lib/activation-builder.js +8 -13
- package/tools/cli/lib/agent/compiler.js +565 -0
- package/tools/cli/lib/agent/installer.js +716 -0
- package/tools/cli/lib/agent/template-engine.js +152 -0
- package/tools/cli/lib/agent-analyzer.js +48 -20
- package/tools/cli/lib/agent-party-generator.js +5 -17
- package/tools/cli/lib/cli-utils.js +65 -46
- package/tools/cli/lib/config.js +7 -4
- package/tools/cli/lib/platform-codes.js +2 -2
- package/tools/cli/lib/ui.js +1133 -82
- package/tools/cli/lib/xml-handler.js +4 -55
- package/tools/cli/lib/yaml-format.js +6 -7
- package/tools/cli/lib/yaml-xml-builder.js +196 -56
- package/tools/flattener/ignoreRules.js +1 -1
- package/tools/flattener/xml.js +1 -7
- package/tools/lib/xml-utils.js +13 -0
- package/tools/maintainer/review-pr-README.md +55 -0
- package/tools/maintainer/review-pr.md +242 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/tools/platform-codes.yaml +24 -0
- package/tools/schema/agent.js +312 -53
- package/tools/validate-agent-schema.js +2 -2
- package/tools/validate-svg-changes.sh +356 -0
- package/website/css/custom.css +52 -0
- package/website/docusaurus.config.js +179 -0
- package/website/sidebars.js +157 -0
- package/website/src/pages/downloads.md +81 -0
- package/website/src/pages/index.js +50 -0
- package/website/static/favicon.ico +0 -0
- package/website/static/img/logo.svg +4 -0
- package/website/static/robots.txt +37 -0
- package/.claude/commands/bmad/bmb/agents/bmad-builder.md +0 -70
- package/.claude/commands/bmad/bmb/workflows/README.md +0 -67
- package/.claude/commands/bmad/bmb/workflows/audit-workflow.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/convert-legacy.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/create-agent.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/create-module.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/create-workflow.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/edit-agent.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/edit-module.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/edit-workflow.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/module-brief.md +0 -15
- package/.claude/commands/bmad/bmb/workflows/redoc.md +0 -15
- package/.claude/commands/bmad/bmd/agents/cli-chief.md +0 -108
- package/.claude/commands/bmad/bmd/agents/doc-keeper.md +0 -115
- package/.claude/commands/bmad/bmd/agents/release-chief.md +0 -109
- package/.claude/commands/bmad/core/agents/bmad-master.md +0 -71
- package/.claude/commands/bmad/core/tasks/index-docs.md +0 -9
- package/.claude/commands/bmad/core/tools/shard-doc.md +0 -9
- package/.claude/commands/bmad/core/workflows/README.md +0 -27
- package/.claude/commands/bmad/core/workflows/brainstorming.md +0 -15
- package/.claude/commands/bmad/core/workflows/party-mode.md +0 -15
- package/.claude/hooks/bmad-tts-injector.sh +0 -415
- package/.claude/hooks/bmad-voice-manager.sh +0 -511
- package/.claude/hooks/check-output-style.sh +0 -112
- package/.claude/hooks/download-extra-voices.sh +0 -244
- package/.claude/hooks/github-star-reminder.sh +0 -154
- package/.claude/hooks/language-manager.sh +0 -392
- package/.claude/hooks/learn-manager.sh +0 -475
- package/.claude/hooks/personality-manager.sh +0 -438
- package/.claude/hooks/piper-download-voices.sh +0 -165
- package/.claude/hooks/piper-installer.sh +0 -178
- package/.claude/hooks/piper-multispeaker-registry.sh +0 -165
- package/.claude/hooks/piper-voice-manager.sh +0 -293
- package/.claude/hooks/play-tts-elevenlabs.sh +0 -404
- package/.claude/hooks/play-tts-piper.sh +0 -338
- package/.claude/hooks/play-tts.sh +0 -100
- package/.claude/hooks/provider-commands.sh +0 -540
- package/.claude/hooks/provider-manager.sh +0 -298
- package/.claude/hooks/replay-target-audio.sh +0 -95
- package/.claude/hooks/sentiment-manager.sh +0 -201
- package/.claude/hooks/speed-manager.sh +0 -291
- package/.claude/hooks/voice-manager.sh +0 -594
- package/.claude/hooks/voices-config.sh +0 -70
- package/.claude/settings.local.json +0 -41
- package/.github/workflows/lint.yaml +0 -61
- package/bmad/_cfg/agent-manifest.csv +0 -7
- package/bmad/_cfg/agents/bmb-bmad-builder.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmd-cli-chief.customize.yaml +0 -32
- package/bmad/_cfg/agents/bmd-doc-keeper.customize.yaml +0 -42
- package/bmad/_cfg/agents/bmd-release-chief.customize.yaml +0 -42
- package/bmad/_cfg/agents/core-bmad-master.customize.yaml +0 -42
- package/bmad/_cfg/files-manifest.csv +0 -83
- package/bmad/_cfg/manifest.yaml +0 -12
- package/bmad/_cfg/task-manifest.csv +0 -5
- package/bmad/_cfg/tool-manifest.csv +0 -2
- package/bmad/_cfg/workflow-manifest.csv +0 -15
- package/bmad/bmb/README.md +0 -132
- package/bmad/bmb/agents/bmad-builder.md +0 -70
- package/bmad/bmb/config.yaml +0 -14
- package/bmad/bmb/workflows/audit-workflow/checklist.md +0 -143
- package/bmad/bmb/workflows/audit-workflow/instructions.md +0 -341
- package/bmad/bmb/workflows/audit-workflow/template.md +0 -118
- package/bmad/bmb/workflows/audit-workflow/workflow.yaml +0 -23
- package/bmad/bmb/workflows/audit-workflow/workflow.yaml.bak +0 -21
- package/bmad/bmb/workflows/convert-legacy/README.md +0 -262
- package/bmad/bmb/workflows/convert-legacy/checklist.md +0 -205
- package/bmad/bmb/workflows/convert-legacy/instructions.md +0 -377
- package/bmad/bmb/workflows/convert-legacy/workflow.yaml +0 -32
- package/bmad/bmb/workflows/create-agent/README.md +0 -320
- package/bmad/bmb/workflows/create-agent/agent-architecture.md +0 -419
- package/bmad/bmb/workflows/create-agent/agent-architecture.md.bak +0 -412
- package/bmad/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
- package/bmad/bmb/workflows/create-agent/agent-command-patterns.md.bak +0 -759
- package/bmad/bmb/workflows/create-agent/agent-types.md +0 -292
- package/bmad/bmb/workflows/create-agent/brainstorm-context.md +0 -174
- package/bmad/bmb/workflows/create-agent/checklist.md +0 -62
- package/bmad/bmb/workflows/create-agent/communication-styles.md +0 -202
- package/bmad/bmb/workflows/create-agent/instructions.md +0 -430
- package/bmad/bmb/workflows/create-agent/workflow.yaml +0 -37
- package/bmad/bmb/workflows/create-module/README.md +0 -220
- package/bmad/bmb/workflows/create-module/README.md.bak +0 -218
- package/bmad/bmb/workflows/create-module/brainstorm-context.md +0 -137
- package/bmad/bmb/workflows/create-module/checklist.md +0 -244
- package/bmad/bmb/workflows/create-module/checklist.md.bak +0 -245
- package/bmad/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
- package/bmad/bmb/workflows/create-module/installer-templates/installer.js +0 -231
- package/bmad/bmb/workflows/create-module/installer-templates/installer.js.bak +0 -231
- package/bmad/bmb/workflows/create-module/instructions.md +0 -581
- package/bmad/bmb/workflows/create-module/instructions.md.bak +0 -521
- package/bmad/bmb/workflows/create-module/module-structure.md +0 -366
- package/bmad/bmb/workflows/create-module/module-structure.md.bak +0 -310
- package/bmad/bmb/workflows/create-module/workflow.yaml +0 -42
- package/bmad/bmb/workflows/create-module/workflow.yaml.bak +0 -40
- package/bmad/bmb/workflows/create-workflow/README.md +0 -277
- package/bmad/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
- package/bmad/bmb/workflows/create-workflow/checklist.md +0 -94
- package/bmad/bmb/workflows/create-workflow/instructions.md +0 -716
- package/bmad/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1150
- package/bmad/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
- package/bmad/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -13
- package/bmad/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
- package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -39
- package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml.bak +0 -39
- package/bmad/bmb/workflows/create-workflow/workflow.yaml +0 -40
- package/bmad/bmb/workflows/create-workflow/workflow.yaml.bak +0 -38
- package/bmad/bmb/workflows/edit-agent/README.md +0 -112
- package/bmad/bmb/workflows/edit-agent/checklist.md +0 -112
- package/bmad/bmb/workflows/edit-agent/instructions.md +0 -290
- package/bmad/bmb/workflows/edit-agent/workflow.yaml +0 -33
- package/bmad/bmb/workflows/edit-module/README.md +0 -187
- package/bmad/bmb/workflows/edit-module/checklist.md +0 -165
- package/bmad/bmb/workflows/edit-module/instructions.md +0 -339
- package/bmad/bmb/workflows/edit-module/workflow.yaml +0 -34
- package/bmad/bmb/workflows/edit-workflow/README.md +0 -119
- package/bmad/bmb/workflows/edit-workflow/checklist.md +0 -70
- package/bmad/bmb/workflows/edit-workflow/instructions.md +0 -342
- package/bmad/bmb/workflows/edit-workflow/workflow.yaml +0 -27
- package/bmad/bmb/workflows/edit-workflow/workflow.yaml.bak +0 -25
- package/bmad/bmb/workflows/module-brief/README.md +0 -264
- package/bmad/bmb/workflows/module-brief/checklist.md +0 -116
- package/bmad/bmb/workflows/module-brief/instructions.md +0 -267
- package/bmad/bmb/workflows/module-brief/workflow.yaml +0 -29
- package/bmad/bmb/workflows/module-brief/workflow.yaml.bak +0 -27
- package/bmad/bmb/workflows/redoc/README.md +0 -87
- package/bmad/bmb/workflows/redoc/checklist.md +0 -99
- package/bmad/bmb/workflows/redoc/instructions.md +0 -265
- package/bmad/bmb/workflows/redoc/workflow.yaml +0 -32
- package/bmad/bmb/workflows/redoc/workflow.yaml.bak +0 -31
- package/bmad/bmd/README.md +0 -193
- package/bmad/bmd/README.md.bak +0 -193
- package/bmad/bmd/agents/cli-chief-sidecar/instructions.md +0 -102
- package/bmad/bmd/agents/cli-chief-sidecar/instructions.md.bak +0 -102
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md +0 -68
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md.bak +0 -68
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +0 -123
- package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md.bak +0 -123
- package/bmad/bmd/agents/cli-chief-sidecar/memories.md +0 -53
- package/bmad/bmd/agents/cli-chief-sidecar/memories.md.bak +0 -53
- package/bmad/bmd/agents/cli-chief.md +0 -108
- package/bmad/bmd/agents/cli-chief.md.bak +0 -108
- package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md +0 -177
- package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md.bak +0 -177
- package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md +0 -81
- package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md.bak +0 -81
- package/bmad/bmd/agents/doc-keeper-sidecar/memories.md +0 -88
- package/bmad/bmd/agents/doc-keeper-sidecar/memories.md.bak +0 -88
- package/bmad/bmd/agents/doc-keeper.md +0 -115
- package/bmad/bmd/agents/doc-keeper.md.bak +0 -115
- package/bmad/bmd/agents/release-chief-sidecar/instructions.md +0 -164
- package/bmad/bmd/agents/release-chief-sidecar/instructions.md.bak +0 -164
- package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md +0 -82
- package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md.bak +0 -82
- package/bmad/bmd/agents/release-chief-sidecar/memories.md +0 -73
- package/bmad/bmd/agents/release-chief-sidecar/memories.md.bak +0 -73
- package/bmad/bmd/agents/release-chief.md +0 -109
- package/bmad/bmd/agents/release-chief.md.bak +0 -109
- package/bmad/bmd/config.yaml +0 -10
- package/bmad/core/agents/bmad-master.md +0 -71
- package/bmad/core/agents/bmad-web-orchestrator.agent.xml +0 -122
- package/bmad/core/config.yaml +0 -9
- package/bmad/core/tasks/adv-elicit-methods.csv +0 -39
- package/bmad/core/tasks/adv-elicit.xml +0 -104
- package/bmad/core/tasks/index-docs.xml +0 -65
- package/bmad/core/tasks/validate-workflow.xml +0 -89
- package/bmad/core/tasks/workflow.xml +0 -174
- package/bmad/core/tools/shard-doc.xml +0 -100
- package/bmad/core/workflows/brainstorming/README.md +0 -271
- package/bmad/core/workflows/brainstorming/brain-methods.csv +0 -36
- package/bmad/core/workflows/brainstorming/instructions.md +0 -314
- package/bmad/core/workflows/brainstorming/template.md +0 -102
- package/bmad/core/workflows/brainstorming/workflow.yaml +0 -43
- package/bmad/core/workflows/party-mode/instructions.md +0 -188
- package/bmad/core/workflows/party-mode/workflow.yaml +0 -23
- package/bmad/docs/claude-code-instructions.md +0 -25
- package/bmad/docs/codex-instructions.md +0 -21
- package/bmd/README.md +0 -193
- package/bmd/agents/cli-chief-sidecar/instructions.md +0 -102
- package/bmd/agents/cli-chief-sidecar/knowledge/README.md +0 -68
- package/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +0 -123
- package/bmd/agents/cli-chief-sidecar/memories.md +0 -53
- package/bmd/agents/cli-chief.agent.yaml +0 -126
- package/bmd/agents/doc-keeper-sidecar/instructions.md +0 -177
- package/bmd/agents/doc-keeper-sidecar/knowledge/README.md +0 -81
- package/bmd/agents/doc-keeper-sidecar/memories.md +0 -88
- package/bmd/agents/doc-keeper.agent.yaml +0 -137
- package/bmd/agents/release-chief-sidecar/instructions.md +0 -164
- package/bmd/agents/release-chief-sidecar/knowledge/README.md +0 -82
- package/bmd/agents/release-chief-sidecar/memories.md +0 -73
- package/bmd/agents/release-chief.agent.yaml +0 -127
- package/bmd/bmad-custom-module-installer-plan.md +0 -1176
- package/bmd/config.yaml +0 -12
- package/docs/bmad-brownfield-guide.md +0 -1260
- package/docs/conversion-report-shard-doc-2025-10-26.md +0 -188
- package/docs/installers-bundlers/ide-injections.md +0 -186
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +0 -327
- package/docs/installers-bundlers/web-bundler-usage.md +0 -54
- package/src/core/_module-installer/install-config.yaml +0 -28
- package/src/core/agents/bmad-web-orchestrator.agent.xml +0 -122
- package/src/core/tasks/adv-elicit-methods.csv +0 -39
- package/src/core/tasks/adv-elicit.xml +0 -104
- package/src/core/workflows/brainstorming/README.md +0 -271
- package/src/core/workflows/brainstorming/instructions.md +0 -314
- package/src/core/workflows/brainstorming/workflow.yaml +0 -43
- package/src/core/workflows/party-mode/instructions.md +0 -188
- package/src/core/workflows/party-mode/workflow.yaml +0 -23
- package/src/modules/bmb/_module-installer/install-config.yaml +0 -26
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +0 -58
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +0 -143
- package/src/modules/bmb/workflows/audit-workflow/instructions.md +0 -341
- package/src/modules/bmb/workflows/audit-workflow/template.md +0 -118
- package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +0 -25
- package/src/modules/bmb/workflows/convert-legacy/README.md +0 -262
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +0 -205
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +0 -377
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +0 -34
- package/src/modules/bmb/workflows/create-agent/README.md +0 -320
- package/src/modules/bmb/workflows/create-agent/agent-architecture.md +0 -419
- package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
- package/src/modules/bmb/workflows/create-agent/agent-types.md +0 -292
- package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +0 -174
- package/src/modules/bmb/workflows/create-agent/checklist.md +0 -62
- package/src/modules/bmb/workflows/create-agent/communication-styles.md +0 -202
- package/src/modules/bmb/workflows/create-agent/instructions.md +0 -430
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -49
- package/src/modules/bmb/workflows/create-module/README.md +0 -220
- package/src/modules/bmb/workflows/create-module/brainstorm-context.md +0 -137
- package/src/modules/bmb/workflows/create-module/checklist.md +0 -244
- package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
- package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +0 -231
- package/src/modules/bmb/workflows/create-module/instructions.md +0 -581
- package/src/modules/bmb/workflows/create-module/module-structure.md +0 -366
- package/src/modules/bmb/workflows/create-module/workflow.yaml +0 -44
- package/src/modules/bmb/workflows/create-workflow/README.md +0 -277
- package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
- package/src/modules/bmb/workflows/create-workflow/checklist.md +0 -94
- package/src/modules/bmb/workflows/create-workflow/instructions.md +0 -716
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1150
- package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -13
- package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -65
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -42
- package/src/modules/bmb/workflows/edit-agent/README.md +0 -112
- package/src/modules/bmb/workflows/edit-agent/checklist.md +0 -112
- package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -290
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -35
- package/src/modules/bmb/workflows/edit-module/README.md +0 -187
- package/src/modules/bmb/workflows/edit-module/checklist.md +0 -165
- package/src/modules/bmb/workflows/edit-module/instructions.md +0 -339
- package/src/modules/bmb/workflows/edit-module/workflow.yaml +0 -36
- package/src/modules/bmb/workflows/edit-workflow/README.md +0 -119
- package/src/modules/bmb/workflows/edit-workflow/checklist.md +0 -70
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +0 -342
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +0 -29
- package/src/modules/bmb/workflows/module-brief/README.md +0 -264
- package/src/modules/bmb/workflows/module-brief/checklist.md +0 -116
- package/src/modules/bmb/workflows/module-brief/instructions.md +0 -267
- package/src/modules/bmb/workflows/module-brief/template.md +0 -275
- package/src/modules/bmb/workflows/module-brief/workflow.yaml +0 -31
- package/src/modules/bmb/workflows/redoc/README.md +0 -87
- package/src/modules/bmb/workflows/redoc/checklist.md +0 -99
- package/src/modules/bmb/workflows/redoc/instructions.md +0 -265
- package/src/modules/bmb/workflows/redoc/workflow.yaml +0 -34
- package/src/modules/bmm/_module-installer/assets/bmm-kb.md +0 -1
- package/src/modules/bmm/_module-installer/assets/technical-decisions.md +0 -30
- package/src/modules/bmm/_module-installer/install-config.yaml +0 -74
- package/src/modules/bmm/agents/game-architect.agent.yaml +0 -35
- package/src/modules/bmm/agents/game-designer.agent.yaml +0 -47
- package/src/modules/bmm/agents/game-dev.agent.yaml +0 -39
- package/src/modules/bmm/sub-modules/claude-code/config.yaml +0 -5
- package/src/modules/bmm/sub-modules/claude-code/injections.yaml +0 -242
- package/src/modules/bmm/sub-modules/claude-code/readme.md +0 -87
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/api-documenter.md +0 -102
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/codebase-analyzer.md +0 -82
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/data-analyst.md +0 -101
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/pattern-detector.md +0 -84
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/dependency-mapper.md +0 -83
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/epic-optimizer.md +0 -81
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/requirements-analyst.md +0 -61
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/technical-decisions-curator.md +0 -168
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/trend-spotter.md +0 -115
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-journey-mapper.md +0 -123
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-researcher.md +0 -72
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/market-researcher.md +0 -51
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/tech-debt-auditor.md +0 -106
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/document-reviewer.md +0 -102
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/technical-evaluator.md +0 -68
- package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/test-coverage-analyzer.md +0 -108
- package/src/modules/bmm/tasks/daily-standup.xml +0 -85
- package/src/modules/bmm/tasks/retrospective.xml +0 -104
- package/src/modules/bmm/teams/team-gamedev.yaml +0 -14
- package/src/modules/bmm/testarch/README.md +0 -311
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/README.md +0 -38
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/instructions.md +0 -109
- package/src/modules/bmm/workflows/1-analysis/brainstorm-game/workflow.yaml +0 -41
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/README.md +0 -29
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -91
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -39
- package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +0 -221
- package/src/modules/bmm/workflows/1-analysis/game-brief/instructions.md +0 -357
- package/src/modules/bmm/workflows/1-analysis/game-brief/workflow.yaml +0 -44
- package/src/modules/bmm/workflows/1-analysis/product-brief/README.md +0 -180
- package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +0 -321
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +0 -165
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -43
- package/src/modules/bmm/workflows/1-analysis/research/README.md +0 -454
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +0 -202
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-competitor-analyzer.md +0 -259
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-data-analyst.md +0 -190
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-market-researcher.md +0 -337
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-trend-spotter.md +0 -107
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-user-researcher.md +0 -329
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -433
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -613
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -125
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -501
- package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
- package/src/modules/bmm/workflows/1-analysis/research/template-market.md +0 -311
- package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +0 -210
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +0 -49
- package/src/modules/bmm/workflows/2-plan-workflows/README.md +0 -258
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1283
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -42
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/README.md +0 -222
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/instructions-gdd.md +0 -475
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +0 -67
- package/src/modules/bmm/workflows/2-plan-workflows/narrative/instructions-narrative.md +0 -557
- package/src/modules/bmm/workflows/2-plan-workflows/narrative/workflow.yaml +0 -38
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -117
- package/src/modules/bmm/workflows/2-plan-workflows/prd/epics-template.md +0 -63
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -449
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -46
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -107
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -11
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +0 -167
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +0 -278
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -269
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -55
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -56
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -52
- package/src/modules/bmm/workflows/3-solutioning/README.md +0 -1
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -347
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
- package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +0 -244
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +0 -703
- package/src/modules/bmm/workflows/3-solutioning/architecture/readme.md +0 -318
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -54
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/README.md +0 -177
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +0 -175
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -273
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +0 -146
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +0 -189
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +0 -40
- package/src/modules/bmm/workflows/4-implementation/README.md +0 -221
- package/src/modules/bmm/workflows/4-implementation/code-review/README.md +0 -69
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -391
- package/src/modules/bmm/workflows/4-implementation/correct-course/README.md +0 -73
- package/src/modules/bmm/workflows/4-implementation/create-story/README.md +0 -129
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -252
- package/src/modules/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +0 -367
- package/src/modules/bmm/workflows/4-implementation/dev-story/README.md +0 -206
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -262
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/README.md +0 -195
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -160
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -34
- package/src/modules/bmm/workflows/4-implementation/retrospective/README.md +0 -77
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/README.md +0 -156
- package/src/modules/bmm/workflows/4-implementation/story-context/README.md +0 -234
- package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
- package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +0 -201
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -32
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -27
- package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
- package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -27
- package/src/modules/bmm/workflows/README.md +0 -577
- package/src/modules/bmm/workflows/document-project/README.md +0 -444
- package/src/modules/bmm/workflows/document-project/templates/README.md +0 -38
- package/src/modules/bmm/workflows/testarch/README.md +0 -26
- package/src/modules/bmm/workflows/testarch/atdd/README.md +0 -672
- package/src/modules/bmm/workflows/testarch/automate/README.md +0 -869
- package/src/modules/bmm/workflows/testarch/ci/README.md +0 -493
- package/src/modules/bmm/workflows/testarch/framework/README.md +0 -340
- package/src/modules/bmm/workflows/testarch/nfr-assess/README.md +0 -469
- package/src/modules/bmm/workflows/testarch/test-design/README.md +0 -493
- package/src/modules/bmm/workflows/testarch/test-review/README.md +0 -775
- package/src/modules/bmm/workflows/testarch/trace/README.md +0 -802
- package/src/modules/bmm/workflows/workflow-status/README.md +0 -241
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-0.yaml +0 -54
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-1.yaml +0 -58
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-2.yaml +0 -76
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-3.yaml +0 -95
- package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-4.yaml +0 -88
- package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +0 -75
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-0.yaml +0 -45
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-1.yaml +0 -49
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-2.yaml +0 -78
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-3.yaml +0 -73
- package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-4.yaml +0 -75
- package/src/modules/bmm/workflows/workflow-status/workflow-status-template.md +0 -30
- package/src/modules/cis/_module-installer/install-config.yaml +0 -14
- package/src/modules/cis/agents/README.md +0 -104
- package/src/modules/cis/agents/storyteller.agent.yaml +0 -23
- package/src/modules/cis/readme.md +0 -86
- package/src/utility/models/agent-activation-ide.xml +0 -51
- package/src/utility/models/agent-activation-web.xml +0 -60
- package/src/utility/models/agent-config-template.md +0 -23
- package/src/utility/models/agent-in-team-activation.xml +0 -3
- package/src/utility/models/fragments/activation-rules.xml +0 -8
- package/src/utility/models/fragments/activation-steps.xml +0 -15
- package/src/utility/models/fragments/handler-action.xml +0 -4
- package/src/utility/models/fragments/handler-exec.xml +0 -5
- package/src/utility/models/fragments/handler-tmpl.xml +0 -5
- package/src/utility/models/fragments/handler-validate-workflow.xml +0 -7
- package/src/utility/models/fragments/handler-workflow.xml +0 -9
- package/src/utility/models/fragments/menu-handlers.xml +0 -6
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +0 -32
- package/src/utility/templates/agent.customize.template.yaml +0 -42
- package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +0 -26
- package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +0 -25
- package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +0 -26
- package/test/fixtures/agent-schema/invalid/persona/principles-as-string.agent.yaml +0 -23
- package/tools/cli/bundlers/bundle-web.js +0 -179
- package/tools/cli/bundlers/test-analyst.js +0 -28
- package/tools/cli/bundlers/test-bundler.js +0 -118
- package/tools/cli/bundlers/web-bundler.js +0 -1479
- package/tools/cli/commands/build.js +0 -458
- package/tools/cli/commands/list.js +0 -28
- package/tools/cli/commands/status.js +0 -47
- package/tools/cli/commands/uninstall.js +0 -44
- package/tools/cli/commands/update.js +0 -28
- package/tools/cli/installers/lib/ide/task-tool-command-generator.js +0 -119
- package/tools/cli/installers/lib/ide/workflow-command-generator.js +0 -235
- package/tools/cli/installers/lib/ide/workflow-command-template.md +0 -15
- package/tools/cli/lib/replace-project-root.js +0 -239
- package/tools/cli/regenerate-manifests.js +0 -28
- package/tools/cli/test-yaml-builder.js +0 -43
- package/tools/validate-bundles.js +0 -87
- package/v6-open-items.md +0 -23
- /package/{bmad/bmb/workflows → src/modules/bmb/workflows-legacy}/module-brief/template.md +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-brain-methods.csv +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-context.md +0 -0
- /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/checklist.md +0 -0
- /package/src/modules/{bmm/workflows/1-analysis/game-brief/template.md → bmgd/workflows/1-preproduction/game-brief/templates/game-brief-template.md} +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/checklist.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/action-platformer.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/adventure.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/card-game.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/fighting.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/horror.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/idle-incremental.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/metroidvania.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/moba.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/party-game.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/puzzle.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/racing.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/rhythm.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/roguelike.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/rpg.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/sandbox.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/shooter.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/simulation.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/sports.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/strategy.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/survival.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/text-based.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/tower-defense.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/turn-based-tactics.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/visual-novel.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types.csv +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows/gdd → bmgd/workflows/2-design/gdd/templates}/gdd-template.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/narrative/checklist.md +0 -0
- /package/src/modules/{bmm/workflows/2-plan-workflows/narrative → bmgd/workflows/2-design/narrative/templates}/narrative-template.md +0 -0
- /package/src/modules/{bmm/workflows/3-solutioning/architecture → bmgd/workflows/3-technical/game-architecture}/decision-catalog.yaml +0 -0
- /package/src/modules/{bmm/workflows/3-solutioning/architecture → bmgd/workflows/3-technical/game-architecture}/pattern-categories.csv +0 -0
- /package/src/modules/{bmm/workflows/4-implementation/code-review/backlog_template.md → bmgd/workflows/4-production/code-review/backlog-template.md} +0 -0
- /package/src/utility/{models/fragments/handler-data.xml → agent-components/handler-data.txt} +0 -0
package/tools/cli/lib/ui.js
CHANGED
|
@@ -1,50 +1,253 @@
|
|
|
1
1
|
const chalk = require('chalk');
|
|
2
|
-
const inquirer = require('inquirer');
|
|
2
|
+
const inquirer = require('inquirer').default || require('inquirer');
|
|
3
3
|
const path = require('node:path');
|
|
4
4
|
const os = require('node:os');
|
|
5
5
|
const fs = require('fs-extra');
|
|
6
6
|
const { CLIUtils } = require('./cli-utils');
|
|
7
|
+
const { CustomHandler } = require('../installers/lib/custom/handler');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* UI utilities for the installer
|
|
10
11
|
*/
|
|
11
12
|
class UI {
|
|
12
|
-
constructor() {}
|
|
13
|
-
|
|
14
13
|
/**
|
|
15
14
|
* Prompt for installation configuration
|
|
16
15
|
* @returns {Object} Installation configuration
|
|
17
16
|
*/
|
|
18
17
|
async promptInstall() {
|
|
19
18
|
CLIUtils.displayLogo();
|
|
20
|
-
|
|
19
|
+
|
|
20
|
+
// Display version-specific start message from install-messages.yaml
|
|
21
|
+
const { MessageLoader } = require('../installers/lib/message-loader');
|
|
22
|
+
const messageLoader = new MessageLoader();
|
|
23
|
+
messageLoader.displayStartMessage();
|
|
21
24
|
|
|
22
25
|
const confirmedDirectory = await this.getConfirmedDirectory();
|
|
23
26
|
|
|
24
|
-
// Check
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
27
|
+
// Preflight: Check for legacy BMAD v4 footprints immediately after getting directory
|
|
28
|
+
const { Detector } = require('../installers/lib/core/detector');
|
|
29
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
30
|
+
const detector = new Detector();
|
|
31
|
+
const installer = new Installer();
|
|
32
|
+
const legacyV4 = await detector.detectLegacyV4(confirmedDirectory);
|
|
33
|
+
if (legacyV4.hasLegacyV4) {
|
|
34
|
+
await installer.handleLegacyV4Migration(confirmedDirectory, legacyV4);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Check for legacy folders and prompt for rename before showing any menus
|
|
38
|
+
let hasLegacyCfg = false;
|
|
39
|
+
let hasLegacyBmadFolder = false;
|
|
40
|
+
let bmadDir = null;
|
|
41
|
+
let legacyBmadPath = null;
|
|
42
|
+
|
|
43
|
+
// First check for legacy .bmad folder (instead of _bmad)
|
|
44
|
+
// Only check if directory exists
|
|
45
|
+
if (await fs.pathExists(confirmedDirectory)) {
|
|
46
|
+
const entries = await fs.readdir(confirmedDirectory, { withFileTypes: true });
|
|
47
|
+
for (const entry of entries) {
|
|
48
|
+
if (entry.isDirectory() && (entry.name === '.bmad' || entry.name === 'bmad')) {
|
|
49
|
+
hasLegacyBmadFolder = true;
|
|
50
|
+
legacyBmadPath = path.join(confirmedDirectory, '.bmad');
|
|
51
|
+
bmadDir = legacyBmadPath;
|
|
52
|
+
|
|
53
|
+
// Check if it has _cfg folder
|
|
54
|
+
const cfgPath = path.join(legacyBmadPath, '_cfg');
|
|
55
|
+
if (await fs.pathExists(cfgPath)) {
|
|
56
|
+
hasLegacyCfg = true;
|
|
57
|
+
}
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// If no .bmad or bmad found, check for current installations _bmad
|
|
64
|
+
if (!hasLegacyBmadFolder) {
|
|
65
|
+
const bmadResult = await installer.findBmadDir(confirmedDirectory);
|
|
66
|
+
bmadDir = bmadResult.bmadDir;
|
|
67
|
+
hasLegacyCfg = bmadResult.hasLegacyCfg;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Handle legacy .bmad or _cfg folder - these are very old (more than 2 versions behind)
|
|
71
|
+
// Show version warning instead of offering conversion
|
|
72
|
+
if (hasLegacyBmadFolder || hasLegacyCfg) {
|
|
73
|
+
console.log('');
|
|
74
|
+
console.log(chalk.yellow.bold('⚠️ LEGACY INSTALLATION DETECTED'));
|
|
75
|
+
console.log(chalk.yellow('─'.repeat(80)));
|
|
76
|
+
console.log(
|
|
77
|
+
chalk.yellow(
|
|
78
|
+
'Found a ".bmad"/"bmad" folder, or a legacy "_cfg" folder under the bmad folder - this is from a old BMAD version that is out of date for automatic upgrade, manual intervention required.',
|
|
79
|
+
),
|
|
80
|
+
);
|
|
81
|
+
console.log(chalk.yellow('This version is more than 2 alpha versions behind current.'));
|
|
82
|
+
console.log('');
|
|
83
|
+
console.log(chalk.dim('For stability, we only support updates from the previous 2 alpha versions.'));
|
|
84
|
+
console.log(chalk.dim('Legacy installations may have compatibility issues.'));
|
|
85
|
+
console.log('');
|
|
86
|
+
console.log(chalk.dim('For the best experience, we strongly recommend:'));
|
|
87
|
+
console.log(chalk.dim(' 1. Delete your current BMAD installation folder (.bmad or bmad)'));
|
|
88
|
+
console.log(
|
|
89
|
+
chalk.dim(
|
|
90
|
+
' 2. Run a fresh installation\n\nIf you do not want to start fresh, you can attempt to proceed beyond this point IF you have ensured the bmad folder is named _bmad, and under it there is a _config folder. If you have a folder under your bmad folder named _cfg, you would need to rename it _config, and then restart the installer.',
|
|
91
|
+
),
|
|
92
|
+
);
|
|
93
|
+
console.log('');
|
|
94
|
+
console.log(chalk.dim('Benefits of a fresh install:'));
|
|
95
|
+
console.log(chalk.dim(' • Cleaner configuration without legacy artifacts'));
|
|
96
|
+
console.log(chalk.dim(' • All new features properly configured'));
|
|
97
|
+
console.log(chalk.dim(' • Fewer potential conflicts'));
|
|
98
|
+
console.log(chalk.dim(''));
|
|
99
|
+
console.log(
|
|
100
|
+
chalk.dim(
|
|
101
|
+
'If you have already produced output from an earlier alpha version, you can still retain those artifacts. After installation, ensure you configured during install the proper file locations for artifacts depending on the module you are using, or move the files to the proper locations.',
|
|
102
|
+
),
|
|
103
|
+
);
|
|
104
|
+
console.log(chalk.yellow('─'.repeat(80)));
|
|
105
|
+
console.log('');
|
|
106
|
+
|
|
107
|
+
const { proceed } = await inquirer.prompt([
|
|
108
|
+
{
|
|
109
|
+
type: 'list',
|
|
110
|
+
name: 'proceed',
|
|
111
|
+
message: 'What would you like to do?',
|
|
112
|
+
choices: [
|
|
113
|
+
{
|
|
114
|
+
name: 'Cancel and do a fresh install (recommended)',
|
|
115
|
+
value: 'cancel',
|
|
116
|
+
short: 'Cancel installation',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'Proceed anyway (will attempt update, potentially may fail or have unstable behavior)',
|
|
120
|
+
value: 'proceed',
|
|
121
|
+
short: 'Proceed with update',
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
default: 'cancel',
|
|
125
|
+
},
|
|
126
|
+
]);
|
|
127
|
+
|
|
128
|
+
if (proceed === 'cancel') {
|
|
129
|
+
console.log('');
|
|
130
|
+
console.log(chalk.cyan('To do a fresh install:'));
|
|
131
|
+
console.log(chalk.dim(' 1. Delete the existing bmad folder in your project'));
|
|
132
|
+
console.log(chalk.dim(" 2. Run 'bmad install' again"));
|
|
133
|
+
console.log('');
|
|
134
|
+
process.exit(0);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const ora = require('ora');
|
|
139
|
+
const spinner = ora('Updating folder structure...').start();
|
|
140
|
+
try {
|
|
141
|
+
// Handle .bmad folder
|
|
142
|
+
if (hasLegacyBmadFolder) {
|
|
143
|
+
const newBmadPath = path.join(confirmedDirectory, '_bmad');
|
|
144
|
+
await fs.move(legacyBmadPath, newBmadPath);
|
|
145
|
+
bmadDir = newBmadPath;
|
|
146
|
+
spinner.succeed('Renamed ".bmad" to "_bmad"');
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Handle _cfg folder (either from .bmad or standalone)
|
|
150
|
+
const cfgPath = path.join(bmadDir, '_cfg');
|
|
151
|
+
if (await fs.pathExists(cfgPath)) {
|
|
152
|
+
spinner.start('Renaming configuration folder...');
|
|
153
|
+
const newCfgPath = path.join(bmadDir, '_config');
|
|
154
|
+
await fs.move(cfgPath, newCfgPath);
|
|
155
|
+
spinner.succeed('Renamed "_cfg" to "_config"');
|
|
156
|
+
}
|
|
157
|
+
} catch (error) {
|
|
158
|
+
spinner.fail('Failed to update folder structure');
|
|
159
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Check if there's an existing BMAD installation (after any folder renames)
|
|
28
165
|
const hasExistingInstall = await fs.pathExists(bmadDir);
|
|
29
166
|
|
|
167
|
+
// Collect IDE tool selection early - we need this to know if we should ask about TTS
|
|
168
|
+
let toolSelection;
|
|
169
|
+
let agentVibesConfig = { enabled: false, alreadyInstalled: false };
|
|
170
|
+
let claudeCodeSelected = false;
|
|
171
|
+
|
|
172
|
+
if (!hasExistingInstall) {
|
|
173
|
+
// For new installations, collect IDE selection first
|
|
174
|
+
// We don't have modules yet, so pass empty array
|
|
175
|
+
toolSelection = await this.promptToolSelection(confirmedDirectory, []);
|
|
176
|
+
|
|
177
|
+
// Check if Claude Code was selected
|
|
178
|
+
claudeCodeSelected = toolSelection.ides && toolSelection.ides.includes('claude-code');
|
|
179
|
+
|
|
180
|
+
// If Claude Code was selected, ask about TTS
|
|
181
|
+
if (claudeCodeSelected) {
|
|
182
|
+
const { enableTts } = await inquirer.prompt([
|
|
183
|
+
{
|
|
184
|
+
type: 'confirm',
|
|
185
|
+
name: 'enableTts',
|
|
186
|
+
message: 'Claude Code supports TTS (Text-to-Speech). Would you like to enable it?',
|
|
187
|
+
default: false,
|
|
188
|
+
},
|
|
189
|
+
]);
|
|
190
|
+
|
|
191
|
+
if (enableTts) {
|
|
192
|
+
agentVibesConfig = { enabled: true, alreadyInstalled: false };
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
let customContentConfig = { hasCustomContent: false };
|
|
198
|
+
if (!hasExistingInstall) {
|
|
199
|
+
customContentConfig._shouldAsk = true;
|
|
200
|
+
}
|
|
201
|
+
|
|
30
202
|
// Track action type (only set if there's an existing installation)
|
|
31
203
|
let actionType;
|
|
32
204
|
|
|
33
205
|
// Only show action menu if there's an existing installation
|
|
34
206
|
if (hasExistingInstall) {
|
|
207
|
+
// Get version information
|
|
208
|
+
const { existingInstall, bmadDir } = await this.getExistingInstallation(confirmedDirectory);
|
|
209
|
+
const packageJsonPath = path.join(__dirname, '../../../package.json');
|
|
210
|
+
const currentVersion = require(packageJsonPath).version;
|
|
211
|
+
const installedVersion = existingInstall.version || 'unknown';
|
|
212
|
+
|
|
213
|
+
// Check if version is too old and warn user
|
|
214
|
+
const shouldProceed = await this.showOldAlphaVersionWarning(installedVersion, currentVersion, path.basename(bmadDir));
|
|
215
|
+
|
|
216
|
+
// If user chose to cancel, exit the installer
|
|
217
|
+
if (!shouldProceed) {
|
|
218
|
+
process.exit(0);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Build menu choices dynamically
|
|
223
|
+
const choices = [];
|
|
224
|
+
|
|
225
|
+
// Always show Quick Update first (allows refreshing installation even on same version)
|
|
226
|
+
if (installedVersion !== 'unknown') {
|
|
227
|
+
choices.push({
|
|
228
|
+
name: `Quick Update (v${installedVersion} → v${currentVersion})`,
|
|
229
|
+
value: 'quick-update',
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Add custom agent compilation option
|
|
234
|
+
if (installedVersion !== 'unknown') {
|
|
235
|
+
choices.push({
|
|
236
|
+
name: 'Recompile Agents (apply customizations only)',
|
|
237
|
+
value: 'compile-agents',
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// Common actions
|
|
242
|
+
choices.push({ name: 'Modify BMAD Installation', value: 'update' });
|
|
243
|
+
|
|
35
244
|
const promptResult = await inquirer.prompt([
|
|
36
245
|
{
|
|
37
246
|
type: 'list',
|
|
38
247
|
name: 'actionType',
|
|
39
248
|
message: 'What would you like to do?',
|
|
40
|
-
choices:
|
|
41
|
-
|
|
42
|
-
{ name: 'Modify BMAD Installation (Confirm or change each setting)', value: 'update' },
|
|
43
|
-
{ name: 'Remove BMad Folder and Reinstall (Full clean install - BMad Customization Will Be Lost)', value: 'reinstall' },
|
|
44
|
-
{ name: 'Compile Agents (Quick rebuild of all agent .md files)', value: 'compile' },
|
|
45
|
-
{ name: 'Cancel', value: 'cancel' },
|
|
46
|
-
],
|
|
47
|
-
default: 'quick-update',
|
|
249
|
+
choices: choices,
|
|
250
|
+
default: choices[0].value, // Use the first option as default
|
|
48
251
|
},
|
|
49
252
|
]);
|
|
50
253
|
|
|
@@ -53,57 +256,190 @@ class UI {
|
|
|
53
256
|
|
|
54
257
|
// Handle quick update separately
|
|
55
258
|
if (actionType === 'quick-update') {
|
|
259
|
+
// Quick update doesn't install custom content - just updates existing modules
|
|
56
260
|
return {
|
|
57
261
|
actionType: 'quick-update',
|
|
58
262
|
directory: confirmedDirectory,
|
|
263
|
+
customContent: { hasCustomContent: false },
|
|
59
264
|
};
|
|
60
265
|
}
|
|
61
266
|
|
|
62
|
-
// Handle
|
|
63
|
-
if (actionType === 'compile') {
|
|
267
|
+
// Handle compile agents separately
|
|
268
|
+
if (actionType === 'compile-agents') {
|
|
269
|
+
// Only recompile agents with customizations, don't update any files
|
|
64
270
|
return {
|
|
65
|
-
actionType: 'compile',
|
|
271
|
+
actionType: 'compile-agents',
|
|
66
272
|
directory: confirmedDirectory,
|
|
273
|
+
customContent: { hasCustomContent: false },
|
|
67
274
|
};
|
|
68
275
|
}
|
|
69
276
|
|
|
70
|
-
//
|
|
71
|
-
|
|
277
|
+
// If actionType === 'update', handle it with the new flow
|
|
278
|
+
// Return early with modify configuration
|
|
279
|
+
if (actionType === 'update') {
|
|
280
|
+
// Get existing installation info
|
|
281
|
+
const { installedModuleIds } = await this.getExistingInstallation(confirmedDirectory);
|
|
282
|
+
|
|
283
|
+
console.log(chalk.dim(` Found existing modules: ${[...installedModuleIds].join(', ')}`));
|
|
284
|
+
const { changeModuleSelection } = await inquirer.prompt([
|
|
285
|
+
{
|
|
286
|
+
type: 'confirm',
|
|
287
|
+
name: 'changeModuleSelection',
|
|
288
|
+
message: 'Modify official module selection (BMad Method, BMad Builder, Creative Innovation Suite)?',
|
|
289
|
+
default: false,
|
|
290
|
+
},
|
|
291
|
+
]);
|
|
292
|
+
|
|
293
|
+
let selectedModules = [];
|
|
294
|
+
if (changeModuleSelection) {
|
|
295
|
+
// Show module selection with existing modules pre-selected
|
|
296
|
+
const moduleChoices = await this.getModuleChoices(new Set(installedModuleIds), { hasCustomContent: false });
|
|
297
|
+
selectedModules = await this.selectModules(moduleChoices, [...installedModuleIds]);
|
|
298
|
+
} else {
|
|
299
|
+
selectedModules = [...installedModuleIds];
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// After module selection, ask about custom modules
|
|
303
|
+
console.log('');
|
|
304
|
+
const { changeCustomModules } = await inquirer.prompt([
|
|
305
|
+
{
|
|
306
|
+
type: 'confirm',
|
|
307
|
+
name: 'changeCustomModules',
|
|
308
|
+
message: 'Modify custom module selection (add, update, or remove custom modules/agents/workflows)?',
|
|
309
|
+
default: false,
|
|
310
|
+
},
|
|
311
|
+
]);
|
|
312
|
+
|
|
313
|
+
let customModuleResult = { selectedCustomModules: [], customContentConfig: { hasCustomContent: false } };
|
|
314
|
+
if (changeCustomModules) {
|
|
315
|
+
customModuleResult = await this.handleCustomModulesInModifyFlow(confirmedDirectory, selectedModules);
|
|
316
|
+
} else {
|
|
317
|
+
// Preserve existing custom modules if user doesn't want to modify them
|
|
318
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
319
|
+
const installer = new Installer();
|
|
320
|
+
const { bmadDir } = await installer.findBmadDir(confirmedDirectory);
|
|
321
|
+
|
|
322
|
+
const cacheDir = path.join(bmadDir, '_config', 'custom');
|
|
323
|
+
if (await fs.pathExists(cacheDir)) {
|
|
324
|
+
const entries = await fs.readdir(cacheDir, { withFileTypes: true });
|
|
325
|
+
for (const entry of entries) {
|
|
326
|
+
if (entry.isDirectory()) {
|
|
327
|
+
customModuleResult.selectedCustomModules.push(entry.name);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// Merge any selected custom modules
|
|
334
|
+
if (customModuleResult.selectedCustomModules.length > 0) {
|
|
335
|
+
selectedModules.push(...customModuleResult.selectedCustomModules);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Get tool selection
|
|
339
|
+
const toolSelection = await this.promptToolSelection(confirmedDirectory, selectedModules);
|
|
340
|
+
|
|
341
|
+
// TTS configuration - ask right after tool selection (matches new install flow)
|
|
342
|
+
const hasClaudeCode = toolSelection.ides && toolSelection.ides.includes('claude-code');
|
|
343
|
+
let enableTts = false;
|
|
344
|
+
|
|
345
|
+
if (hasClaudeCode) {
|
|
346
|
+
const { enableTts: enable } = await inquirer.prompt([
|
|
347
|
+
{
|
|
348
|
+
type: 'confirm',
|
|
349
|
+
name: 'enableTts',
|
|
350
|
+
message: 'Claude Code supports TTS (Text-to-Speech). Would you like to enable it?',
|
|
351
|
+
default: false,
|
|
352
|
+
},
|
|
353
|
+
]);
|
|
354
|
+
enableTts = enable;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Core config with existing defaults (ask after TTS)
|
|
358
|
+
const coreConfig = await this.collectCoreConfig(confirmedDirectory);
|
|
359
|
+
|
|
72
360
|
return {
|
|
73
|
-
actionType: '
|
|
361
|
+
actionType: 'update',
|
|
74
362
|
directory: confirmedDirectory,
|
|
363
|
+
installCore: true,
|
|
364
|
+
modules: selectedModules,
|
|
365
|
+
ides: toolSelection.ides,
|
|
366
|
+
skipIde: toolSelection.skipIde,
|
|
367
|
+
coreConfig: coreConfig,
|
|
368
|
+
customContent: customModuleResult.customContentConfig,
|
|
369
|
+
enableAgentVibes: enableTts,
|
|
370
|
+
agentVibesInstalled: false,
|
|
75
371
|
};
|
|
76
372
|
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// This section is only for new installations (update returns early above)
|
|
376
|
+
const { installedModuleIds } = await this.getExistingInstallation(confirmedDirectory);
|
|
377
|
+
|
|
378
|
+
// Ask about official modules for new installations
|
|
379
|
+
const { wantsOfficialModules } = await inquirer.prompt([
|
|
380
|
+
{
|
|
381
|
+
type: 'confirm',
|
|
382
|
+
name: 'wantsOfficialModules',
|
|
383
|
+
message: 'Will you be installing any official BMad modules (BMad Method, BMad Builder, Creative Innovation Suite)?',
|
|
384
|
+
default: true,
|
|
385
|
+
},
|
|
386
|
+
]);
|
|
77
387
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
388
|
+
let selectedOfficialModules = [];
|
|
389
|
+
if (wantsOfficialModules) {
|
|
390
|
+
const moduleChoices = await this.getModuleChoices(installedModuleIds, { hasCustomContent: false });
|
|
391
|
+
selectedOfficialModules = await this.selectModules(moduleChoices);
|
|
392
|
+
}
|
|
81
393
|
|
|
82
|
-
|
|
394
|
+
// Ask about custom content
|
|
395
|
+
const { wantsCustomContent } = await inquirer.prompt([
|
|
396
|
+
{
|
|
397
|
+
type: 'confirm',
|
|
398
|
+
name: 'wantsCustomContent',
|
|
399
|
+
message: 'Would you like to install a local custom module (this includes custom agents and workflows also)?',
|
|
400
|
+
default: false,
|
|
401
|
+
},
|
|
402
|
+
]);
|
|
403
|
+
|
|
404
|
+
if (wantsCustomContent) {
|
|
405
|
+
customContentConfig = await this.promptCustomContentSource();
|
|
83
406
|
}
|
|
84
407
|
|
|
85
|
-
//
|
|
86
|
-
|
|
87
|
-
const toolSelection = await this.promptToolSelection(confirmedDirectory, []);
|
|
408
|
+
// Store the selected modules for later
|
|
409
|
+
customContentConfig._selectedOfficialModules = selectedOfficialModules;
|
|
88
410
|
|
|
89
|
-
|
|
411
|
+
// Build the final list of selected modules
|
|
412
|
+
let selectedModules = customContentConfig._selectedOfficialModules || [];
|
|
413
|
+
|
|
414
|
+
// Add custom content modules if any were selected
|
|
415
|
+
if (customContentConfig && customContentConfig.selectedModuleIds) {
|
|
416
|
+
selectedModules = [...selectedModules, ...customContentConfig.selectedModuleIds];
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// Remove core if it's in the list (it's always installed)
|
|
420
|
+
selectedModules = selectedModules.filter((m) => m !== 'core');
|
|
421
|
+
|
|
422
|
+
// Tool selection (already done for new installs at the beginning)
|
|
423
|
+
if (!toolSelection) {
|
|
424
|
+
toolSelection = await this.promptToolSelection(confirmedDirectory, selectedModules);
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
// Collect configurations for new installations
|
|
90
428
|
const coreConfig = await this.collectCoreConfig(confirmedDirectory);
|
|
91
|
-
const moduleChoices = await this.getModuleChoices(installedModuleIds);
|
|
92
|
-
const selectedModules = await this.selectModules(moduleChoices);
|
|
93
429
|
|
|
94
|
-
|
|
95
|
-
CLIUtils.displayLogo();
|
|
96
|
-
CLIUtils.displayModuleComplete('core', false); // false = don't clear the screen again
|
|
430
|
+
// TTS already handled at the beginning for new installs
|
|
97
431
|
|
|
98
432
|
return {
|
|
99
|
-
actionType:
|
|
433
|
+
actionType: 'install',
|
|
100
434
|
directory: confirmedDirectory,
|
|
101
|
-
installCore: true,
|
|
435
|
+
installCore: true,
|
|
102
436
|
modules: selectedModules,
|
|
103
|
-
// IDE selection collected early, will be configured later
|
|
104
437
|
ides: toolSelection.ides,
|
|
105
438
|
skipIde: toolSelection.skipIde,
|
|
106
|
-
coreConfig: coreConfig,
|
|
439
|
+
coreConfig: coreConfig,
|
|
440
|
+
customContent: customContentConfig,
|
|
441
|
+
enableAgentVibes: agentVibesConfig.enabled,
|
|
442
|
+
agentVibesInstalled: agentVibesConfig.alreadyInstalled,
|
|
107
443
|
};
|
|
108
444
|
}
|
|
109
445
|
|
|
@@ -114,10 +450,13 @@ class UI {
|
|
|
114
450
|
* @returns {Object} Tool configuration
|
|
115
451
|
*/
|
|
116
452
|
async promptToolSelection(projectDir, selectedModules) {
|
|
117
|
-
// Check for existing configured IDEs
|
|
453
|
+
// Check for existing configured IDEs - use findBmadDir to detect custom folder names
|
|
118
454
|
const { Detector } = require('../installers/lib/core/detector');
|
|
455
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
119
456
|
const detector = new Detector();
|
|
120
|
-
const
|
|
457
|
+
const installer = new Installer();
|
|
458
|
+
const bmadResult = await installer.findBmadDir(projectDir || process.cwd());
|
|
459
|
+
const bmadDir = bmadResult.bmadDir;
|
|
121
460
|
const existingInstall = await detector.detect(bmadDir);
|
|
122
461
|
const configuredIdes = existingInstall.ides || [];
|
|
123
462
|
|
|
@@ -187,17 +526,50 @@ class UI {
|
|
|
187
526
|
}
|
|
188
527
|
}
|
|
189
528
|
|
|
190
|
-
|
|
529
|
+
let answers;
|
|
530
|
+
let userConfirmedNoTools = false;
|
|
191
531
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
532
|
+
// Loop until user selects at least one tool OR explicitly confirms no tools
|
|
533
|
+
while (!userConfirmedNoTools) {
|
|
534
|
+
answers = await inquirer.prompt([
|
|
535
|
+
{
|
|
536
|
+
type: 'checkbox',
|
|
537
|
+
name: 'ides',
|
|
538
|
+
message: 'Select tools to configure:',
|
|
539
|
+
choices: ideChoices,
|
|
540
|
+
pageSize: 30,
|
|
541
|
+
},
|
|
542
|
+
]);
|
|
543
|
+
|
|
544
|
+
// If tools were selected, we're done
|
|
545
|
+
if (answers.ides && answers.ides.length > 0) {
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Warn that no tools were selected - users often miss the spacebar requirement
|
|
550
|
+
console.log();
|
|
551
|
+
console.log(chalk.red.bold('⚠️ WARNING: No tools were selected!'));
|
|
552
|
+
console.log(chalk.red(' You must press SPACEBAR to select items, then ENTER to confirm.'));
|
|
553
|
+
console.log(chalk.red(' Simply highlighting an item does NOT select it.'));
|
|
554
|
+
console.log();
|
|
555
|
+
|
|
556
|
+
const { goBack } = await inquirer.prompt([
|
|
557
|
+
{
|
|
558
|
+
type: 'confirm',
|
|
559
|
+
name: 'goBack',
|
|
560
|
+
message: chalk.yellow('Would you like to go back and select at least one tool?'),
|
|
561
|
+
default: true,
|
|
562
|
+
},
|
|
563
|
+
]);
|
|
564
|
+
|
|
565
|
+
if (goBack) {
|
|
566
|
+
// Re-display a message before looping back
|
|
567
|
+
console.log();
|
|
568
|
+
} else {
|
|
569
|
+
// User explicitly chose to proceed without tools
|
|
570
|
+
userConfirmedNoTools = true;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
201
573
|
|
|
202
574
|
return {
|
|
203
575
|
ides: answers.ides || [],
|
|
@@ -282,20 +654,33 @@ class UI {
|
|
|
282
654
|
* @param {Object} result - Installation result
|
|
283
655
|
*/
|
|
284
656
|
showInstallSummary(result) {
|
|
285
|
-
|
|
657
|
+
// Clean, simple completion message
|
|
658
|
+
console.log('\n' + chalk.green.bold('✨ BMAD is ready to use!'));
|
|
286
659
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
660
|
+
// Show installation summary in a simple format
|
|
661
|
+
console.log(chalk.dim(`Installed to: ${result.path}`));
|
|
662
|
+
if (result.modules && result.modules.length > 0) {
|
|
663
|
+
console.log(chalk.dim(`Modules: ${result.modules.join(', ')}`));
|
|
664
|
+
}
|
|
665
|
+
if (result.agentVibesEnabled) {
|
|
666
|
+
console.log(chalk.dim(`TTS: Enabled`));
|
|
667
|
+
}
|
|
292
668
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
669
|
+
// TTS injection info (simplified)
|
|
670
|
+
if (result.ttsInjectedFiles && result.ttsInjectedFiles.length > 0) {
|
|
671
|
+
console.log(chalk.dim(`\n💡 TTS enabled for ${result.ttsInjectedFiles.length} agent(s)`));
|
|
672
|
+
console.log(chalk.dim(' Agents will now speak when using AgentVibes'));
|
|
673
|
+
}
|
|
297
674
|
|
|
298
|
-
console.log(
|
|
675
|
+
console.log(chalk.yellow('\nThank you for helping test the early release version of the new BMad Core and BMad Method!'));
|
|
676
|
+
console.log(chalk.cyan('Stable Beta coming soon - please read the full README.md and linked documentation to get started!'));
|
|
677
|
+
|
|
678
|
+
// Add changelog link at the end
|
|
679
|
+
console.log(
|
|
680
|
+
chalk.magenta(
|
|
681
|
+
"\n📋 Want to see what's new? Check out the changelog: https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md",
|
|
682
|
+
),
|
|
683
|
+
);
|
|
299
684
|
}
|
|
300
685
|
|
|
301
686
|
/**
|
|
@@ -318,16 +703,19 @@ class UI {
|
|
|
318
703
|
/**
|
|
319
704
|
* Get existing installation info and installed modules
|
|
320
705
|
* @param {string} directory - Installation directory
|
|
321
|
-
* @returns {Object} Object with existingInstall and
|
|
706
|
+
* @returns {Object} Object with existingInstall, installedModuleIds, and bmadDir
|
|
322
707
|
*/
|
|
323
708
|
async getExistingInstallation(directory) {
|
|
324
709
|
const { Detector } = require('../installers/lib/core/detector');
|
|
710
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
325
711
|
const detector = new Detector();
|
|
326
|
-
const
|
|
712
|
+
const installer = new Installer();
|
|
713
|
+
const bmadDirResult = await installer.findBmadDir(directory);
|
|
714
|
+
const bmadDir = bmadDirResult.bmadDir;
|
|
327
715
|
const existingInstall = await detector.detect(bmadDir);
|
|
328
716
|
const installedModuleIds = new Set(existingInstall.modules.map((mod) => mod.id));
|
|
329
717
|
|
|
330
|
-
return { existingInstall, installedModuleIds };
|
|
718
|
+
return { existingInstall, installedModuleIds, bmadDir };
|
|
331
719
|
}
|
|
332
720
|
|
|
333
721
|
/**
|
|
@@ -343,25 +731,90 @@ class UI {
|
|
|
343
731
|
// Now collect with existing values as defaults (false = don't skip loading, true = skip completion message)
|
|
344
732
|
await configCollector.collectModuleConfig('core', directory, false, true);
|
|
345
733
|
|
|
346
|
-
|
|
734
|
+
const coreConfig = configCollector.collectedConfig.core;
|
|
735
|
+
// Ensure we always have a core config object, even if empty
|
|
736
|
+
return coreConfig || {};
|
|
347
737
|
}
|
|
348
738
|
|
|
349
739
|
/**
|
|
350
740
|
* Get module choices for selection
|
|
351
741
|
* @param {Set} installedModuleIds - Currently installed module IDs
|
|
742
|
+
* @param {Object} customContentConfig - Custom content configuration
|
|
352
743
|
* @returns {Array} Module choices for inquirer
|
|
353
744
|
*/
|
|
354
|
-
async getModuleChoices(installedModuleIds) {
|
|
745
|
+
async getModuleChoices(installedModuleIds, customContentConfig = null) {
|
|
746
|
+
const moduleChoices = [];
|
|
747
|
+
const isNewInstallation = installedModuleIds.size === 0;
|
|
748
|
+
|
|
749
|
+
const customContentItems = [];
|
|
750
|
+
const hasCustomContentItems = false;
|
|
751
|
+
|
|
752
|
+
// Add custom content items
|
|
753
|
+
if (customContentConfig && customContentConfig.hasCustomContent && customContentConfig.customPath) {
|
|
754
|
+
// Existing installation - show from directory
|
|
755
|
+
const customHandler = new CustomHandler();
|
|
756
|
+
const customFiles = await customHandler.findCustomContent(customContentConfig.customPath);
|
|
757
|
+
|
|
758
|
+
for (const customFile of customFiles) {
|
|
759
|
+
const customInfo = await customHandler.getCustomInfo(customFile);
|
|
760
|
+
if (customInfo) {
|
|
761
|
+
customContentItems.push({
|
|
762
|
+
name: `${chalk.cyan('✓')} ${customInfo.name} ${chalk.gray(`(${customInfo.relativePath})`)}`,
|
|
763
|
+
value: `__CUSTOM_CONTENT__${customFile}`, // Unique value for each custom content
|
|
764
|
+
checked: true, // Default to selected since user chose to provide custom content
|
|
765
|
+
path: customInfo.path, // Track path to avoid duplicates
|
|
766
|
+
});
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
// Add official modules
|
|
355
772
|
const { ModuleManager } = require('../installers/lib/modules/manager');
|
|
356
773
|
const moduleManager = new ModuleManager();
|
|
357
|
-
const availableModules = await moduleManager.listAvailable();
|
|
774
|
+
const { modules: availableModules, customModules: customModulesFromCache } = await moduleManager.listAvailable();
|
|
358
775
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
776
|
+
// First, add all items to appropriate sections
|
|
777
|
+
const allCustomModules = [];
|
|
778
|
+
|
|
779
|
+
// Add custom content items from directory
|
|
780
|
+
allCustomModules.push(...customContentItems);
|
|
781
|
+
|
|
782
|
+
// Add custom modules from cache
|
|
783
|
+
for (const mod of customModulesFromCache) {
|
|
784
|
+
// Skip if this module is already in customContentItems (by path)
|
|
785
|
+
const isDuplicate = allCustomModules.some((item) => item.path && mod.path && path.resolve(item.path) === path.resolve(mod.path));
|
|
786
|
+
|
|
787
|
+
if (!isDuplicate) {
|
|
788
|
+
allCustomModules.push({
|
|
789
|
+
name: `${chalk.cyan('✓')} ${mod.name} ${chalk.gray(`(cached)`)}`,
|
|
790
|
+
value: mod.id,
|
|
791
|
+
checked: isNewInstallation ? mod.defaultSelected || false : installedModuleIds.has(mod.id),
|
|
792
|
+
});
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
// Add separators and modules in correct order
|
|
797
|
+
if (allCustomModules.length > 0) {
|
|
798
|
+
// Add separator for custom content, all custom modules, and official content separator
|
|
799
|
+
moduleChoices.push(
|
|
800
|
+
new inquirer.Separator('── Custom Content ──'),
|
|
801
|
+
...allCustomModules,
|
|
802
|
+
new inquirer.Separator('── Official Content ──'),
|
|
803
|
+
);
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
// Add official modules (only non-custom ones)
|
|
807
|
+
for (const mod of availableModules) {
|
|
808
|
+
if (!mod.isCustom) {
|
|
809
|
+
moduleChoices.push({
|
|
810
|
+
name: mod.name,
|
|
811
|
+
value: mod.id,
|
|
812
|
+
checked: isNewInstallation ? mod.defaultSelected || false : installedModuleIds.has(mod.id),
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
return moduleChoices;
|
|
365
818
|
}
|
|
366
819
|
|
|
367
820
|
/**
|
|
@@ -369,19 +822,20 @@ class UI {
|
|
|
369
822
|
* @param {Array} moduleChoices - Available module choices
|
|
370
823
|
* @returns {Array} Selected module IDs
|
|
371
824
|
*/
|
|
372
|
-
async selectModules(moduleChoices) {
|
|
373
|
-
CLIUtils.displaySection('Module Selection', 'Choose the BMAD modules to install');
|
|
374
|
-
|
|
825
|
+
async selectModules(moduleChoices, defaultSelections = []) {
|
|
375
826
|
const moduleAnswer = await inquirer.prompt([
|
|
376
827
|
{
|
|
377
828
|
type: 'checkbox',
|
|
378
829
|
name: 'modules',
|
|
379
830
|
message: 'Select modules to install:',
|
|
380
831
|
choices: moduleChoices,
|
|
832
|
+
default: defaultSelections,
|
|
381
833
|
},
|
|
382
834
|
]);
|
|
383
835
|
|
|
384
|
-
|
|
836
|
+
const selected = moduleAnswer.modules || [];
|
|
837
|
+
|
|
838
|
+
return selected;
|
|
385
839
|
}
|
|
386
840
|
|
|
387
841
|
/**
|
|
@@ -421,17 +875,21 @@ class UI {
|
|
|
421
875
|
if (stats.isDirectory()) {
|
|
422
876
|
const files = await fs.readdir(directory);
|
|
423
877
|
if (files.length > 0) {
|
|
878
|
+
// Check for any bmad installation (any folder with _config/manifest.yaml)
|
|
879
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
880
|
+
const installer = new Installer();
|
|
881
|
+
const bmadResult = await installer.findBmadDir(directory);
|
|
882
|
+
const hasBmadInstall =
|
|
883
|
+
(await fs.pathExists(bmadResult.bmadDir)) && (await fs.pathExists(path.join(bmadResult.bmadDir, '_config', 'manifest.yaml')));
|
|
884
|
+
|
|
424
885
|
console.log(
|
|
425
886
|
chalk.gray(`Directory exists and contains ${files.length} item(s)`) +
|
|
426
|
-
(
|
|
887
|
+
(hasBmadInstall ? chalk.yellow(` including existing BMAD installation (${path.basename(bmadResult.bmadDir)})`) : ''),
|
|
427
888
|
);
|
|
428
889
|
} else {
|
|
429
890
|
console.log(chalk.gray('Directory exists and is empty'));
|
|
430
891
|
}
|
|
431
892
|
}
|
|
432
|
-
} else {
|
|
433
|
-
const existingParent = await this.findExistingParent(directory);
|
|
434
|
-
console.log(chalk.gray(`Will create in: ${existingParent}`));
|
|
435
893
|
}
|
|
436
894
|
}
|
|
437
895
|
|
|
@@ -586,6 +1044,599 @@ class UI {
|
|
|
586
1044
|
// Resolve to the absolute path relative to the current working directory
|
|
587
1045
|
return path.resolve(expanded);
|
|
588
1046
|
}
|
|
1047
|
+
|
|
1048
|
+
/**
|
|
1049
|
+
* @function promptAgentVibes
|
|
1050
|
+
* @intent Ask user if they want AgentVibes TTS integration during BMAD installation
|
|
1051
|
+
* @why Enables optional voice features without forcing TTS on users who don't want it
|
|
1052
|
+
* @param {string} projectDir - Absolute path to user's project directory
|
|
1053
|
+
* @returns {Promise<Object>} Configuration object: { enabled: boolean, alreadyInstalled: boolean }
|
|
1054
|
+
* @sideeffects None - pure user input collection, no files written
|
|
1055
|
+
* @edgecases Shows warning if user enables TTS but AgentVibes not detected
|
|
1056
|
+
* @calledby promptInstall() during installation flow, after core config, before IDE selection
|
|
1057
|
+
* @calls checkAgentVibesInstalled(), inquirer.prompt(), chalk.green/yellow/dim()
|
|
1058
|
+
*
|
|
1059
|
+
* AI NOTE: This prompt is strategically positioned in installation flow:
|
|
1060
|
+
* - AFTER core config (user_name, etc)
|
|
1061
|
+
* - BEFORE IDE selection (which can hang on Windows/PowerShell)
|
|
1062
|
+
*
|
|
1063
|
+
* Flow Logic:
|
|
1064
|
+
* 1. Auto-detect if AgentVibes already installed (checks for hook files)
|
|
1065
|
+
* 2. Show detection status to user (green checkmark or gray "not detected")
|
|
1066
|
+
* 3. Prompt: "Enable AgentVibes TTS?" (defaults to true if detected)
|
|
1067
|
+
* 4. If user says YES but AgentVibes NOT installed:
|
|
1068
|
+
* → Show warning with installation link (graceful degradation)
|
|
1069
|
+
* 5. Return config to promptInstall(), which passes to installer.install()
|
|
1070
|
+
*
|
|
1071
|
+
* State Flow:
|
|
1072
|
+
* promptAgentVibes() → { enabled, alreadyInstalled }
|
|
1073
|
+
* ↓
|
|
1074
|
+
* promptInstall() → config.enableAgentVibes
|
|
1075
|
+
* ↓
|
|
1076
|
+
* installer.install() → this.enableAgentVibes
|
|
1077
|
+
* ↓
|
|
1078
|
+
* processTTSInjectionPoints() → injects OR strips markers
|
|
1079
|
+
*
|
|
1080
|
+
* RELATED:
|
|
1081
|
+
* ========
|
|
1082
|
+
* - Detection: checkAgentVibesInstalled() - looks for bmad-speak.sh and play-tts.sh
|
|
1083
|
+
* - Processing: installer.js::processTTSInjectionPoints()
|
|
1084
|
+
* - Markers: src/core/workflows/party-mode/instructions.md:101, src/modules/bmm/agents/*.md
|
|
1085
|
+
* - GitHub Issue: paulpreibisch/AgentVibes#36
|
|
1086
|
+
*/
|
|
1087
|
+
async promptAgentVibes(projectDir) {
|
|
1088
|
+
CLIUtils.displaySection('🎤 Voice Features', 'Enable TTS for multi-agent conversations');
|
|
1089
|
+
|
|
1090
|
+
// Check if AgentVibes is already installed
|
|
1091
|
+
const agentVibesInstalled = await this.checkAgentVibesInstalled(projectDir);
|
|
1092
|
+
|
|
1093
|
+
if (agentVibesInstalled) {
|
|
1094
|
+
console.log(chalk.green(' ✓ AgentVibes detected'));
|
|
1095
|
+
} else {
|
|
1096
|
+
console.log(chalk.dim(' AgentVibes not detected'));
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
const answers = await inquirer.prompt([
|
|
1100
|
+
{
|
|
1101
|
+
type: 'confirm',
|
|
1102
|
+
name: 'enableTts',
|
|
1103
|
+
message: 'Enable Agents to Speak Out loud (powered by Agent Vibes? Claude Code only currently)',
|
|
1104
|
+
default: false, // Default to yes - recommended for best experience
|
|
1105
|
+
},
|
|
1106
|
+
]);
|
|
1107
|
+
|
|
1108
|
+
if (answers.enableTts && !agentVibesInstalled) {
|
|
1109
|
+
console.log(chalk.yellow('\n ⚠️ AgentVibes not installed'));
|
|
1110
|
+
console.log(chalk.dim(' Install AgentVibes separately to enable TTS:'));
|
|
1111
|
+
console.log(chalk.dim(' https://github.com/paulpreibisch/AgentVibes\n'));
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
return {
|
|
1115
|
+
enabled: answers.enableTts,
|
|
1116
|
+
alreadyInstalled: agentVibesInstalled,
|
|
1117
|
+
};
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1120
|
+
/**
|
|
1121
|
+
* @function checkAgentVibesInstalled
|
|
1122
|
+
* @intent Detect if AgentVibes TTS hooks are present in user's project
|
|
1123
|
+
* @why Allows auto-enabling TTS and showing helpful installation guidance
|
|
1124
|
+
* @param {string} projectDir - Absolute path to user's project directory
|
|
1125
|
+
* @returns {Promise<boolean>} true if both required AgentVibes hooks exist, false otherwise
|
|
1126
|
+
* @sideeffects None - read-only file existence checks
|
|
1127
|
+
* @edgecases Returns false if either hook missing (both required for functional TTS)
|
|
1128
|
+
* @calledby promptAgentVibes() to determine default value and show detection status
|
|
1129
|
+
* @calls fs.pathExists() twice (bmad-speak.sh, play-tts.sh)
|
|
1130
|
+
*
|
|
1131
|
+
* AI NOTE: This checks for the MINIMUM viable AgentVibes installation.
|
|
1132
|
+
*
|
|
1133
|
+
* Required Files:
|
|
1134
|
+
* ===============
|
|
1135
|
+
* 1. .claude/hooks/bmad-speak.sh
|
|
1136
|
+
* - Maps agent display names → agent IDs → voice profiles
|
|
1137
|
+
* - Calls play-tts.sh with agent's assigned voice
|
|
1138
|
+
* - Created by AgentVibes installer
|
|
1139
|
+
*
|
|
1140
|
+
* 2. .claude/hooks/play-tts.sh
|
|
1141
|
+
* - Core TTS router (ElevenLabs or Piper)
|
|
1142
|
+
* - Provider-agnostic interface
|
|
1143
|
+
* - Required by bmad-speak.sh
|
|
1144
|
+
*
|
|
1145
|
+
* Why Both Required:
|
|
1146
|
+
* ==================
|
|
1147
|
+
* - bmad-speak.sh alone: No TTS backend
|
|
1148
|
+
* - play-tts.sh alone: No BMAD agent voice mapping
|
|
1149
|
+
* - Both together: Full party mode TTS integration
|
|
1150
|
+
*
|
|
1151
|
+
* Detection Strategy:
|
|
1152
|
+
* ===================
|
|
1153
|
+
* We use simple file existence (not version checks) because:
|
|
1154
|
+
* - Fast and reliable
|
|
1155
|
+
* - Works across all AgentVibes versions
|
|
1156
|
+
* - User will discover version issues when TTS runs (fail-fast)
|
|
1157
|
+
*
|
|
1158
|
+
* PATTERN: Adding New Detection Criteria
|
|
1159
|
+
* =======================================
|
|
1160
|
+
* If future AgentVibes features require additional files:
|
|
1161
|
+
* 1. Add new pathExists check to this function
|
|
1162
|
+
* 2. Update documentation in promptAgentVibes()
|
|
1163
|
+
* 3. Consider: should missing file prevent detection or just log warning?
|
|
1164
|
+
*
|
|
1165
|
+
* RELATED:
|
|
1166
|
+
* ========
|
|
1167
|
+
* - AgentVibes Installer: creates these hooks
|
|
1168
|
+
* - bmad-speak.sh: calls play-tts.sh with agent voices
|
|
1169
|
+
* - Party Mode: uses bmad-speak.sh for agent dialogue
|
|
1170
|
+
*/
|
|
1171
|
+
async checkAgentVibesInstalled(projectDir) {
|
|
1172
|
+
const fs = require('fs-extra');
|
|
1173
|
+
const path = require('node:path');
|
|
1174
|
+
|
|
1175
|
+
// Check for AgentVibes hook files
|
|
1176
|
+
const hookPath = path.join(projectDir, '.claude', 'hooks', 'bmad-speak.sh');
|
|
1177
|
+
const playTtsPath = path.join(projectDir, '.claude', 'hooks', 'play-tts.sh');
|
|
1178
|
+
|
|
1179
|
+
return (await fs.pathExists(hookPath)) && (await fs.pathExists(playTtsPath));
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
/**
|
|
1183
|
+
* Load existing configurations to use as defaults
|
|
1184
|
+
* @param {string} directory - Installation directory
|
|
1185
|
+
* @returns {Object} Existing configurations
|
|
1186
|
+
*/
|
|
1187
|
+
async loadExistingConfigurations(directory) {
|
|
1188
|
+
const configs = {
|
|
1189
|
+
hasCustomContent: false,
|
|
1190
|
+
coreConfig: {},
|
|
1191
|
+
ideConfig: { ides: [], skipIde: false },
|
|
1192
|
+
agentVibesConfig: { enabled: false, alreadyInstalled: false },
|
|
1193
|
+
};
|
|
1194
|
+
|
|
1195
|
+
try {
|
|
1196
|
+
// Load core config
|
|
1197
|
+
configs.coreConfig = await this.collectCoreConfig(directory);
|
|
1198
|
+
|
|
1199
|
+
// Load IDE configuration
|
|
1200
|
+
const configuredIdes = await this.getConfiguredIdes(directory);
|
|
1201
|
+
if (configuredIdes.length > 0) {
|
|
1202
|
+
configs.ideConfig.ides = configuredIdes;
|
|
1203
|
+
configs.ideConfig.skipIde = false;
|
|
1204
|
+
}
|
|
1205
|
+
|
|
1206
|
+
// Load AgentVibes configuration
|
|
1207
|
+
const agentVibesInstalled = await this.checkAgentVibesInstalled(directory);
|
|
1208
|
+
configs.agentVibesConfig = { enabled: agentVibesInstalled, alreadyInstalled: agentVibesInstalled };
|
|
1209
|
+
|
|
1210
|
+
return configs;
|
|
1211
|
+
} catch {
|
|
1212
|
+
// If loading fails, return empty configs
|
|
1213
|
+
console.warn('Warning: Could not load existing configurations');
|
|
1214
|
+
return configs;
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
1217
|
+
|
|
1218
|
+
/**
|
|
1219
|
+
* Get configured IDEs from existing installation
|
|
1220
|
+
* @param {string} directory - Installation directory
|
|
1221
|
+
* @returns {Array} List of configured IDEs
|
|
1222
|
+
*/
|
|
1223
|
+
async getConfiguredIdes(directory) {
|
|
1224
|
+
const { Detector } = require('../installers/lib/core/detector');
|
|
1225
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
1226
|
+
const detector = new Detector();
|
|
1227
|
+
const installer = new Installer();
|
|
1228
|
+
const bmadResult = await installer.findBmadDir(directory);
|
|
1229
|
+
const existingInstall = await detector.detect(bmadResult.bmadDir);
|
|
1230
|
+
return existingInstall.ides || [];
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
/**
|
|
1234
|
+
* Prompt user for custom content source location
|
|
1235
|
+
* @returns {Object} Custom content configuration
|
|
1236
|
+
*/
|
|
1237
|
+
async promptCustomContentSource() {
|
|
1238
|
+
const customContentConfig = { hasCustomContent: true, sources: [] };
|
|
1239
|
+
|
|
1240
|
+
// Keep asking for more sources until user is done
|
|
1241
|
+
while (true) {
|
|
1242
|
+
// First ask if user wants to add another module or continue
|
|
1243
|
+
if (customContentConfig.sources.length > 0) {
|
|
1244
|
+
const { action } = await inquirer.prompt([
|
|
1245
|
+
{
|
|
1246
|
+
type: 'list',
|
|
1247
|
+
name: 'action',
|
|
1248
|
+
message: 'Would you like to:',
|
|
1249
|
+
choices: [
|
|
1250
|
+
{ name: 'Add another custom module', value: 'add' },
|
|
1251
|
+
{ name: 'Continue with installation', value: 'continue' },
|
|
1252
|
+
],
|
|
1253
|
+
default: 'continue',
|
|
1254
|
+
},
|
|
1255
|
+
]);
|
|
1256
|
+
|
|
1257
|
+
if (action === 'continue') {
|
|
1258
|
+
break;
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
let sourcePath;
|
|
1263
|
+
let isValid = false;
|
|
1264
|
+
|
|
1265
|
+
while (!isValid) {
|
|
1266
|
+
const { path: inputPath } = await inquirer.prompt([
|
|
1267
|
+
{
|
|
1268
|
+
type: 'input',
|
|
1269
|
+
name: 'path',
|
|
1270
|
+
message: 'Enter the path to your custom content folder (or press Enter to cancel):',
|
|
1271
|
+
validate: async (input) => {
|
|
1272
|
+
// Allow empty input to cancel
|
|
1273
|
+
if (!input || input.trim() === '') {
|
|
1274
|
+
return true; // Allow empty to exit
|
|
1275
|
+
}
|
|
1276
|
+
|
|
1277
|
+
try {
|
|
1278
|
+
// Expand the path
|
|
1279
|
+
const expandedPath = this.expandUserPath(input.trim());
|
|
1280
|
+
|
|
1281
|
+
// Check if path exists
|
|
1282
|
+
if (!(await fs.pathExists(expandedPath))) {
|
|
1283
|
+
return 'Path does not exist';
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
// Check if it's a directory
|
|
1287
|
+
const stat = await fs.stat(expandedPath);
|
|
1288
|
+
if (!stat.isDirectory()) {
|
|
1289
|
+
return 'Path must be a directory';
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
// Check for module.yaml in the root
|
|
1293
|
+
const moduleYamlPath = path.join(expandedPath, 'module.yaml');
|
|
1294
|
+
if (!(await fs.pathExists(moduleYamlPath))) {
|
|
1295
|
+
return 'Directory must contain a module.yaml file in the root';
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
// Try to parse the module.yaml to get the module ID
|
|
1299
|
+
try {
|
|
1300
|
+
const yaml = require('yaml');
|
|
1301
|
+
const content = await fs.readFile(moduleYamlPath, 'utf8');
|
|
1302
|
+
const moduleData = yaml.parse(content);
|
|
1303
|
+
if (!moduleData.code) {
|
|
1304
|
+
return 'module.yaml must contain a "code" field for the module ID';
|
|
1305
|
+
}
|
|
1306
|
+
} catch (error) {
|
|
1307
|
+
return 'Invalid module.yaml file: ' + error.message;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
return true;
|
|
1311
|
+
} catch (error) {
|
|
1312
|
+
return 'Error validating path: ' + error.message;
|
|
1313
|
+
}
|
|
1314
|
+
},
|
|
1315
|
+
},
|
|
1316
|
+
]);
|
|
1317
|
+
|
|
1318
|
+
// If user pressed Enter without typing anything, exit the loop
|
|
1319
|
+
if (!inputPath || inputPath.trim() === '') {
|
|
1320
|
+
// If we have no modules yet, return false for no custom content
|
|
1321
|
+
if (customContentConfig.sources.length === 0) {
|
|
1322
|
+
return { hasCustomContent: false };
|
|
1323
|
+
}
|
|
1324
|
+
return customContentConfig;
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
sourcePath = this.expandUserPath(inputPath);
|
|
1328
|
+
isValid = true;
|
|
1329
|
+
}
|
|
1330
|
+
|
|
1331
|
+
// Read module.yaml to get module info
|
|
1332
|
+
const yaml = require('yaml');
|
|
1333
|
+
const moduleYamlPath = path.join(sourcePath, 'module.yaml');
|
|
1334
|
+
const moduleContent = await fs.readFile(moduleYamlPath, 'utf8');
|
|
1335
|
+
const moduleData = yaml.parse(moduleContent);
|
|
1336
|
+
|
|
1337
|
+
// Add to sources
|
|
1338
|
+
customContentConfig.sources.push({
|
|
1339
|
+
path: sourcePath,
|
|
1340
|
+
id: moduleData.code,
|
|
1341
|
+
name: moduleData.name || moduleData.code,
|
|
1342
|
+
});
|
|
1343
|
+
|
|
1344
|
+
console.log(chalk.green(`✓ Confirmed local custom module: ${moduleData.name || moduleData.code}`));
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
// Ask if user wants to add these to the installation
|
|
1348
|
+
const { shouldInstall } = await inquirer.prompt([
|
|
1349
|
+
{
|
|
1350
|
+
type: 'confirm',
|
|
1351
|
+
name: 'shouldInstall',
|
|
1352
|
+
message: `Install ${customContentConfig.sources.length} custom module(s) now?`,
|
|
1353
|
+
default: true,
|
|
1354
|
+
},
|
|
1355
|
+
]);
|
|
1356
|
+
|
|
1357
|
+
if (shouldInstall) {
|
|
1358
|
+
customContentConfig.selected = true;
|
|
1359
|
+
// Store paths to module.yaml files, not directories
|
|
1360
|
+
customContentConfig.selectedFiles = customContentConfig.sources.map((s) => path.join(s.path, 'module.yaml'));
|
|
1361
|
+
// Also include module IDs for installation
|
|
1362
|
+
customContentConfig.selectedModuleIds = customContentConfig.sources.map((s) => s.id);
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
return customContentConfig;
|
|
1366
|
+
}
|
|
1367
|
+
|
|
1368
|
+
/**
|
|
1369
|
+
* Handle custom modules in the modify flow
|
|
1370
|
+
* @param {string} directory - Installation directory
|
|
1371
|
+
* @param {Array} selectedModules - Currently selected modules
|
|
1372
|
+
* @returns {Object} Result with selected custom modules and custom content config
|
|
1373
|
+
*/
|
|
1374
|
+
async handleCustomModulesInModifyFlow(directory, selectedModules) {
|
|
1375
|
+
// Get existing installation to find custom modules
|
|
1376
|
+
const { existingInstall } = await this.getExistingInstallation(directory);
|
|
1377
|
+
|
|
1378
|
+
// Check if there are any custom modules in cache
|
|
1379
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
1380
|
+
const installer = new Installer();
|
|
1381
|
+
const { bmadDir } = await installer.findBmadDir(directory);
|
|
1382
|
+
|
|
1383
|
+
const cacheDir = path.join(bmadDir, '_config', 'custom');
|
|
1384
|
+
const cachedCustomModules = [];
|
|
1385
|
+
|
|
1386
|
+
if (await fs.pathExists(cacheDir)) {
|
|
1387
|
+
const entries = await fs.readdir(cacheDir, { withFileTypes: true });
|
|
1388
|
+
for (const entry of entries) {
|
|
1389
|
+
if (entry.isDirectory()) {
|
|
1390
|
+
const moduleYamlPath = path.join(cacheDir, entry.name, 'module.yaml');
|
|
1391
|
+
if (await fs.pathExists(moduleYamlPath)) {
|
|
1392
|
+
const yaml = require('yaml');
|
|
1393
|
+
const content = await fs.readFile(moduleYamlPath, 'utf8');
|
|
1394
|
+
const moduleData = yaml.parse(content);
|
|
1395
|
+
|
|
1396
|
+
cachedCustomModules.push({
|
|
1397
|
+
id: entry.name,
|
|
1398
|
+
name: moduleData.name || entry.name,
|
|
1399
|
+
description: moduleData.description || 'Custom module from cache',
|
|
1400
|
+
checked: selectedModules.includes(entry.name),
|
|
1401
|
+
fromCache: true,
|
|
1402
|
+
});
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
}
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
const result = {
|
|
1409
|
+
selectedCustomModules: [],
|
|
1410
|
+
customContentConfig: { hasCustomContent: false },
|
|
1411
|
+
};
|
|
1412
|
+
|
|
1413
|
+
// Ask user about custom modules
|
|
1414
|
+
console.log(chalk.cyan('\n⚙️ Custom Modules'));
|
|
1415
|
+
if (cachedCustomModules.length > 0) {
|
|
1416
|
+
console.log(chalk.dim('Found custom modules in your installation:'));
|
|
1417
|
+
} else {
|
|
1418
|
+
console.log(chalk.dim('No custom modules currently installed.'));
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
// Build choices dynamically based on whether we have existing modules
|
|
1422
|
+
const choices = [];
|
|
1423
|
+
if (cachedCustomModules.length > 0) {
|
|
1424
|
+
choices.push(
|
|
1425
|
+
{ name: 'Keep all existing custom modules', value: 'keep' },
|
|
1426
|
+
{ name: 'Select which custom modules to keep', value: 'select' },
|
|
1427
|
+
{ name: 'Add new custom modules', value: 'add' },
|
|
1428
|
+
{ name: 'Remove all custom modules', value: 'remove' },
|
|
1429
|
+
);
|
|
1430
|
+
} else {
|
|
1431
|
+
choices.push({ name: 'Add new custom modules', value: 'add' }, { name: 'Cancel (no custom modules)', value: 'cancel' });
|
|
1432
|
+
}
|
|
1433
|
+
|
|
1434
|
+
const { customAction } = await inquirer.prompt([
|
|
1435
|
+
{
|
|
1436
|
+
type: 'list',
|
|
1437
|
+
name: 'customAction',
|
|
1438
|
+
message:
|
|
1439
|
+
cachedCustomModules.length > 0 ? 'What would you like to do with custom modules?' : 'Would you like to add custom modules?',
|
|
1440
|
+
choices: choices,
|
|
1441
|
+
default: cachedCustomModules.length > 0 ? 'keep' : 'add',
|
|
1442
|
+
},
|
|
1443
|
+
]);
|
|
1444
|
+
|
|
1445
|
+
switch (customAction) {
|
|
1446
|
+
case 'keep': {
|
|
1447
|
+
// Keep all existing custom modules
|
|
1448
|
+
result.selectedCustomModules = cachedCustomModules.map((m) => m.id);
|
|
1449
|
+
console.log(chalk.dim(`Keeping ${result.selectedCustomModules.length} custom module(s)`));
|
|
1450
|
+
break;
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
case 'select': {
|
|
1454
|
+
// Let user choose which to keep
|
|
1455
|
+
const choices = cachedCustomModules.map((m) => ({
|
|
1456
|
+
name: `${m.name} ${chalk.gray(`(${m.id})`)}`,
|
|
1457
|
+
value: m.id,
|
|
1458
|
+
}));
|
|
1459
|
+
|
|
1460
|
+
const { keepModules } = await inquirer.prompt([
|
|
1461
|
+
{
|
|
1462
|
+
type: 'checkbox',
|
|
1463
|
+
name: 'keepModules',
|
|
1464
|
+
message: 'Select custom modules to keep:',
|
|
1465
|
+
choices: choices,
|
|
1466
|
+
default: cachedCustomModules.filter((m) => m.checked).map((m) => m.id),
|
|
1467
|
+
},
|
|
1468
|
+
]);
|
|
1469
|
+
result.selectedCustomModules = keepModules;
|
|
1470
|
+
break;
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
case 'add': {
|
|
1474
|
+
// By default, keep existing modules when adding new ones
|
|
1475
|
+
// User chose "Add new" not "Replace", so we assume they want to keep existing
|
|
1476
|
+
result.selectedCustomModules = cachedCustomModules.map((m) => m.id);
|
|
1477
|
+
|
|
1478
|
+
// Then prompt for new ones (reuse existing method)
|
|
1479
|
+
const newCustomContent = await this.promptCustomContentSource();
|
|
1480
|
+
if (newCustomContent.hasCustomContent && newCustomContent.selected) {
|
|
1481
|
+
result.selectedCustomModules.push(...newCustomContent.selectedModuleIds);
|
|
1482
|
+
result.customContentConfig = newCustomContent;
|
|
1483
|
+
}
|
|
1484
|
+
break;
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
case 'remove': {
|
|
1488
|
+
// Remove all custom modules
|
|
1489
|
+
console.log(chalk.yellow('All custom modules will be removed from the installation'));
|
|
1490
|
+
break;
|
|
1491
|
+
}
|
|
1492
|
+
|
|
1493
|
+
case 'cancel': {
|
|
1494
|
+
// User cancelled - no custom modules
|
|
1495
|
+
console.log(chalk.dim('No custom modules will be added'));
|
|
1496
|
+
break;
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1500
|
+
return result;
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
/**
|
|
1504
|
+
* Parse alpha version string (e.g., "6.0.0-Alpha.20")
|
|
1505
|
+
* @param {string} version - Version string
|
|
1506
|
+
* @returns {Object|null} Object with alphaNumber and fullVersion, or null if invalid
|
|
1507
|
+
*/
|
|
1508
|
+
parseAlphaVersion(version) {
|
|
1509
|
+
if (!version || version === 'unknown') {
|
|
1510
|
+
return null;
|
|
1511
|
+
}
|
|
1512
|
+
|
|
1513
|
+
// Remove 'v' prefix if present
|
|
1514
|
+
const cleanVersion = version.toString().replace(/^v/i, '');
|
|
1515
|
+
|
|
1516
|
+
// Match alpha version pattern: X.Y.Z-Alpha.N (case-insensitive)
|
|
1517
|
+
const match = cleanVersion.match(/[\d.]+-Alpha\.(\d+)/i);
|
|
1518
|
+
|
|
1519
|
+
if (!match) {
|
|
1520
|
+
return null;
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
return {
|
|
1524
|
+
alphaNumber: parseInt(match[1], 10),
|
|
1525
|
+
fullVersion: cleanVersion,
|
|
1526
|
+
};
|
|
1527
|
+
}
|
|
1528
|
+
|
|
1529
|
+
/**
|
|
1530
|
+
* Check if installed version is more than 2 alpha versions behind current
|
|
1531
|
+
* @param {string} installedVersion - The installed version
|
|
1532
|
+
* @param {string} currentVersion - The current version
|
|
1533
|
+
* @returns {Object} Object with { isOldVersion, versionDiff, shouldWarn, installed, current }
|
|
1534
|
+
*/
|
|
1535
|
+
checkAlphaVersionAge(installedVersion, currentVersion) {
|
|
1536
|
+
const installed = this.parseAlphaVersion(installedVersion);
|
|
1537
|
+
const current = this.parseAlphaVersion(currentVersion);
|
|
1538
|
+
|
|
1539
|
+
// If we can't parse either version, don't warn
|
|
1540
|
+
if (!installed || !current) {
|
|
1541
|
+
return { isOldVersion: false, versionDiff: 0, shouldWarn: false };
|
|
1542
|
+
}
|
|
1543
|
+
|
|
1544
|
+
// Calculate alpha version difference
|
|
1545
|
+
const versionDiff = current.alphaNumber - installed.alphaNumber;
|
|
1546
|
+
|
|
1547
|
+
// Consider it old if more than 2 versions behind
|
|
1548
|
+
const isOldVersion = versionDiff > 2;
|
|
1549
|
+
|
|
1550
|
+
return {
|
|
1551
|
+
isOldVersion,
|
|
1552
|
+
versionDiff,
|
|
1553
|
+
shouldWarn: isOldVersion,
|
|
1554
|
+
installed: installed.fullVersion,
|
|
1555
|
+
current: current.fullVersion,
|
|
1556
|
+
installedAlpha: installed.alphaNumber,
|
|
1557
|
+
currentAlpha: current.alphaNumber,
|
|
1558
|
+
};
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
/**
|
|
1562
|
+
* Show warning for old alpha version and ask if user wants to proceed
|
|
1563
|
+
* @param {string} installedVersion - The installed version
|
|
1564
|
+
* @param {string} currentVersion - The current version
|
|
1565
|
+
* @param {string} bmadFolderName - Name of the BMAD folder
|
|
1566
|
+
* @returns {Promise<boolean>} True if user wants to proceed, false if they cancel
|
|
1567
|
+
*/
|
|
1568
|
+
async showOldAlphaVersionWarning(installedVersion, currentVersion, bmadFolderName) {
|
|
1569
|
+
const versionInfo = this.checkAlphaVersionAge(installedVersion, currentVersion);
|
|
1570
|
+
|
|
1571
|
+
// Also warn if version is unknown or can't be parsed (legacy/unsupported)
|
|
1572
|
+
const isUnknownVersion = installedVersion === 'unknown' || !versionInfo.installed;
|
|
1573
|
+
|
|
1574
|
+
if (!versionInfo.shouldWarn && !isUnknownVersion) {
|
|
1575
|
+
return true; // Not old, proceed
|
|
1576
|
+
}
|
|
1577
|
+
|
|
1578
|
+
console.log('');
|
|
1579
|
+
console.log(chalk.yellow.bold('⚠️ VERSION WARNING'));
|
|
1580
|
+
console.log(chalk.yellow('─'.repeat(80)));
|
|
1581
|
+
|
|
1582
|
+
if (isUnknownVersion) {
|
|
1583
|
+
console.log(chalk.yellow('Unable to detect your installed BMAD version.'));
|
|
1584
|
+
console.log(chalk.yellow('This appears to be a legacy or unsupported installation.'));
|
|
1585
|
+
console.log('');
|
|
1586
|
+
console.log(chalk.dim('For stability, we only support updates from the previous 2 alpha versions.'));
|
|
1587
|
+
console.log(chalk.dim('Legacy installations may have compatibility issues.'));
|
|
1588
|
+
} else {
|
|
1589
|
+
console.log(chalk.yellow(`You are updating from ${versionInfo.installed} to ${versionInfo.current}.`));
|
|
1590
|
+
console.log(chalk.yellow(`This is ${versionInfo.versionDiff} alpha versions behind.`));
|
|
1591
|
+
console.log('');
|
|
1592
|
+
console.log(chalk.dim(`For stability, we only support updates from the previous 2 alpha versions`));
|
|
1593
|
+
console.log(chalk.dim(`(Alpha.${versionInfo.currentAlpha - 2} through Alpha.${versionInfo.currentAlpha - 1}).`));
|
|
1594
|
+
}
|
|
1595
|
+
|
|
1596
|
+
console.log('');
|
|
1597
|
+
console.log(chalk.dim('For the best experience, we recommend:'));
|
|
1598
|
+
console.log(chalk.dim(' 1. Delete your current BMAD installation folder'));
|
|
1599
|
+
console.log(chalk.dim(` (the "${bmadFolderName}/" folder in your project)`));
|
|
1600
|
+
console.log(chalk.dim(' 2. Run a fresh installation'));
|
|
1601
|
+
console.log('');
|
|
1602
|
+
console.log(chalk.dim('Benefits of a fresh install:'));
|
|
1603
|
+
console.log(chalk.dim(' • Cleaner configuration without legacy artifacts'));
|
|
1604
|
+
console.log(chalk.dim(' • All new features properly configured'));
|
|
1605
|
+
console.log(chalk.dim(' • Fewer potential conflicts'));
|
|
1606
|
+
console.log(chalk.yellow('─'.repeat(80)));
|
|
1607
|
+
console.log('');
|
|
1608
|
+
|
|
1609
|
+
const { proceed } = await inquirer.prompt([
|
|
1610
|
+
{
|
|
1611
|
+
type: 'list',
|
|
1612
|
+
name: 'proceed',
|
|
1613
|
+
message: 'What would you like to do?',
|
|
1614
|
+
choices: [
|
|
1615
|
+
{
|
|
1616
|
+
name: 'Proceed with update anyway (may have issues)',
|
|
1617
|
+
value: 'proceed',
|
|
1618
|
+
short: 'Proceed with update',
|
|
1619
|
+
},
|
|
1620
|
+
{
|
|
1621
|
+
name: 'Cancel (recommended - do a fresh install instead)',
|
|
1622
|
+
value: 'cancel',
|
|
1623
|
+
short: 'Cancel installation',
|
|
1624
|
+
},
|
|
1625
|
+
],
|
|
1626
|
+
default: 'cancel',
|
|
1627
|
+
},
|
|
1628
|
+
]);
|
|
1629
|
+
|
|
1630
|
+
if (proceed === 'cancel') {
|
|
1631
|
+
console.log('');
|
|
1632
|
+
console.log(chalk.cyan('To do a fresh install:'));
|
|
1633
|
+
console.log(chalk.dim(` 1. Delete the "${bmadFolderName}/" folder in your project`));
|
|
1634
|
+
console.log(chalk.dim(" 2. Run 'bmad install' again"));
|
|
1635
|
+
console.log('');
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
return proceed === 'proceed';
|
|
1639
|
+
}
|
|
589
1640
|
}
|
|
590
1641
|
|
|
591
1642
|
module.exports = { UI };
|