bmad-method 6.0.0-alpha.7 → 6.0.0-alpha.8
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/.bmad/_cfg/agent-manifest.csv +11 -0
- package/.bmad/_cfg/agents/bmm-architect.customize.yaml +42 -0
- package/.bmad/_cfg/agents/bmm-dev.customize.yaml +42 -0
- package/.bmad/_cfg/agents/bmm-pm.customize.yaml +42 -0
- package/.bmad/_cfg/agents/bmm-sm.customize.yaml +42 -0
- package/.bmad/_cfg/agents/bmm-tea.customize.yaml +42 -0
- package/.bmad/_cfg/agents/bmm-tech-writer.customize.yaml +42 -0
- package/.bmad/_cfg/agents/bmm-ux-designer.customize.yaml +42 -0
- package/.bmad/_cfg/agents/core-bmad-master.customize.yaml +42 -0
- package/.bmad/_cfg/files-manifest.csv +289 -0
- package/.bmad/_cfg/ides/claude-code.yaml +7 -0
- package/.bmad/_cfg/manifest.yaml +10 -0
- package/.bmad/_cfg/task-manifest.csv +6 -0
- package/.bmad/_cfg/tool-manifest.csv +2 -0
- package/.bmad/_cfg/workflow-manifest.csv +44 -0
- package/{bmad → .bmad}/bmb/agents/bmad-builder.md +12 -12
- package/.bmad/bmb/config.yaml +16 -0
- package/{bmad → .bmad}/bmb/workflows/audit-workflow/checklist.md +2 -2
- package/{bmad → .bmad}/bmb/workflows/audit-workflow/instructions.md +5 -5
- package/{bmad → .bmad}/bmb/workflows/audit-workflow/workflow.yaml +2 -2
- package/{bmad → .bmad}/bmb/workflows/convert-legacy/README.md +5 -5
- package/{bmad → .bmad}/bmb/workflows/convert-legacy/checklist.md +2 -2
- package/{bmad → .bmad}/bmb/workflows/convert-legacy/instructions.md +17 -17
- package/{bmad → .bmad}/bmb/workflows/convert-legacy/workflow.yaml +6 -6
- package/{bmad → .bmad}/bmb/workflows/create-agent/README.md +5 -5
- package/{bmad → .bmad}/bmb/workflows/create-agent/agent-architecture.md +15 -15
- package/{bmad → .bmad}/bmb/workflows/create-agent/agent-command-patterns.md +28 -28
- package/{bmad → .bmad}/bmb/workflows/create-agent/agent-types.md +15 -15
- package/{bmad → .bmad}/bmb/workflows/create-agent/checklist.md +3 -3
- package/{bmad → .bmad}/bmb/workflows/create-agent/instructions.md +11 -11
- package/{bmad → .bmad}/bmb/workflows/create-agent/workflow.yaml +6 -6
- package/{bmad → .bmad}/bmb/workflows/create-module/README.md +1 -1
- package/{bmad → .bmad}/bmb/workflows/create-module/checklist.md +1 -1
- package/{bmad → .bmad}/bmb/workflows/create-module/installer-templates/install-config.yaml +1 -1
- package/{bmad → .bmad}/bmb/workflows/create-module/instructions.md +7 -7
- package/{bmad → .bmad}/bmb/workflows/create-module/module-structure.md +4 -4
- package/{bmad → .bmad}/bmb/workflows/create-module/workflow.yaml +9 -9
- package/{bmad → .bmad}/bmb/workflows/create-workflow/README.md +4 -4
- package/{bmad → .bmad}/bmb/workflows/create-workflow/checklist.md +1 -1
- package/{bmad → .bmad}/bmb/workflows/create-workflow/instructions.md +29 -29
- package/{bmad → .bmad}/bmb/workflows/create-workflow/workflow-creation-guide.md +36 -36
- package/{bmad → .bmad}/bmb/workflows/create-workflow/workflow-template/instructions.md +2 -2
- package/{bmad → .bmad}/bmb/workflows/create-workflow/workflow-template/workflow.yaml +1 -1
- package/{bmad → .bmad}/bmb/workflows/create-workflow/workflow.yaml +5 -5
- package/{bmad → .bmad}/bmb/workflows/edit-agent/checklist.md +1 -1
- package/{bmad → .bmad}/bmb/workflows/edit-agent/instructions.md +2 -2
- package/{bmad → .bmad}/bmb/workflows/edit-agent/workflow.yaml +8 -8
- package/{bmad → .bmad}/bmb/workflows/edit-module/README.md +2 -2
- package/{bmad → .bmad}/bmb/workflows/edit-module/checklist.md +2 -2
- package/{bmad → .bmad}/bmb/workflows/edit-module/instructions.md +4 -4
- package/{bmad → .bmad}/bmb/workflows/edit-module/workflow.yaml +10 -10
- package/{bmad → .bmad}/bmb/workflows/edit-workflow/instructions.md +4 -4
- package/{bmad → .bmad}/bmb/workflows/edit-workflow/workflow.yaml +5 -5
- package/{bmad → .bmad}/bmb/workflows/module-brief/README.md +2 -2
- package/{bmad → .bmad}/bmb/workflows/module-brief/instructions.md +2 -2
- package/{bmad → .bmad}/bmb/workflows/module-brief/workflow.yaml +4 -4
- package/{bmad → .bmad}/bmb/workflows/redoc/README.md +5 -5
- package/{bmad → .bmad}/bmb/workflows/redoc/instructions.md +1 -1
- package/{bmad → .bmad}/bmb/workflows/redoc/workflow.yaml +1 -1
- package/.bmad/bmm/README.md +128 -0
- package/.bmad/bmm/agents/analyst.md +75 -0
- package/.bmad/bmm/agents/architect.md +80 -0
- package/.bmad/bmm/agents/dev.md +69 -0
- package/.bmad/bmm/agents/pm.md +84 -0
- package/.bmad/bmm/agents/sm.md +93 -0
- package/.bmad/bmm/agents/tea.md +80 -0
- package/.bmad/bmm/agents/tech-writer.md +90 -0
- package/.bmad/bmm/agents/ux-designer.md +79 -0
- package/.bmad/bmm/config.yaml +18 -0
- package/.bmad/bmm/docs/README.md +235 -0
- package/.bmad/bmm/docs/agents-guide.md +1056 -0
- package/.bmad/bmm/docs/brownfield-guide.md +754 -0
- package/.bmad/bmm/docs/enterprise-agentic-development.md +680 -0
- package/.bmad/bmm/docs/faq.md +587 -0
- package/.bmad/bmm/docs/glossary.md +320 -0
- package/.bmad/bmm/docs/party-mode.md +224 -0
- package/.bmad/bmm/docs/quick-spec-flow.md +652 -0
- package/.bmad/bmm/docs/quick-start.md +366 -0
- package/.bmad/bmm/docs/scale-adaptive-system.md +599 -0
- package/.bmad/bmm/docs/test-architecture.md +394 -0
- package/.bmad/bmm/docs/workflow-architecture-reference.md +371 -0
- package/.bmad/bmm/docs/workflow-document-project-reference.md +487 -0
- package/.bmad/bmm/docs/workflows-analysis.md +370 -0
- package/.bmad/bmm/docs/workflows-implementation.md +284 -0
- package/.bmad/bmm/docs/workflows-planning.md +601 -0
- package/.bmad/bmm/docs/workflows-solutioning.md +501 -0
- package/.bmad/bmm/tasks/daily-standup.xml +85 -0
- package/.bmad/bmm/teams/default-party.csv +19 -0
- package/.bmad/bmm/teams/team-fullstack.yaml +12 -0
- package/.bmad/bmm/testarch/knowledge/ci-burn-in.md +675 -0
- package/.bmad/bmm/testarch/knowledge/component-tdd.md +486 -0
- package/.bmad/bmm/testarch/knowledge/contract-testing.md +957 -0
- package/.bmad/bmm/testarch/knowledge/data-factories.md +500 -0
- package/.bmad/bmm/testarch/knowledge/email-auth.md +721 -0
- package/.bmad/bmm/testarch/knowledge/error-handling.md +725 -0
- package/.bmad/bmm/testarch/knowledge/feature-flags.md +750 -0
- package/.bmad/bmm/testarch/knowledge/fixture-architecture.md +401 -0
- package/.bmad/bmm/testarch/knowledge/network-first.md +486 -0
- package/.bmad/bmm/testarch/knowledge/nfr-criteria.md +670 -0
- package/.bmad/bmm/testarch/knowledge/playwright-config.md +730 -0
- package/.bmad/bmm/testarch/knowledge/probability-impact.md +601 -0
- package/.bmad/bmm/testarch/knowledge/risk-governance.md +615 -0
- package/.bmad/bmm/testarch/knowledge/selective-testing.md +732 -0
- package/.bmad/bmm/testarch/knowledge/selector-resilience.md +527 -0
- package/.bmad/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
- package/.bmad/bmm/testarch/knowledge/test-levels-framework.md +473 -0
- package/.bmad/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
- package/.bmad/bmm/testarch/knowledge/test-quality.md +664 -0
- package/.bmad/bmm/testarch/knowledge/timing-debugging.md +372 -0
- package/.bmad/bmm/testarch/knowledge/visual-debugging.md +524 -0
- package/.bmad/bmm/testarch/tea-index.csv +22 -0
- package/.bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +110 -0
- package/.bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +25 -0
- package/.bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +26 -0
- package/.bmad/bmm/workflows/1-analysis/domain-research/instructions.md +423 -0
- package/.bmad/bmm/workflows/1-analysis/domain-research/template.md +180 -0
- package/.bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +40 -0
- package/.bmad/bmm/workflows/1-analysis/product-brief/checklist.md +115 -0
- package/.bmad/bmm/workflows/1-analysis/product-brief/instructions.md +524 -0
- package/.bmad/bmm/workflows/1-analysis/product-brief/template.md +181 -0
- package/.bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +45 -0
- package/.bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +144 -0
- package/.bmad/bmm/workflows/1-analysis/research/checklist-technical.md +249 -0
- package/.bmad/bmm/workflows/1-analysis/research/checklist.md +299 -0
- package/.bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +114 -0
- package/.bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +439 -0
- package/.bmad/bmm/workflows/1-analysis/research/instructions-market.md +679 -0
- package/.bmad/bmm/workflows/1-analysis/research/instructions-router.md +133 -0
- package/.bmad/bmm/workflows/1-analysis/research/instructions-technical.md +538 -0
- package/.bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +94 -0
- package/.bmad/bmm/workflows/1-analysis/research/template-market.md +347 -0
- package/.bmad/bmm/workflows/1-analysis/research/template-technical.md +245 -0
- package/.bmad/bmm/workflows/1-analysis/research/workflow.yaml +44 -0
- package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +310 -0
- package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +1301 -0
- package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +145 -0
- package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +60 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +350 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +52 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +169 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +45 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +13 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +408 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +237 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +11 -0
- package/.bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +46 -0
- package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +214 -0
- package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +80 -0
- package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +200 -0
- package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +451 -0
- package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +1115 -0
- package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +181 -0
- package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +90 -0
- package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +60 -0
- package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +347 -0
- package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-template.md +103 -0
- package/.bmad/bmm/workflows/3-solutioning/architecture/checklist.md +244 -0
- package/.bmad/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +222 -0
- package/.bmad/bmm/workflows/3-solutioning/architecture/instructions.md +704 -0
- package/.bmad/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +13 -0
- package/.bmad/bmm/workflows/3-solutioning/architecture/workflow.yaml +68 -0
- package/.bmad/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +175 -0
- package/.bmad/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +305 -0
- package/.bmad/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +146 -0
- package/.bmad/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +189 -0
- package/.bmad/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +64 -0
- package/.bmad/bmm/workflows/4-implementation/code-review/backlog_template.md +12 -0
- package/.bmad/bmm/workflows/4-implementation/code-review/checklist.md +22 -0
- package/.bmad/bmm/workflows/4-implementation/code-review/instructions.md +420 -0
- package/.bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +65 -0
- package/.bmad/bmm/workflows/4-implementation/correct-course/checklist.md +279 -0
- package/.bmad/bmm/workflows/4-implementation/correct-course/instructions.md +201 -0
- package/.bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +43 -0
- package/.bmad/bmm/workflows/4-implementation/create-story/checklist.md +240 -0
- package/.bmad/bmm/workflows/4-implementation/create-story/instructions.md +283 -0
- package/.bmad/bmm/workflows/4-implementation/create-story/template.md +51 -0
- package/.bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +74 -0
- package/.bmad/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +367 -0
- package/.bmad/bmm/workflows/4-implementation/dev-story/checklist.md +38 -0
- package/.bmad/bmm/workflows/4-implementation/dev-story/instructions.md +262 -0
- package/.bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +26 -0
- package/.bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md +17 -0
- package/.bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md +189 -0
- package/.bmad/bmm/workflows/4-implementation/epic-tech-context/template.md +76 -0
- package/.bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +58 -0
- package/.bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1460 -0
- package/.bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +71 -0
- package/.bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
- package/.bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +238 -0
- package/.bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
- package/.bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -0
- package/.bmad/bmm/workflows/4-implementation/story-context/checklist.md +16 -0
- package/.bmad/bmm/workflows/4-implementation/story-context/context-template.xml +34 -0
- package/.bmad/bmm/workflows/4-implementation/story-context/instructions.md +234 -0
- package/.bmad/bmm/workflows/4-implementation/story-context/workflow.yaml +57 -0
- package/.bmad/bmm/workflows/4-implementation/story-done/instructions.md +111 -0
- package/.bmad/bmm/workflows/4-implementation/story-done/workflow.yaml +25 -0
- package/.bmad/bmm/workflows/4-implementation/story-ready/instructions.md +117 -0
- package/.bmad/bmm/workflows/4-implementation/story-ready/workflow.yaml +25 -0
- package/.bmad/bmm/workflows/document-project/checklist.md +245 -0
- package/.bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -0
- package/.bmad/bmm/workflows/document-project/instructions.md +222 -0
- package/.bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
- package/.bmad/bmm/workflows/document-project/templates/index-template.md +169 -0
- package/.bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
- package/.bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
- package/.bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
- package/.bmad/bmm/workflows/document-project/workflow.yaml +34 -0
- package/.bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
- package/.bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
- package/.bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
- package/.bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
- package/.bmad/bmm/workflows/techdoc/documentation-standards.md +262 -0
- package/.bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
- package/.bmad/bmm/workflows/testarch/atdd/checklist.md +373 -0
- package/.bmad/bmm/workflows/testarch/atdd/instructions.md +785 -0
- package/.bmad/bmm/workflows/testarch/atdd/workflow.yaml +52 -0
- package/.bmad/bmm/workflows/testarch/automate/checklist.md +580 -0
- package/.bmad/bmm/workflows/testarch/automate/instructions.md +1303 -0
- package/.bmad/bmm/workflows/testarch/automate/workflow.yaml +61 -0
- package/.bmad/bmm/workflows/testarch/ci/checklist.md +246 -0
- package/.bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +165 -0
- package/.bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +128 -0
- package/.bmad/bmm/workflows/testarch/ci/instructions.md +517 -0
- package/.bmad/bmm/workflows/testarch/ci/workflow.yaml +53 -0
- package/.bmad/bmm/workflows/testarch/framework/checklist.md +321 -0
- package/.bmad/bmm/workflows/testarch/framework/instructions.md +455 -0
- package/.bmad/bmm/workflows/testarch/framework/workflow.yaml +53 -0
- package/.bmad/bmm/workflows/testarch/nfr-assess/checklist.md +405 -0
- package/.bmad/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
- package/.bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +443 -0
- package/.bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +56 -0
- package/.bmad/bmm/workflows/testarch/test-design/checklist.md +234 -0
- package/.bmad/bmm/workflows/testarch/test-design/instructions.md +621 -0
- package/.bmad/bmm/workflows/testarch/test-design/test-design-template.md +285 -0
- package/.bmad/bmm/workflows/testarch/test-design/workflow.yaml +52 -0
- package/.bmad/bmm/workflows/testarch/test-review/checklist.md +470 -0
- package/.bmad/bmm/workflows/testarch/test-review/instructions.md +608 -0
- package/.bmad/bmm/workflows/testarch/test-review/test-review-template.md +388 -0
- package/.bmad/bmm/workflows/testarch/test-review/workflow.yaml +53 -0
- package/.bmad/bmm/workflows/testarch/trace/checklist.md +654 -0
- package/.bmad/bmm/workflows/testarch/trace/instructions.md +1045 -0
- package/.bmad/bmm/workflows/testarch/trace/trace-template.md +673 -0
- package/.bmad/bmm/workflows/testarch/trace/workflow.yaml +66 -0
- package/.bmad/bmm/workflows/workflow-status/init/instructions.md +822 -0
- package/.bmad/bmm/workflows/workflow-status/init/workflow.yaml +27 -0
- package/.bmad/bmm/workflows/workflow-status/instructions.md +387 -0
- package/.bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +127 -0
- package/.bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +115 -0
- package/.bmad/bmm/workflows/workflow-status/paths/game-design.yaml +52 -0
- package/.bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +97 -0
- package/.bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +88 -0
- package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +58 -0
- package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +47 -0
- package/.bmad/bmm/workflows/workflow-status/project-levels.yaml +59 -0
- package/.bmad/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +49 -0
- package/.bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +31 -0
- package/.bmad/bmm/workflows/workflow-status/workflow.yaml +28 -0
- package/{bmad → .bmad}/core/agents/bmad-master.md +7 -7
- package/{bmad → .bmad}/core/agents/bmad-web-orchestrator.agent.xml +8 -17
- package/{bmad → .bmad}/core/config.yaml +4 -2
- package/{bmad → .bmad}/core/tasks/adv-elicit.xml +5 -3
- package/{bmad → .bmad}/core/tasks/index-docs.xml +1 -1
- package/{bmad → .bmad}/core/tasks/validate-workflow.xml +1 -1
- package/{bmad → .bmad}/core/tasks/workflow.xml +1 -1
- package/{bmad → .bmad}/core/tools/shard-doc.xml +1 -1
- package/{bmad → .bmad}/core/workflows/brainstorming/README.md +2 -2
- package/{bmad → .bmad}/core/workflows/brainstorming/instructions.md +3 -3
- package/{bmad → .bmad}/core/workflows/brainstorming/workflow.yaml +8 -8
- package/{bmad → .bmad}/core/workflows/party-mode/instructions.md +2 -7
- package/.bmad/core/workflows/party-mode/workflow.yaml +27 -0
- package/.claude/commands/bmad/bmb/agents/bmad-builder.md +12 -12
- package/.claude/commands/bmad/bmm/agents/analyst.md +75 -0
- package/.claude/commands/bmad/bmm/agents/architect.md +80 -0
- package/.claude/commands/bmad/bmm/agents/dev.md +69 -0
- package/.claude/commands/bmad/bmm/agents/pm.md +84 -0
- package/.claude/commands/bmad/bmm/agents/sm.md +93 -0
- package/.claude/commands/bmad/bmm/agents/tea.md +80 -0
- package/.claude/commands/bmad/bmm/agents/tech-writer.md +90 -0
- package/.claude/commands/bmad/bmm/agents/ux-designer.md +79 -0
- package/.claude/commands/bmad/bmm/workflows/architecture.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/code-review.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/correct-course.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/create-story.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/dev-story.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/document-project.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/domain-research.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/epic-tech-context.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/prd.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/product-brief.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/research.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/retrospective.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/solutioning-gate-check.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/story-context.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/story-done.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/story-ready.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/tech-spec.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/workflow-init.md +15 -0
- package/.claude/commands/bmad/bmm/workflows/workflow-status.md +15 -0
- package/.claude/commands/bmad/core/agents/bmad-master.md +7 -7
- package/.claude/commands/bmad/core/tasks/adv-elicit.md +9 -0
- package/.claude/settings.local.json +6 -12
- package/.vscode/settings.json +2 -1
- package/package.json +1 -1
- package/src/core/_module-installer/install-config.yaml +15 -9
- 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/tasks/adv-elicit.xml +5 -3
- package/src/core/tasks/index-docs.xml +1 -1
- package/src/core/tasks/validate-workflow.xml +1 -1
- package/src/core/tasks/workflow.xml +1 -1
- package/src/core/tools/shard-doc.xml +1 -1
- package/src/core/workflows/brainstorming/README.md +2 -2
- package/src/core/workflows/brainstorming/instructions.md +3 -3
- package/src/core/workflows/brainstorming/workflow.yaml +8 -8
- package/src/core/workflows/party-mode/instructions.md +2 -7
- package/src/core/workflows/party-mode/workflow.yaml +10 -6
- package/src/modules/bmb/_module-installer/install-config.yaml +9 -4
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +11 -10
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +2 -2
- package/src/modules/bmb/workflows/audit-workflow/instructions.md +5 -5
- 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 -6
- package/src/modules/bmb/workflows/create-agent/README.md +5 -5
- package/src/modules/bmb/workflows/create-agent/agent-architecture.md +15 -15
- package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +28 -28
- package/src/modules/bmb/workflows/create-agent/agent-types.md +15 -15
- package/src/modules/bmb/workflows/create-agent/checklist.md +3 -3
- package/src/modules/bmb/workflows/create-agent/instructions.md +11 -11
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +12 -12
- package/src/modules/bmb/workflows/create-module/README.md +1 -1
- package/src/modules/bmb/workflows/create-module/checklist.md +1 -1
- package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +1 -1
- package/src/modules/bmb/workflows/create-module/instructions.md +7 -7
- package/src/modules/bmb/workflows/create-module/module-structure.md +4 -4
- package/src/modules/bmb/workflows/create-module/workflow.yaml +9 -9
- 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 +29 -29
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +42 -42
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +2 -2
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +12 -12
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +5 -5
- package/src/modules/bmb/workflows/edit-agent/checklist.md +1 -1
- package/src/modules/bmb/workflows/edit-agent/instructions.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +8 -8
- 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 +4 -4
- package/src/modules/bmb/workflows/edit-module/workflow.yaml +10 -10
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +4 -4
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +5 -5
- package/src/modules/bmb/workflows/module-brief/README.md +2 -2
- package/src/modules/bmb/workflows/module-brief/instructions.md +2 -2
- package/src/modules/bmb/workflows/module-brief/workflow.yaml +4 -4
- package/src/modules/bmb/workflows/redoc/README.md +5 -5
- package/src/modules/bmb/workflows/redoc/instructions.md +1 -1
- package/src/modules/bmb/workflows/redoc/workflow.yaml +1 -1
- package/src/modules/bmgd/README.md +1 -1
- package/src/modules/bmgd/_module-installer/install-config.yaml +17 -16
- package/src/modules/bmgd/agents/game-architect.agent.yaml +15 -10
- package/src/modules/bmgd/agents/game-designer.agent.yaml +16 -11
- package/src/modules/bmgd/agents/game-dev.agent.yaml +18 -12
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +30 -25
- package/src/modules/bmgd/teams/default-party.csv +10 -0
- package/src/modules/bmgd/teams/team-gamedev.yaml +2 -0
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +9 -9
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +8 -8
- package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +8 -8
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
- package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +6 -6
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +6 -6
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +4 -4
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +4 -13
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +3 -3
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +3 -3
- package/src/modules/bmgd/workflows/4-production/dev-story/AUDIT-REPORT.md +3 -3
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +3 -3
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +4 -4
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +3 -3
- package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +1 -1
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +4 -4
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +3 -3
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +3 -3
- package/src/modules/bmm/_module-installer/install-config.yaml +10 -24
- package/src/modules/bmm/_module-installer/installer.js +2 -2
- package/src/modules/bmm/agents/analyst.agent.yaml +20 -15
- package/src/modules/bmm/agents/architect.agent.yaml +17 -12
- package/src/modules/bmm/agents/dev.agent.yaml +9 -12
- package/src/modules/bmm/agents/pm.agent.yaml +24 -23
- package/src/modules/bmm/agents/sm.agent.yaml +24 -19
- package/src/modules/bmm/agents/tea.agent.yaml +23 -17
- package/src/modules/bmm/agents/tech-writer.agent.yaml +14 -10
- package/src/modules/bmm/agents/ux-designer.agent.yaml +16 -11
- package/src/modules/bmm/docs/agents-guide.md +4 -4
- package/src/modules/bmm/docs/brownfield-guide.md +4 -4
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +1 -1
- package/src/modules/bmm/docs/party-mode.md +3 -3
- package/src/modules/bmm/docs/quick-start.md +1 -1
- package/src/modules/bmm/docs/test-architecture.md +1 -1
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/sub-modules/claude-code/README.md +1 -1
- package/src/modules/bmm/sub-modules/claude-code/injections.yaml +22 -22
- package/src/modules/bmm/tasks/daily-standup.xml +2 -2
- package/src/modules/bmm/teams/default-party.csv +19 -0
- package/src/modules/bmm/teams/team-fullstack.yaml +1 -0
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +8 -8
- package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +8 -8
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +9 -9
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +5 -5
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +4 -4
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +14 -14
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +10 -10
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +6 -6
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +5 -5
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +16 -16
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +5 -5
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +6 -6
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +12 -12
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +6 -6
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +19 -19
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +4 -4
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +38 -38
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +6 -23
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +38 -40
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +6 -19
- package/src/modules/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +3 -3
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +3 -3
- 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 +26 -28
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +6 -18
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +11 -11
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +8 -11
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +6 -15
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +5 -4
- 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 +8 -9
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +6 -14
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +4 -4
- package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +4 -4
- package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
- package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
- package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/trace/instructions.md +9 -9
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +28 -26
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +5 -4
- package/src/modules/bmm/workflows/workflow-status/instructions.md +5 -4
- package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
- package/src/modules/cis/README.md +1 -1
- 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/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 +1 -1
- package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
- package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
- package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
- package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
- package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
- 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/tools/cli/bundlers/web-bundler.js +85 -16
- package/tools/cli/commands/install.js +1 -4
- package/tools/cli/installers/lib/core/config-collector.js +201 -28
- package/tools/cli/installers/lib/core/detector.js +62 -7
- package/tools/cli/installers/lib/core/installer.js +158 -23
- package/tools/cli/installers/lib/core/manifest-generator.js +26 -115
- package/tools/cli/installers/lib/ide/_base-ide.js +57 -3
- package/tools/cli/installers/lib/ide/auggie.js +78 -224
- package/tools/cli/installers/lib/ide/claude-code.js +14 -22
- package/tools/cli/installers/lib/ide/cline.js +15 -18
- package/tools/cli/installers/lib/ide/codex.js +17 -48
- package/tools/cli/installers/lib/ide/crush.js +14 -50
- package/tools/cli/installers/lib/ide/cursor.js +51 -8
- package/tools/cli/installers/lib/ide/gemini.js +87 -37
- package/tools/cli/installers/lib/ide/github-copilot.js +47 -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 +15 -0
- package/tools/cli/installers/lib/ide/opencode.js +16 -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 +18 -8
- package/tools/cli/installers/lib/modules/manager.js +89 -17
- package/tools/cli/lib/cli-utils.js +52 -50
- package/tools/cli/lib/ui.js +15 -8
- package/tools/schema/agent.js +7 -3
- package/web-bundles/bmgd/agents/game-architect.xml +664 -0
- package/web-bundles/bmgd/agents/game-designer.xml +5489 -0
- package/web-bundles/bmgd/agents/game-dev.xml +595 -0
- package/web-bundles/bmgd/agents/game-scrum-master.xml +699 -0
- package/web-bundles/bmgd/teams/team-gamedev.xml +6588 -0
- package/web-bundles/bmm/agents/analyst.xml +424 -189
- package/web-bundles/bmm/agents/architect.xml +514 -183
- package/web-bundles/bmm/agents/dev.xml +185 -5
- package/web-bundles/bmm/agents/pm.xml +522 -193
- package/web-bundles/bmm/agents/sm.xml +636 -5
- package/web-bundles/bmm/agents/tea.xml +697 -4
- package/web-bundles/bmm/agents/tech-writer.xml +544 -4
- package/web-bundles/bmm/agents/ux-designer.xml +505 -31
- package/web-bundles/bmm/teams/team-fullstack.xml +1588 -1258
- package/web-bundles/cis/agents/brainstorming-coach.xml +1069 -0
- package/web-bundles/cis/agents/creative-problem-solver.xml +1060 -0
- package/web-bundles/cis/agents/design-thinking-coach.xml +955 -0
- package/web-bundles/cis/agents/innovation-strategist.xml +1108 -0
- package/web-bundles/cis/agents/storyteller.xml +598 -0
- package/web-bundles/cis/teams/creative-squad.xml +3449 -0
- package/bmad/_cfg/agent-manifest.csv +0 -5
- package/bmad/_cfg/files-manifest.csv +0 -82
- package/bmad/_cfg/ides/claude-code.yaml +0 -6
- package/bmad/_cfg/manifest.yaml +0 -11
- package/bmad/_cfg/task-manifest.csv +0 -13
- package/bmad/_cfg/tool-manifest.csv +0 -4
- package/bmad/_cfg/workflow-manifest.csv +0 -17
- package/bmad/bmb/config.yaml +0 -14
- package/bmad/core/workflows/party-mode/workflow.yaml +0 -23
- 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/test/fixtures/agent-schema/invalid/persona/principles-as-string.agent.yaml +0 -23
- /package/{bmad → .bmad}/_cfg/agents/bmb-bmad-builder.customize.yaml +0 -0
- /package/{bmad/_cfg/agents/core-bmad-master.customize.yaml → .bmad/_cfg/agents/bmm-analyst.customize.yaml} +0 -0
- /package/{bmad → .bmad}/bmb/README.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/audit-workflow/template.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/create-agent/brainstorm-context.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/create-agent/communication-styles.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/create-module/brainstorm-context.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/create-module/installer-templates/installer.js +0 -0
- /package/{bmad → .bmad}/bmb/workflows/create-workflow/brainstorm-context.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/create-workflow/workflow-template/template.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/edit-agent/README.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/edit-workflow/README.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/edit-workflow/checklist.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/module-brief/checklist.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/module-brief/template.md +0 -0
- /package/{bmad → .bmad}/bmb/workflows/redoc/checklist.md +0 -0
- /package/{bmad → .bmad}/core/tasks/adv-elicit-methods.csv +0 -0
- /package/{bmad → .bmad}/core/workflows/brainstorming/brain-methods.csv +0 -0
- /package/{bmad → .bmad}/core/workflows/brainstorming/template.md +0 -0
- /package/{bmad → .bmad}/docs/claude-code-instructions.md +0 -0
|
@@ -205,6 +205,18 @@ class WebBundler {
|
|
|
205
205
|
this.stats.warnings.push({ agent: agentName, warnings: dependencyWarnings });
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
+
// Check for module's default-party.csv and include it as agent manifest
|
|
209
|
+
const defaultPartyPath = path.join(this.modulesPath, moduleName, 'teams', 'default-party.csv');
|
|
210
|
+
if (await fs.pathExists(defaultPartyPath)) {
|
|
211
|
+
const partyContent = await fs.readFile(defaultPartyPath, 'utf8');
|
|
212
|
+
// Process any placeholders in the CSV content
|
|
213
|
+
const processedPartyContent = this.processProjectRootReferences(partyContent);
|
|
214
|
+
// Wrap as text to preserve raw CSV format in CDATA
|
|
215
|
+
const wrappedParty = this.wrapContentInXml(processedPartyContent, 'bmad/_cfg/agent-manifest.csv', 'text');
|
|
216
|
+
dependencies.set('bmad/_cfg/agent-manifest.csv', wrappedParty);
|
|
217
|
+
console.log(chalk.gray(` + Added party manifest from module default-party.csv`));
|
|
218
|
+
}
|
|
219
|
+
|
|
208
220
|
// Remove commands for skipped workflows from agent XML
|
|
209
221
|
if (skippedWorkflows.length > 0) {
|
|
210
222
|
agentXml = this.removeSkippedWorkflowCommands(agentXml, skippedWorkflows);
|
|
@@ -260,6 +272,24 @@ class WebBundler {
|
|
|
260
272
|
const allAgentXmls = [];
|
|
261
273
|
const warnings = [];
|
|
262
274
|
|
|
275
|
+
// Check if team has a party CSV file (agent manifest)
|
|
276
|
+
const hasPartyFile = teamConfig.party && teamConfig.party.endsWith('.csv');
|
|
277
|
+
if (hasPartyFile) {
|
|
278
|
+
// Load the party CSV and add it as bmad/_cfg/agent-manifest.csv
|
|
279
|
+
const partyPath = path.join(path.dirname(teamPath), teamConfig.party.replace(/^\.\//, ''));
|
|
280
|
+
if (await fs.pathExists(partyPath)) {
|
|
281
|
+
const partyContent = await fs.readFile(partyPath, 'utf8');
|
|
282
|
+
// Process any placeholders in the CSV content
|
|
283
|
+
const processedPartyContent = this.processProjectRootReferences(partyContent);
|
|
284
|
+
// Wrap as text/csv to preserve raw CSV format in CDATA
|
|
285
|
+
const wrappedParty = this.wrapContentInXml(processedPartyContent, 'bmad/_cfg/agent-manifest.csv', 'text');
|
|
286
|
+
dependencies.set('bmad/_cfg/agent-manifest.csv', wrappedParty);
|
|
287
|
+
console.log(chalk.gray(` + Added agent manifest from: ${teamConfig.party}`));
|
|
288
|
+
} else {
|
|
289
|
+
console.log(chalk.yellow(` ⚠ Party file not found: ${partyPath}`));
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
263
293
|
// 1. First, always add the bmad-web-orchestrator (XML file only, no transformation needed)
|
|
264
294
|
const orchestratorXmlPath = path.join(this.sourceDir, 'core', 'agents', 'bmad-web-orchestrator.agent.xml');
|
|
265
295
|
|
|
@@ -476,8 +506,9 @@ class WebBundler {
|
|
|
476
506
|
}
|
|
477
507
|
|
|
478
508
|
// Parse paths to extract module and workflow location
|
|
479
|
-
|
|
480
|
-
const
|
|
509
|
+
// Support both {project-root}/bmad/... and {project-root}/{bmad_folder}/... patterns
|
|
510
|
+
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
511
|
+
const installMatch = installWorkflowPath.match(/\{project-root\}\/(?:\{bmad_folder\}|bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
481
512
|
|
|
482
513
|
if (!sourceMatch || !installMatch) {
|
|
483
514
|
continue;
|
|
@@ -528,8 +559,9 @@ class WebBundler {
|
|
|
528
559
|
let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
|
|
529
560
|
|
|
530
561
|
// Replace config_source with new module reference
|
|
531
|
-
|
|
532
|
-
const
|
|
562
|
+
// Support both old format (bmad) and new format ({bmad_folder})
|
|
563
|
+
const configSourcePattern = /config_source:\s*["']?\{project-root\}\/(?:\{bmad_folder\}|bmad)\/[^/]+\/config\.yaml["']?/g;
|
|
564
|
+
const newConfigSource = `config_source: "{project-root}/{bmad_folder}/${newModuleName}/config.yaml"`;
|
|
533
565
|
|
|
534
566
|
const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
|
|
535
567
|
await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
|
|
@@ -651,7 +683,8 @@ class WebBundler {
|
|
|
651
683
|
/system-prompts="([^"]+)"/g,
|
|
652
684
|
/tools="([^"]+)"/g,
|
|
653
685
|
/knowledge="([^"]+)"/g,
|
|
654
|
-
/{project-root}\/([^"'\s<>]+)/g,
|
|
686
|
+
/{project-root}\/([^"'\s<>]+)/g, // Legacy {project-root} paths
|
|
687
|
+
/\bbmad\/([^"'\s<>]+)/g, // Direct bmad/ paths (after {bmad_folder} replacement)
|
|
655
688
|
];
|
|
656
689
|
|
|
657
690
|
for (const pattern of patterns) {
|
|
@@ -660,9 +693,16 @@ class WebBundler {
|
|
|
660
693
|
let filePath = match[1];
|
|
661
694
|
// Remove {project-root} prefix if present
|
|
662
695
|
filePath = filePath.replace(/^{project-root}\//, '');
|
|
696
|
+
// Remove {bmad_folder} prefix if present (should be rare, mostly replaced already)
|
|
697
|
+
filePath = filePath.replace(/^{bmad_folder}\//, 'bmad/');
|
|
698
|
+
|
|
699
|
+
// For bmad/ pattern, prepend 'bmad/' since it was captured without it
|
|
700
|
+
if (pattern.source.includes(String.raw`\bbmad\/`)) {
|
|
701
|
+
filePath = 'bmad/' + filePath;
|
|
702
|
+
}
|
|
663
703
|
|
|
664
704
|
// Skip obvious placeholder/example paths
|
|
665
|
-
if (filePath && !filePath.includes('path/to/') && !filePath.includes('example')) {
|
|
705
|
+
if (filePath && !filePath.includes('path/to/') && !filePath.includes('example') && !filePath.includes('...')) {
|
|
666
706
|
refs.add(filePath);
|
|
667
707
|
}
|
|
668
708
|
}
|
|
@@ -680,6 +720,8 @@ class WebBundler {
|
|
|
680
720
|
while ((match = pattern.exec(xml)) !== null) {
|
|
681
721
|
let workflowPath = match[1];
|
|
682
722
|
workflowPath = workflowPath.replace(/^{project-root}\//, '');
|
|
723
|
+
// Remove {bmad_folder} prefix if present and replace with bmad
|
|
724
|
+
workflowPath = workflowPath.replace(/^{bmad_folder}\//, 'bmad/');
|
|
683
725
|
|
|
684
726
|
// Skip obvious placeholder/example paths
|
|
685
727
|
if (workflowPath && workflowPath.endsWith('.yaml') && !workflowPath.includes('path/to/') && !workflowPath.includes('example')) {
|
|
@@ -725,6 +767,11 @@ class WebBundler {
|
|
|
725
767
|
* Process a file dependency recursively
|
|
726
768
|
*/
|
|
727
769
|
async processFileDependency(filePath, dependencies, processed, moduleName, warnings = []) {
|
|
770
|
+
// Skip workflow YAML files - they're handled by processWorkflowDependency
|
|
771
|
+
if (filePath.includes('/workflow') && filePath.endsWith('workflow.yaml')) {
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
|
|
728
775
|
// Skip if already processed
|
|
729
776
|
if (processed.has(filePath)) {
|
|
730
777
|
return;
|
|
@@ -766,7 +813,8 @@ class WebBundler {
|
|
|
766
813
|
const deps = depMatch[1].match(/['"]([^'"]+)['"]/g);
|
|
767
814
|
if (deps) {
|
|
768
815
|
for (const dep of deps) {
|
|
769
|
-
|
|
816
|
+
let depPath = dep.replaceAll(/['"]/g, '').replace(/^{project-root}\//, '');
|
|
817
|
+
depPath = depPath.replace(/^{bmad_folder}\//, 'bmad/');
|
|
770
818
|
if (depPath && !processed.has(depPath)) {
|
|
771
819
|
await this.processFileDependency(depPath, dependencies, processed, moduleName, warnings);
|
|
772
820
|
}
|
|
@@ -779,7 +827,8 @@ class WebBundler {
|
|
|
779
827
|
const templates = templateMatch[1].match(/['"]([^'"]+)['"]/g);
|
|
780
828
|
if (templates) {
|
|
781
829
|
for (const template of templates) {
|
|
782
|
-
|
|
830
|
+
let templatePath = template.replaceAll(/['"]/g, '').replace(/^{project-root}\//, '');
|
|
831
|
+
templatePath = templatePath.replace(/^{bmad_folder}\//, 'bmad/');
|
|
783
832
|
if (templatePath && !processed.has(templatePath)) {
|
|
784
833
|
await this.processFileDependency(templatePath, dependencies, processed, moduleName, warnings);
|
|
785
834
|
}
|
|
@@ -967,8 +1016,13 @@ class WebBundler {
|
|
|
967
1016
|
bundleYamlContent = yamlContent;
|
|
968
1017
|
}
|
|
969
1018
|
|
|
1019
|
+
// Process {project-root} and {bmad_folder} references in the YAML content
|
|
1020
|
+
bundleYamlContent = this.processProjectRootReferences(bundleYamlContent);
|
|
1021
|
+
|
|
970
1022
|
// Include the YAML file with only web_bundle content, wrapped in XML
|
|
971
|
-
|
|
1023
|
+
// Process the workflow path to create a clean ID
|
|
1024
|
+
let yamlId = workflowPath.replace(/^{project-root}\//, '');
|
|
1025
|
+
yamlId = yamlId.replace(/^{bmad_folder}\//, 'bmad/');
|
|
972
1026
|
const wrappedYaml = this.wrapContentInXml(bundleYamlContent, yamlId, 'yaml');
|
|
973
1027
|
dependencies.set(yamlId, wrappedYaml);
|
|
974
1028
|
|
|
@@ -985,7 +1039,11 @@ class WebBundler {
|
|
|
985
1039
|
const bundleFiles = workflowConfig.web_bundle.web_bundle_files;
|
|
986
1040
|
|
|
987
1041
|
for (const bundleFilePath of bundleFiles) {
|
|
988
|
-
if
|
|
1042
|
+
// Process the file path to create a clean ID for checking if already processed
|
|
1043
|
+
let cleanFilePath = bundleFilePath.replace(/^{project-root}\//, '');
|
|
1044
|
+
cleanFilePath = cleanFilePath.replace(/^{bmad_folder}\//, 'bmad/');
|
|
1045
|
+
|
|
1046
|
+
if (processed.has(cleanFilePath)) {
|
|
989
1047
|
continue;
|
|
990
1048
|
}
|
|
991
1049
|
|
|
@@ -1002,7 +1060,7 @@ class WebBundler {
|
|
|
1002
1060
|
await this.processWorkflowDependency(bundleFilePath, dependencies, processed, moduleName, warnings);
|
|
1003
1061
|
} else {
|
|
1004
1062
|
// Regular file - process normally
|
|
1005
|
-
processed.add(
|
|
1063
|
+
processed.add(cleanFilePath);
|
|
1006
1064
|
|
|
1007
1065
|
// Read the file content
|
|
1008
1066
|
let fileContent = await fs.readFile(bundleActualPath, 'utf8');
|
|
@@ -1012,8 +1070,8 @@ class WebBundler {
|
|
|
1012
1070
|
fileContent = this.processProjectRootReferences(fileContent);
|
|
1013
1071
|
|
|
1014
1072
|
// Wrap in XML with proper escaping
|
|
1015
|
-
const wrappedContent = this.wrapContentInXml(fileContent,
|
|
1016
|
-
dependencies.set(
|
|
1073
|
+
const wrappedContent = this.wrapContentInXml(fileContent, cleanFilePath, fileExt);
|
|
1074
|
+
dependencies.set(cleanFilePath, wrappedContent);
|
|
1017
1075
|
}
|
|
1018
1076
|
}
|
|
1019
1077
|
}
|
|
@@ -1039,7 +1097,9 @@ class WebBundler {
|
|
|
1039
1097
|
return;
|
|
1040
1098
|
}
|
|
1041
1099
|
|
|
1042
|
-
|
|
1100
|
+
let fileContent = await fs.readFile(actualPath, 'utf8');
|
|
1101
|
+
// Process {project-root} and {bmad_folder} references
|
|
1102
|
+
fileContent = this.processProjectRootReferences(fileContent);
|
|
1043
1103
|
const wrappedContent = this.wrapContentInXml(fileContent, coreWorkflowPath, 'xml');
|
|
1044
1104
|
dependencies.set(coreWorkflowPath, wrappedContent);
|
|
1045
1105
|
}
|
|
@@ -1063,7 +1123,9 @@ class WebBundler {
|
|
|
1063
1123
|
continue;
|
|
1064
1124
|
}
|
|
1065
1125
|
|
|
1066
|
-
|
|
1126
|
+
let fileContent = await fs.readFile(actualPath, 'utf8');
|
|
1127
|
+
// Process {project-root} and {bmad_folder} references
|
|
1128
|
+
fileContent = this.processProjectRootReferences(fileContent);
|
|
1067
1129
|
const fileExt = path.extname(actualPath).toLowerCase().replace('.', '');
|
|
1068
1130
|
const wrappedContent = this.wrapContentInXml(fileContent, filePath, fileExt);
|
|
1069
1131
|
dependencies.set(filePath, wrappedContent);
|
|
@@ -1096,6 +1158,8 @@ class WebBundler {
|
|
|
1096
1158
|
async processWildcardDependency(pattern, dependencies, processed, moduleName, warnings = []) {
|
|
1097
1159
|
// Remove {project-root} prefix
|
|
1098
1160
|
pattern = pattern.replace(/^{project-root}\//, '');
|
|
1161
|
+
// Replace {bmad_folder} with bmad
|
|
1162
|
+
pattern = pattern.replace(/^{bmad_folder}\//, 'bmad/');
|
|
1099
1163
|
|
|
1100
1164
|
// Get directory and file pattern
|
|
1101
1165
|
const lastSlash = pattern.lastIndexOf('/');
|
|
@@ -1163,6 +1227,9 @@ class WebBundler {
|
|
|
1163
1227
|
resolveFilePath(filePath, moduleName) {
|
|
1164
1228
|
// Remove {project-root} prefix
|
|
1165
1229
|
filePath = filePath.replace(/^{project-root}\//, '');
|
|
1230
|
+
// Replace {bmad_folder} with bmad
|
|
1231
|
+
filePath = filePath.replace(/^{bmad_folder}\//, 'bmad/');
|
|
1232
|
+
filePath = filePath.replace(/^{bmad_folder}$/, 'bmad');
|
|
1166
1233
|
|
|
1167
1234
|
// Check temp directory first for _cfg files
|
|
1168
1235
|
if (filePath.startsWith('bmad/_cfg/')) {
|
|
@@ -1229,13 +1296,15 @@ class WebBundler {
|
|
|
1229
1296
|
}
|
|
1230
1297
|
|
|
1231
1298
|
/**
|
|
1232
|
-
* Process and remove {project-root} references
|
|
1299
|
+
* Process and remove {project-root} references and replace {bmad_folder} with bmad
|
|
1233
1300
|
*/
|
|
1234
1301
|
processProjectRootReferences(content) {
|
|
1235
1302
|
// Remove {project-root}/ prefix (with slash)
|
|
1236
1303
|
content = content.replaceAll('{project-root}/', '');
|
|
1237
1304
|
// Also remove {project-root} without slash
|
|
1238
1305
|
content = content.replaceAll('{project-root}', '');
|
|
1306
|
+
// Replace {bmad_folder} with bmad
|
|
1307
|
+
content = content.replaceAll('{bmad_folder}', 'bmad');
|
|
1239
1308
|
return content;
|
|
1240
1309
|
}
|
|
1241
1310
|
|
|
@@ -56,10 +56,7 @@ module.exports = {
|
|
|
56
56
|
// Check if installation succeeded
|
|
57
57
|
if (result && result.success) {
|
|
58
58
|
console.log(chalk.green('\n✨ Installation complete!'));
|
|
59
|
-
console.log(
|
|
60
|
-
chalk.cyan('BMAD Core and Selected Modules have been installed to:'),
|
|
61
|
-
chalk.bold(result.path || path.resolve(config.directory, 'bmad')),
|
|
62
|
-
);
|
|
59
|
+
console.log(chalk.cyan('BMAD Core and Selected Modules have been installed to:'), chalk.bold(result.path));
|
|
63
60
|
console.log(chalk.yellow('\nThank you for helping test the early release version of the new BMad Core and BMad Method!'));
|
|
64
61
|
console.log(chalk.cyan('Stable Beta coming soon - please read the full readme.md and linked documentation to get started!'));
|
|
65
62
|
process.exit(0);
|
|
@@ -13,14 +13,56 @@ 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
|
+
|
|
16
51
|
/**
|
|
17
52
|
* Load existing config if it exists from module config files
|
|
18
53
|
* @param {string} projectDir - Target project directory
|
|
19
54
|
*/
|
|
20
55
|
async loadExistingConfig(projectDir) {
|
|
21
|
-
const bmadDir = path.join(projectDir, 'bmad');
|
|
22
56
|
this.existingConfig = {};
|
|
23
57
|
|
|
58
|
+
// Check if project directory exists first
|
|
59
|
+
if (!(await fs.pathExists(projectDir))) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Find the actual bmad directory (handles custom folder names)
|
|
64
|
+
const bmadDir = await this.findBmadDir(projectDir);
|
|
65
|
+
|
|
24
66
|
// Check if bmad directory exists
|
|
25
67
|
if (!(await fs.pathExists(bmadDir))) {
|
|
26
68
|
return false;
|
|
@@ -159,27 +201,25 @@ class ConfigCollector {
|
|
|
159
201
|
this.allAnswers[`${moduleName}_${key}`] = value;
|
|
160
202
|
}
|
|
161
203
|
}
|
|
204
|
+
// Show "no config" message for modules with no new questions
|
|
205
|
+
CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
162
206
|
return false; // No new fields
|
|
163
207
|
}
|
|
164
208
|
|
|
165
|
-
// If we have new fields,
|
|
209
|
+
// If we have new fields, build questions first
|
|
166
210
|
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
211
|
const questions = [];
|
|
174
212
|
for (const key of newKeys) {
|
|
175
213
|
const item = moduleConfig[key];
|
|
176
|
-
const question = await this.buildQuestion(moduleName, key, item);
|
|
214
|
+
const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
|
|
177
215
|
if (question) {
|
|
178
216
|
questions.push(question);
|
|
179
217
|
}
|
|
180
218
|
}
|
|
181
219
|
|
|
182
220
|
if (questions.length > 0) {
|
|
221
|
+
// Only show header if we actually have questions
|
|
222
|
+
CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
183
223
|
console.log(); // Line break before questions
|
|
184
224
|
const answers = await inquirer.prompt(questions);
|
|
185
225
|
|
|
@@ -206,6 +246,9 @@ class ConfigCollector {
|
|
|
206
246
|
}
|
|
207
247
|
this.collectedConfig[moduleName][originalKey] = result;
|
|
208
248
|
}
|
|
249
|
+
} else {
|
|
250
|
+
// New keys exist but no questions generated - show no config message
|
|
251
|
+
CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
209
252
|
}
|
|
210
253
|
}
|
|
211
254
|
|
|
@@ -325,12 +368,6 @@ class ConfigCollector {
|
|
|
325
368
|
return;
|
|
326
369
|
}
|
|
327
370
|
|
|
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
371
|
// Process each config item
|
|
335
372
|
const questions = [];
|
|
336
373
|
const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
|
|
@@ -343,13 +380,15 @@ class ConfigCollector {
|
|
|
343
380
|
continue;
|
|
344
381
|
}
|
|
345
382
|
|
|
346
|
-
const question = await this.buildQuestion(moduleName, key, item);
|
|
383
|
+
const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
|
|
347
384
|
if (question) {
|
|
348
385
|
questions.push(question);
|
|
349
386
|
}
|
|
350
387
|
}
|
|
351
388
|
|
|
389
|
+
// Display appropriate header based on whether there are questions
|
|
352
390
|
if (questions.length > 0) {
|
|
391
|
+
CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
353
392
|
console.log(); // Line break before questions
|
|
354
393
|
const answers = await inquirer.prompt(questions);
|
|
355
394
|
|
|
@@ -450,20 +489,68 @@ class ConfigCollector {
|
|
|
450
489
|
this.collectedConfig[moduleName][originalKey] = result;
|
|
451
490
|
}
|
|
452
491
|
|
|
453
|
-
//
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
492
|
+
// No longer display completion boxes - keep output clean
|
|
493
|
+
} else {
|
|
494
|
+
// No questions for this module - show completion message
|
|
495
|
+
CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
|
|
457
496
|
}
|
|
458
497
|
}
|
|
459
498
|
|
|
499
|
+
/**
|
|
500
|
+
* Replace placeholders in a string with collected config values
|
|
501
|
+
* @param {string} str - String with placeholders
|
|
502
|
+
* @param {string} currentModule - Current module name (to look up defaults in same module)
|
|
503
|
+
* @param {Object} moduleConfig - Current module's config schema (to look up defaults)
|
|
504
|
+
* @returns {string} String with placeholders replaced
|
|
505
|
+
*/
|
|
506
|
+
replacePlaceholders(str, currentModule = null, moduleConfig = null) {
|
|
507
|
+
if (typeof str !== 'string') {
|
|
508
|
+
return str;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
return str.replaceAll(/{([^}]+)}/g, (match, configKey) => {
|
|
512
|
+
// Preserve special placeholders
|
|
513
|
+
if (configKey === 'project-root' || configKey === 'value' || configKey === 'directory_name') {
|
|
514
|
+
return match;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
// Look for the config value in allAnswers (already answered questions)
|
|
518
|
+
let configValue = this.allAnswers[configKey] || this.allAnswers[`core_${configKey}`];
|
|
519
|
+
|
|
520
|
+
// Check in already collected config
|
|
521
|
+
if (!configValue) {
|
|
522
|
+
for (const mod of Object.keys(this.collectedConfig)) {
|
|
523
|
+
if (mod !== '_meta' && this.collectedConfig[mod] && this.collectedConfig[mod][configKey]) {
|
|
524
|
+
configValue = this.collectedConfig[mod][configKey];
|
|
525
|
+
// Remove {project-root}/ prefix if present for cleaner display
|
|
526
|
+
if (typeof configValue === 'string' && configValue.includes('{project-root}/')) {
|
|
527
|
+
configValue = configValue.replace('{project-root}/', '');
|
|
528
|
+
}
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// If still not found and we're in the same module, use the default from the config schema
|
|
535
|
+
if (!configValue && currentModule && moduleConfig && moduleConfig[configKey]) {
|
|
536
|
+
const referencedItem = moduleConfig[configKey];
|
|
537
|
+
if (referencedItem && referencedItem.default !== undefined) {
|
|
538
|
+
configValue = referencedItem.default;
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
return configValue || match;
|
|
543
|
+
});
|
|
544
|
+
}
|
|
545
|
+
|
|
460
546
|
/**
|
|
461
547
|
* Build an inquirer question from a config item
|
|
462
548
|
* @param {string} moduleName - Module name
|
|
463
549
|
* @param {string} key - Config key
|
|
464
550
|
* @param {Object} item - Config item definition
|
|
551
|
+
* @param {Object} moduleConfig - Full module config schema (for resolving defaults)
|
|
465
552
|
*/
|
|
466
|
-
async buildQuestion(moduleName, key, item) {
|
|
553
|
+
async buildQuestion(moduleName, key, item, moduleConfig = null) {
|
|
467
554
|
const questionName = `${moduleName}_${key}`;
|
|
468
555
|
|
|
469
556
|
// Check for existing value
|
|
@@ -483,9 +570,42 @@ class ConfigCollector {
|
|
|
483
570
|
let defaultValue = item.default;
|
|
484
571
|
let choices = null;
|
|
485
572
|
|
|
486
|
-
if
|
|
487
|
-
|
|
488
|
-
|
|
573
|
+
// Check if default contains references to other fields in the same module
|
|
574
|
+
const hasSameModuleReference = typeof defaultValue === 'string' && defaultValue.match(/{([^}]+)}/);
|
|
575
|
+
let dynamicDefault = false;
|
|
576
|
+
|
|
577
|
+
// Replace placeholders in default value with collected config values
|
|
578
|
+
if (typeof defaultValue === 'string') {
|
|
579
|
+
if (defaultValue.includes('{directory_name}') && this.currentProjectDir) {
|
|
580
|
+
const dirName = path.basename(this.currentProjectDir);
|
|
581
|
+
defaultValue = defaultValue.replaceAll('{directory_name}', dirName);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
// Check if this references another field in the same module (for dynamic defaults)
|
|
585
|
+
if (hasSameModuleReference && moduleConfig) {
|
|
586
|
+
const matches = defaultValue.match(/{([^}]+)}/g);
|
|
587
|
+
if (matches) {
|
|
588
|
+
for (const match of matches) {
|
|
589
|
+
const fieldName = match.slice(1, -1); // Remove { }
|
|
590
|
+
// Check if this field exists in the same module config
|
|
591
|
+
if (moduleConfig[fieldName]) {
|
|
592
|
+
dynamicDefault = true;
|
|
593
|
+
break;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// If not dynamic, replace placeholders now
|
|
600
|
+
if (!dynamicDefault) {
|
|
601
|
+
defaultValue = this.replacePlaceholders(defaultValue, moduleName, moduleConfig);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
// Strip {project-root}/ from defaults since it will be added back by result template
|
|
605
|
+
// This makes the display cleaner and user input simpler
|
|
606
|
+
if (defaultValue.includes('{project-root}/')) {
|
|
607
|
+
defaultValue = defaultValue.replace('{project-root}/', '');
|
|
608
|
+
}
|
|
489
609
|
}
|
|
490
610
|
|
|
491
611
|
// Handle different question types
|
|
@@ -548,31 +668,67 @@ class ConfigCollector {
|
|
|
548
668
|
message = item.prompt;
|
|
549
669
|
}
|
|
550
670
|
|
|
671
|
+
// Replace placeholders in prompt message with collected config values
|
|
672
|
+
if (typeof message === 'string') {
|
|
673
|
+
message = this.replacePlaceholders(message, moduleName, moduleConfig);
|
|
674
|
+
}
|
|
675
|
+
|
|
551
676
|
// Add current value indicator for existing configs
|
|
552
677
|
if (existingValue !== null && existingValue !== undefined) {
|
|
553
678
|
if (typeof existingValue === 'boolean') {
|
|
554
679
|
message += chalk.dim(` (current: ${existingValue ? 'true' : 'false'})`);
|
|
555
|
-
defaultValue = existingValue;
|
|
556
680
|
} else if (Array.isArray(existingValue)) {
|
|
557
681
|
message += chalk.dim(` (current: ${existingValue.join(', ')})`);
|
|
558
682
|
} else if (questionType !== 'list') {
|
|
559
683
|
// Show the cleaned value (without {project-root}/) for display
|
|
560
684
|
message += chalk.dim(` (current: ${existingValue})`);
|
|
561
|
-
defaultValue = existingValue;
|
|
562
685
|
}
|
|
563
686
|
} else if (item.example && questionType === 'input') {
|
|
564
687
|
// Show example for input fields
|
|
565
|
-
|
|
688
|
+
let exampleText = typeof item.example === 'string' ? item.example : JSON.stringify(item.example);
|
|
689
|
+
// Replace placeholders in example
|
|
690
|
+
if (typeof exampleText === 'string') {
|
|
691
|
+
exampleText = this.replacePlaceholders(exampleText, moduleName, moduleConfig);
|
|
692
|
+
exampleText = exampleText.replace('{project-root}/', '');
|
|
693
|
+
}
|
|
566
694
|
message += chalk.dim(` (e.g., ${exampleText})`);
|
|
567
695
|
}
|
|
568
696
|
|
|
697
|
+
// Build the question object
|
|
569
698
|
const question = {
|
|
570
699
|
type: questionType,
|
|
571
700
|
name: questionName,
|
|
572
701
|
message: message,
|
|
573
|
-
default: defaultValue,
|
|
574
702
|
};
|
|
575
703
|
|
|
704
|
+
// Set default - if it's dynamic, use a function that inquirer will evaluate with current answers
|
|
705
|
+
// But if we have an existing value, always use that instead
|
|
706
|
+
if (existingValue !== null && existingValue !== undefined && questionType !== 'list') {
|
|
707
|
+
question.default = existingValue;
|
|
708
|
+
} else if (dynamicDefault && typeof item.default === 'string') {
|
|
709
|
+
const originalDefault = item.default;
|
|
710
|
+
question.default = (answers) => {
|
|
711
|
+
// Replace placeholders using answers from previous questions in the same batch
|
|
712
|
+
let resolved = originalDefault;
|
|
713
|
+
resolved = resolved.replaceAll(/{([^}]+)}/g, (match, fieldName) => {
|
|
714
|
+
// Look for the answer in the current batch (prefixed with module name)
|
|
715
|
+
const answerKey = `${moduleName}_${fieldName}`;
|
|
716
|
+
if (answers[answerKey] !== undefined) {
|
|
717
|
+
return answers[answerKey];
|
|
718
|
+
}
|
|
719
|
+
// Fall back to collected config
|
|
720
|
+
return this.collectedConfig[moduleName]?.[fieldName] || match;
|
|
721
|
+
});
|
|
722
|
+
// Strip {project-root}/ for cleaner display
|
|
723
|
+
if (resolved.includes('{project-root}/')) {
|
|
724
|
+
resolved = resolved.replace('{project-root}/', '');
|
|
725
|
+
}
|
|
726
|
+
return resolved;
|
|
727
|
+
};
|
|
728
|
+
} else {
|
|
729
|
+
question.default = defaultValue;
|
|
730
|
+
}
|
|
731
|
+
|
|
576
732
|
// Add choices for select types
|
|
577
733
|
if (choices) {
|
|
578
734
|
question.choices = choices;
|
|
@@ -584,6 +740,23 @@ class ConfigCollector {
|
|
|
584
740
|
if (!input && item.required) {
|
|
585
741
|
return 'This field is required';
|
|
586
742
|
}
|
|
743
|
+
// Validate against regex pattern if provided
|
|
744
|
+
if (input && item.regex) {
|
|
745
|
+
const regex = new RegExp(item.regex);
|
|
746
|
+
if (!regex.test(input)) {
|
|
747
|
+
return `Invalid format. Must match pattern: ${item.regex}`;
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
return true;
|
|
751
|
+
};
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
// Add validation for checkbox (multi-select) fields
|
|
755
|
+
if (questionType === 'checkbox' && item.required) {
|
|
756
|
+
question.validate = (answers) => {
|
|
757
|
+
if (!answers || answers.length === 0) {
|
|
758
|
+
return 'At least one option must be selected';
|
|
759
|
+
}
|
|
587
760
|
return true;
|
|
588
761
|
};
|
|
589
762
|
}
|