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
|
@@ -34,9 +34,13 @@ class ManifestGenerator {
|
|
|
34
34
|
|
|
35
35
|
// Store modules list (all modules including preserved ones)
|
|
36
36
|
const preservedModules = options.preservedModules || [];
|
|
37
|
+
|
|
38
|
+
// Scan the bmad directory to find all actually installed modules
|
|
39
|
+
const installedModules = await this.scanInstalledModules(bmadDir);
|
|
40
|
+
|
|
37
41
|
// Deduplicate modules list to prevent duplicates
|
|
38
|
-
this.modules = [...new Set(['core', ...selectedModules, ...preservedModules])];
|
|
39
|
-
this.updatedModules = [...new Set(['core', ...selectedModules])]; //
|
|
42
|
+
this.modules = [...new Set(['core', ...selectedModules, ...preservedModules, ...installedModules])];
|
|
43
|
+
this.updatedModules = [...new Set(['core', ...selectedModules, ...installedModules])]; // All installed modules get rescanned
|
|
40
44
|
this.preservedModules = preservedModules; // These stay as-is in CSVs
|
|
41
45
|
this.bmadDir = bmadDir;
|
|
42
46
|
this.bmadFolderName = path.basename(bmadDir); // Get the actual folder name (e.g., '.bmad' or 'bmad')
|
|
@@ -105,7 +109,7 @@ class ManifestGenerator {
|
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
/**
|
|
108
|
-
* Recursively find and parse workflow.yaml files
|
|
112
|
+
* Recursively find and parse workflow.yaml and workflow.md files
|
|
109
113
|
*/
|
|
110
114
|
async getWorkflowsFromPath(basePath, moduleName) {
|
|
111
115
|
const workflows = [];
|
|
@@ -126,11 +130,23 @@ class ManifestGenerator {
|
|
|
126
130
|
// Recurse into subdirectories
|
|
127
131
|
const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
128
132
|
await findWorkflows(fullPath, newRelativePath);
|
|
129
|
-
} else if (entry.name === 'workflow.yaml') {
|
|
130
|
-
// Parse workflow file
|
|
133
|
+
} else if (entry.name === 'workflow.yaml' || entry.name === 'workflow.md') {
|
|
134
|
+
// Parse workflow file (both YAML and MD formats)
|
|
131
135
|
try {
|
|
132
136
|
const content = await fs.readFile(fullPath, 'utf8');
|
|
133
|
-
|
|
137
|
+
|
|
138
|
+
let workflow;
|
|
139
|
+
if (entry.name === 'workflow.yaml') {
|
|
140
|
+
// Parse YAML workflow
|
|
141
|
+
workflow = yaml.load(content);
|
|
142
|
+
} else {
|
|
143
|
+
// Parse MD workflow with YAML frontmatter
|
|
144
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
145
|
+
if (!frontmatterMatch) {
|
|
146
|
+
continue; // Skip MD files without frontmatter
|
|
147
|
+
}
|
|
148
|
+
workflow = yaml.load(frontmatterMatch[1]);
|
|
149
|
+
}
|
|
134
150
|
|
|
135
151
|
// Skip template workflows (those with placeholder values)
|
|
136
152
|
if (workflow.name && workflow.name.includes('{') && workflow.name.includes('}')) {
|
|
@@ -141,18 +157,15 @@ class ManifestGenerator {
|
|
|
141
157
|
// Build relative path for installation
|
|
142
158
|
const installPath =
|
|
143
159
|
moduleName === 'core'
|
|
144
|
-
? `${this.bmadFolderName}/core/workflows/${relativePath}
|
|
145
|
-
: `${this.bmadFolderName}/${moduleName}/workflows/${relativePath}
|
|
146
|
-
|
|
147
|
-
// Check for standalone property (default: false)
|
|
148
|
-
const standalone = workflow.standalone === true;
|
|
160
|
+
? `${this.bmadFolderName}/core/workflows/${relativePath}/${entry.name}`
|
|
161
|
+
: `${this.bmadFolderName}/${moduleName}/workflows/${relativePath}/${entry.name}`;
|
|
149
162
|
|
|
163
|
+
// ALL workflows now generate commands - no standalone property needed
|
|
150
164
|
workflows.push({
|
|
151
165
|
name: workflow.name,
|
|
152
166
|
description: workflow.description.replaceAll('"', '""'), // Escape quotes for CSV
|
|
153
167
|
module: moduleName,
|
|
154
168
|
path: installPath,
|
|
155
|
-
standalone: standalone,
|
|
156
169
|
});
|
|
157
170
|
|
|
158
171
|
// Add to files list
|
|
@@ -207,18 +220,23 @@ class ManifestGenerator {
|
|
|
207
220
|
}
|
|
208
221
|
|
|
209
222
|
/**
|
|
210
|
-
* Get agents from a directory
|
|
223
|
+
* Get agents from a directory recursively
|
|
211
224
|
* Only includes compiled .md files (not .agent.yaml source files)
|
|
212
225
|
*/
|
|
213
|
-
async getAgentsFromDir(dirPath, moduleName) {
|
|
226
|
+
async getAgentsFromDir(dirPath, moduleName, relativePath = '') {
|
|
214
227
|
const agents = [];
|
|
215
|
-
const
|
|
228
|
+
const entries = await fs.readdir(dirPath, { withFileTypes: true });
|
|
216
229
|
|
|
217
|
-
for (const
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
230
|
+
for (const entry of entries) {
|
|
231
|
+
const fullPath = path.join(dirPath, entry.name);
|
|
232
|
+
|
|
233
|
+
if (entry.isDirectory()) {
|
|
234
|
+
// Recurse into subdirectories
|
|
235
|
+
const newRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
236
|
+
const subDirAgents = await this.getAgentsFromDir(fullPath, moduleName, newRelativePath);
|
|
237
|
+
agents.push(...subDirAgents);
|
|
238
|
+
} else if (entry.name.endsWith('.md') && !entry.name.endsWith('.agent.yaml') && entry.name.toLowerCase() !== 'readme.md') {
|
|
239
|
+
const content = await fs.readFile(fullPath, 'utf8');
|
|
222
240
|
|
|
223
241
|
// Skip files that don't contain <agent> tag (e.g., README files)
|
|
224
242
|
if (!content.includes('<agent')) {
|
|
@@ -242,10 +260,13 @@ class ManifestGenerator {
|
|
|
242
260
|
const principlesMatch = content.match(/<principles>([\s\S]*?)<\/principles>/);
|
|
243
261
|
|
|
244
262
|
// Build relative path for installation
|
|
263
|
+
const fileRelativePath = relativePath ? `${relativePath}/${entry.name}` : entry.name;
|
|
245
264
|
const installPath =
|
|
246
|
-
moduleName === 'core'
|
|
265
|
+
moduleName === 'core'
|
|
266
|
+
? `${this.bmadFolderName}/core/agents/${fileRelativePath}`
|
|
267
|
+
: `${this.bmadFolderName}/${moduleName}/agents/${fileRelativePath}`;
|
|
247
268
|
|
|
248
|
-
const agentName =
|
|
269
|
+
const agentName = entry.name.replace('.md', '');
|
|
249
270
|
|
|
250
271
|
// Helper function to clean and escape CSV content
|
|
251
272
|
const cleanForCSV = (text) => {
|
|
@@ -541,12 +562,12 @@ class ManifestGenerator {
|
|
|
541
562
|
async writeWorkflowManifest(cfgDir) {
|
|
542
563
|
const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
|
|
543
564
|
|
|
544
|
-
// Create CSV header
|
|
545
|
-
let csv = 'name,description,module,path
|
|
565
|
+
// Create CSV header - removed standalone column as ALL workflows now generate commands
|
|
566
|
+
let csv = 'name,description,module,path\n';
|
|
546
567
|
|
|
547
|
-
// Add all workflows
|
|
568
|
+
// Add all workflows - no standalone property needed anymore
|
|
548
569
|
for (const workflow of this.workflows) {
|
|
549
|
-
csv += `"${workflow.name}","${workflow.description}","${workflow.module}","${workflow.path}"
|
|
570
|
+
csv += `"${workflow.name}","${workflow.description}","${workflow.module}","${workflow.path}"\n`;
|
|
550
571
|
}
|
|
551
572
|
|
|
552
573
|
await fs.writeFile(csvPath, csv);
|
|
@@ -641,13 +662,14 @@ class ManifestGenerator {
|
|
|
641
662
|
if (this.allInstalledFiles && this.allInstalledFiles.length > 0) {
|
|
642
663
|
// Process all installed files
|
|
643
664
|
for (const filePath of this.allInstalledFiles) {
|
|
644
|
-
|
|
665
|
+
// Store paths relative to bmadDir (no folder prefix)
|
|
666
|
+
const relativePath = filePath.replace(this.bmadDir, '').replaceAll('\\', '/').replace(/^\//, '');
|
|
645
667
|
const ext = path.extname(filePath).toLowerCase();
|
|
646
668
|
const fileName = path.basename(filePath, ext);
|
|
647
669
|
|
|
648
|
-
// Determine module from path
|
|
670
|
+
// Determine module from path (first directory component)
|
|
649
671
|
const pathParts = relativePath.split('/');
|
|
650
|
-
const module = pathParts.length >
|
|
672
|
+
const module = pathParts.length > 0 ? pathParts[0] : 'unknown';
|
|
651
673
|
|
|
652
674
|
// Calculate hash
|
|
653
675
|
const hash = await this.calculateFileHash(filePath);
|
|
@@ -663,10 +685,13 @@ class ManifestGenerator {
|
|
|
663
685
|
} else {
|
|
664
686
|
// Fallback: use the collected workflows/agents/tasks
|
|
665
687
|
for (const file of this.files) {
|
|
666
|
-
|
|
688
|
+
// Strip the folder prefix if present (for consistency)
|
|
689
|
+
const relPath = file.path.replace(this.bmadFolderName + '/', '');
|
|
690
|
+
const filePath = path.join(this.bmadDir, relPath);
|
|
667
691
|
const hash = await this.calculateFileHash(filePath);
|
|
668
692
|
allFiles.push({
|
|
669
693
|
...file,
|
|
694
|
+
path: relPath,
|
|
670
695
|
hash: hash,
|
|
671
696
|
});
|
|
672
697
|
}
|
|
@@ -687,6 +712,42 @@ class ManifestGenerator {
|
|
|
687
712
|
await fs.writeFile(csvPath, csv);
|
|
688
713
|
return csvPath;
|
|
689
714
|
}
|
|
715
|
+
|
|
716
|
+
/**
|
|
717
|
+
* Scan the bmad directory to find all installed modules
|
|
718
|
+
* @param {string} bmadDir - Path to bmad directory
|
|
719
|
+
* @returns {Array} List of module names
|
|
720
|
+
*/
|
|
721
|
+
async scanInstalledModules(bmadDir) {
|
|
722
|
+
const modules = [];
|
|
723
|
+
|
|
724
|
+
try {
|
|
725
|
+
const entries = await fs.readdir(bmadDir, { withFileTypes: true });
|
|
726
|
+
|
|
727
|
+
for (const entry of entries) {
|
|
728
|
+
// Skip if not a directory or is a special directory
|
|
729
|
+
if (!entry.isDirectory() || entry.name.startsWith('.') || entry.name === '_cfg') {
|
|
730
|
+
continue;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
// Check if this looks like a module (has agents, workflows, or tasks directory)
|
|
734
|
+
const modulePath = path.join(bmadDir, entry.name);
|
|
735
|
+
const hasAgents = await fs.pathExists(path.join(modulePath, 'agents'));
|
|
736
|
+
const hasWorkflows = await fs.pathExists(path.join(modulePath, 'workflows'));
|
|
737
|
+
const hasTasks = await fs.pathExists(path.join(modulePath, 'tasks'));
|
|
738
|
+
const hasTools = await fs.pathExists(path.join(modulePath, 'tools'));
|
|
739
|
+
|
|
740
|
+
// If it has any of these directories, it's likely a module
|
|
741
|
+
if (hasAgents || hasWorkflows || hasTasks || hasTools) {
|
|
742
|
+
modules.push(entry.name);
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
} catch (error) {
|
|
746
|
+
console.warn(`Warning: Could not scan for installed modules: ${error.message}`);
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
return modules;
|
|
750
|
+
}
|
|
690
751
|
}
|
|
691
752
|
|
|
692
753
|
module.exports = { ManifestGenerator };
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-installation sidecar folder replacement utility
|
|
3
|
+
* Replaces {agent_sidecar_folder} placeholders in all installed agents
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs-extra');
|
|
7
|
+
const path = require('node:path');
|
|
8
|
+
const yaml = require('yaml');
|
|
9
|
+
const glob = require('glob');
|
|
10
|
+
const chalk = require('chalk');
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Replace {agent_sidecar_folder} placeholders in all agent files
|
|
14
|
+
* @param {string} bmadDir - Path to .bmad directory
|
|
15
|
+
* @returns {Object} Statistics about replacements made
|
|
16
|
+
*/
|
|
17
|
+
async function replaceAgentSidecarFolders(bmadDir) {
|
|
18
|
+
const results = {
|
|
19
|
+
filesScanned: 0,
|
|
20
|
+
filesReplaced: 0,
|
|
21
|
+
totalReplacements: 0,
|
|
22
|
+
errors: [],
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
// Load core config to get agent_sidecar_folder value
|
|
27
|
+
const coreConfigPath = path.join(bmadDir, 'bmb', 'config.yaml');
|
|
28
|
+
|
|
29
|
+
if (!(await fs.pathExists(coreConfigPath))) {
|
|
30
|
+
throw new Error(`Core config not found at ${coreConfigPath}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const coreConfigContent = await fs.readFile(coreConfigPath, 'utf8');
|
|
34
|
+
const coreConfig = yaml.parse(coreConfigContent);
|
|
35
|
+
const agentSidecarFolder = coreConfig.agent_sidecar_folder;
|
|
36
|
+
|
|
37
|
+
// Use the literal value from config, don't resolve the placeholders
|
|
38
|
+
console.log(chalk.dim(`\n Replacing {agent_sidecar_folder} with: ${agentSidecarFolder}`));
|
|
39
|
+
|
|
40
|
+
// Find all agent .md files
|
|
41
|
+
const agentPattern = path.join(bmadDir, '**/*.md');
|
|
42
|
+
const agentFiles = glob.sync(agentPattern);
|
|
43
|
+
|
|
44
|
+
for (const agentFile of agentFiles) {
|
|
45
|
+
results.filesScanned++;
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
let content = await fs.readFile(agentFile, 'utf8');
|
|
49
|
+
|
|
50
|
+
// Check if file contains {agent_sidecar_folder}
|
|
51
|
+
if (content.includes('{agent_sidecar_folder}')) {
|
|
52
|
+
// Replace all occurrences
|
|
53
|
+
const originalContent = content;
|
|
54
|
+
content = content.replaceAll('{agent_sidecar_folder}', agentSidecarFolder);
|
|
55
|
+
|
|
56
|
+
// Only write if content changed
|
|
57
|
+
if (content !== originalContent) {
|
|
58
|
+
await fs.writeFile(agentFile, content, 'utf8');
|
|
59
|
+
|
|
60
|
+
const replacementCount = (originalContent.match(/{agent_sidecar_folder}/g) || []).length;
|
|
61
|
+
results.filesReplaced++;
|
|
62
|
+
results.totalReplacements += replacementCount;
|
|
63
|
+
|
|
64
|
+
console.log(chalk.dim(` ✓ Replaced ${replacementCount} occurrence(s) in ${path.relative(bmadDir, agentFile)}`));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
results.errors.push(`Error processing ${agentFile}: ${error.message}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return results;
|
|
73
|
+
} catch (error) {
|
|
74
|
+
results.errors.push(`Fatal error: ${error.message}`);
|
|
75
|
+
return results;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
module.exports = { replaceAgentSidecarFolders };
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const yaml = require('js-yaml');
|
|
5
|
+
const { FileOps } = require('../../../lib/file-ops');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Handler for custom content (custom.yaml)
|
|
9
|
+
* Installs custom agents and workflows without requiring a full module structure
|
|
10
|
+
*/
|
|
11
|
+
class CustomHandler {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.fileOps = new FileOps();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Find all custom.yaml files in the project
|
|
18
|
+
* @param {string} projectRoot - Project root directory
|
|
19
|
+
* @returns {Array} List of custom content paths
|
|
20
|
+
*/
|
|
21
|
+
async findCustomContent(projectRoot) {
|
|
22
|
+
const customPaths = [];
|
|
23
|
+
|
|
24
|
+
// Helper function to recursively scan directories
|
|
25
|
+
async function scanDirectory(dir, excludePaths = []) {
|
|
26
|
+
try {
|
|
27
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
28
|
+
|
|
29
|
+
for (const entry of entries) {
|
|
30
|
+
const fullPath = path.join(dir, entry.name);
|
|
31
|
+
|
|
32
|
+
// Skip hidden directories and common exclusions
|
|
33
|
+
if (
|
|
34
|
+
entry.name.startsWith('.') ||
|
|
35
|
+
entry.name === 'node_modules' ||
|
|
36
|
+
entry.name === 'dist' ||
|
|
37
|
+
entry.name === 'build' ||
|
|
38
|
+
entry.name === '.git' ||
|
|
39
|
+
entry.name === 'bmad'
|
|
40
|
+
) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Skip excluded paths
|
|
45
|
+
if (excludePaths.some((exclude) => fullPath.startsWith(exclude))) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (entry.isDirectory()) {
|
|
50
|
+
// Recursively scan subdirectories
|
|
51
|
+
await scanDirectory(fullPath, excludePaths);
|
|
52
|
+
} else if (entry.name === 'custom.yaml') {
|
|
53
|
+
// Found a custom.yaml file
|
|
54
|
+
customPaths.push(fullPath);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
} catch {
|
|
58
|
+
// Ignore errors (e.g., permission denied)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Scan the entire project, but exclude source directories
|
|
63
|
+
await scanDirectory(projectRoot, [path.join(projectRoot, 'src'), path.join(projectRoot, 'tools'), path.join(projectRoot, 'test')]);
|
|
64
|
+
|
|
65
|
+
return customPaths;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Get custom content info from a custom.yaml file
|
|
70
|
+
* @param {string} customYamlPath - Path to custom.yaml file
|
|
71
|
+
* @returns {Object|null} Custom content info
|
|
72
|
+
*/
|
|
73
|
+
async getCustomInfo(customYamlPath) {
|
|
74
|
+
try {
|
|
75
|
+
const configContent = await fs.readFile(customYamlPath, 'utf8');
|
|
76
|
+
|
|
77
|
+
// Try to parse YAML with error handling
|
|
78
|
+
let config;
|
|
79
|
+
try {
|
|
80
|
+
config = yaml.load(configContent);
|
|
81
|
+
} catch (parseError) {
|
|
82
|
+
console.warn(chalk.yellow(`Warning: YAML parse error in ${customYamlPath}:`, parseError.message));
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const customDir = path.dirname(customYamlPath);
|
|
87
|
+
const relativePath = path.relative(process.cwd(), customDir);
|
|
88
|
+
|
|
89
|
+
return {
|
|
90
|
+
id: config.code || path.basename(customDir),
|
|
91
|
+
name: config.name || `Custom: ${path.basename(customDir)}`,
|
|
92
|
+
description: config.description || 'Custom agents and workflows',
|
|
93
|
+
path: customDir,
|
|
94
|
+
relativePath: relativePath,
|
|
95
|
+
defaultSelected: config.default_selected === true,
|
|
96
|
+
config: config,
|
|
97
|
+
};
|
|
98
|
+
} catch (error) {
|
|
99
|
+
console.warn(chalk.yellow(`Warning: Failed to read ${customYamlPath}:`, error.message));
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Install custom content
|
|
106
|
+
* @param {string} customPath - Path to custom content directory
|
|
107
|
+
* @param {string} bmadDir - Target bmad directory
|
|
108
|
+
* @param {Object} config - Configuration from custom.yaml
|
|
109
|
+
* @param {Function} fileTrackingCallback - Optional callback to track installed files
|
|
110
|
+
* @returns {Object} Installation result
|
|
111
|
+
*/
|
|
112
|
+
async install(customPath, bmadDir, config, fileTrackingCallback = null) {
|
|
113
|
+
const results = {
|
|
114
|
+
agentsInstalled: 0,
|
|
115
|
+
workflowsInstalled: 0,
|
|
116
|
+
filesCopied: 0,
|
|
117
|
+
preserved: 0,
|
|
118
|
+
errors: [],
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
try {
|
|
122
|
+
// Create custom directories in bmad
|
|
123
|
+
const bmadCustomDir = path.join(bmadDir, 'custom');
|
|
124
|
+
const bmadAgentsDir = path.join(bmadCustomDir, 'agents');
|
|
125
|
+
const bmadWorkflowsDir = path.join(bmadCustomDir, 'workflows');
|
|
126
|
+
|
|
127
|
+
await fs.ensureDir(bmadCustomDir);
|
|
128
|
+
await fs.ensureDir(bmadAgentsDir);
|
|
129
|
+
await fs.ensureDir(bmadWorkflowsDir);
|
|
130
|
+
|
|
131
|
+
// Process agents - copy entire agents directory structure
|
|
132
|
+
const agentsDir = path.join(customPath, 'agents');
|
|
133
|
+
if (await fs.pathExists(agentsDir)) {
|
|
134
|
+
await this.copyDirectory(agentsDir, bmadAgentsDir, results, fileTrackingCallback, config);
|
|
135
|
+
|
|
136
|
+
// Count agent files
|
|
137
|
+
const agentFiles = await this.findFilesRecursively(agentsDir, ['.agent.yaml', '.md']);
|
|
138
|
+
results.agentsInstalled = agentFiles.length;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Process workflows - copy entire workflows directory structure
|
|
142
|
+
const workflowsDir = path.join(customPath, 'workflows');
|
|
143
|
+
if (await fs.pathExists(workflowsDir)) {
|
|
144
|
+
await this.copyDirectory(workflowsDir, bmadWorkflowsDir, results, fileTrackingCallback, config);
|
|
145
|
+
|
|
146
|
+
// Count workflow files
|
|
147
|
+
const workflowFiles = await this.findFilesRecursively(workflowsDir, ['.md']);
|
|
148
|
+
results.workflowsInstalled = workflowFiles.length;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Process any additional files at root
|
|
152
|
+
const entries = await fs.readdir(customPath, { withFileTypes: true });
|
|
153
|
+
for (const entry of entries) {
|
|
154
|
+
if (entry.isFile() && entry.name !== 'custom.yaml' && !entry.name.startsWith('.') && !entry.name.endsWith('.md')) {
|
|
155
|
+
// Skip .md files at root as they're likely docs
|
|
156
|
+
const sourcePath = path.join(customPath, entry.name);
|
|
157
|
+
const targetPath = path.join(bmadCustomDir, entry.name);
|
|
158
|
+
|
|
159
|
+
try {
|
|
160
|
+
// Check if file already exists
|
|
161
|
+
if (await fs.pathExists(targetPath)) {
|
|
162
|
+
// File already exists, preserve it
|
|
163
|
+
results.preserved = (results.preserved || 0) + 1;
|
|
164
|
+
} else {
|
|
165
|
+
await fs.copy(sourcePath, targetPath);
|
|
166
|
+
results.filesCopied++;
|
|
167
|
+
|
|
168
|
+
if (fileTrackingCallback) {
|
|
169
|
+
fileTrackingCallback(targetPath);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
} catch (error) {
|
|
173
|
+
results.errors.push(`Failed to copy file ${entry.name}: ${error.message}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
} catch (error) {
|
|
178
|
+
results.errors.push(`Installation failed: ${error.message}`);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
return results;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Find all files with specific extensions recursively
|
|
186
|
+
* @param {string} dir - Directory to search
|
|
187
|
+
* @param {Array} extensions - File extensions to match
|
|
188
|
+
* @returns {Array} List of matching files
|
|
189
|
+
*/
|
|
190
|
+
async findFilesRecursively(dir, extensions) {
|
|
191
|
+
const files = [];
|
|
192
|
+
|
|
193
|
+
async function search(currentDir) {
|
|
194
|
+
const entries = await fs.readdir(currentDir, { withFileTypes: true });
|
|
195
|
+
|
|
196
|
+
for (const entry of entries) {
|
|
197
|
+
const fullPath = path.join(currentDir, entry.name);
|
|
198
|
+
|
|
199
|
+
if (entry.isDirectory()) {
|
|
200
|
+
await search(fullPath);
|
|
201
|
+
} else if (extensions.some((ext) => entry.name.endsWith(ext))) {
|
|
202
|
+
files.push(fullPath);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
await search(dir);
|
|
208
|
+
return files;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Recursively copy a directory
|
|
213
|
+
* @param {string} sourceDir - Source directory
|
|
214
|
+
* @param {string} targetDir - Target directory
|
|
215
|
+
* @param {Object} results - Results object to update
|
|
216
|
+
* @param {Function} fileTrackingCallback - Optional callback
|
|
217
|
+
* @param {Object} config - Configuration for placeholder replacement
|
|
218
|
+
*/
|
|
219
|
+
async copyDirectory(sourceDir, targetDir, results, fileTrackingCallback, config) {
|
|
220
|
+
await fs.ensureDir(targetDir);
|
|
221
|
+
const entries = await fs.readdir(sourceDir, { withFileTypes: true });
|
|
222
|
+
|
|
223
|
+
for (const entry of entries) {
|
|
224
|
+
const sourcePath = path.join(sourceDir, entry.name);
|
|
225
|
+
const targetPath = path.join(targetDir, entry.name);
|
|
226
|
+
|
|
227
|
+
if (entry.isDirectory()) {
|
|
228
|
+
await this.copyDirectory(sourcePath, targetPath, results, fileTrackingCallback, config);
|
|
229
|
+
} else {
|
|
230
|
+
try {
|
|
231
|
+
// Check if file already exists
|
|
232
|
+
if (await fs.pathExists(targetPath)) {
|
|
233
|
+
// File already exists, preserve it
|
|
234
|
+
results.preserved = (results.preserved || 0) + 1;
|
|
235
|
+
} else {
|
|
236
|
+
// Copy with placeholder replacement for text files
|
|
237
|
+
const textExtensions = ['.md', '.yaml', '.yml', '.txt', '.json'];
|
|
238
|
+
if (textExtensions.some((ext) => entry.name.endsWith(ext))) {
|
|
239
|
+
await this.fileOps.copyFile(sourcePath, targetPath, {
|
|
240
|
+
bmadFolder: config.bmad_folder || 'bmad',
|
|
241
|
+
userName: config.user_name || 'User',
|
|
242
|
+
communicationLanguage: config.communication_language || 'English',
|
|
243
|
+
outputFolder: config.output_folder || 'docs',
|
|
244
|
+
});
|
|
245
|
+
} else {
|
|
246
|
+
await fs.copy(sourcePath, targetPath);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
results.filesCopied++;
|
|
250
|
+
if (fileTrackingCallback) {
|
|
251
|
+
fileTrackingCallback(targetPath);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
if (entry.name.endsWith('.md')) {
|
|
256
|
+
results.workflowsInstalled++;
|
|
257
|
+
}
|
|
258
|
+
} catch (error) {
|
|
259
|
+
results.errors.push(`Failed to copy ${entry.name}: ${error.message}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
module.exports = { CustomHandler };
|
|
@@ -536,6 +536,11 @@ class BaseIdeSetup {
|
|
|
536
536
|
if (typeof content === 'string' && content.includes('{bmad_folder}')) {
|
|
537
537
|
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
|
538
538
|
}
|
|
539
|
+
|
|
540
|
+
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
|
541
|
+
if (typeof content === 'string' && content.includes('{*bmad_folder*}')) {
|
|
542
|
+
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
|
543
|
+
}
|
|
539
544
|
await this.ensureDir(path.dirname(filePath));
|
|
540
545
|
await fs.writeFile(filePath, content, 'utf8');
|
|
541
546
|
}
|
|
@@ -563,6 +568,11 @@ class BaseIdeSetup {
|
|
|
563
568
|
content = content.replaceAll('{bmad_folder}', this.bmadFolderName);
|
|
564
569
|
}
|
|
565
570
|
|
|
571
|
+
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
|
572
|
+
if (content.includes('{*bmad_folder*}')) {
|
|
573
|
+
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
|
574
|
+
}
|
|
575
|
+
|
|
566
576
|
// Write to dest with replaced content
|
|
567
577
|
await fs.writeFile(dest, content, 'utf8');
|
|
568
578
|
} catch {
|