bmad-method 6.0.0-alpha.12 → 6.0.0-alpha.14
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/scripts/discord-helpers.sh +15 -0
- package/.github/workflows/bundle-latest.yaml +79 -27
- package/.github/workflows/discord.yaml +278 -8
- package/.github/workflows/quality.yaml +19 -0
- package/.markdownlint-cli2.yaml +42 -0
- package/.prettierignore +3 -0
- package/CHANGELOG.md +254 -1
- package/CODE_OF_CONDUCT.md +128 -0
- package/README.md +3 -1
- package/bmad-method-6.0.0-alpha.14.tgz +0 -0
- package/docs/agent-customization-guide.md +2 -2
- package/docs/custom-agent-installation.md +58 -90
- package/docs/document-sharding-guide.md +1 -1
- package/docs/ide-info/rovo-dev.md +388 -0
- package/docs/index.md +6 -81
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +1 -1
- package/eslint.config.mjs +14 -0
- package/example-custom-content/README.md +4 -0
- package/example-custom-content/agents/commit-poet/commit-poet.agent.yaml +129 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +161 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
- package/example-custom-content/agents/toolsmith/toolsmith.agent.yaml +109 -0
- package/example-custom-content/custom.yaml +3 -0
- package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +168 -0
- package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +155 -0
- package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +89 -0
- package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +150 -0
- package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +1 -0
- package/example-custom-content/workflows/quiz-master/workflow-plan-quiz-master.md +269 -0
- package/example-custom-content/workflows/quiz-master/workflow.md +54 -0
- package/example-custom-content/workflows/wassup/workflow.md +26 -0
- package/example-custom-module/mwm/README.md +4 -0
- package/example-custom-module/mwm/_module-installer/install-config.yaml +27 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +47 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +17 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +150 -0
- package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +137 -0
- package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +137 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +124 -0
- package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +31 -0
- package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/crisis-support/README.md +31 -0
- package/example-custom-module/mwm/workflows/crisis-support/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/daily-checkin/README.md +32 -0
- package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/guided-meditation/README.md +31 -0
- package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/wellness-journal/README.md +31 -0
- package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +45 -0
- package/package.json +9 -4
- package/src/core/_module-installer/install-config.yaml +5 -1
- package/src/core/agents/bmad-master.agent.yaml +1 -1
- package/src/core/agents/bmad-web-orchestrator.agent.xml +1 -1
- package/src/core/resources/excalidraw/library-loader.md +2 -2
- package/src/core/tasks/advanced-elicitation-methods.csv +51 -21
- package/src/core/tasks/advanced-elicitation.xml +18 -8
- package/src/core/tasks/workflow.xml +36 -71
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +196 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +121 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +224 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +236 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +208 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +263 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +339 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +302 -0
- package/src/core/workflows/brainstorming/template.md +13 -104
- package/src/core/workflows/brainstorming/workflow.md +51 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +203 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +158 -0
- package/src/core/workflows/party-mode/workflow.md +206 -0
- package/src/modules/bmb/README.md +153 -86
- package/src/modules/bmb/_module-installer/install-config.yaml +4 -9
- package/src/modules/bmb/_module-installer/installer.js +76 -0
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +75 -38
- package/src/modules/bmb/docs/{agent-menu-patterns.md → agents/agent-menu-patterns.md} +6 -6
- package/src/modules/bmb/docs/{expert-agent-architecture.md → agents/expert-agent-architecture.md} +20 -20
- package/src/modules/bmb/docs/agents/kb.csv +0 -0
- package/src/modules/bmb/docs/{module-agent-architecture.md → agents/module-agent-architecture.md} +46 -46
- package/src/modules/bmb/docs/{simple-agent-architecture.md → agents/simple-agent-architecture.md} +7 -3
- package/src/modules/bmb/docs/workflows/architecture.md +220 -0
- package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +19 -0
- package/src/modules/bmb/docs/workflows/csv-data-file-standards.md +206 -0
- package/src/modules/bmb/docs/workflows/index.md +45 -0
- package/src/modules/bmb/docs/workflows/intent-vs-prescriptive-spectrum.md +220 -0
- package/src/modules/bmb/docs/workflows/kb.csv +0 -0
- package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -0
- package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +223 -0
- package/src/modules/bmb/docs/workflows/templates/step-file.md +139 -0
- package/src/modules/bmb/docs/workflows/templates/step-template.md +290 -0
- package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
- package/src/modules/bmb/docs/workflows/templates/workflow.md +58 -0
- package/src/modules/bmb/docs/workflows/terms.md +97 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +4 -4
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +8 -8
- package/src/modules/bmb/reference/agents/module-examples/README.md +1 -1
- package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +7 -7
- package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +176 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +120 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +153 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +29 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/README.md +3 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +242 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +24 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +108 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +46 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +39 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +152 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +50 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +53 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +57 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +223 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +126 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +150 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +152 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +305 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +145 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +210 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +260 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +237 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +231 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +224 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +234 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +179 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +197 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +180 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +222 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_commands.md +21 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_persona.md +25 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md +23 -0
- package/src/modules/bmb/workflows/create-agent/workflow.md +91 -0
- package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +155 -0
- package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +169 -0
- package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +217 -0
- package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +267 -0
- package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +228 -0
- package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +233 -0
- package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +296 -0
- package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +228 -0
- package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +186 -0
- package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +308 -0
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +336 -0
- package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +335 -0
- package/src/modules/bmb/workflows/create-module/templates/agent.template.md +317 -0
- package/src/modules/bmb/workflows/create-module/templates/install-config.template.yaml +53 -0
- package/src/modules/bmb/workflows/create-module/templates/installer.template.js +47 -0
- package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +5 -0
- package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -0
- package/src/modules/bmb/workflows/create-module/validation.md +126 -0
- package/src/modules/bmb/workflows/create-module/workflow.md +55 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +157 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +211 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +250 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +216 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +289 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +271 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +308 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +284 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
- package/src/modules/bmb/workflows/create-workflow/workflow.md +58 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +134 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +202 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +157 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +150 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +150 -0
- package/src/modules/bmb/workflows/edit-agent/workflow.md +58 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +217 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +253 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +217 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +193 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +245 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/completion-summary.md +75 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/improvement-goals.md +68 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/improvement-log.md +40 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/validation-results.md +51 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/workflow-analysis.md +56 -0
- package/src/modules/bmb/workflows/edit-workflow/workflow.md +58 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +152 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +243 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +274 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +295 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +264 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +360 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +258 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +301 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/templates/compliance-report.md +140 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +58 -0
- package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/checklist.md +0 -1
- package/src/modules/bmgd/agents/game-architect.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-designer.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-dev.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +1 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
- package/src/modules/bmm/_module-installer/install-config.yaml +10 -16
- package/src/modules/bmm/agents/analyst.agent.yaml +25 -22
- package/src/modules/bmm/agents/architect.agent.yaml +12 -14
- package/src/modules/bmm/agents/dev.agent.yaml +20 -16
- package/src/modules/bmm/agents/pm.agent.yaml +14 -32
- package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +36 -0
- package/src/modules/bmm/agents/sm.agent.yaml +13 -31
- package/src/modules/bmm/agents/tea.agent.yaml +10 -7
- package/src/modules/bmm/agents/tech-writer.agent.yaml +7 -20
- package/src/modules/bmm/agents/ux-designer.agent.yaml +12 -10
- package/src/modules/bmm/data/README.md +29 -0
- package/src/modules/bmm/data/project-context-template.md +40 -0
- package/src/modules/bmm/docs/README.md +44 -10
- package/src/modules/bmm/docs/agents-guide.md +80 -53
- package/src/modules/bmm/docs/bmad-quick-flow.md +528 -0
- package/src/modules/bmm/docs/brownfield-guide.md +25 -39
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +6 -39
- package/src/modules/bmm/docs/glossary.md +12 -25
- package/src/modules/bmm/docs/images/README.md +37 -0
- package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +960 -1845
- package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +4 -2
- package/src/modules/bmm/docs/quick-flow-solo-dev.md +337 -0
- package/src/modules/bmm/docs/quick-spec-flow.md +5 -5
- package/src/modules/bmm/docs/quick-start.md +9 -25
- package/src/modules/bmm/docs/scale-adaptive-system.md +5 -5
- package/src/modules/bmm/docs/test-architecture.md +90 -24
- package/src/modules/bmm/docs/troubleshooting.md +680 -0
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/docs/workflows-analysis.md +36 -140
- package/src/modules/bmm/docs/workflows-implementation.md +175 -160
- package/src/modules/bmm/docs/workflows-planning.md +51 -212
- package/src/modules/bmm/docs/workflows-solutioning.md +26 -71
- package/src/modules/bmm/tasks/daily-standup.xml +85 -0
- package/src/modules/bmm/teams/default-party.csv +15 -14
- package/src/modules/bmm/teams/team-fullstack.yaml +0 -1
- package/src/modules/bmm/testarch/knowledge/api-request.md +303 -0
- package/src/modules/bmm/testarch/knowledge/auth-session.md +356 -0
- package/src/modules/bmm/testarch/knowledge/burn-in.md +273 -0
- package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
- package/src/modules/bmm/testarch/knowledge/file-utils.md +260 -0
- package/src/modules/bmm/testarch/knowledge/fixtures-composition.md +382 -0
- package/src/modules/bmm/testarch/knowledge/intercept-network-call.md +280 -0
- package/src/modules/bmm/testarch/knowledge/log.md +294 -0
- package/src/modules/bmm/testarch/knowledge/network-error-monitor.md +272 -0
- package/src/modules/bmm/testarch/knowledge/network-recorder.md +265 -0
- package/src/modules/bmm/testarch/knowledge/overview.md +284 -0
- package/src/modules/bmm/testarch/knowledge/recurse.md +296 -0
- package/src/modules/bmm/testarch/tea-index.csv +11 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/product-brief.template.md +8 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01-init.md +192 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01b-continue.md +167 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +203 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +206 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +209 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +223 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-06-complete.md +199 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +58 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +136 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +228 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +237 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +205 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +233 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +442 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +181 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +236 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +199 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +248 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +258 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +176 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +474 -0
- package/src/modules/bmm/workflows/1-analysis/research/research.template.md +15 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +136 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +238 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +247 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +201 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +238 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +485 -0
- package/src/modules/bmm/workflows/1-analysis/research/workflow.md +204 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +159 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +126 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +209 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +215 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +218 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +233 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +251 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +253 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +240 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +247 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +236 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +263 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +226 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +6 -138
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +59 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +12 -200
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +243 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +165 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +420 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +289 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +290 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +270 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +261 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +257 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +298 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +269 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +293 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +61 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-decision-template.md +13 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/data/domain-complexity.csv +11 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/data/project-types.csv +7 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md +194 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01b-continue.md +163 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md +223 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +330 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +317 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md +358 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md +378 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md +358 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +351 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +49 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +258 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +232 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +271 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +144 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +189 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +177 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +178 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +138 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +251 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +132 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +54 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +2 -1
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +224 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +4 -11
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +332 -214
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +354 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +21 -34
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +65 -23
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +406 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +6 -37
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +19 -21
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +11 -10
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +174 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/instructions.md +115 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +26 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/checklist.md +25 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/instructions.md +202 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +33 -0
- package/src/modules/bmm/workflows/document-project/instructions.md +1 -1
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/project-context-template.md +20 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +193 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +317 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +277 -0
- package/src/modules/bmm/workflows/generate-project-context/workflow.md +48 -0
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +1 -1
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +23 -3
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +23 -2
- package/src/modules/bmm/workflows/testarch/ci/checklist.md +1 -1
- package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +36 -3
- package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +25 -4
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +20 -3
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +27 -1
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +8 -2
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +29 -9
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +66 -54
- package/src/modules/bmm/workflows/workflow-status/instructions.md +11 -4
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +4 -9
- package/src/modules/cis/agents/README.md +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +3 -2
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +2 -1
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +2 -1
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +2 -1
- package/src/modules/cis/agents/presentation-master.agent.yaml +3 -2
- package/src/modules/cis/agents/storyteller.agent.yaml +2 -1
- package/src/modules/cis/teams/default-party.csv +6 -5
- package/src/utility/models/agent-activation-ide.xml +4 -4
- package/src/utility/models/agent-activation-web.xml +1 -11
- package/src/utility/models/fragments/activation-rules.xml +5 -6
- package/src/utility/models/fragments/handler-exec.xml +6 -5
- package/src/utility/models/fragments/handler-multi.xml +14 -0
- package/test/README.md +1 -1
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +1 -3
- package/tools/cli/README.md +4 -3
- package/tools/cli/bundlers/web-bundler.js +3 -14
- package/tools/cli/commands/build.js +9 -184
- package/tools/cli/commands/install.js +42 -2
- package/tools/cli/installers/lib/core/config-collector.js +94 -10
- package/tools/cli/installers/lib/core/installer.js +389 -55
- package/tools/cli/installers/lib/core/manifest-generator.js +91 -30
- package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +79 -0
- package/tools/cli/installers/lib/custom/handler.js +266 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +10 -0
- package/tools/cli/installers/lib/ide/antigravity.js +51 -7
- package/tools/cli/installers/lib/ide/auggie.js +72 -7
- package/tools/cli/installers/lib/ide/claude-code.js +1 -6
- package/tools/cli/installers/lib/ide/cline.js +49 -0
- package/tools/cli/installers/lib/ide/codex.js +2 -2
- package/tools/cli/installers/lib/ide/crush.js +66 -6
- package/tools/cli/installers/lib/ide/cursor.js +29 -13
- package/tools/cli/installers/lib/ide/gemini.js +96 -1
- package/tools/cli/installers/lib/ide/github-copilot.js +59 -48
- package/tools/cli/installers/lib/ide/iflow.js +67 -1
- package/tools/cli/installers/lib/ide/kilo.js +74 -0
- package/tools/cli/installers/lib/ide/kiro-cli.js +327 -0
- package/tools/cli/installers/lib/ide/opencode.js +3 -3
- package/tools/cli/installers/lib/ide/qwen.js +54 -0
- package/tools/cli/installers/lib/ide/roo.js +145 -138
- package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +8 -2
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +34 -19
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +18 -14
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/ide/trae.js +47 -0
- package/tools/cli/installers/lib/modules/manager.js +486 -53
- package/tools/cli/lib/agent/compiler.js +210 -27
- package/tools/cli/lib/agent/installer.js +140 -30
- package/tools/cli/lib/agent-analyzer.js +46 -18
- package/tools/cli/lib/config.js +2 -1
- package/tools/cli/lib/ui.js +269 -13
- package/tools/cli/lib/yaml-xml-builder.js +123 -39
- package/tools/platform-codes.yaml +12 -0
- package/tools/schema/agent.js +229 -20
- package/tools/validate-svg-changes.sh +356 -0
- package/src/core/tasks/adv-elicit-methods.csv +0 -39
- package/src/core/workflows/brainstorming/README.md +0 -261
- package/src/core/workflows/brainstorming/instructions.md +0 -315
- package/src/core/workflows/brainstorming/workflow.yaml +0 -38
- package/src/core/workflows/party-mode/instructions.md +0 -183
- package/src/core/workflows/party-mode/workflow.yaml +0 -28
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +0 -142
- package/src/modules/bmb/workflows/audit-workflow/instructions.md +0 -341
- package/src/modules/bmb/workflows/audit-workflow/template.md +0 -118
- package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +0 -25
- package/src/modules/bmb/workflows/convert-legacy/README.md +0 -262
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +0 -205
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +0 -377
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +0 -30
- package/src/modules/bmb/workflows/create-agent/instructions.md +0 -519
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -55
- package/src/modules/bmb/workflows/create-module/README.md +0 -229
- package/src/modules/bmb/workflows/create-module/brainstorm-context.md +0 -137
- package/src/modules/bmb/workflows/create-module/checklist.md +0 -235
- package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
- package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +0 -231
- package/src/modules/bmb/workflows/create-module/instructions.md +0 -577
- package/src/modules/bmb/workflows/create-module/module-structure.md +0 -400
- package/src/modules/bmb/workflows/create-module/workflow.yaml +0 -52
- package/src/modules/bmb/workflows/create-workflow/README.md +0 -277
- package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
- package/src/modules/bmb/workflows/create-workflow/checklist.md +0 -94
- package/src/modules/bmb/workflows/create-workflow/instructions.md +0 -725
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1327
- package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -15
- package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -61
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -41
- package/src/modules/bmb/workflows/edit-agent/README.md +0 -239
- package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -654
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -49
- package/src/modules/bmb/workflows/edit-workflow/README.md +0 -119
- package/src/modules/bmb/workflows/edit-workflow/checklist.md +0 -70
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +0 -342
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +0 -27
- package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +0 -22
- package/src/modules/bmm/_module-installer/assets/bmm-kb.md +0 -1
- package/src/modules/bmm/_module-installer/assets/technical-decisions.md +0 -30
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -112
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -39
- package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +0 -425
- package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +0 -180
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -56
- package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +0 -181
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -61
- package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
- package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +0 -299
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -438
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -675
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -134
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -534
- package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
- package/src/modules/bmm/workflows/1-analysis/research/template-market.md +0 -347
- package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +0 -245
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +0 -62
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1308
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -93
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -703
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -78
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -436
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -980
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -60
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
- package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
- package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +0 -768
- package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -100
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md +0 -80
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +0 -616
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +0 -63
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -64
- package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -58
- package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
- package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -63
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -28
- package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
- package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -25
- package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
- package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
- package/tools/cli/commands/agent-install.js +0 -409
- /package/src/modules/bmb/docs/{agent-compilation.md → agents/agent-compilation.md} +0 -0
- /package/src/modules/bmb/docs/{index.md → agents/index.md} +0 -0
- /package/src/modules/bmb/docs/{understanding-agent-types.md → agents/understanding-agent-types.md} +0 -0
- /package/src/modules/bmb/reference/{readme.md → README.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{agent-validation-checklist.md → data/agent-validation-checklist.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{brainstorm-context.md → data/brainstorm-context.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{communication-presets.csv → data/communication-presets.csv} +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/README.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/instructions.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/workflow.yaml +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/README.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/checklist.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/instructions.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/template.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/workflow.yaml +0 -0
- /package/src/modules/bmm/{workflows/techdoc → data}/documentation-standards.md +0 -0
|
@@ -37,6 +37,14 @@ class ModuleManager {
|
|
|
37
37
|
this.bmadFolderName = bmadFolderName;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
/**
|
|
41
|
+
* Set the core configuration for access during module installation
|
|
42
|
+
* @param {Object} coreConfig - Core configuration object
|
|
43
|
+
*/
|
|
44
|
+
setCoreConfig(coreConfig) {
|
|
45
|
+
this.coreConfig = coreConfig;
|
|
46
|
+
}
|
|
47
|
+
|
|
40
48
|
/**
|
|
41
49
|
* Copy a file and replace {bmad_folder} placeholder with actual folder name
|
|
42
50
|
* @param {string} sourcePath - Source file path
|
|
@@ -53,6 +61,11 @@ class ModuleManager {
|
|
|
53
61
|
// Read the file content
|
|
54
62
|
let content = await fs.readFile(sourcePath, 'utf8');
|
|
55
63
|
|
|
64
|
+
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
|
65
|
+
if (content.includes('{*bmad_folder*}')) {
|
|
66
|
+
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
|
67
|
+
}
|
|
68
|
+
|
|
56
69
|
// Replace {bmad_folder} placeholder with actual folder name
|
|
57
70
|
if (content.includes('{bmad_folder}')) {
|
|
58
71
|
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
|
@@ -93,57 +106,123 @@ class ModuleManager {
|
|
|
93
106
|
}
|
|
94
107
|
|
|
95
108
|
/**
|
|
96
|
-
*
|
|
109
|
+
* Find all modules in the project by searching for install-config.yaml files
|
|
110
|
+
* @returns {Array} List of module paths
|
|
111
|
+
*/
|
|
112
|
+
async findModulesInProject() {
|
|
113
|
+
const projectRoot = getProjectRoot();
|
|
114
|
+
const modulePaths = new Set();
|
|
115
|
+
|
|
116
|
+
// Helper function to recursively scan directories
|
|
117
|
+
async function scanDirectory(dir, excludePaths = []) {
|
|
118
|
+
try {
|
|
119
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
120
|
+
|
|
121
|
+
for (const entry of entries) {
|
|
122
|
+
const fullPath = path.join(dir, entry.name);
|
|
123
|
+
|
|
124
|
+
// Skip hidden directories, node_modules, and literal placeholder directories
|
|
125
|
+
if (
|
|
126
|
+
entry.name.startsWith('.') ||
|
|
127
|
+
entry.name === 'node_modules' ||
|
|
128
|
+
entry.name === 'dist' ||
|
|
129
|
+
entry.name === 'build' ||
|
|
130
|
+
entry.name === '{project-root}'
|
|
131
|
+
) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Skip excluded paths
|
|
136
|
+
if (excludePaths.some((exclude) => fullPath.startsWith(exclude))) {
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (entry.isDirectory()) {
|
|
141
|
+
// Skip core module - it's always installed first and not selectable
|
|
142
|
+
if (entry.name === 'core') {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Check if this directory contains a module (install-config.yaml OR custom.yaml)
|
|
147
|
+
const installerConfigPath = path.join(fullPath, '_module-installer', 'install-config.yaml');
|
|
148
|
+
const customConfigPath = path.join(fullPath, '_module-installer', 'custom.yaml');
|
|
149
|
+
const rootCustomConfigPath = path.join(fullPath, 'custom.yaml');
|
|
150
|
+
|
|
151
|
+
if (
|
|
152
|
+
(await fs.pathExists(installerConfigPath)) ||
|
|
153
|
+
(await fs.pathExists(customConfigPath)) ||
|
|
154
|
+
(await fs.pathExists(rootCustomConfigPath))
|
|
155
|
+
) {
|
|
156
|
+
modulePaths.add(fullPath);
|
|
157
|
+
// Don't scan inside modules - they might have their own nested structures
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Recursively scan subdirectories
|
|
162
|
+
await scanDirectory(fullPath, excludePaths);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
} catch {
|
|
166
|
+
// Ignore errors (e.g., permission denied)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Scan the entire project, but exclude src/modules since we handle it separately
|
|
171
|
+
await scanDirectory(projectRoot, [this.modulesSourcePath]);
|
|
172
|
+
|
|
173
|
+
return [...modulePaths];
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* List all available modules (excluding core which is always installed)
|
|
97
178
|
* @returns {Array} List of available modules with metadata
|
|
98
179
|
*/
|
|
99
180
|
async listAvailable() {
|
|
100
181
|
const modules = [];
|
|
101
182
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
183
|
+
// First, scan src/modules (the standard location)
|
|
184
|
+
if (await fs.pathExists(this.modulesSourcePath)) {
|
|
185
|
+
const entries = await fs.readdir(this.modulesSourcePath, { withFileTypes: true });
|
|
106
186
|
|
|
107
|
-
|
|
187
|
+
for (const entry of entries) {
|
|
188
|
+
if (entry.isDirectory()) {
|
|
189
|
+
const modulePath = path.join(this.modulesSourcePath, entry.name);
|
|
190
|
+
// Check for module structure (install-config.yaml OR custom.yaml)
|
|
191
|
+
const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
|
|
192
|
+
const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
|
|
108
193
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
|
|
114
|
-
// Fallback to old structure
|
|
115
|
-
const configPath = path.join(modulePath, 'config.yaml');
|
|
116
|
-
|
|
117
|
-
const moduleInfo = {
|
|
118
|
-
id: entry.name,
|
|
119
|
-
path: modulePath,
|
|
120
|
-
name: entry.name.toUpperCase(),
|
|
121
|
-
description: 'BMAD Module',
|
|
122
|
-
version: '5.0.0',
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
// Try to read module config for metadata (prefer new location)
|
|
126
|
-
const configToRead = (await fs.pathExists(installerConfigPath)) ? installerConfigPath : configPath;
|
|
127
|
-
if (await fs.pathExists(configToRead)) {
|
|
128
|
-
try {
|
|
129
|
-
const configContent = await fs.readFile(configToRead, 'utf8');
|
|
130
|
-
const config = yaml.load(configContent);
|
|
194
|
+
// Skip if this doesn't look like a module
|
|
195
|
+
if (!(await fs.pathExists(installerConfigPath)) && !(await fs.pathExists(customConfigPath))) {
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
131
198
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
199
|
+
// Skip core module - it's always installed first and not selectable
|
|
200
|
+
if (entry.name === 'core') {
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
136
203
|
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
moduleInfo.dependencies = config.dependencies || [];
|
|
141
|
-
moduleInfo.defaultSelected = config.default_selected === undefined ? false : config.default_selected;
|
|
142
|
-
} catch (error) {
|
|
143
|
-
console.warn(`Failed to read config for ${entry.name}:`, error.message);
|
|
204
|
+
const moduleInfo = await this.getModuleInfo(modulePath, entry.name, 'src/modules');
|
|
205
|
+
if (moduleInfo) {
|
|
206
|
+
modules.push(moduleInfo);
|
|
144
207
|
}
|
|
145
208
|
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
// Then, find all other modules in the project
|
|
213
|
+
const otherModulePaths = await this.findModulesInProject();
|
|
214
|
+
for (const modulePath of otherModulePaths) {
|
|
215
|
+
const moduleName = path.basename(modulePath);
|
|
216
|
+
const relativePath = path.relative(getProjectRoot(), modulePath);
|
|
146
217
|
|
|
218
|
+
// Skip core module - it's always installed first and not selectable
|
|
219
|
+
if (moduleName === 'core') {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const moduleInfo = await this.getModuleInfo(modulePath, moduleName, relativePath);
|
|
224
|
+
if (moduleInfo && !modules.some((m) => m.id === moduleInfo.id)) {
|
|
225
|
+
// Avoid duplicates - skip if we already have this module ID
|
|
147
226
|
modules.push(moduleInfo);
|
|
148
227
|
}
|
|
149
228
|
}
|
|
@@ -151,6 +230,135 @@ class ModuleManager {
|
|
|
151
230
|
return modules;
|
|
152
231
|
}
|
|
153
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Get module information from a module path
|
|
235
|
+
* @param {string} modulePath - Path to the module directory
|
|
236
|
+
* @param {string} defaultName - Default name for the module
|
|
237
|
+
* @param {string} sourceDescription - Description of where the module was found
|
|
238
|
+
* @returns {Object|null} Module info or null if not a valid module
|
|
239
|
+
*/
|
|
240
|
+
async getModuleInfo(modulePath, defaultName, sourceDescription) {
|
|
241
|
+
// Check for module structure (install-config.yaml OR custom.yaml)
|
|
242
|
+
const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
|
|
243
|
+
const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
|
|
244
|
+
const rootCustomConfigPath = path.join(modulePath, 'custom.yaml');
|
|
245
|
+
let configPath = null;
|
|
246
|
+
|
|
247
|
+
if (await fs.pathExists(installerConfigPath)) {
|
|
248
|
+
configPath = installerConfigPath;
|
|
249
|
+
} else if (await fs.pathExists(customConfigPath)) {
|
|
250
|
+
configPath = customConfigPath;
|
|
251
|
+
} else if (await fs.pathExists(rootCustomConfigPath)) {
|
|
252
|
+
configPath = rootCustomConfigPath;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Skip if this doesn't look like a module
|
|
256
|
+
if (!configPath) {
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// Mark as custom if it's using custom.yaml OR if it's outside src/modules
|
|
261
|
+
const isCustomSource = sourceDescription !== 'src/modules';
|
|
262
|
+
const moduleInfo = {
|
|
263
|
+
id: defaultName,
|
|
264
|
+
path: modulePath,
|
|
265
|
+
name: defaultName
|
|
266
|
+
.split('-')
|
|
267
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
268
|
+
.join(' '),
|
|
269
|
+
description: 'BMAD Module',
|
|
270
|
+
version: '5.0.0',
|
|
271
|
+
source: sourceDescription,
|
|
272
|
+
isCustom: configPath === customConfigPath || configPath === rootCustomConfigPath || isCustomSource,
|
|
273
|
+
};
|
|
274
|
+
|
|
275
|
+
// Read module config for metadata
|
|
276
|
+
try {
|
|
277
|
+
const configContent = await fs.readFile(configPath, 'utf8');
|
|
278
|
+
const config = yaml.load(configContent);
|
|
279
|
+
|
|
280
|
+
// Use the code property as the id if available
|
|
281
|
+
if (config.code) {
|
|
282
|
+
moduleInfo.id = config.code;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
moduleInfo.name = config.name || moduleInfo.name;
|
|
286
|
+
moduleInfo.description = config.description || moduleInfo.description;
|
|
287
|
+
moduleInfo.version = config.version || moduleInfo.version;
|
|
288
|
+
moduleInfo.dependencies = config.dependencies || [];
|
|
289
|
+
moduleInfo.defaultSelected = config.default_selected === undefined ? false : config.default_selected;
|
|
290
|
+
} catch (error) {
|
|
291
|
+
console.warn(`Failed to read config for ${defaultName}:`, error.message);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return moduleInfo;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Find the source path for a module by searching all possible locations
|
|
299
|
+
* @param {string} moduleName - Name of the module to find
|
|
300
|
+
* @returns {string|null} Path to the module source or null if not found
|
|
301
|
+
*/
|
|
302
|
+
async findModuleSource(moduleName) {
|
|
303
|
+
const projectRoot = getProjectRoot();
|
|
304
|
+
|
|
305
|
+
// First, check src/modules
|
|
306
|
+
const srcModulePath = path.join(this.modulesSourcePath, moduleName);
|
|
307
|
+
if (await fs.pathExists(srcModulePath)) {
|
|
308
|
+
// Check if this looks like a module (has install-config.yaml)
|
|
309
|
+
const installerConfigPath = path.join(srcModulePath, '_module-installer', 'install-config.yaml');
|
|
310
|
+
|
|
311
|
+
if (await fs.pathExists(installerConfigPath)) {
|
|
312
|
+
return srcModulePath;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Also check for custom.yaml in src/modules/_module-installer
|
|
316
|
+
const customConfigPath = path.join(srcModulePath, '_module-installer', 'custom.yaml');
|
|
317
|
+
if (await fs.pathExists(customConfigPath)) {
|
|
318
|
+
return srcModulePath;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// If not found in src/modules, search the entire project
|
|
323
|
+
const allModulePaths = await this.findModulesInProject();
|
|
324
|
+
for (const modulePath of allModulePaths) {
|
|
325
|
+
if (path.basename(modulePath) === moduleName) {
|
|
326
|
+
return modulePath;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
// Also check by module ID (not just folder name)
|
|
331
|
+
// Need to read configs to match by ID
|
|
332
|
+
for (const modulePath of allModulePaths) {
|
|
333
|
+
const installerConfigPath = path.join(modulePath, '_module-installer', 'install-config.yaml');
|
|
334
|
+
const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
|
|
335
|
+
const rootCustomConfigPath = path.join(modulePath, 'custom.yaml');
|
|
336
|
+
|
|
337
|
+
let configPath = null;
|
|
338
|
+
if (await fs.pathExists(installerConfigPath)) {
|
|
339
|
+
configPath = installerConfigPath;
|
|
340
|
+
} else if (await fs.pathExists(customConfigPath)) {
|
|
341
|
+
configPath = customConfigPath;
|
|
342
|
+
} else if (await fs.pathExists(rootCustomConfigPath)) {
|
|
343
|
+
configPath = rootCustomConfigPath;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if (configPath) {
|
|
347
|
+
try {
|
|
348
|
+
const configContent = await fs.readFile(configPath, 'utf8');
|
|
349
|
+
const config = yaml.load(configContent);
|
|
350
|
+
if (config.code === moduleName) {
|
|
351
|
+
return modulePath;
|
|
352
|
+
}
|
|
353
|
+
} catch {
|
|
354
|
+
// Skip if can't read config
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
|
|
154
362
|
/**
|
|
155
363
|
* Install a module
|
|
156
364
|
* @param {string} moduleName - Name of the module to install
|
|
@@ -162,12 +370,41 @@ class ModuleManager {
|
|
|
162
370
|
* @param {Object} options.logger - Logger instance for output
|
|
163
371
|
*/
|
|
164
372
|
async install(moduleName, bmadDir, fileTrackingCallback = null, options = {}) {
|
|
165
|
-
const sourcePath =
|
|
373
|
+
const sourcePath = await this.findModuleSource(moduleName);
|
|
166
374
|
const targetPath = path.join(bmadDir, moduleName);
|
|
167
375
|
|
|
168
376
|
// Check if source module exists
|
|
169
|
-
if (!
|
|
170
|
-
throw new Error(`Module '${moduleName}' not found in
|
|
377
|
+
if (!sourcePath) {
|
|
378
|
+
throw new Error(`Module '${moduleName}' not found in any source location`);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
// Check if this is a custom module and read its custom.yaml values
|
|
382
|
+
let customConfig = null;
|
|
383
|
+
const rootCustomConfigPath = path.join(sourcePath, 'custom.yaml');
|
|
384
|
+
const moduleInstallerCustomPath = path.join(sourcePath, '_module-installer', 'custom.yaml');
|
|
385
|
+
|
|
386
|
+
if (await fs.pathExists(rootCustomConfigPath)) {
|
|
387
|
+
try {
|
|
388
|
+
const customContent = await fs.readFile(rootCustomConfigPath, 'utf8');
|
|
389
|
+
customConfig = yaml.load(customContent);
|
|
390
|
+
} catch (error) {
|
|
391
|
+
console.warn(chalk.yellow(`Warning: Failed to read custom.yaml for ${moduleName}:`, error.message));
|
|
392
|
+
}
|
|
393
|
+
} else if (await fs.pathExists(moduleInstallerCustomPath)) {
|
|
394
|
+
try {
|
|
395
|
+
const customContent = await fs.readFile(moduleInstallerCustomPath, 'utf8');
|
|
396
|
+
customConfig = yaml.load(customContent);
|
|
397
|
+
} catch (error) {
|
|
398
|
+
console.warn(chalk.yellow(`Warning: Failed to read custom.yaml for ${moduleName}:`, error.message));
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// If this is a custom module, merge its values into the module config
|
|
403
|
+
if (customConfig) {
|
|
404
|
+
options.moduleConfig = { ...options.moduleConfig, ...customConfig };
|
|
405
|
+
if (options.logger) {
|
|
406
|
+
options.logger.log(chalk.cyan(` Merged custom configuration for ${moduleName}`));
|
|
407
|
+
}
|
|
171
408
|
}
|
|
172
409
|
|
|
173
410
|
// Check if already installed
|
|
@@ -183,6 +420,9 @@ class ModuleManager {
|
|
|
183
420
|
// Copy module files with filtering
|
|
184
421
|
await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback, options.moduleConfig);
|
|
185
422
|
|
|
423
|
+
// Compile any .agent.yaml files to .md format
|
|
424
|
+
await this.compileModuleAgents(sourcePath, targetPath, moduleName, bmadDir);
|
|
425
|
+
|
|
186
426
|
// Process agent files to inject activation block
|
|
187
427
|
await this.processAgentFiles(targetPath, moduleName);
|
|
188
428
|
|
|
@@ -205,12 +445,12 @@ class ModuleManager {
|
|
|
205
445
|
* @param {boolean} force - Force update (overwrite modifications)
|
|
206
446
|
*/
|
|
207
447
|
async update(moduleName, bmadDir, force = false) {
|
|
208
|
-
const sourcePath =
|
|
448
|
+
const sourcePath = await this.findModuleSource(moduleName);
|
|
209
449
|
const targetPath = path.join(bmadDir, moduleName);
|
|
210
450
|
|
|
211
451
|
// Check if source module exists
|
|
212
|
-
if (!
|
|
213
|
-
throw new Error(`Module '${moduleName}' not found in source`);
|
|
452
|
+
if (!sourcePath) {
|
|
453
|
+
throw new Error(`Module '${moduleName}' not found in any source location`);
|
|
214
454
|
}
|
|
215
455
|
|
|
216
456
|
// Check if module is installed
|
|
@@ -325,13 +565,29 @@ class ModuleManager {
|
|
|
325
565
|
continue;
|
|
326
566
|
}
|
|
327
567
|
|
|
568
|
+
// Skip sidecar directories - they are handled separately during agent compilation
|
|
569
|
+
if (
|
|
570
|
+
path
|
|
571
|
+
.dirname(file)
|
|
572
|
+
.split('/')
|
|
573
|
+
.some((dir) => dir.toLowerCase().includes('sidecar'))
|
|
574
|
+
) {
|
|
575
|
+
continue;
|
|
576
|
+
}
|
|
577
|
+
|
|
328
578
|
// Skip _module-installer directory - it's only needed at install time
|
|
329
579
|
if (file.startsWith('_module-installer/')) {
|
|
330
580
|
continue;
|
|
331
581
|
}
|
|
332
582
|
|
|
333
583
|
// Skip config.yaml templates - we'll generate clean ones with actual values
|
|
334
|
-
|
|
584
|
+
// Also skip custom.yaml files - their values will be merged into core config
|
|
585
|
+
if (file === 'config.yaml' || file.endsWith('/config.yaml') || file === 'custom.yaml' || file.endsWith('/custom.yaml')) {
|
|
586
|
+
continue;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
// Skip .agent.yaml files - they will be compiled separately
|
|
590
|
+
if (file.endsWith('.agent.yaml')) {
|
|
335
591
|
continue;
|
|
336
592
|
}
|
|
337
593
|
|
|
@@ -396,8 +652,9 @@ class ModuleManager {
|
|
|
396
652
|
// Read the source YAML file
|
|
397
653
|
let yamlContent = await fs.readFile(sourceFile, 'utf8');
|
|
398
654
|
|
|
399
|
-
// IMPORTANT: Replace
|
|
655
|
+
// IMPORTANT: Replace escape sequence and placeholder BEFORE parsing YAML
|
|
400
656
|
// Otherwise parsing will fail on the placeholder
|
|
657
|
+
yamlContent = yamlContent.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
|
401
658
|
yamlContent = yamlContent.replaceAll('{bmad_folder}', this.bmadFolderName);
|
|
402
659
|
|
|
403
660
|
try {
|
|
@@ -476,6 +733,152 @@ class ModuleManager {
|
|
|
476
733
|
}
|
|
477
734
|
}
|
|
478
735
|
|
|
736
|
+
/**
|
|
737
|
+
* Compile .agent.yaml files to .md format in modules
|
|
738
|
+
* @param {string} sourcePath - Source module path
|
|
739
|
+
* @param {string} targetPath - Target module path
|
|
740
|
+
* @param {string} moduleName - Module name
|
|
741
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
742
|
+
*/
|
|
743
|
+
async compileModuleAgents(sourcePath, targetPath, moduleName, bmadDir) {
|
|
744
|
+
const sourceAgentsPath = path.join(sourcePath, 'agents');
|
|
745
|
+
const targetAgentsPath = path.join(targetPath, 'agents');
|
|
746
|
+
const cfgAgentsDir = path.join(bmadDir, '_cfg', 'agents');
|
|
747
|
+
|
|
748
|
+
// Check if agents directory exists in source
|
|
749
|
+
if (!(await fs.pathExists(sourceAgentsPath))) {
|
|
750
|
+
return; // No agents to compile
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
// Get all agent YAML files recursively
|
|
754
|
+
const agentFiles = await this.findAgentFiles(sourceAgentsPath);
|
|
755
|
+
|
|
756
|
+
for (const agentFile of agentFiles) {
|
|
757
|
+
if (!agentFile.endsWith('.agent.yaml')) continue;
|
|
758
|
+
|
|
759
|
+
const relativePath = path.relative(sourceAgentsPath, agentFile);
|
|
760
|
+
const targetDir = path.join(targetAgentsPath, path.dirname(relativePath));
|
|
761
|
+
|
|
762
|
+
await fs.ensureDir(targetDir);
|
|
763
|
+
|
|
764
|
+
const agentName = path.basename(agentFile, '.agent.yaml');
|
|
765
|
+
const sourceYamlPath = agentFile;
|
|
766
|
+
const targetMdPath = path.join(targetDir, `${agentName}.md`);
|
|
767
|
+
const customizePath = path.join(cfgAgentsDir, `${moduleName}-${agentName}.customize.yaml`);
|
|
768
|
+
|
|
769
|
+
// Read and compile the YAML
|
|
770
|
+
try {
|
|
771
|
+
const yamlContent = await fs.readFile(sourceYamlPath, 'utf8');
|
|
772
|
+
const { compileAgent } = require('../../../lib/agent/compiler');
|
|
773
|
+
|
|
774
|
+
// Create customize template if it doesn't exist
|
|
775
|
+
if (!(await fs.pathExists(customizePath))) {
|
|
776
|
+
const { getSourcePath } = require('../../../lib/project-root');
|
|
777
|
+
const genericTemplatePath = getSourcePath('utility', 'templates', 'agent.customize.template.yaml');
|
|
778
|
+
if (await fs.pathExists(genericTemplatePath)) {
|
|
779
|
+
await this.copyFileWithPlaceholderReplacement(genericTemplatePath, customizePath);
|
|
780
|
+
console.log(chalk.dim(` Created customize: ${moduleName}-${agentName}.customize.yaml`));
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// Check for customizations
|
|
785
|
+
let customizedFields = [];
|
|
786
|
+
if (await fs.pathExists(customizePath)) {
|
|
787
|
+
const customizeContent = await fs.readFile(customizePath, 'utf8');
|
|
788
|
+
const customizeData = yaml.load(customizeContent);
|
|
789
|
+
customizedFields = customizeData.customized_fields || [];
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
// Load core config to get agent_sidecar_folder
|
|
793
|
+
const coreConfigPath = path.join(bmadDir, 'bmb', 'config.yaml');
|
|
794
|
+
let coreConfig = {};
|
|
795
|
+
|
|
796
|
+
if (await fs.pathExists(coreConfigPath)) {
|
|
797
|
+
const yamlLib = require('yaml');
|
|
798
|
+
const coreConfigContent = await fs.readFile(coreConfigPath, 'utf8');
|
|
799
|
+
coreConfig = yamlLib.parse(coreConfigContent);
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
// Check if agent has sidecar
|
|
803
|
+
let hasSidecar = false;
|
|
804
|
+
try {
|
|
805
|
+
const yamlLib = require('yaml');
|
|
806
|
+
const agentYaml = yamlLib.parse(yamlContent);
|
|
807
|
+
hasSidecar = agentYaml?.agent?.metadata?.hasSidecar === true;
|
|
808
|
+
} catch {
|
|
809
|
+
// Continue without sidecar processing
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
// Compile with customizations if any
|
|
813
|
+
const { xml } = compileAgent(yamlContent, {}, agentName, relativePath, { config: this.coreConfig });
|
|
814
|
+
|
|
815
|
+
// Write the compiled MD file
|
|
816
|
+
await fs.writeFile(targetMdPath, xml, 'utf8');
|
|
817
|
+
|
|
818
|
+
// Copy sidecar files if agent has hasSidecar flag
|
|
819
|
+
if (hasSidecar) {
|
|
820
|
+
const { copyAgentSidecarFiles } = require('../../../lib/agent/installer');
|
|
821
|
+
|
|
822
|
+
// Get agent sidecar folder from core config (should always be set)
|
|
823
|
+
const agentSidecarFolder = this.coreConfig?.agent_sidecar_folder;
|
|
824
|
+
|
|
825
|
+
// Resolve path variables
|
|
826
|
+
const projectDir = path.dirname(bmadDir);
|
|
827
|
+
const resolvedSidecarFolder = agentSidecarFolder
|
|
828
|
+
.replaceAll('{project-root}', projectDir)
|
|
829
|
+
.replaceAll('{bmad_folder}', path.basename(bmadDir));
|
|
830
|
+
|
|
831
|
+
// Create sidecar directory for this agent
|
|
832
|
+
const agentSidecarDir = path.join(resolvedSidecarFolder, agentName);
|
|
833
|
+
await fs.ensureDir(agentSidecarDir);
|
|
834
|
+
|
|
835
|
+
// Copy sidecar files (preserve existing, add new)
|
|
836
|
+
const sidecarResult = copyAgentSidecarFiles(path.dirname(sourceYamlPath), agentSidecarDir, sourceYamlPath);
|
|
837
|
+
const totalFiles = sidecarResult.copied.length + sidecarResult.preserved.length;
|
|
838
|
+
|
|
839
|
+
if (sidecarResult.copied.length > 0) {
|
|
840
|
+
console.log(chalk.dim(` Copied ${sidecarResult.copied.length} new sidecar file(s) to: ${agentSidecarDir}`));
|
|
841
|
+
}
|
|
842
|
+
if (sidecarResult.preserved.length > 0) {
|
|
843
|
+
console.log(chalk.dim(` Preserved ${sidecarResult.preserved.length} existing sidecar file(s)`));
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
console.log(
|
|
848
|
+
chalk.dim(` Compiled agent: ${agentName} -> ${path.relative(targetPath, targetMdPath)}${hasSidecar ? ' (with sidecar)' : ''}`),
|
|
849
|
+
);
|
|
850
|
+
} catch (error) {
|
|
851
|
+
console.warn(chalk.yellow(` Failed to compile agent ${agentName}:`, error.message));
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* Find all .agent.yaml files recursively in a directory
|
|
858
|
+
* @param {string} dir - Directory to search
|
|
859
|
+
* @returns {Array} List of .agent.yaml file paths
|
|
860
|
+
*/
|
|
861
|
+
async findAgentFiles(dir) {
|
|
862
|
+
const agentFiles = [];
|
|
863
|
+
|
|
864
|
+
async function searchDirectory(searchDir) {
|
|
865
|
+
const entries = await fs.readdir(searchDir, { withFileTypes: true });
|
|
866
|
+
|
|
867
|
+
for (const entry of entries) {
|
|
868
|
+
const fullPath = path.join(searchDir, entry.name);
|
|
869
|
+
|
|
870
|
+
if (entry.isFile() && entry.name.endsWith('.agent.yaml')) {
|
|
871
|
+
agentFiles.push(fullPath);
|
|
872
|
+
} else if (entry.isDirectory()) {
|
|
873
|
+
await searchDirectory(fullPath);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
await searchDirectory(dir);
|
|
879
|
+
return agentFiles;
|
|
880
|
+
}
|
|
881
|
+
|
|
479
882
|
/**
|
|
480
883
|
* Process agent files to inject activation block
|
|
481
884
|
* @param {string} modulePath - Path to installed module
|
|
@@ -489,24 +892,49 @@ class ModuleManager {
|
|
|
489
892
|
return; // No agents to process
|
|
490
893
|
}
|
|
491
894
|
|
|
492
|
-
// Get all agent files
|
|
493
|
-
const agentFiles = await
|
|
895
|
+
// Get all agent MD files recursively
|
|
896
|
+
const agentFiles = await this.findAgentMdFiles(agentsPath);
|
|
494
897
|
|
|
495
898
|
for (const agentFile of agentFiles) {
|
|
496
899
|
if (!agentFile.endsWith('.md')) continue;
|
|
497
900
|
|
|
498
|
-
|
|
499
|
-
let content = await fs.readFile(agentPath, 'utf8');
|
|
901
|
+
let content = await fs.readFile(agentFile, 'utf8');
|
|
500
902
|
|
|
501
903
|
// Check if content has agent XML and no activation block
|
|
502
904
|
if (content.includes('<agent') && !content.includes('<activation')) {
|
|
503
905
|
// Inject the activation block using XML handler
|
|
504
906
|
content = this.xmlHandler.injectActivationSimple(content);
|
|
505
|
-
await fs.writeFile(
|
|
907
|
+
await fs.writeFile(agentFile, content, 'utf8');
|
|
506
908
|
}
|
|
507
909
|
}
|
|
508
910
|
}
|
|
509
911
|
|
|
912
|
+
/**
|
|
913
|
+
* Find all .md agent files recursively in a directory
|
|
914
|
+
* @param {string} dir - Directory to search
|
|
915
|
+
* @returns {Array} List of .md agent file paths
|
|
916
|
+
*/
|
|
917
|
+
async findAgentMdFiles(dir) {
|
|
918
|
+
const agentFiles = [];
|
|
919
|
+
|
|
920
|
+
async function searchDirectory(searchDir) {
|
|
921
|
+
const entries = await fs.readdir(searchDir, { withFileTypes: true });
|
|
922
|
+
|
|
923
|
+
for (const entry of entries) {
|
|
924
|
+
const fullPath = path.join(searchDir, entry.name);
|
|
925
|
+
|
|
926
|
+
if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
927
|
+
agentFiles.push(fullPath);
|
|
928
|
+
} else if (entry.isDirectory()) {
|
|
929
|
+
await searchDirectory(fullPath);
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
await searchDirectory(dir);
|
|
935
|
+
return agentFiles;
|
|
936
|
+
}
|
|
937
|
+
|
|
510
938
|
/**
|
|
511
939
|
* Vendor cross-module workflows referenced in agent files
|
|
512
940
|
* Scans SOURCE agent.yaml files for workflow-install and copies workflows to destination
|
|
@@ -648,7 +1076,11 @@ class ModuleManager {
|
|
|
648
1076
|
if (moduleName === 'core') {
|
|
649
1077
|
sourcePath = getSourcePath('core');
|
|
650
1078
|
} else {
|
|
651
|
-
sourcePath =
|
|
1079
|
+
sourcePath = await this.findModuleSource(moduleName);
|
|
1080
|
+
if (!sourcePath) {
|
|
1081
|
+
// No source found, skip module installer
|
|
1082
|
+
return;
|
|
1083
|
+
}
|
|
652
1084
|
}
|
|
653
1085
|
|
|
654
1086
|
const installerPath = path.join(sourcePath, '_module-installer', 'installer.js');
|
|
@@ -677,6 +1109,7 @@ class ModuleManager {
|
|
|
677
1109
|
const result = await moduleInstaller.install({
|
|
678
1110
|
projectRoot,
|
|
679
1111
|
config: options.moduleConfig || {},
|
|
1112
|
+
coreConfig: options.coreConfig || {},
|
|
680
1113
|
installedIDEs: options.installedIDEs || [],
|
|
681
1114
|
logger,
|
|
682
1115
|
});
|