bmad-method 6.0.0-alpha.1 → 6.0.0-alpha.11
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/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
- package/.github/workflows/bundle-latest.yaml +277 -0
- package/.github/workflows/manual-release.yaml +64 -17
- package/.github/workflows/{lint.yaml → quality.yaml} +19 -2
- package/.husky/pre-commit +4 -0
- package/.prettierignore +4 -0
- package/.vscode/settings.json +3 -1
- package/CHANGELOG.md +321 -12
- package/CONTRIBUTING.md +1 -13
- package/README.md +138 -187
- package/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
- package/docs/agent-customization-guide.md +208 -0
- package/docs/custom-agent-installation.md +169 -0
- package/docs/document-sharding-guide.md +449 -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/opencode.md +1 -1
- package/docs/index.md +227 -0
- package/docs/installers-bundlers/ide-injections.md +2 -2
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +80 -19
- package/docs/v4-to-v6-upgrade.md +21 -19
- package/docs/v6-open-items.md +17 -0
- package/docs/web-bundles-gemini-gpt-guide.md +473 -0
- package/eslint.config.mjs +2 -0
- package/package.json +6 -3
- package/src/core/_module-installer/install-config.yaml +17 -10
- package/src/core/_module-installer/installer.js +0 -8
- package/src/core/agents/bmad-master.agent.yaml +5 -5
- package/src/core/agents/bmad-web-orchestrator.agent.xml +8 -17
- 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 +21 -0
- package/{bmad/core/tasks/adv-elicit.xml → src/core/tasks/advanced-elicitation.xml} +6 -4
- package/src/core/tasks/index-docs.xml +1 -1
- package/src/core/tasks/validate-workflow.xml +1 -1
- package/src/core/tasks/workflow.xml +126 -22
- package/src/core/tools/shard-doc.xml +54 -45
- package/src/core/workflows/brainstorming/README.md +6 -16
- package/src/core/workflows/brainstorming/instructions.md +6 -5
- package/src/core/workflows/brainstorming/template.md +4 -0
- package/src/core/workflows/brainstorming/workflow.yaml +8 -13
- package/src/core/workflows/party-mode/instructions.md +2 -7
- package/src/core/workflows/party-mode/workflow.yaml +11 -6
- package/src/modules/bmb/README.md +135 -73
- package/src/modules/bmb/_module-installer/install-config.yaml +9 -4
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +11 -12
- package/src/modules/bmb/docs/agent-compilation.md +340 -0
- package/src/modules/bmb/docs/agent-menu-patterns.md +524 -0
- package/src/modules/bmb/docs/expert-agent-architecture.md +364 -0
- package/src/modules/bmb/docs/index.md +55 -0
- package/src/modules/bmb/docs/module-agent-architecture.md +367 -0
- package/src/modules/bmb/docs/simple-agent-architecture.md +288 -0
- package/src/modules/bmb/docs/understanding-agent-types.md +184 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +242 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +24 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +108 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +46 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +39 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +152 -0
- package/src/modules/bmb/reference/agents/module-examples/README.md +50 -0
- package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +53 -0
- package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +57 -0
- package/src/modules/bmb/reference/agents/simple-examples/README.md +223 -0
- package/src/modules/bmb/reference/agents/simple-examples/commit-poet.agent.yaml +126 -0
- package/src/modules/bmb/reference/readme.md +3 -0
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +5 -6
- package/src/modules/bmb/workflows/audit-workflow/instructions.md +6 -6
- package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +2 -2
- package/src/modules/bmb/workflows/convert-legacy/README.md +5 -5
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +2 -2
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +17 -17
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +6 -10
- package/src/modules/bmb/workflows/create-agent/agent-validation-checklist.md +174 -0
- package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +99 -120
- package/src/modules/bmb/workflows/create-agent/communication-presets.csv +61 -0
- package/src/modules/bmb/workflows/create-agent/instructions.md +171 -82
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +26 -20
- package/src/modules/bmb/workflows/create-module/README.md +163 -154
- package/src/modules/bmb/workflows/create-module/checklist.md +1 -10
- package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +1 -1
- package/src/modules/bmb/workflows/create-module/instructions.md +13 -17
- package/src/modules/bmb/workflows/create-module/module-structure.md +39 -5
- package/src/modules/bmb/workflows/create-module/workflow.yaml +21 -13
- package/src/modules/bmb/workflows/create-workflow/README.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/checklist.md +1 -1
- package/src/modules/bmb/workflows/create-workflow/instructions.md +46 -37
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +219 -42
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +4 -2
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +12 -16
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +7 -8
- package/src/modules/bmb/workflows/edit-agent/README.md +174 -47
- package/src/modules/bmb/workflows/edit-agent/instructions.md +399 -35
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +27 -13
- package/src/modules/bmb/workflows/edit-module/README.md +2 -2
- package/src/modules/bmb/workflows/edit-module/checklist.md +2 -2
- package/src/modules/bmb/workflows/edit-module/instructions.md +7 -5
- package/src/modules/bmb/workflows/edit-module/workflow.yaml +11 -13
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +4 -4
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +6 -8
- package/src/modules/bmb/workflows/module-brief/README.md +2 -2
- package/src/modules/bmb/workflows/module-brief/checklist.md +2 -2
- package/src/modules/bmb/workflows/module-brief/instructions.md +3 -2
- package/src/modules/bmb/workflows/module-brief/workflow.yaml +12 -7
- package/src/modules/bmgd/README.md +208 -0
- package/src/modules/bmgd/_module-installer/install-config.yaml +54 -0
- package/src/modules/bmgd/agents/game-architect.agent.yaml +33 -0
- package/src/modules/bmgd/agents/game-designer.agent.yaml +40 -0
- package/src/modules/bmgd/agents/game-dev.agent.yaml +40 -0
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +75 -0
- package/src/modules/bmgd/teams/default-party.csv +10 -0
- package/src/modules/{bmm → bmgd}/teams/team-gamedev.yaml +5 -1
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +130 -0
- package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/workflow.yaml +10 -10
- package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/instructions.md +44 -28
- package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/workflow.yaml +9 -17
- package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/instructions-gdd.md +58 -31
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +81 -0
- package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/narrative/instructions-narrative.md +75 -28
- package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/narrative/workflow.yaml +6 -12
- package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +321 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-template.md +103 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +240 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/decision-catalog.yaml +222 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +701 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/pattern-categories.csv +13 -0
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +69 -0
- package/src/modules/bmgd/workflows/4-production/code-review/backlog_template.md +12 -0
- package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +22 -0
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +398 -0
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +61 -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 +58 -0
- package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +240 -0
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +256 -0
- package/src/modules/bmgd/workflows/4-production/create-story/template.md +51 -0
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +74 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +38 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +267 -0
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +58 -0
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +17 -0
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +164 -0
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/template.md +76 -0
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +58 -0
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +1443 -0
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +57 -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 +51 -0
- package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +16 -0
- package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +34 -0
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +209 -0
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +63 -0
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +111 -0
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +28 -0
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +117 -0
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +25 -0
- package/src/modules/bmm/README.md +79 -92
- package/src/modules/bmm/_module-installer/install-config.yaml +9 -23
- package/src/modules/bmm/_module-installer/installer.js +2 -2
- package/src/modules/bmm/agents/analyst.agent.yaml +25 -19
- package/src/modules/bmm/agents/architect.agent.yaml +28 -19
- package/src/modules/bmm/agents/dev.agent.yaml +12 -15
- package/src/modules/bmm/agents/pm.agent.yaml +40 -22
- package/src/modules/bmm/agents/sm.agent.yaml +30 -24
- package/src/modules/bmm/agents/tea.agent.yaml +25 -17
- package/src/modules/bmm/agents/tech-writer.agent.yaml +80 -0
- package/src/modules/bmm/agents/ux-designer.agent.yaml +22 -12
- package/src/modules/bmm/docs/README.md +240 -0
- package/src/modules/bmm/docs/agents-guide.md +1058 -0
- package/src/modules/bmm/docs/brownfield-guide.md +762 -0
- package/src/modules/bmm/docs/enterprise-agentic-development.md +686 -0
- package/src/modules/bmm/docs/faq.md +588 -0
- package/src/modules/bmm/docs/glossary.md +320 -0
- package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +5919 -0
- package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +2 -0
- package/src/modules/bmm/docs/party-mode.md +224 -0
- package/src/modules/bmm/docs/quick-spec-flow.md +652 -0
- package/src/modules/bmm/docs/quick-start.md +382 -0
- package/src/modules/bmm/docs/scale-adaptive-system.md +618 -0
- package/src/modules/bmm/docs/test-architecture.md +396 -0
- package/src/modules/bmm/{workflows/3-solutioning/architecture/readme.md → docs/workflow-architecture-reference.md} +132 -84
- package/src/modules/bmm/{workflows/document-project/README.md → docs/workflow-document-project-reference.md} +49 -4
- package/src/modules/bmm/docs/workflows-analysis.md +370 -0
- package/src/modules/bmm/docs/workflows-implementation.md +296 -0
- package/src/modules/bmm/docs/workflows-planning.md +612 -0
- package/src/modules/bmm/docs/workflows-solutioning.md +554 -0
- package/src/modules/bmm/teams/default-party.csv +20 -0
- package/src/modules/bmm/teams/team-fullstack.yaml +2 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +45 -24
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +8 -8
- package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +425 -0
- package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +180 -0
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +56 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +435 -232
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +93 -77
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +32 -14
- package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +144 -0
- package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +249 -0
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +156 -59
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +70 -65
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +205 -143
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +55 -46
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +116 -83
- package/src/modules/bmm/workflows/1-analysis/research/template-market.md +37 -1
- package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +36 -1
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +25 -12
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +51 -26
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +67 -16
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +292 -63
- package/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +13 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +544 -290
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +165 -23
- package/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv +11 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +50 -18
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +146 -36
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +67 -4
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +436 -0
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +874 -163
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +132 -6
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +54 -20
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +36 -28
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -26
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +5 -9
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +215 -150
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +72 -26
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md +80 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +616 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +63 -0
- package/src/modules/bmm/workflows/3-solutioning/{solutioning-gate-check → implementation-readiness}/checklist.md +7 -13
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +332 -0
- package/src/modules/bmm/workflows/3-solutioning/{solutioning-gate-check → implementation-readiness}/template.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +64 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +25 -18
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +31 -26
- 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 +38 -25
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +22 -18
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +38 -14
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +8 -3
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +35 -5
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +10 -6
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +40 -16
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +1207 -243
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +38 -26
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +28 -15
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +1 -1
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +16 -6
- package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +23 -15
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +39 -8
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +5 -4
- package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +6 -6
- package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +5 -7
- package/src/modules/bmm/workflows/diagrams/_shared/excalidraw-library.json +90 -0
- package/src/modules/bmm/workflows/diagrams/_shared/excalidraw-templates.yaml +127 -0
- package/src/modules/bmm/workflows/diagrams/create-dataflow/checklist.md +39 -0
- package/src/modules/bmm/workflows/diagrams/create-dataflow/instructions.md +130 -0
- package/src/modules/bmm/workflows/diagrams/create-dataflow/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/diagrams/create-diagram/checklist.md +43 -0
- package/src/modules/bmm/workflows/diagrams/create-diagram/instructions.md +141 -0
- package/src/modules/bmm/workflows/diagrams/create-diagram/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/diagrams/create-flowchart/checklist.md +49 -0
- package/src/modules/bmm/workflows/diagrams/create-flowchart/instructions.md +241 -0
- package/src/modules/bmm/workflows/diagrams/create-flowchart/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/diagrams/create-wireframe/checklist.md +38 -0
- package/src/modules/bmm/workflows/diagrams/create-wireframe/instructions.md +133 -0
- package/src/modules/bmm/workflows/diagrams/create-wireframe/workflow.yaml +27 -0
- package/src/modules/bmm/workflows/document-project/checklist.md +1 -1
- package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
- package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -7
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +4 -4
- 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/techdoc/documentation-standards.md +262 -0
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +2 -2
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -9
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -11
- package/src/modules/bmm/workflows/testarch/ci/checklist.md +4 -4
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
- 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 +2 -2
- package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -8
- package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -11
- package/src/modules/bmm/workflows/testarch/test-design/checklist.md +4 -4
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +175 -14
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +4 -4
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +7 -11
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -9
- package/src/modules/bmm/workflows/testarch/trace/instructions.md +9 -9
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -13
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +249 -212
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +6 -5
- package/src/modules/bmm/workflows/workflow-status/instructions.md +177 -113
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +126 -0
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +114 -0
- package/src/modules/bmm/workflows/workflow-status/paths/{brownfield-level-3.yaml → method-brownfield.yaml} +48 -33
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +101 -0
- package/src/modules/bmm/workflows/workflow-status/paths/{brownfield-level-1.yaml → quick-flow-brownfield.yaml} +18 -18
- package/src/modules/bmm/workflows/workflow-status/paths/{greenfield-level-1.yaml → quick-flow-greenfield.yaml} +16 -18
- 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 +5 -5
- package/src/modules/cis/README.md +153 -0
- package/src/modules/cis/_module-installer/install-config.yaml +6 -4
- package/src/modules/cis/agents/README.md +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +13 -8
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +13 -8
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +13 -8
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +13 -8
- package/src/modules/cis/agents/presentation-master.agent.yaml +60 -0
- package/src/modules/cis/agents/storyteller.agent.yaml +13 -8
- package/src/modules/cis/teams/creative-squad.yaml +1 -0
- package/src/modules/cis/teams/default-party.csv +11 -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/models/action-command-header.md +0 -0
- package/src/utility/models/agent-activation-ide.xml +3 -3
- package/src/utility/models/agent-activation-web.xml +4 -4
- package/src/utility/models/agent-command-header.md +1 -0
- package/src/utility/models/fragments/activation-steps.xml +3 -2
- package/src/utility/models/fragments/handler-validate-workflow.xml +1 -1
- package/src/utility/models/fragments/handler-workflow.xml +1 -1
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +3 -3
- package/test/test-installation-components.js +214 -0
- package/tools/bmad-npx-wrapper.js +10 -98
- package/tools/cli/README.md +50 -32
- package/tools/cli/bundlers/web-bundler.js +322 -26
- package/tools/cli/commands/agent-install.js +409 -0
- package/tools/cli/commands/install.js +2 -5
- package/tools/cli/installers/lib/core/config-collector.js +279 -39
- package/tools/cli/installers/lib/core/detector.js +62 -7
- package/tools/cli/installers/lib/core/ide-config-manager.js +3 -1
- package/tools/cli/installers/lib/core/installer.js +338 -46
- package/tools/cli/installers/lib/core/manifest-generator.js +33 -117
- package/tools/cli/installers/lib/core/manifest.js +6 -2
- package/tools/cli/installers/lib/ide/_base-ide.js +82 -3
- package/tools/cli/installers/lib/ide/antigravity.js +463 -0
- package/tools/cli/installers/lib/ide/auggie.js +81 -238
- package/tools/cli/installers/lib/ide/claude-code.js +90 -25
- package/tools/cli/installers/lib/ide/cline.js +15 -18
- package/tools/cli/installers/lib/ide/codex.js +225 -71
- package/tools/cli/installers/lib/ide/crush.js +14 -50
- package/tools/cli/installers/lib/ide/cursor.js +116 -8
- package/tools/cli/installers/lib/ide/gemini.js +87 -37
- package/tools/cli/installers/lib/ide/github-copilot.js +121 -35
- package/tools/cli/installers/lib/ide/iflow.js +13 -30
- package/tools/cli/installers/lib/ide/kilo.js +20 -16
- package/tools/cli/installers/lib/ide/manager.js +50 -0
- package/tools/cli/installers/lib/ide/opencode.js +61 -17
- package/tools/cli/installers/lib/ide/qwen.js +39 -11
- package/tools/cli/installers/lib/ide/roo.js +27 -62
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +90 -0
- package/tools/cli/installers/lib/ide/{task-tool-command-generator.js → shared/task-tool-command-generator.js} +1 -1
- package/tools/cli/installers/lib/ide/{workflow-command-generator.js → shared/workflow-command-generator.js} +11 -9
- 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/{workflow-command-template.md → templates/workflow-command-template.md} +3 -5
- package/tools/cli/installers/lib/ide/trae.js +20 -32
- package/tools/cli/installers/lib/ide/windsurf.js +65 -8
- package/tools/cli/installers/lib/modules/manager.js +213 -7
- package/tools/cli/lib/agent/compiler.js +390 -0
- package/tools/cli/lib/agent/installer.js +725 -0
- package/tools/cli/lib/agent/template-engine.js +152 -0
- package/tools/cli/lib/cli-utils.js +52 -50
- package/tools/cli/lib/config.js +3 -1
- package/tools/cli/lib/ui.js +34 -17
- package/tools/cli/lib/xml-handler.js +1 -0
- package/tools/cli/lib/yaml-format.js +2 -1
- package/tools/cli/lib/yaml-xml-builder.js +76 -8
- package/tools/schema/agent.js +12 -3
- 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/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/template.md +0 -275
- 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/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/web-bundler-usage.md +0 -54
- package/src/core/tasks/adv-elicit.xml +0 -104
- 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/checklist.md +0 -62
- package/src/modules/bmb/workflows/create-agent/communication-styles.md +0 -202
- package/src/modules/bmb/workflows/edit-agent/checklist.md +0 -112
- 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/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/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-project/README.md +0 -29
- package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +0 -221
- package/src/modules/bmm/workflows/1-analysis/product-brief/README.md +0 -180
- package/src/modules/bmm/workflows/1-analysis/research/README.md +0 -454
- 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/2-plan-workflows/README.md +0 -258
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/README.md +0 -222
- package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +0 -67
- package/src/modules/bmm/workflows/2-plan-workflows/prd/epics-template.md +0 -63
- 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/3-solutioning/README.md +0 -1
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/README.md +0 -177
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -273
- 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/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/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/epic-tech-context/README.md +0 -195
- 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/README.md +0 -577
- 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-2.yaml +0 -76
- 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-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/readme.md +0 -86
- package/test/fixtures/agent-schema/invalid/persona/principles-as-string.agent.yaml +0 -23
- package/v6-open-items.md +0 -23
- /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 → bmgd/workflows/1-preproduction}/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 → bmgd/workflows/2-design}/gdd/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 → bmgd/workflows/2-design}/narrative/narrative-template.md +0 -0
|
@@ -13,14 +13,86 @@ class ConfigCollector {
|
|
|
13
13
|
this.currentProjectDir = null;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Find the bmad installation directory in a project
|
|
18
|
+
* V6+ installations can use ANY folder name but ALWAYS have _cfg/manifest.yaml
|
|
19
|
+
* @param {string} projectDir - Project directory
|
|
20
|
+
* @returns {Promise<string>} Path to bmad directory
|
|
21
|
+
*/
|
|
22
|
+
async findBmadDir(projectDir) {
|
|
23
|
+
// Check if project directory exists
|
|
24
|
+
if (!(await fs.pathExists(projectDir))) {
|
|
25
|
+
// Project doesn't exist yet, return default
|
|
26
|
+
return path.join(projectDir, 'bmad');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// V6+ strategy: Look for ANY directory with _cfg/manifest.yaml
|
|
30
|
+
// This is the definitive marker of a V6+ installation
|
|
31
|
+
try {
|
|
32
|
+
const entries = await fs.readdir(projectDir, { withFileTypes: true });
|
|
33
|
+
for (const entry of entries) {
|
|
34
|
+
if (entry.isDirectory()) {
|
|
35
|
+
const manifestPath = path.join(projectDir, entry.name, '_cfg', 'manifest.yaml');
|
|
36
|
+
if (await fs.pathExists(manifestPath)) {
|
|
37
|
+
// Found a V6+ installation
|
|
38
|
+
return path.join(projectDir, entry.name);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
} catch {
|
|
43
|
+
// Ignore errors, fall through to default
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// No V6+ installation found, return default
|
|
47
|
+
// This will be used for new installations
|
|
48
|
+
return path.join(projectDir, 'bmad');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Detect the existing BMAD folder name in a project
|
|
53
|
+
* @param {string} projectDir - Project directory
|
|
54
|
+
* @returns {Promise<string|null>} Folder name (just the name, not full path) or null if not found
|
|
55
|
+
*/
|
|
56
|
+
async detectExistingBmadFolder(projectDir) {
|
|
57
|
+
// Check if project directory exists
|
|
58
|
+
if (!(await fs.pathExists(projectDir))) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Look for ANY directory with _cfg/manifest.yaml
|
|
63
|
+
try {
|
|
64
|
+
const entries = await fs.readdir(projectDir, { withFileTypes: true });
|
|
65
|
+
for (const entry of entries) {
|
|
66
|
+
if (entry.isDirectory()) {
|
|
67
|
+
const manifestPath = path.join(projectDir, entry.name, '_cfg', 'manifest.yaml');
|
|
68
|
+
if (await fs.pathExists(manifestPath)) {
|
|
69
|
+
// Found a V6+ installation, return just the folder name
|
|
70
|
+
return entry.name;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
} catch {
|
|
75
|
+
// Ignore errors
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
16
81
|
/**
|
|
17
82
|
* Load existing config if it exists from module config files
|
|
18
83
|
* @param {string} projectDir - Target project directory
|
|
19
84
|
*/
|
|
20
85
|
async loadExistingConfig(projectDir) {
|
|
21
|
-
const bmadDir = path.join(projectDir, 'bmad');
|
|
22
86
|
this.existingConfig = {};
|
|
23
87
|
|
|
88
|
+
// Check if project directory exists first
|
|
89
|
+
if (!(await fs.pathExists(projectDir))) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Find the actual bmad directory (handles custom folder names)
|
|
94
|
+
const bmadDir = await this.findBmadDir(projectDir);
|
|
95
|
+
|
|
24
96
|
// Check if bmad directory exists
|
|
25
97
|
if (!(await fs.pathExists(bmadDir))) {
|
|
26
98
|
return false;
|
|
@@ -159,27 +231,25 @@ class ConfigCollector {
|
|
|
159
231
|
this.allAnswers[`${moduleName}_${key}`] = value;
|
|
160
232
|
}
|
|
161
233
|
}
|
|
234
|
+
// Show "no config" message for modules with no new questions
|
|
235
|
+
CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
162
236
|
return false; // No new fields
|
|
163
237
|
}
|
|
164
238
|
|
|
165
|
-
// If we have new fields,
|
|
239
|
+
// If we have new fields, build questions first
|
|
166
240
|
if (newKeys.length > 0) {
|
|
167
|
-
console.log(chalk.yellow(`\n📋 New configuration options available for ${moduleName}`));
|
|
168
|
-
if (moduleConfig.prompt) {
|
|
169
|
-
const prompts = Array.isArray(moduleConfig.prompt) ? moduleConfig.prompt : [moduleConfig.prompt];
|
|
170
|
-
CLIUtils.displayPromptSection(prompts);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
241
|
const questions = [];
|
|
174
242
|
for (const key of newKeys) {
|
|
175
243
|
const item = moduleConfig[key];
|
|
176
|
-
const question = await this.buildQuestion(moduleName, key, item);
|
|
244
|
+
const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
|
|
177
245
|
if (question) {
|
|
178
246
|
questions.push(question);
|
|
179
247
|
}
|
|
180
248
|
}
|
|
181
249
|
|
|
182
250
|
if (questions.length > 0) {
|
|
251
|
+
// Only show header if we actually have questions
|
|
252
|
+
CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
183
253
|
console.log(); // Line break before questions
|
|
184
254
|
const answers = await inquirer.prompt(questions);
|
|
185
255
|
|
|
@@ -206,6 +276,9 @@ class ConfigCollector {
|
|
|
206
276
|
}
|
|
207
277
|
this.collectedConfig[moduleName][originalKey] = result;
|
|
208
278
|
}
|
|
279
|
+
} else {
|
|
280
|
+
// New keys exist but no questions generated - show no config message
|
|
281
|
+
CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
209
282
|
}
|
|
210
283
|
}
|
|
211
284
|
|
|
@@ -325,12 +398,6 @@ class ConfigCollector {
|
|
|
325
398
|
return;
|
|
326
399
|
}
|
|
327
400
|
|
|
328
|
-
// Display module prompts using better formatting
|
|
329
|
-
if (moduleConfig.prompt) {
|
|
330
|
-
const prompts = Array.isArray(moduleConfig.prompt) ? moduleConfig.prompt : [moduleConfig.prompt];
|
|
331
|
-
CLIUtils.displayPromptSection(prompts);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
401
|
// Process each config item
|
|
335
402
|
const questions = [];
|
|
336
403
|
const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
|
|
@@ -343,13 +410,15 @@ class ConfigCollector {
|
|
|
343
410
|
continue;
|
|
344
411
|
}
|
|
345
412
|
|
|
346
|
-
const question = await this.buildQuestion(moduleName, key, item);
|
|
413
|
+
const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
|
|
347
414
|
if (question) {
|
|
348
415
|
questions.push(question);
|
|
349
416
|
}
|
|
350
417
|
}
|
|
351
418
|
|
|
419
|
+
// Display appropriate header based on whether there are questions
|
|
352
420
|
if (questions.length > 0) {
|
|
421
|
+
CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
353
422
|
console.log(); // Line break before questions
|
|
354
423
|
const answers = await inquirer.prompt(questions);
|
|
355
424
|
|
|
@@ -450,20 +519,68 @@ class ConfigCollector {
|
|
|
450
519
|
this.collectedConfig[moduleName][originalKey] = result;
|
|
451
520
|
}
|
|
452
521
|
|
|
453
|
-
//
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
522
|
+
// No longer display completion boxes - keep output clean
|
|
523
|
+
} else {
|
|
524
|
+
// No questions for this module - show completion message
|
|
525
|
+
CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
457
526
|
}
|
|
458
527
|
}
|
|
459
528
|
|
|
529
|
+
/**
|
|
530
|
+
* Replace placeholders in a string with collected config values
|
|
531
|
+
* @param {string} str - String with placeholders
|
|
532
|
+
* @param {string} currentModule - Current module name (to look up defaults in same module)
|
|
533
|
+
* @param {Object} moduleConfig - Current module's config schema (to look up defaults)
|
|
534
|
+
* @returns {string} String with placeholders replaced
|
|
535
|
+
*/
|
|
536
|
+
replacePlaceholders(str, currentModule = null, moduleConfig = null) {
|
|
537
|
+
if (typeof str !== 'string') {
|
|
538
|
+
return str;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
return str.replaceAll(/{([^}]+)}/g, (match, configKey) => {
|
|
542
|
+
// Preserve special placeholders
|
|
543
|
+
if (configKey === 'project-root' || configKey === 'value' || configKey === 'directory_name') {
|
|
544
|
+
return match;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
// Look for the config value in allAnswers (already answered questions)
|
|
548
|
+
let configValue = this.allAnswers[configKey] || this.allAnswers[`core_${configKey}`];
|
|
549
|
+
|
|
550
|
+
// Check in already collected config
|
|
551
|
+
if (!configValue) {
|
|
552
|
+
for (const mod of Object.keys(this.collectedConfig)) {
|
|
553
|
+
if (mod !== '_meta' && this.collectedConfig[mod] && this.collectedConfig[mod][configKey]) {
|
|
554
|
+
configValue = this.collectedConfig[mod][configKey];
|
|
555
|
+
// Remove {project-root}/ prefix if present for cleaner display
|
|
556
|
+
if (typeof configValue === 'string' && configValue.includes('{project-root}/')) {
|
|
557
|
+
configValue = configValue.replace('{project-root}/', '');
|
|
558
|
+
}
|
|
559
|
+
break;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// If still not found and we're in the same module, use the default from the config schema
|
|
565
|
+
if (!configValue && currentModule && moduleConfig && moduleConfig[configKey]) {
|
|
566
|
+
const referencedItem = moduleConfig[configKey];
|
|
567
|
+
if (referencedItem && referencedItem.default !== undefined) {
|
|
568
|
+
configValue = referencedItem.default;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
return configValue || match;
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
|
|
460
576
|
/**
|
|
461
577
|
* Build an inquirer question from a config item
|
|
462
578
|
* @param {string} moduleName - Module name
|
|
463
579
|
* @param {string} key - Config key
|
|
464
580
|
* @param {Object} item - Config item definition
|
|
581
|
+
* @param {Object} moduleConfig - Full module config schema (for resolving defaults)
|
|
465
582
|
*/
|
|
466
|
-
async buildQuestion(moduleName, key, item) {
|
|
583
|
+
async buildQuestion(moduleName, key, item, moduleConfig = null) {
|
|
467
584
|
const questionName = `${moduleName}_${key}`;
|
|
468
585
|
|
|
469
586
|
// Check for existing value
|
|
@@ -478,34 +595,104 @@ class ConfigCollector {
|
|
|
478
595
|
}
|
|
479
596
|
}
|
|
480
597
|
|
|
598
|
+
// Special handling for bmad_folder: detect existing folder name
|
|
599
|
+
if (moduleName === 'core' && key === 'bmad_folder' && !existingValue && this.currentProjectDir) {
|
|
600
|
+
// Try to detect the existing BMAD folder name
|
|
601
|
+
const detectedFolder = await this.detectExistingBmadFolder(this.currentProjectDir);
|
|
602
|
+
if (detectedFolder) {
|
|
603
|
+
existingValue = detectedFolder;
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
|
|
481
607
|
// Determine question type and default value
|
|
482
608
|
let questionType = 'input';
|
|
483
609
|
let defaultValue = item.default;
|
|
484
610
|
let choices = null;
|
|
485
611
|
|
|
486
|
-
if
|
|
487
|
-
|
|
488
|
-
|
|
612
|
+
// Check if default contains references to other fields in the same module
|
|
613
|
+
const hasSameModuleReference = typeof defaultValue === 'string' && defaultValue.match(/{([^}]+)}/);
|
|
614
|
+
let dynamicDefault = false;
|
|
615
|
+
|
|
616
|
+
// Replace placeholders in default value with collected config values
|
|
617
|
+
if (typeof defaultValue === 'string') {
|
|
618
|
+
if (defaultValue.includes('{directory_name}') && this.currentProjectDir) {
|
|
619
|
+
const dirName = path.basename(this.currentProjectDir);
|
|
620
|
+
defaultValue = defaultValue.replaceAll('{directory_name}', dirName);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
// Check if this references another field in the same module (for dynamic defaults)
|
|
624
|
+
if (hasSameModuleReference && moduleConfig) {
|
|
625
|
+
const matches = defaultValue.match(/{([^}]+)}/g);
|
|
626
|
+
if (matches) {
|
|
627
|
+
for (const match of matches) {
|
|
628
|
+
const fieldName = match.slice(1, -1); // Remove { }
|
|
629
|
+
// Check if this field exists in the same module config
|
|
630
|
+
if (moduleConfig[fieldName]) {
|
|
631
|
+
dynamicDefault = true;
|
|
632
|
+
break;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
// If not dynamic, replace placeholders now
|
|
639
|
+
if (!dynamicDefault) {
|
|
640
|
+
defaultValue = this.replacePlaceholders(defaultValue, moduleName, moduleConfig);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// Strip {project-root}/ from defaults since it will be added back by result template
|
|
644
|
+
// This makes the display cleaner and user input simpler
|
|
645
|
+
if (defaultValue.includes('{project-root}/')) {
|
|
646
|
+
defaultValue = defaultValue.replace('{project-root}/', '');
|
|
647
|
+
}
|
|
489
648
|
}
|
|
490
649
|
|
|
491
650
|
// Handle different question types
|
|
492
651
|
if (item['single-select']) {
|
|
493
652
|
questionType = 'list';
|
|
494
|
-
choices = item['single-select']
|
|
495
|
-
|
|
653
|
+
choices = item['single-select'].map((choice) => {
|
|
654
|
+
// If choice is an object with label and value
|
|
655
|
+
if (typeof choice === 'object' && choice.label && choice.value !== undefined) {
|
|
656
|
+
return {
|
|
657
|
+
name: choice.label,
|
|
658
|
+
value: choice.value,
|
|
659
|
+
};
|
|
660
|
+
}
|
|
661
|
+
// Otherwise it's a simple string choice
|
|
662
|
+
return {
|
|
663
|
+
name: choice,
|
|
664
|
+
value: choice,
|
|
665
|
+
};
|
|
666
|
+
});
|
|
667
|
+
if (existingValue) {
|
|
496
668
|
defaultValue = existingValue;
|
|
497
669
|
}
|
|
498
670
|
} else if (item['multi-select']) {
|
|
499
671
|
questionType = 'checkbox';
|
|
500
|
-
choices = item['multi-select'].map((choice) =>
|
|
501
|
-
|
|
502
|
-
value
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
672
|
+
choices = item['multi-select'].map((choice) => {
|
|
673
|
+
// If choice is an object with label and value
|
|
674
|
+
if (typeof choice === 'object' && choice.label && choice.value !== undefined) {
|
|
675
|
+
return {
|
|
676
|
+
name: choice.label,
|
|
677
|
+
value: choice.value,
|
|
678
|
+
checked: existingValue
|
|
679
|
+
? existingValue.includes(choice.value)
|
|
680
|
+
: item.default && Array.isArray(item.default)
|
|
681
|
+
? item.default.includes(choice.value)
|
|
682
|
+
: false,
|
|
683
|
+
};
|
|
684
|
+
}
|
|
685
|
+
// Otherwise it's a simple string choice
|
|
686
|
+
return {
|
|
687
|
+
name: choice,
|
|
688
|
+
value: choice,
|
|
689
|
+
checked: existingValue
|
|
690
|
+
? existingValue.includes(choice)
|
|
691
|
+
: item.default && Array.isArray(item.default)
|
|
692
|
+
? item.default.includes(choice)
|
|
693
|
+
: false,
|
|
694
|
+
};
|
|
695
|
+
});
|
|
509
696
|
} else if (typeof defaultValue === 'boolean') {
|
|
510
697
|
questionType = 'confirm';
|
|
511
698
|
}
|
|
@@ -520,31 +707,67 @@ class ConfigCollector {
|
|
|
520
707
|
message = item.prompt;
|
|
521
708
|
}
|
|
522
709
|
|
|
710
|
+
// Replace placeholders in prompt message with collected config values
|
|
711
|
+
if (typeof message === 'string') {
|
|
712
|
+
message = this.replacePlaceholders(message, moduleName, moduleConfig);
|
|
713
|
+
}
|
|
714
|
+
|
|
523
715
|
// Add current value indicator for existing configs
|
|
524
716
|
if (existingValue !== null && existingValue !== undefined) {
|
|
525
717
|
if (typeof existingValue === 'boolean') {
|
|
526
718
|
message += chalk.dim(` (current: ${existingValue ? 'true' : 'false'})`);
|
|
527
|
-
defaultValue = existingValue;
|
|
528
719
|
} else if (Array.isArray(existingValue)) {
|
|
529
720
|
message += chalk.dim(` (current: ${existingValue.join(', ')})`);
|
|
530
721
|
} else if (questionType !== 'list') {
|
|
531
722
|
// Show the cleaned value (without {project-root}/) for display
|
|
532
723
|
message += chalk.dim(` (current: ${existingValue})`);
|
|
533
|
-
defaultValue = existingValue;
|
|
534
724
|
}
|
|
535
725
|
} else if (item.example && questionType === 'input') {
|
|
536
726
|
// Show example for input fields
|
|
537
|
-
|
|
727
|
+
let exampleText = typeof item.example === 'string' ? item.example : JSON.stringify(item.example);
|
|
728
|
+
// Replace placeholders in example
|
|
729
|
+
if (typeof exampleText === 'string') {
|
|
730
|
+
exampleText = this.replacePlaceholders(exampleText, moduleName, moduleConfig);
|
|
731
|
+
exampleText = exampleText.replace('{project-root}/', '');
|
|
732
|
+
}
|
|
538
733
|
message += chalk.dim(` (e.g., ${exampleText})`);
|
|
539
734
|
}
|
|
540
735
|
|
|
736
|
+
// Build the question object
|
|
541
737
|
const question = {
|
|
542
738
|
type: questionType,
|
|
543
739
|
name: questionName,
|
|
544
740
|
message: message,
|
|
545
|
-
default: defaultValue,
|
|
546
741
|
};
|
|
547
742
|
|
|
743
|
+
// Set default - if it's dynamic, use a function that inquirer will evaluate with current answers
|
|
744
|
+
// But if we have an existing value, always use that instead
|
|
745
|
+
if (existingValue !== null && existingValue !== undefined && questionType !== 'list') {
|
|
746
|
+
question.default = existingValue;
|
|
747
|
+
} else if (dynamicDefault && typeof item.default === 'string') {
|
|
748
|
+
const originalDefault = item.default;
|
|
749
|
+
question.default = (answers) => {
|
|
750
|
+
// Replace placeholders using answers from previous questions in the same batch
|
|
751
|
+
let resolved = originalDefault;
|
|
752
|
+
resolved = resolved.replaceAll(/{([^}]+)}/g, (match, fieldName) => {
|
|
753
|
+
// Look for the answer in the current batch (prefixed with module name)
|
|
754
|
+
const answerKey = `${moduleName}_${fieldName}`;
|
|
755
|
+
if (answers[answerKey] !== undefined) {
|
|
756
|
+
return answers[answerKey];
|
|
757
|
+
}
|
|
758
|
+
// Fall back to collected config
|
|
759
|
+
return this.collectedConfig[moduleName]?.[fieldName] || match;
|
|
760
|
+
});
|
|
761
|
+
// Strip {project-root}/ for cleaner display
|
|
762
|
+
if (resolved.includes('{project-root}/')) {
|
|
763
|
+
resolved = resolved.replace('{project-root}/', '');
|
|
764
|
+
}
|
|
765
|
+
return resolved;
|
|
766
|
+
};
|
|
767
|
+
} else {
|
|
768
|
+
question.default = defaultValue;
|
|
769
|
+
}
|
|
770
|
+
|
|
548
771
|
// Add choices for select types
|
|
549
772
|
if (choices) {
|
|
550
773
|
question.choices = choices;
|
|
@@ -556,6 +779,23 @@ class ConfigCollector {
|
|
|
556
779
|
if (!input && item.required) {
|
|
557
780
|
return 'This field is required';
|
|
558
781
|
}
|
|
782
|
+
// Validate against regex pattern if provided
|
|
783
|
+
if (input && item.regex) {
|
|
784
|
+
const regex = new RegExp(item.regex);
|
|
785
|
+
if (!regex.test(input)) {
|
|
786
|
+
return `Invalid format. Must match pattern: ${item.regex}`;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
return true;
|
|
790
|
+
};
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
// Add validation for checkbox (multi-select) fields
|
|
794
|
+
if (questionType === 'checkbox' && item.required) {
|
|
795
|
+
question.validate = (answers) => {
|
|
796
|
+
if (!answers || answers.length === 0) {
|
|
797
|
+
return 'At least one option must be selected';
|
|
798
|
+
}
|
|
559
799
|
return true;
|
|
560
800
|
};
|
|
561
801
|
}
|
|
@@ -199,6 +199,8 @@ class Detector {
|
|
|
199
199
|
|
|
200
200
|
/**
|
|
201
201
|
* Detect legacy BMAD v4 footprints (case-sensitive path checks)
|
|
202
|
+
* V4 used .bmad-method as default folder name
|
|
203
|
+
* V6+ uses configurable folder names and ALWAYS has _cfg/manifest.yaml with installation.version
|
|
202
204
|
* @param {string} projectDir - Project directory to check
|
|
203
205
|
* @returns {{ hasLegacyV4: boolean, offenders: string[] }}
|
|
204
206
|
*/
|
|
@@ -223,18 +225,62 @@ class Detector {
|
|
|
223
225
|
return true;
|
|
224
226
|
};
|
|
225
227
|
|
|
228
|
+
// Helper: check if a directory is a V6+ installation
|
|
229
|
+
const isV6Installation = async (dirPath) => {
|
|
230
|
+
const manifestPath = path.join(dirPath, '_cfg', 'manifest.yaml');
|
|
231
|
+
if (!(await fs.pathExists(manifestPath))) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
const yaml = require('js-yaml');
|
|
236
|
+
const manifestContent = await fs.readFile(manifestPath, 'utf8');
|
|
237
|
+
const manifest = yaml.load(manifestContent);
|
|
238
|
+
// V6+ manifest has installation.version
|
|
239
|
+
return manifest && manifest.installation && manifest.installation.version;
|
|
240
|
+
} catch {
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
|
|
226
245
|
const offenders = [];
|
|
227
246
|
|
|
228
|
-
//
|
|
247
|
+
// Strategy:
|
|
248
|
+
// 1. First scan for ANY V6+ installation (_cfg/manifest.yaml)
|
|
249
|
+
// 2. If V6+ found → don't flag anything (user is already on V6+)
|
|
250
|
+
// 3. If NO V6+ found → flag folders with "bmad" in name as potential V4 legacy
|
|
251
|
+
|
|
252
|
+
let hasV6Installation = false;
|
|
253
|
+
const potentialV4Folders = [];
|
|
254
|
+
|
|
229
255
|
try {
|
|
230
256
|
const entries = await fs.readdir(projectDir, { withFileTypes: true });
|
|
257
|
+
|
|
231
258
|
for (const entry of entries) {
|
|
232
259
|
if (entry.isDirectory()) {
|
|
233
260
|
const name = entry.name;
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
if
|
|
237
|
-
|
|
261
|
+
const fullPath = path.join(projectDir, entry.name);
|
|
262
|
+
|
|
263
|
+
// Check if directory is empty (skip empty leftover folders)
|
|
264
|
+
const dirContents = await fs.readdir(fullPath);
|
|
265
|
+
if (dirContents.length === 0) {
|
|
266
|
+
continue; // Skip empty folders
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Check if it's a V6+ installation by looking for _cfg/manifest.yaml
|
|
270
|
+
// This works for ANY folder name (not just bmad-prefixed)
|
|
271
|
+
const isV6 = await isV6Installation(fullPath);
|
|
272
|
+
|
|
273
|
+
if (isV6) {
|
|
274
|
+
// Found a V6+ installation - user is already on V6+
|
|
275
|
+
hasV6Installation = true;
|
|
276
|
+
// Don't break - continue scanning to be thorough
|
|
277
|
+
} else {
|
|
278
|
+
// Not V6+, check if folder name contains "bmad" (case insensitive)
|
|
279
|
+
const nameLower = name.toLowerCase();
|
|
280
|
+
if (nameLower.includes('bmad')) {
|
|
281
|
+
// Potential V4 legacy folder
|
|
282
|
+
potentialV4Folders.push(fullPath);
|
|
283
|
+
}
|
|
238
284
|
}
|
|
239
285
|
}
|
|
240
286
|
}
|
|
@@ -242,8 +288,15 @@ class Detector {
|
|
|
242
288
|
// Ignore errors reading directory
|
|
243
289
|
}
|
|
244
290
|
|
|
291
|
+
// Only flag V4 folders if NO V6+ installation was found
|
|
292
|
+
if (!hasV6Installation && potentialV4Folders.length > 0) {
|
|
293
|
+
offenders.push(...potentialV4Folders);
|
|
294
|
+
}
|
|
295
|
+
|
|
245
296
|
// Check inside various IDE command folders for legacy bmad folders
|
|
246
|
-
//
|
|
297
|
+
// V4 used folders like 'bmad-method' or custom names in IDE commands
|
|
298
|
+
// V6+ uses 'bmad' in IDE commands (hardcoded in IDE handlers)
|
|
299
|
+
// Legacy V4 IDE command folders won't have a corresponding V6+ installation
|
|
247
300
|
const ideConfigFolders = ['.opencode', '.claude', '.crush', '.continue', '.cursor', '.windsurf', '.cline', '.roo-cline'];
|
|
248
301
|
|
|
249
302
|
for (const ideFolder of ideConfigFolders) {
|
|
@@ -255,7 +308,9 @@ class Detector {
|
|
|
255
308
|
for (const entry of commandEntries) {
|
|
256
309
|
if (entry.isDirectory()) {
|
|
257
310
|
const name = entry.name;
|
|
258
|
-
//
|
|
311
|
+
// V4 used 'bmad-method' or similar in IDE commands folders
|
|
312
|
+
// V6+ uses 'bmad' (hardcoded)
|
|
313
|
+
// So anything that's NOT 'bmad' but starts with bmad/Bmad is likely V4
|
|
259
314
|
if ((name.startsWith('bmad') || name.startsWith('Bmad') || name === 'BMad') && name !== 'bmad') {
|
|
260
315
|
offenders.push(path.join(commandsPath, entry.name));
|
|
261
316
|
}
|
|
@@ -68,7 +68,9 @@ class IdeConfigManager {
|
|
|
68
68
|
sortKeys: false,
|
|
69
69
|
});
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
// Ensure POSIX-compliant final newline
|
|
72
|
+
const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
|
|
73
|
+
await fs.writeFile(configPath, content, 'utf8');
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
/**
|