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
|
@@ -33,6 +33,76 @@ class Installer {
|
|
|
33
33
|
this.installedFiles = []; // Track all installed files
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Find the bmad installation directory in a project
|
|
38
|
+
* V6+ installations can use ANY folder name but ALWAYS have _cfg/manifest.yaml
|
|
39
|
+
* @param {string} projectDir - Project directory
|
|
40
|
+
* @returns {Promise<string>} Path to bmad directory
|
|
41
|
+
*/
|
|
42
|
+
async findBmadDir(projectDir) {
|
|
43
|
+
// Check if project directory exists
|
|
44
|
+
if (!(await fs.pathExists(projectDir))) {
|
|
45
|
+
// Project doesn't exist yet, return default
|
|
46
|
+
return path.join(projectDir, 'bmad');
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// V6+ strategy: Look for ANY directory with _cfg/manifest.yaml
|
|
50
|
+
// This is the definitive marker of a V6+ installation
|
|
51
|
+
try {
|
|
52
|
+
const entries = await fs.readdir(projectDir, { withFileTypes: true });
|
|
53
|
+
for (const entry of entries) {
|
|
54
|
+
if (entry.isDirectory()) {
|
|
55
|
+
const manifestPath = path.join(projectDir, entry.name, '_cfg', 'manifest.yaml');
|
|
56
|
+
if (await fs.pathExists(manifestPath)) {
|
|
57
|
+
// Found a V6+ installation
|
|
58
|
+
return path.join(projectDir, entry.name);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
} catch {
|
|
63
|
+
// Ignore errors, fall through to default
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// No V6+ installation found, return default
|
|
67
|
+
// This will be used for new installations
|
|
68
|
+
return path.join(projectDir, 'bmad');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Copy a file and replace {bmad_folder} placeholder with actual folder name
|
|
73
|
+
* @param {string} sourcePath - Source file path
|
|
74
|
+
* @param {string} targetPath - Target file path
|
|
75
|
+
* @param {string} bmadFolderName - The bmad folder name to use for replacement
|
|
76
|
+
*/
|
|
77
|
+
async copyFileWithPlaceholderReplacement(sourcePath, targetPath, bmadFolderName) {
|
|
78
|
+
// List of text file extensions that should have placeholder replacement
|
|
79
|
+
const textExtensions = ['.md', '.yaml', '.yml', '.txt', '.json', '.js', '.ts', '.html', '.css', '.sh', '.bat', '.csv'];
|
|
80
|
+
const ext = path.extname(sourcePath).toLowerCase();
|
|
81
|
+
|
|
82
|
+
// Check if this is a text file that might contain placeholders
|
|
83
|
+
if (textExtensions.includes(ext)) {
|
|
84
|
+
try {
|
|
85
|
+
// Read the file content
|
|
86
|
+
let content = await fs.readFile(sourcePath, 'utf8');
|
|
87
|
+
|
|
88
|
+
// Replace {bmad_folder} placeholder with actual folder name
|
|
89
|
+
if (content.includes('{bmad_folder}')) {
|
|
90
|
+
content = content.replaceAll('{bmad_folder}', bmadFolderName);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Write to target with replaced content
|
|
94
|
+
await fs.ensureDir(path.dirname(targetPath));
|
|
95
|
+
await fs.writeFile(targetPath, content, 'utf8');
|
|
96
|
+
} catch {
|
|
97
|
+
// If reading as text fails (might be binary despite extension), fall back to regular copy
|
|
98
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
// Binary file or other file type - just copy directly
|
|
102
|
+
await fs.copy(sourcePath, targetPath, { overwrite: true });
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
36
106
|
/**
|
|
37
107
|
* Collect Tool/IDE configurations after module configuration
|
|
38
108
|
* @param {string} projectDir - Project directory
|
|
@@ -61,7 +131,7 @@ class Installer {
|
|
|
61
131
|
// Check for already configured IDEs
|
|
62
132
|
const { Detector } = require('./detector');
|
|
63
133
|
const detector = new Detector();
|
|
64
|
-
const bmadDir = path.join(projectDir, 'bmad');
|
|
134
|
+
const bmadDir = path.join(projectDir, this.bmadFolderName || 'bmad');
|
|
65
135
|
|
|
66
136
|
// During full reinstall, use the saved previous IDEs since bmad dir was deleted
|
|
67
137
|
// Otherwise detect from existing installation
|
|
@@ -170,12 +240,10 @@ class Installer {
|
|
|
170
240
|
// Display welcome message
|
|
171
241
|
CLIUtils.displaySection('BMAD™ Installation', 'Version ' + require(path.join(getProjectRoot(), 'package.json')).version);
|
|
172
242
|
|
|
173
|
-
//
|
|
243
|
+
// Note: Legacy V4 detection now happens earlier in UI.promptInstall()
|
|
244
|
+
// before any config collection, so we don't need to check again here
|
|
245
|
+
|
|
174
246
|
const projectDir = path.resolve(config.directory);
|
|
175
|
-
const legacyV4 = await this.detector.detectLegacyV4(projectDir);
|
|
176
|
-
if (legacyV4.hasLegacyV4) {
|
|
177
|
-
await this.handleLegacyV4Migration(projectDir, legacyV4);
|
|
178
|
-
}
|
|
179
247
|
|
|
180
248
|
// If core config was pre-collected (from interactive mode), use it
|
|
181
249
|
if (config.coreConfig) {
|
|
@@ -197,6 +265,14 @@ class Installer {
|
|
|
197
265
|
moduleConfigs = await this.configCollector.collectAllConfigurations(config.modules || [], path.resolve(config.directory));
|
|
198
266
|
}
|
|
199
267
|
|
|
268
|
+
// Get bmad_folder from config (default to 'bmad' for backwards compatibility)
|
|
269
|
+
const bmadFolderName = moduleConfigs.core && moduleConfigs.core.bmad_folder ? moduleConfigs.core.bmad_folder : 'bmad';
|
|
270
|
+
this.bmadFolderName = bmadFolderName; // Store for use in other methods
|
|
271
|
+
|
|
272
|
+
// Set bmad folder name on module manager and IDE manager for placeholder replacement
|
|
273
|
+
this.moduleManager.setBmadFolderName(bmadFolderName);
|
|
274
|
+
this.ideManager.setBmadFolderName(bmadFolderName);
|
|
275
|
+
|
|
200
276
|
// Tool selection will be collected after we determine if it's a reinstall/update/new install
|
|
201
277
|
|
|
202
278
|
const spinner = ora('Preparing installation...').start();
|
|
@@ -205,6 +281,63 @@ class Installer {
|
|
|
205
281
|
// Resolve target directory (path.resolve handles platform differences)
|
|
206
282
|
const projectDir = path.resolve(config.directory);
|
|
207
283
|
|
|
284
|
+
// Check if bmad_folder has changed from existing installation (only if project dir exists)
|
|
285
|
+
let existingBmadDir = null;
|
|
286
|
+
let existingBmadFolderName = null;
|
|
287
|
+
|
|
288
|
+
if (await fs.pathExists(projectDir)) {
|
|
289
|
+
existingBmadDir = await this.findBmadDir(projectDir);
|
|
290
|
+
existingBmadFolderName = path.basename(existingBmadDir);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
const targetBmadDir = path.join(projectDir, bmadFolderName);
|
|
294
|
+
|
|
295
|
+
// If bmad_folder changed during update/upgrade, back up old folder and do fresh install
|
|
296
|
+
if (existingBmadDir && (await fs.pathExists(existingBmadDir)) && existingBmadFolderName !== bmadFolderName) {
|
|
297
|
+
spinner.stop();
|
|
298
|
+
console.log(chalk.yellow(`\n⚠️ bmad_folder has changed: ${existingBmadFolderName} → ${bmadFolderName}`));
|
|
299
|
+
console.log(chalk.yellow('This will result in a fresh installation to the new folder.'));
|
|
300
|
+
|
|
301
|
+
const inquirer = require('inquirer');
|
|
302
|
+
const { confirmFreshInstall } = await inquirer.prompt([
|
|
303
|
+
{
|
|
304
|
+
type: 'confirm',
|
|
305
|
+
name: 'confirmFreshInstall',
|
|
306
|
+
message: chalk.cyan('Proceed with fresh install? (Your old folder will be backed up)'),
|
|
307
|
+
default: true,
|
|
308
|
+
},
|
|
309
|
+
]);
|
|
310
|
+
|
|
311
|
+
if (!confirmFreshInstall) {
|
|
312
|
+
console.log(chalk.yellow('Installation cancelled.'));
|
|
313
|
+
return { success: false, cancelled: true };
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
spinner.start('Backing up existing installation...');
|
|
317
|
+
|
|
318
|
+
// Find a unique backup name
|
|
319
|
+
let backupDir = `${existingBmadDir}-bak`;
|
|
320
|
+
let counter = 1;
|
|
321
|
+
while (await fs.pathExists(backupDir)) {
|
|
322
|
+
backupDir = `${existingBmadDir}-bak-${counter}`;
|
|
323
|
+
counter++;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// Rename the old folder to backup
|
|
327
|
+
await fs.move(existingBmadDir, backupDir);
|
|
328
|
+
|
|
329
|
+
spinner.succeed(`Backed up ${existingBmadFolderName} → ${path.basename(backupDir)}`);
|
|
330
|
+
console.log(chalk.cyan('\n📋 Important:'));
|
|
331
|
+
console.log(chalk.dim(` - Your old installation has been backed up to: ${path.basename(backupDir)}`));
|
|
332
|
+
console.log(chalk.dim(` - If you had custom agents or configurations, copy them from:`));
|
|
333
|
+
console.log(chalk.dim(` ${path.basename(backupDir)}/_cfg/`));
|
|
334
|
+
console.log(chalk.dim(` - To the new location:`));
|
|
335
|
+
console.log(chalk.dim(` ${bmadFolderName}/_cfg/`));
|
|
336
|
+
console.log('');
|
|
337
|
+
|
|
338
|
+
spinner.start('Starting fresh installation...');
|
|
339
|
+
}
|
|
340
|
+
|
|
208
341
|
// Create a project directory if it doesn't exist (user already confirmed)
|
|
209
342
|
if (!(await fs.pathExists(projectDir))) {
|
|
210
343
|
spinner.text = 'Creating installation directory...';
|
|
@@ -225,7 +358,7 @@ class Installer {
|
|
|
225
358
|
}
|
|
226
359
|
}
|
|
227
360
|
|
|
228
|
-
const bmadDir = path.join(projectDir,
|
|
361
|
+
const bmadDir = path.join(projectDir, bmadFolderName);
|
|
229
362
|
|
|
230
363
|
// Check existing installation
|
|
231
364
|
spinner.text = 'Checking for existing installation...';
|
|
@@ -429,7 +562,12 @@ class Installer {
|
|
|
429
562
|
config.skipIde = toolSelection.skipIde;
|
|
430
563
|
const ideConfigurations = toolSelection.configurations;
|
|
431
564
|
|
|
432
|
-
spinner.
|
|
565
|
+
// Check if spinner is already running (e.g., from folder name change scenario)
|
|
566
|
+
if (spinner.isSpinning) {
|
|
567
|
+
spinner.text = 'Continuing installation...';
|
|
568
|
+
} else {
|
|
569
|
+
spinner.start('Continuing installation...');
|
|
570
|
+
}
|
|
433
571
|
|
|
434
572
|
// Create bmad directory structure
|
|
435
573
|
spinner.text = 'Creating directory structure...';
|
|
@@ -702,6 +840,15 @@ class Installer {
|
|
|
702
840
|
console.log(chalk.dim('Review the .bak files to see your changes and merge if needed.\n'));
|
|
703
841
|
}
|
|
704
842
|
|
|
843
|
+
// Reinstall custom agents from _cfg/custom/agents/ sources
|
|
844
|
+
const customAgentResults = await this.reinstallCustomAgents(projectDir, bmadDir);
|
|
845
|
+
if (customAgentResults.count > 0) {
|
|
846
|
+
console.log(chalk.green(`\n✓ Reinstalled ${customAgentResults.count} custom agent${customAgentResults.count > 1 ? 's' : ''}`));
|
|
847
|
+
for (const agent of customAgentResults.agents) {
|
|
848
|
+
console.log(chalk.dim(` - ${agent}`));
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
|
|
705
852
|
// Display completion message
|
|
706
853
|
const { UI } = require('../../../lib/ui');
|
|
707
854
|
const ui = new UI();
|
|
@@ -726,7 +873,8 @@ class Installer {
|
|
|
726
873
|
const spinner = ora('Checking installation...').start();
|
|
727
874
|
|
|
728
875
|
try {
|
|
729
|
-
const
|
|
876
|
+
const projectDir = path.resolve(config.directory);
|
|
877
|
+
const bmadDir = await this.findBmadDir(projectDir);
|
|
730
878
|
const existingInstall = await this.detector.detect(bmadDir);
|
|
731
879
|
|
|
732
880
|
if (!existingInstall.installed) {
|
|
@@ -786,7 +934,8 @@ class Installer {
|
|
|
786
934
|
* Get installation status
|
|
787
935
|
*/
|
|
788
936
|
async getStatus(directory) {
|
|
789
|
-
const
|
|
937
|
+
const projectDir = path.resolve(directory);
|
|
938
|
+
const bmadDir = await this.findBmadDir(projectDir);
|
|
790
939
|
return await this.detector.detect(bmadDir);
|
|
791
940
|
}
|
|
792
941
|
|
|
@@ -801,14 +950,15 @@ class Installer {
|
|
|
801
950
|
* Uninstall BMAD
|
|
802
951
|
*/
|
|
803
952
|
async uninstall(directory) {
|
|
804
|
-
const
|
|
953
|
+
const projectDir = path.resolve(directory);
|
|
954
|
+
const bmadDir = await this.findBmadDir(projectDir);
|
|
805
955
|
|
|
806
956
|
if (await fs.pathExists(bmadDir)) {
|
|
807
957
|
await fs.remove(bmadDir);
|
|
808
958
|
}
|
|
809
959
|
|
|
810
960
|
// Clean up IDE configurations
|
|
811
|
-
await this.ideManager.cleanup(
|
|
961
|
+
await this.ideManager.cleanup(projectDir);
|
|
812
962
|
|
|
813
963
|
return { success: true };
|
|
814
964
|
}
|
|
@@ -906,8 +1056,9 @@ class Installer {
|
|
|
906
1056
|
}
|
|
907
1057
|
}
|
|
908
1058
|
|
|
909
|
-
// Write the clean config file
|
|
910
|
-
|
|
1059
|
+
// Write the clean config file with POSIX-compliant final newline
|
|
1060
|
+
const content = header + yamlContent;
|
|
1061
|
+
await fs.writeFile(configPath, content.endsWith('\n') ? content : content + '\n', 'utf8');
|
|
911
1062
|
|
|
912
1063
|
// Track the config file in installedFiles
|
|
913
1064
|
this.installedFiles.push(configPath);
|
|
@@ -985,7 +1136,7 @@ class Installer {
|
|
|
985
1136
|
const targetPath = path.join(agentsDir, fileName);
|
|
986
1137
|
|
|
987
1138
|
if (await fs.pathExists(sourcePath)) {
|
|
988
|
-
await
|
|
1139
|
+
await this.copyFileWithPlaceholderReplacement(sourcePath, targetPath, this.bmadFolderName || 'bmad');
|
|
989
1140
|
this.installedFiles.push(targetPath);
|
|
990
1141
|
}
|
|
991
1142
|
}
|
|
@@ -1001,7 +1152,7 @@ class Installer {
|
|
|
1001
1152
|
const targetPath = path.join(tasksDir, fileName);
|
|
1002
1153
|
|
|
1003
1154
|
if (await fs.pathExists(sourcePath)) {
|
|
1004
|
-
await
|
|
1155
|
+
await this.copyFileWithPlaceholderReplacement(sourcePath, targetPath, this.bmadFolderName || 'bmad');
|
|
1005
1156
|
this.installedFiles.push(targetPath);
|
|
1006
1157
|
}
|
|
1007
1158
|
}
|
|
@@ -1017,7 +1168,7 @@ class Installer {
|
|
|
1017
1168
|
const targetPath = path.join(toolsDir, fileName);
|
|
1018
1169
|
|
|
1019
1170
|
if (await fs.pathExists(sourcePath)) {
|
|
1020
|
-
await
|
|
1171
|
+
await this.copyFileWithPlaceholderReplacement(sourcePath, targetPath, this.bmadFolderName || 'bmad');
|
|
1021
1172
|
this.installedFiles.push(targetPath);
|
|
1022
1173
|
}
|
|
1023
1174
|
}
|
|
@@ -1033,7 +1184,7 @@ class Installer {
|
|
|
1033
1184
|
const targetPath = path.join(templatesDir, fileName);
|
|
1034
1185
|
|
|
1035
1186
|
if (await fs.pathExists(sourcePath)) {
|
|
1036
|
-
await
|
|
1187
|
+
await this.copyFileWithPlaceholderReplacement(sourcePath, targetPath, this.bmadFolderName || 'bmad');
|
|
1037
1188
|
this.installedFiles.push(targetPath);
|
|
1038
1189
|
}
|
|
1039
1190
|
}
|
|
@@ -1048,7 +1199,7 @@ class Installer {
|
|
|
1048
1199
|
await fs.ensureDir(path.dirname(targetPath));
|
|
1049
1200
|
|
|
1050
1201
|
if (await fs.pathExists(dataPath)) {
|
|
1051
|
-
await
|
|
1202
|
+
await this.copyFileWithPlaceholderReplacement(dataPath, targetPath, this.bmadFolderName || 'bmad');
|
|
1052
1203
|
this.installedFiles.push(targetPath);
|
|
1053
1204
|
}
|
|
1054
1205
|
}
|
|
@@ -1108,9 +1259,8 @@ class Installer {
|
|
|
1108
1259
|
}
|
|
1109
1260
|
}
|
|
1110
1261
|
|
|
1111
|
-
// Copy the file
|
|
1112
|
-
await
|
|
1113
|
-
await fs.copy(sourceFile, targetFile, { overwrite: true });
|
|
1262
|
+
// Copy the file with placeholder replacement
|
|
1263
|
+
await this.copyFileWithPlaceholderReplacement(sourceFile, targetFile, this.bmadFolderName || 'bmad');
|
|
1114
1264
|
|
|
1115
1265
|
// Track the installed file
|
|
1116
1266
|
this.installedFiles.push(targetFile);
|
|
@@ -1181,7 +1331,7 @@ class Installer {
|
|
|
1181
1331
|
if (!(await fs.pathExists(customizePath))) {
|
|
1182
1332
|
const genericTemplatePath = getSourcePath('utility', 'templates', 'agent.customize.template.yaml');
|
|
1183
1333
|
if (await fs.pathExists(genericTemplatePath)) {
|
|
1184
|
-
await
|
|
1334
|
+
await this.copyFileWithPlaceholderReplacement(genericTemplatePath, customizePath, this.bmadFolderName || 'bmad');
|
|
1185
1335
|
console.log(chalk.dim(` Created customize: ${moduleName}-${agentName}.customize.yaml`));
|
|
1186
1336
|
}
|
|
1187
1337
|
}
|
|
@@ -1195,8 +1345,9 @@ class Installer {
|
|
|
1195
1345
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1196
1346
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1197
1347
|
|
|
1198
|
-
// Write the built .md file to bmad/{module}/agents/
|
|
1199
|
-
|
|
1348
|
+
// Write the built .md file to bmad/{module}/agents/ with POSIX-compliant final newline
|
|
1349
|
+
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1350
|
+
await fs.writeFile(mdPath, content, 'utf8');
|
|
1200
1351
|
this.installedFiles.push(mdPath);
|
|
1201
1352
|
|
|
1202
1353
|
// Remove the source YAML file - we can regenerate from installer source if needed
|
|
@@ -1213,7 +1364,9 @@ class Installer {
|
|
|
1213
1364
|
if (content.includes('<agent') && !content.includes('<activation')) {
|
|
1214
1365
|
// Inject the activation block using XML handler
|
|
1215
1366
|
content = this.xmlHandler.injectActivationSimple(content);
|
|
1216
|
-
|
|
1367
|
+
// Ensure POSIX-compliant final newline
|
|
1368
|
+
const finalContent = content.endsWith('\n') ? content : content + '\n';
|
|
1369
|
+
await fs.writeFile(agentPath, finalContent, 'utf8');
|
|
1217
1370
|
}
|
|
1218
1371
|
}
|
|
1219
1372
|
}
|
|
@@ -1294,8 +1447,9 @@ class Installer {
|
|
|
1294
1447
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1295
1448
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1296
1449
|
|
|
1297
|
-
// Write the built .md file
|
|
1298
|
-
|
|
1450
|
+
// Write the built .md file with POSIX-compliant final newline
|
|
1451
|
+
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1452
|
+
await fs.writeFile(targetMdPath, content, 'utf8');
|
|
1299
1453
|
|
|
1300
1454
|
// Display result
|
|
1301
1455
|
if (customizedFields.length > 0) {
|
|
@@ -1387,8 +1541,9 @@ class Installer {
|
|
|
1387
1541
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1388
1542
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1389
1543
|
|
|
1390
|
-
// Write the rebuilt .md file
|
|
1391
|
-
|
|
1544
|
+
// Write the rebuilt .md file with POSIX-compliant final newline
|
|
1545
|
+
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1546
|
+
await fs.writeFile(targetMdPath, content, 'utf8');
|
|
1392
1547
|
|
|
1393
1548
|
// Display result with customizations if any
|
|
1394
1549
|
if (customizedFields.length > 0) {
|
|
@@ -1411,7 +1566,7 @@ class Installer {
|
|
|
1411
1566
|
|
|
1412
1567
|
try {
|
|
1413
1568
|
const projectDir = path.resolve(config.directory);
|
|
1414
|
-
const bmadDir =
|
|
1569
|
+
const bmadDir = await this.findBmadDir(projectDir);
|
|
1415
1570
|
|
|
1416
1571
|
// Check if bmad directory exists
|
|
1417
1572
|
if (!(await fs.pathExists(bmadDir))) {
|
|
@@ -1486,26 +1641,33 @@ class Installer {
|
|
|
1486
1641
|
});
|
|
1487
1642
|
spinner.succeed('Manifests regenerated');
|
|
1488
1643
|
|
|
1489
|
-
//
|
|
1490
|
-
|
|
1491
|
-
// Note: UI lives in tools/cli/lib/ui.js; from installers/lib/core use '../../../lib/ui'
|
|
1492
|
-
const { UI } = require('../../../lib/ui');
|
|
1493
|
-
const ui = new UI();
|
|
1494
|
-
const toolConfig = await ui.promptToolSelection(projectDir, []);
|
|
1495
|
-
|
|
1496
|
-
if (!toolConfig.skipIde && toolConfig.ides && toolConfig.ides.length > 0) {
|
|
1644
|
+
// Update IDE configurations using the existing IDE list from manifest
|
|
1645
|
+
if (existingIdes && existingIdes.length > 0) {
|
|
1497
1646
|
spinner.start('Updating IDE configurations...');
|
|
1498
1647
|
|
|
1499
|
-
for (const ide of
|
|
1648
|
+
for (const ide of existingIdes) {
|
|
1500
1649
|
spinner.text = `Updating ${ide}...`;
|
|
1650
|
+
|
|
1651
|
+
// Stop spinner before IDE setup to prevent blocking any potential prompts
|
|
1652
|
+
// However, we pass _alreadyConfigured to skip all prompts during compile
|
|
1653
|
+
spinner.stop();
|
|
1654
|
+
|
|
1501
1655
|
await this.ideManager.setup(ide, projectDir, bmadDir, {
|
|
1502
1656
|
selectedModules: installedModules,
|
|
1503
1657
|
skipModuleInstall: true, // Skip module installation, just update IDE files
|
|
1504
1658
|
verbose: config.verbose,
|
|
1659
|
+
preCollectedConfig: { _alreadyConfigured: true }, // Skip all interactive prompts during compile
|
|
1505
1660
|
});
|
|
1661
|
+
|
|
1662
|
+
// Restart spinner for next IDE
|
|
1663
|
+
if (existingIdes.indexOf(ide) < existingIdes.length - 1) {
|
|
1664
|
+
spinner.start('Updating IDE configurations...');
|
|
1665
|
+
}
|
|
1506
1666
|
}
|
|
1507
1667
|
|
|
1508
|
-
|
|
1668
|
+
console.log(chalk.green('✓ IDE configurations updated'));
|
|
1669
|
+
} else {
|
|
1670
|
+
console.log(chalk.yellow('⚠️ No IDEs configured. Skipping IDE update.'));
|
|
1509
1671
|
}
|
|
1510
1672
|
|
|
1511
1673
|
return { agentCount, taskCount };
|
|
@@ -1542,7 +1704,7 @@ class Installer {
|
|
|
1542
1704
|
|
|
1543
1705
|
try {
|
|
1544
1706
|
const projectDir = path.resolve(config.directory);
|
|
1545
|
-
const bmadDir =
|
|
1707
|
+
const bmadDir = await this.findBmadDir(projectDir);
|
|
1546
1708
|
|
|
1547
1709
|
// Check if bmad directory exists
|
|
1548
1710
|
if (!(await fs.pathExists(bmadDir))) {
|
|
@@ -1605,8 +1767,19 @@ class Installer {
|
|
|
1605
1767
|
lastModified: new Date().toISOString(),
|
|
1606
1768
|
};
|
|
1607
1769
|
|
|
1608
|
-
//
|
|
1609
|
-
|
|
1770
|
+
// Check if bmad_folder has changed
|
|
1771
|
+
const existingBmadFolderName = path.basename(bmadDir);
|
|
1772
|
+
const newBmadFolderName = this.configCollector.collectedConfig.core?.bmad_folder || existingBmadFolderName;
|
|
1773
|
+
|
|
1774
|
+
if (existingBmadFolderName === newBmadFolderName) {
|
|
1775
|
+
// Normal quick update - start the spinner
|
|
1776
|
+
spinner.start('Updating BMAD installation...');
|
|
1777
|
+
} else {
|
|
1778
|
+
// Folder name has changed - stop spinner and let install() handle it
|
|
1779
|
+
spinner.stop();
|
|
1780
|
+
console.log(chalk.yellow(`\n⚠️ Folder name will change: ${existingBmadFolderName} → ${newBmadFolderName}`));
|
|
1781
|
+
console.log(chalk.yellow('The installer will handle the folder migration.\n'));
|
|
1782
|
+
}
|
|
1610
1783
|
|
|
1611
1784
|
// Build the config object for the installer
|
|
1612
1785
|
const installConfig = {
|
|
@@ -1625,7 +1798,11 @@ class Installer {
|
|
|
1625
1798
|
// Call the standard install method
|
|
1626
1799
|
const result = await this.install(installConfig);
|
|
1627
1800
|
|
|
1628
|
-
spinner
|
|
1801
|
+
// Only succeed the spinner if it's still spinning
|
|
1802
|
+
// (install method might have stopped it if folder name changed)
|
|
1803
|
+
if (spinner.isSpinning) {
|
|
1804
|
+
spinner.succeed('Quick update complete!');
|
|
1805
|
+
}
|
|
1629
1806
|
|
|
1630
1807
|
return {
|
|
1631
1808
|
success: true,
|
|
@@ -2005,6 +2182,11 @@ class Installer {
|
|
|
2005
2182
|
|
|
2006
2183
|
configContent += processedTemplate;
|
|
2007
2184
|
|
|
2185
|
+
// Ensure POSIX-compliant final newline
|
|
2186
|
+
if (!configContent.endsWith('\n')) {
|
|
2187
|
+
configContent += '\n';
|
|
2188
|
+
}
|
|
2189
|
+
|
|
2008
2190
|
await fs.writeFile(configPath, configContent, 'utf8');
|
|
2009
2191
|
this.installedFiles.push(configPath); // Track agent config files
|
|
2010
2192
|
createdCount++;
|
|
@@ -2072,6 +2254,116 @@ class Installer {
|
|
|
2072
2254
|
return nodes;
|
|
2073
2255
|
}
|
|
2074
2256
|
|
|
2257
|
+
/**
|
|
2258
|
+
* Reinstall custom agents from _cfg/custom/agents/ sources
|
|
2259
|
+
* This preserves custom agents across quick updates/reinstalls
|
|
2260
|
+
* @param {string} projectDir - Project directory
|
|
2261
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
2262
|
+
* @returns {Object} Result with count and agent names
|
|
2263
|
+
*/
|
|
2264
|
+
async reinstallCustomAgents(projectDir, bmadDir) {
|
|
2265
|
+
const customAgentsCfgDir = path.join(bmadDir, '_cfg', 'custom', 'agents');
|
|
2266
|
+
const results = { count: 0, agents: [] };
|
|
2267
|
+
|
|
2268
|
+
if (!(await fs.pathExists(customAgentsCfgDir))) {
|
|
2269
|
+
return results;
|
|
2270
|
+
}
|
|
2271
|
+
|
|
2272
|
+
try {
|
|
2273
|
+
const {
|
|
2274
|
+
discoverAgents,
|
|
2275
|
+
loadAgentConfig,
|
|
2276
|
+
extractManifestData,
|
|
2277
|
+
addToManifest,
|
|
2278
|
+
createIdeSlashCommands,
|
|
2279
|
+
updateManifestYaml,
|
|
2280
|
+
} = require('../../../lib/agent/installer');
|
|
2281
|
+
const { compileAgent } = require('../../../lib/agent/compiler');
|
|
2282
|
+
|
|
2283
|
+
// Discover custom agents in _cfg/custom/agents/
|
|
2284
|
+
const agents = discoverAgents(customAgentsCfgDir);
|
|
2285
|
+
|
|
2286
|
+
if (agents.length === 0) {
|
|
2287
|
+
return results;
|
|
2288
|
+
}
|
|
2289
|
+
|
|
2290
|
+
const customAgentsDir = path.join(bmadDir, 'custom', 'agents');
|
|
2291
|
+
await fs.ensureDir(customAgentsDir);
|
|
2292
|
+
|
|
2293
|
+
const manifestFile = path.join(bmadDir, '_cfg', 'agent-manifest.csv');
|
|
2294
|
+
const manifestYamlFile = path.join(bmadDir, '_cfg', 'manifest.yaml');
|
|
2295
|
+
|
|
2296
|
+
for (const agent of agents) {
|
|
2297
|
+
try {
|
|
2298
|
+
const agentConfig = loadAgentConfig(agent.yamlFile);
|
|
2299
|
+
const finalAgentName = agent.name; // Already named correctly from save
|
|
2300
|
+
|
|
2301
|
+
// Determine agent type from the name (e.g., "fred-commit-poet" → "commit-poet")
|
|
2302
|
+
let agentType = finalAgentName;
|
|
2303
|
+
const parts = finalAgentName.split('-');
|
|
2304
|
+
if (parts.length >= 2) {
|
|
2305
|
+
// Try to extract type (last part or last two parts)
|
|
2306
|
+
// For "fred-commit-poet", we want "commit-poet"
|
|
2307
|
+
// This is heuristic - could be improved with metadata storage
|
|
2308
|
+
agentType = parts.slice(-2).join('-'); // Take last 2 parts as type
|
|
2309
|
+
}
|
|
2310
|
+
|
|
2311
|
+
// Create target directory
|
|
2312
|
+
const agentTargetDir = path.join(customAgentsDir, finalAgentName);
|
|
2313
|
+
await fs.ensureDir(agentTargetDir);
|
|
2314
|
+
|
|
2315
|
+
// Calculate paths
|
|
2316
|
+
const compiledFileName = `${finalAgentName}.md`;
|
|
2317
|
+
const compiledPath = path.join(agentTargetDir, compiledFileName);
|
|
2318
|
+
const relativePath = path.relative(projectDir, compiledPath);
|
|
2319
|
+
|
|
2320
|
+
// Compile with embedded defaults (answers are already in defaults section)
|
|
2321
|
+
const { xml, metadata } = compileAgent(
|
|
2322
|
+
await fs.readFile(agent.yamlFile, 'utf8'),
|
|
2323
|
+
agentConfig.defaults || {},
|
|
2324
|
+
finalAgentName,
|
|
2325
|
+
relativePath,
|
|
2326
|
+
);
|
|
2327
|
+
|
|
2328
|
+
// Write compiled agent
|
|
2329
|
+
await fs.writeFile(compiledPath, xml, 'utf8');
|
|
2330
|
+
|
|
2331
|
+
// Copy sidecar files if expert agent
|
|
2332
|
+
if (agent.hasSidecar && agent.type === 'expert') {
|
|
2333
|
+
const { copySidecarFiles } = require('../../../lib/agent/installer');
|
|
2334
|
+
copySidecarFiles(agent.path, agentTargetDir, agent.yamlFile);
|
|
2335
|
+
}
|
|
2336
|
+
|
|
2337
|
+
// Update manifest CSV
|
|
2338
|
+
if (await fs.pathExists(manifestFile)) {
|
|
2339
|
+
const manifestData = extractManifestData(xml, { ...metadata, name: finalAgentName }, relativePath, 'custom');
|
|
2340
|
+
manifestData.name = finalAgentName;
|
|
2341
|
+
manifestData.displayName = metadata.name || finalAgentName;
|
|
2342
|
+
manifestData.path = relativePath;
|
|
2343
|
+
addToManifest(manifestFile, manifestData);
|
|
2344
|
+
}
|
|
2345
|
+
|
|
2346
|
+
// Create IDE slash commands (async function)
|
|
2347
|
+
await createIdeSlashCommands(projectDir, finalAgentName, relativePath, metadata);
|
|
2348
|
+
|
|
2349
|
+
// Update manifest.yaml
|
|
2350
|
+
if (await fs.pathExists(manifestYamlFile)) {
|
|
2351
|
+
updateManifestYaml(manifestYamlFile, finalAgentName, agentType);
|
|
2352
|
+
}
|
|
2353
|
+
|
|
2354
|
+
results.count++;
|
|
2355
|
+
results.agents.push(finalAgentName);
|
|
2356
|
+
} catch (agentError) {
|
|
2357
|
+
console.log(chalk.yellow(` ⚠️ Failed to reinstall ${agent.name}: ${agentError.message}`));
|
|
2358
|
+
}
|
|
2359
|
+
}
|
|
2360
|
+
} catch (error) {
|
|
2361
|
+
console.log(chalk.yellow(` ⚠️ Error reinstalling custom agents: ${error.message}`));
|
|
2362
|
+
}
|
|
2363
|
+
|
|
2364
|
+
return results;
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2075
2367
|
/**
|
|
2076
2368
|
* Copy IDE-specific documentation to BMAD docs
|
|
2077
2369
|
* @param {Array} ides - List of selected IDEs
|
|
@@ -2086,7 +2378,7 @@ class Installer {
|
|
|
2086
2378
|
const targetDocPath = path.join(docsDir, `${ide}-instructions.md`);
|
|
2087
2379
|
|
|
2088
2380
|
if (await fs.pathExists(sourceDocPath)) {
|
|
2089
|
-
await
|
|
2381
|
+
await this.copyFileWithPlaceholderReplacement(sourceDocPath, targetDocPath, this.bmadFolderName || 'bmad');
|
|
2090
2382
|
}
|
|
2091
2383
|
}
|
|
2092
2384
|
}
|