bmad-method 6.0.0-alpha.14 → 6.0.0-alpha.16
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/.coderabbit.yaml +36 -0
- package/{CODE_OF_CONDUCT.md → .github/CODE_OF_CONDUCT.md} +4 -4
- package/CHANGELOG.md +168 -409
- package/README.md +4 -1
- package/docs/agent-customization-guide.md +7 -7
- package/docs/custom-content-installation.md +245 -0
- package/docs/ide-info/crush.md +1 -1
- package/docs/ide-info/cursor.md +7 -7
- package/docs/ide-info/iflow.md +3 -3
- package/docs/ide-info/opencode.md +1 -1
- package/docs/index.md +2 -2
- package/docs/installers-bundlers/ide-injections.md +2 -2
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +29 -28
- package/docs/v4-to-v6-upgrade.md +10 -10
- package/docs/web-bundles-gemini-gpt-guide.md +2 -2
- package/package.json +1 -1
- package/src/core/_module-installer/installer.js +1 -1
- package/src/core/agents/bmad-master.agent.yaml +5 -5
- package/src/core/agents/bmad-web-orchestrator.agent.xml +6 -6
- package/src/core/{_module-installer/install-config.yaml → module.yaml} +0 -7
- package/src/core/resources/excalidraw/README.md +4 -4
- package/src/core/tasks/advanced-elicitation.xml +3 -3
- package/src/core/tasks/index-docs.xml +1 -1
- package/src/core/tasks/validate-workflow.xml +1 -1
- package/src/core/tasks/workflow.xml +4 -4
- package/src/core/tools/shard-doc.xml +1 -1
- package/src/core/workflows/brainstorming/workflow.md +2 -2
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +2 -2
- package/src/core/workflows/party-mode/workflow.md +4 -4
- package/src/modules/bmb/README.md +2 -2
- package/src/modules/bmb/_module-installer/installer.js +1 -1
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +15 -15
- package/src/modules/bmb/docs/agents/agent-compilation.md +2 -2
- package/src/modules/bmb/docs/agents/agent-menu-patterns.md +22 -22
- package/src/modules/bmb/docs/agents/expert-agent-architecture.md +1 -1
- package/src/modules/bmb/docs/agents/index.md +2 -2
- package/src/modules/bmb/docs/agents/module-agent-architecture.md +50 -51
- package/src/modules/bmb/docs/agents/understanding-agent-types.md +3 -3
- package/src/modules/bmb/docs/workflows/architecture.md +1 -1
- package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +3 -3
- package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +1 -1
- package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +1 -1
- package/src/modules/bmb/docs/workflows/templates/step-file.md +3 -3
- package/src/modules/bmb/docs/workflows/templates/step-template.md +3 -3
- package/src/modules/bmb/docs/workflows/templates/workflow-template.md +2 -2
- package/src/modules/bmb/docs/workflows/templates/workflow.md +1 -1
- package/src/modules/bmb/{_module-installer/install-config.yaml → module.yaml} +0 -1
- package/src/modules/bmb/reference/agents/module-examples/README.md +1 -1
- package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +5 -5
- package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +5 -5
- package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +7 -7
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +4 -4
- package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +3 -3
- package/src/modules/bmb/workflows/create-agent/workflow.md +13 -13
- package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +2 -2
- package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +4 -4
- package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +6 -6
- package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +5 -5
- package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +6 -6
- package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +3 -3
- package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +12 -12
- package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +6 -5
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +6 -5
- package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +7 -7
- package/src/modules/bmb/workflows/create-module/templates/agent.template.md +7 -7
- package/src/modules/bmb/workflows/create-module/templates/installer.template.js +1 -1
- package/src/modules/bmb/workflows/create-module/templates/{install-config.template.yaml → module.template.yaml} +1 -1
- package/src/modules/bmb/workflows/create-module/validation.md +3 -3
- package/src/modules/bmb/workflows/create-module/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +5 -5
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +4 -4
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +10 -10
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +13 -13
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +3 -3
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +1 -1
- package/src/modules/bmb/workflows/create-workflow/workflow.md +1 -1
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +3 -3
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +13 -13
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +5 -5
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +3 -3
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +5 -5
- package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
- package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +4 -4
- package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +6 -6
- package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +3 -3
- package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +6 -6
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +4 -4
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
- package/src/modules/bmb/workflows-legacy/edit-module/README.md +2 -2
- package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +2 -2
- package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +4 -4
- package/src/modules/bmb/workflows-legacy/edit-module/workflow.yaml +10 -10
- package/src/modules/bmb/workflows-legacy/module-brief/README.md +2 -2
- package/src/modules/bmb/workflows-legacy/module-brief/instructions.md +2 -2
- package/src/modules/bmb/workflows-legacy/module-brief/workflow.yaml +4 -4
- package/src/modules/bmgd/README.md +3 -2
- package/src/modules/bmgd/agents/game-architect.agent.yaml +6 -6
- package/src/modules/bmgd/agents/game-designer.agent.yaml +7 -7
- package/src/modules/bmgd/agents/game-dev.agent.yaml +9 -9
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +21 -21
- package/src/modules/bmgd/{_module-installer/install-config.yaml → module.yaml} +0 -1
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
- package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +9 -9
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
- package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +8 -8
- package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +4 -4
- package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
- package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -1
- package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +1 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +3 -3
- package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +1 -1
- package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +2 -2
- package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +2 -2
- package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +1 -1
- package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +2 -2
- package/src/modules/bmm/_module-installer/installer.js +1 -1
- package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +1 -1
- package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +1 -1
- package/src/modules/bmm/agents/analyst.agent.yaml +8 -8
- package/src/modules/bmm/agents/architect.agent.yaml +8 -8
- package/src/modules/bmm/agents/dev.agent.yaml +3 -3
- package/src/modules/bmm/agents/pm.agent.yaml +8 -8
- package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +5 -5
- package/src/modules/bmm/agents/sm.agent.yaml +9 -9
- package/src/modules/bmm/agents/tea.agent.yaml +13 -13
- package/src/modules/bmm/agents/tech-writer.agent.yaml +9 -9
- package/src/modules/bmm/agents/ux-designer.agent.yaml +6 -6
- package/src/modules/bmm/docs/README.md +0 -25
- package/src/modules/bmm/docs/agents-guide.md +4 -4
- package/src/modules/bmm/docs/brownfield-guide.md +4 -4
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +1 -1
- package/src/modules/bmm/docs/party-mode.md +3 -3
- package/src/modules/bmm/docs/quick-start.md +1 -1
- package/src/modules/bmm/docs/test-architecture.md +3 -3
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/docs/workflows-implementation.md +0 -100
- package/src/modules/bmm/{_module-installer/install-config.yaml → module.yaml} +1 -2
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01b-continue.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +3 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-06-complete.md +5 -3
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/research/workflow.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +4 -4
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +2 -2
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +3 -3
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +7 -7
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +8 -8
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +12 -12
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +12 -12
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +10 -10
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +7 -7
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +9 -9
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +9 -9
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +1 -1
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md +4 -4
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +6 -6
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +1 -1
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +1 -1
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
- package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +2 -2
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +1 -1
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +3 -3
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +2 -2
- package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +7 -7
- package/src/modules/bmm/workflows/diagrams/create-dataflow/instructions.md +1 -1
- package/src/modules/bmm/workflows/diagrams/create-dataflow/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/diagrams/create-diagram/instructions.md +2 -2
- package/src/modules/bmm/workflows/diagrams/create-diagram/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/diagrams/create-flowchart/instructions.md +2 -2
- package/src/modules/bmm/workflows/diagrams/create-flowchart/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/diagrams/create-wireframe/instructions.md +1 -1
- package/src/modules/bmm/workflows/diagrams/create-wireframe/workflow.yaml +5 -5
- package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
- package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
- package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
- package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/workflow.md +2 -2
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
- package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +3 -3
- package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +3 -3
- package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
- package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/testarch/trace/instructions.md +6 -6
- package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +1 -1
- package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +4 -4
- package/src/modules/bmm/workflows/workflow-status/instructions.md +3 -3
- package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
- package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
- package/src/modules/cis/README.md +1 -1
- package/src/modules/cis/_module-installer/installer.js +1 -1
- package/src/modules/cis/agents/README.md +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +4 -4
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +4 -4
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +4 -4
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +4 -4
- package/src/modules/cis/agents/presentation-master.agent.yaml +3 -3
- package/src/modules/cis/agents/storyteller.agent.yaml +4 -4
- package/src/modules/cis/{_module-installer/install-config.yaml → module.yaml} +0 -1
- package/src/modules/cis/workflows/README.md +1 -1
- package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
- package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
- package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
- package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
- package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
- package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
- package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
- package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
- package/src/utility/models/agent-activation-ide.xml +3 -3
- package/src/utility/models/agent-activation-web.xml +3 -3
- package/src/utility/models/fragments/activation-steps.xml +1 -1
- package/src/utility/models/fragments/handler-validate-workflow.xml +1 -1
- package/src/utility/models/fragments/handler-workflow.xml +1 -1
- package/src/utility/models/fragments/web-bundle-activation-steps.xml +3 -3
- package/tools/cli/README.md +23 -23
- package/tools/cli/bundlers/web-bundler.js +23 -33
- package/tools/cli/commands/build.js +5 -5
- package/tools/cli/installers/lib/core/config-collector.js +33 -20
- package/tools/cli/installers/lib/core/custom-module-cache.js +251 -0
- package/tools/cli/installers/lib/core/detector.js +8 -4
- package/tools/cli/installers/lib/core/installer.js +885 -98
- package/tools/cli/installers/lib/core/manifest-generator.js +177 -14
- package/tools/cli/installers/lib/core/manifest.js +47 -0
- package/tools/cli/installers/lib/custom/handler.js +147 -20
- package/tools/cli/installers/lib/ide/_base-ide.js +14 -14
- package/tools/cli/installers/lib/ide/gemini.js +4 -4
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +2 -2
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +3 -3
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
- package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +3 -3
- package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +3 -3
- package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +1 -1
- package/tools/cli/installers/lib/modules/manager.js +99 -53
- package/tools/cli/lib/agent/compiler.js +6 -14
- package/tools/cli/lib/agent/installer.js +4 -3
- package/tools/cli/lib/cli-utils.js +21 -4
- package/tools/cli/lib/ui.js +496 -12
- package/tools/cli/regenerate-manifests.js +3 -4
- package/tools/maintainer/review-pr-README.md +55 -0
- package/tools/maintainer/review-pr.md +242 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/bmad-method-6.0.0-alpha.14.tgz +0 -0
- package/docs/custom-agent-installation.md +0 -137
- package/example-custom-content/README.md +0 -4
- package/example-custom-content/agents/commit-poet/commit-poet.agent.yaml +0 -129
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/instructions.md +0 -70
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -111
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -70
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -114
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -134
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -161
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -103
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/memories.md +0 -17
- package/example-custom-content/agents/toolsmith/toolsmith.agent.yaml +0 -109
- package/example-custom-content/custom.yaml +0 -3
- package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +0 -168
- package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +0 -155
- package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +0 -89
- package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +0 -36
- package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +0 -150
- package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +0 -1
- package/example-custom-content/workflows/quiz-master/workflow-plan-quiz-master.md +0 -269
- package/example-custom-content/workflows/quiz-master/workflow.md +0 -54
- package/example-custom-content/workflows/wassup/workflow.md +0 -26
- package/example-custom-module/mwm/README.md +0 -4
- package/example-custom-module/mwm/_module-installer/install-config.yaml +0 -27
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +0 -47
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +0 -17
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +0 -150
- package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +0 -137
- package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +0 -137
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +0 -13
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +0 -30
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +0 -13
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +0 -17
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +0 -124
- package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +0 -31
- package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +0 -45
- package/example-custom-module/mwm/workflows/crisis-support/README.md +0 -31
- package/example-custom-module/mwm/workflows/crisis-support/workflow.md +0 -45
- package/example-custom-module/mwm/workflows/daily-checkin/README.md +0 -32
- package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +0 -45
- package/example-custom-module/mwm/workflows/guided-meditation/README.md +0 -31
- package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +0 -45
- package/example-custom-module/mwm/workflows/wellness-journal/README.md +0 -31
- package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +0 -45
|
@@ -109,7 +109,7 @@ class WorkflowCommandGenerator {
|
|
|
109
109
|
|
|
110
110
|
// Convert source path to installed path
|
|
111
111
|
// From: /Users/.../src/modules/bmm/workflows/.../workflow.yaml
|
|
112
|
-
// To: {project-root}/
|
|
112
|
+
// To: {project-root}/.bmad/bmm/workflows/.../workflow.yaml
|
|
113
113
|
let workflowPath = workflow.path;
|
|
114
114
|
|
|
115
115
|
// Extract the relative path from source
|
|
@@ -131,8 +131,8 @@ class WorkflowCommandGenerator {
|
|
|
131
131
|
.replaceAll('{{module}}', workflow.module)
|
|
132
132
|
.replaceAll('{{description}}', workflow.description)
|
|
133
133
|
.replaceAll('{{workflow_path}}', workflowPath)
|
|
134
|
-
.replaceAll('
|
|
135
|
-
.replaceAll('
|
|
134
|
+
.replaceAll('.bmad', this.bmadFolderName)
|
|
135
|
+
.replaceAll('.bmad', '.bmad');
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
/**
|
|
@@ -6,7 +6,7 @@ description: '{{description}}'
|
|
|
6
6
|
You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
|
|
7
7
|
|
|
8
8
|
<agent-activation CRITICAL="TRUE">
|
|
9
|
-
1. LOAD the FULL agent file from
|
|
9
|
+
1. LOAD the FULL agent file from @.bmad/{{module}}/agents/{{path}}
|
|
10
10
|
2. READ its entire contents - this contains the complete agent persona, menu, and instructions
|
|
11
11
|
3. Execute ALL activation steps exactly as written in the agent file
|
|
12
12
|
4. Follow the agent's persona and menu system precisely
|
|
@@ -3,12 +3,12 @@ prompt = """
|
|
|
3
3
|
CRITICAL: You are now the BMad '{{title}}' agent.
|
|
4
4
|
|
|
5
5
|
PRE-FLIGHT CHECKLIST:
|
|
6
|
-
1. [ ] IMMEDIATE ACTION: Load and parse @{
|
|
7
|
-
2. [ ] IMMEDIATE ACTION: Read and internalize the full agent definition at @{
|
|
6
|
+
1. [ ] IMMEDIATE ACTION: Load and parse @{.bmad}/{{module}}/config.yaml - store ALL config values in memory for use throughout the session.
|
|
7
|
+
2. [ ] IMMEDIATE ACTION: Read and internalize the full agent definition at @{.bmad}/{{module}}/agents/{{name}}.md.
|
|
8
8
|
3. [ ] CONFIRM: The user's name from config is {user_name}.
|
|
9
9
|
|
|
10
10
|
Only after all checks are complete, greet the user by name and display the menu.
|
|
11
11
|
Acknowledge this checklist is complete in your first response.
|
|
12
12
|
|
|
13
|
-
AGENT DEFINITION: @{
|
|
13
|
+
AGENT DEFINITION: @{.bmad}/{{module}}/agents/{{name}}.md
|
|
14
14
|
"""
|
|
@@ -3,10 +3,10 @@ prompt = """
|
|
|
3
3
|
Execute the following BMad Method task workflow:
|
|
4
4
|
|
|
5
5
|
PRE-FLIGHT CHECKLIST:
|
|
6
|
-
1. [ ] IMMEDIATE ACTION: Load and parse @{
|
|
7
|
-
2. [ ] IMMEDIATE ACTION: Read and load the task definition at @{
|
|
6
|
+
1. [ ] IMMEDIATE ACTION: Load and parse @{.bmad}/{{module}}/config.yaml.
|
|
7
|
+
2. [ ] IMMEDIATE ACTION: Read and load the task definition at @{.bmad}/{{module}}/tasks/{{filename}}.
|
|
8
8
|
|
|
9
9
|
Follow all instructions and complete the task as defined.
|
|
10
10
|
|
|
11
|
-
TASK DEFINITION: @{
|
|
11
|
+
TASK DEFINITION: @{.bmad}/{{module}}/tasks/{{filename}}
|
|
12
12
|
"""
|
|
@@ -5,7 +5,7 @@ description: '{{description}}'
|
|
|
5
5
|
IT IS CRITICAL THAT YOU FOLLOW THESE STEPS - while staying in character as the current agent persona you may have loaded:
|
|
6
6
|
|
|
7
7
|
<steps CRITICAL="TRUE">
|
|
8
|
-
1. Always LOAD the FULL
|
|
8
|
+
1. Always LOAD the FULL @.bmad/core/tasks/workflow.xml
|
|
9
9
|
2. READ its entire contents - this is the CORE OS for EXECUTING the specific workflow-config @{{workflow_path}}
|
|
10
10
|
3. Pass the yaml path {{workflow_path}} as 'workflow-config' parameter to the workflow.xml instructions
|
|
11
11
|
4. Follow workflow.xml instructions EXACTLY as written to process and follow the specific workflow config and its instructions
|
|
@@ -22,11 +22,12 @@ const { getProjectRoot, getSourcePath, getModulePath } = require('../../../lib/p
|
|
|
22
22
|
* await manager.install('core-module', '/path/to/bmad');
|
|
23
23
|
*/
|
|
24
24
|
class ModuleManager {
|
|
25
|
-
constructor() {
|
|
25
|
+
constructor(options = {}) {
|
|
26
26
|
// Path to source modules directory
|
|
27
27
|
this.modulesSourcePath = getSourcePath('modules');
|
|
28
28
|
this.xmlHandler = new XmlHandler();
|
|
29
29
|
this.bmadFolderName = 'bmad'; // Default, can be overridden
|
|
30
|
+
this.scanProjectForModules = options.scanProjectForModules !== false; // Default to true for backward compatibility
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
/**
|
|
@@ -46,7 +47,7 @@ class ModuleManager {
|
|
|
46
47
|
}
|
|
47
48
|
|
|
48
49
|
/**
|
|
49
|
-
* Copy a file and replace
|
|
50
|
+
* Copy a file and replace .bmad placeholder with actual folder name
|
|
50
51
|
* @param {string} sourcePath - Source file path
|
|
51
52
|
* @param {string} targetPath - Target file path
|
|
52
53
|
*/
|
|
@@ -61,14 +62,14 @@ class ModuleManager {
|
|
|
61
62
|
// Read the file content
|
|
62
63
|
let content = await fs.readFile(sourcePath, 'utf8');
|
|
63
64
|
|
|
64
|
-
// Replace escape sequence
|
|
65
|
-
if (content.includes('
|
|
66
|
-
content = content.replaceAll('
|
|
65
|
+
// Replace escape sequence .bmad with literal .bmad
|
|
66
|
+
if (content.includes('.bmad')) {
|
|
67
|
+
content = content.replaceAll('.bmad', '.bmad');
|
|
67
68
|
}
|
|
68
69
|
|
|
69
|
-
// Replace
|
|
70
|
-
if (content.includes('
|
|
71
|
-
content = content.replaceAll('
|
|
70
|
+
// Replace .bmad placeholder with actual folder name
|
|
71
|
+
if (content.includes('.bmad')) {
|
|
72
|
+
content = content.replaceAll('.bmad', this.bmadFolderName);
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
// Write to target with replaced content
|
|
@@ -106,7 +107,7 @@ class ModuleManager {
|
|
|
106
107
|
}
|
|
107
108
|
|
|
108
109
|
/**
|
|
109
|
-
* Find all modules in the project by searching for
|
|
110
|
+
* Find all modules in the project by searching for module.yaml files
|
|
110
111
|
* @returns {Array} List of module paths
|
|
111
112
|
*/
|
|
112
113
|
async findModulesInProject() {
|
|
@@ -143,12 +144,14 @@ class ModuleManager {
|
|
|
143
144
|
continue;
|
|
144
145
|
}
|
|
145
146
|
|
|
146
|
-
// Check if this directory contains a module (
|
|
147
|
-
const
|
|
147
|
+
// Check if this directory contains a module (module.yaml OR custom.yaml)
|
|
148
|
+
const moduleConfigPath = path.join(fullPath, 'module.yaml');
|
|
149
|
+
const installerConfigPath = path.join(fullPath, '_module-installer', 'module.yaml');
|
|
148
150
|
const customConfigPath = path.join(fullPath, '_module-installer', 'custom.yaml');
|
|
149
151
|
const rootCustomConfigPath = path.join(fullPath, 'custom.yaml');
|
|
150
152
|
|
|
151
153
|
if (
|
|
154
|
+
(await fs.pathExists(moduleConfigPath)) ||
|
|
152
155
|
(await fs.pathExists(installerConfigPath)) ||
|
|
153
156
|
(await fs.pathExists(customConfigPath)) ||
|
|
154
157
|
(await fs.pathExists(rootCustomConfigPath))
|
|
@@ -175,10 +178,11 @@ class ModuleManager {
|
|
|
175
178
|
|
|
176
179
|
/**
|
|
177
180
|
* List all available modules (excluding core which is always installed)
|
|
178
|
-
* @returns {
|
|
181
|
+
* @returns {Object} Object with modules array and customModules array
|
|
179
182
|
*/
|
|
180
183
|
async listAvailable() {
|
|
181
184
|
const modules = [];
|
|
185
|
+
const customModules = [];
|
|
182
186
|
|
|
183
187
|
// First, scan src/modules (the standard location)
|
|
184
188
|
if (await fs.pathExists(this.modulesSourcePath)) {
|
|
@@ -187,12 +191,17 @@ class ModuleManager {
|
|
|
187
191
|
for (const entry of entries) {
|
|
188
192
|
if (entry.isDirectory()) {
|
|
189
193
|
const modulePath = path.join(this.modulesSourcePath, entry.name);
|
|
190
|
-
// Check for module structure (
|
|
191
|
-
const
|
|
194
|
+
// Check for module structure (module.yaml OR custom.yaml)
|
|
195
|
+
const moduleConfigPath = path.join(modulePath, 'module.yaml');
|
|
196
|
+
const installerConfigPath = path.join(modulePath, '_module-installer', 'module.yaml');
|
|
192
197
|
const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
|
|
193
198
|
|
|
194
199
|
// Skip if this doesn't look like a module
|
|
195
|
-
if (
|
|
200
|
+
if (
|
|
201
|
+
!(await fs.pathExists(moduleConfigPath)) &&
|
|
202
|
+
!(await fs.pathExists(installerConfigPath)) &&
|
|
203
|
+
!(await fs.pathExists(customConfigPath))
|
|
204
|
+
) {
|
|
196
205
|
continue;
|
|
197
206
|
}
|
|
198
207
|
|
|
@@ -209,25 +218,50 @@ class ModuleManager {
|
|
|
209
218
|
}
|
|
210
219
|
}
|
|
211
220
|
|
|
212
|
-
// Then, find all other modules in the project
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
const
|
|
216
|
-
|
|
221
|
+
// Then, find all other modules in the project (only if scanning is enabled)
|
|
222
|
+
if (this.scanProjectForModules) {
|
|
223
|
+
const otherModulePaths = await this.findModulesInProject();
|
|
224
|
+
for (const modulePath of otherModulePaths) {
|
|
225
|
+
const moduleName = path.basename(modulePath);
|
|
226
|
+
const relativePath = path.relative(getProjectRoot(), modulePath);
|
|
217
227
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
228
|
+
// Skip core module - it's always installed first and not selectable
|
|
229
|
+
if (moduleName === 'core') {
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const moduleInfo = await this.getModuleInfo(modulePath, moduleName, relativePath);
|
|
234
|
+
if (moduleInfo && !modules.some((m) => m.id === moduleInfo.id) && !customModules.some((m) => m.id === moduleInfo.id)) {
|
|
235
|
+
// Avoid duplicates - skip if we already have this module ID
|
|
236
|
+
if (moduleInfo.isCustom) {
|
|
237
|
+
customModules.push(moduleInfo);
|
|
238
|
+
} else {
|
|
239
|
+
modules.push(moduleInfo);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
221
242
|
}
|
|
222
243
|
|
|
223
|
-
|
|
224
|
-
if (
|
|
225
|
-
|
|
226
|
-
|
|
244
|
+
// Also check for cached custom modules in _cfg/custom/
|
|
245
|
+
if (this.bmadDir) {
|
|
246
|
+
const customCacheDir = path.join(this.bmadDir, '_cfg', 'custom');
|
|
247
|
+
if (await fs.pathExists(customCacheDir)) {
|
|
248
|
+
const cacheEntries = await fs.readdir(customCacheDir, { withFileTypes: true });
|
|
249
|
+
for (const entry of cacheEntries) {
|
|
250
|
+
if (entry.isDirectory()) {
|
|
251
|
+
const cachePath = path.join(customCacheDir, entry.name);
|
|
252
|
+
const moduleInfo = await this.getModuleInfo(cachePath, entry.name, '_cfg/custom');
|
|
253
|
+
if (moduleInfo && !modules.some((m) => m.id === moduleInfo.id) && !customModules.some((m) => m.id === moduleInfo.id)) {
|
|
254
|
+
moduleInfo.isCustom = true;
|
|
255
|
+
moduleInfo.fromCache = true;
|
|
256
|
+
customModules.push(moduleInfo);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
227
261
|
}
|
|
228
262
|
}
|
|
229
263
|
|
|
230
|
-
return modules;
|
|
264
|
+
return { modules, customModules };
|
|
231
265
|
}
|
|
232
266
|
|
|
233
267
|
/**
|
|
@@ -238,13 +272,16 @@ class ModuleManager {
|
|
|
238
272
|
* @returns {Object|null} Module info or null if not a valid module
|
|
239
273
|
*/
|
|
240
274
|
async getModuleInfo(modulePath, defaultName, sourceDescription) {
|
|
241
|
-
// Check for module structure (
|
|
242
|
-
const
|
|
275
|
+
// Check for module structure (module.yaml OR custom.yaml)
|
|
276
|
+
const moduleConfigPath = path.join(modulePath, 'module.yaml');
|
|
277
|
+
const installerConfigPath = path.join(modulePath, '_module-installer', 'module.yaml');
|
|
243
278
|
const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
|
|
244
279
|
const rootCustomConfigPath = path.join(modulePath, 'custom.yaml');
|
|
245
280
|
let configPath = null;
|
|
246
281
|
|
|
247
|
-
if (await fs.pathExists(
|
|
282
|
+
if (await fs.pathExists(moduleConfigPath)) {
|
|
283
|
+
configPath = moduleConfigPath;
|
|
284
|
+
} else if (await fs.pathExists(installerConfigPath)) {
|
|
248
285
|
configPath = installerConfigPath;
|
|
249
286
|
} else if (await fs.pathExists(customConfigPath)) {
|
|
250
287
|
configPath = customConfigPath;
|
|
@@ -305,10 +342,11 @@ class ModuleManager {
|
|
|
305
342
|
// First, check src/modules
|
|
306
343
|
const srcModulePath = path.join(this.modulesSourcePath, moduleName);
|
|
307
344
|
if (await fs.pathExists(srcModulePath)) {
|
|
308
|
-
// Check if this looks like a module (has
|
|
309
|
-
const
|
|
345
|
+
// Check if this looks like a module (has module.yaml)
|
|
346
|
+
const moduleConfigPath = path.join(srcModulePath, 'module.yaml');
|
|
347
|
+
const installerConfigPath = path.join(srcModulePath, '_module-installer', 'module.yaml');
|
|
310
348
|
|
|
311
|
-
if (await fs.pathExists(installerConfigPath)) {
|
|
349
|
+
if ((await fs.pathExists(moduleConfigPath)) || (await fs.pathExists(installerConfigPath))) {
|
|
312
350
|
return srcModulePath;
|
|
313
351
|
}
|
|
314
352
|
|
|
@@ -330,12 +368,15 @@ class ModuleManager {
|
|
|
330
368
|
// Also check by module ID (not just folder name)
|
|
331
369
|
// Need to read configs to match by ID
|
|
332
370
|
for (const modulePath of allModulePaths) {
|
|
333
|
-
const
|
|
371
|
+
const moduleConfigPath = path.join(modulePath, 'module.yaml');
|
|
372
|
+
const installerConfigPath = path.join(modulePath, '_module-installer', 'module.yaml');
|
|
334
373
|
const customConfigPath = path.join(modulePath, '_module-installer', 'custom.yaml');
|
|
335
374
|
const rootCustomConfigPath = path.join(modulePath, 'custom.yaml');
|
|
336
375
|
|
|
337
376
|
let configPath = null;
|
|
338
|
-
if (await fs.pathExists(
|
|
377
|
+
if (await fs.pathExists(moduleConfigPath)) {
|
|
378
|
+
configPath = moduleConfigPath;
|
|
379
|
+
} else if (await fs.pathExists(installerConfigPath)) {
|
|
339
380
|
configPath = installerConfigPath;
|
|
340
381
|
} else if (await fs.pathExists(customConfigPath)) {
|
|
341
382
|
configPath = customConfigPath;
|
|
@@ -350,8 +391,8 @@ class ModuleManager {
|
|
|
350
391
|
if (config.code === moduleName) {
|
|
351
392
|
return modulePath;
|
|
352
393
|
}
|
|
353
|
-
} catch {
|
|
354
|
-
|
|
394
|
+
} catch (error) {
|
|
395
|
+
throw new Error(`Failed to parse module.yaml at ${configPath}: ${error.message}`);
|
|
355
396
|
}
|
|
356
397
|
}
|
|
357
398
|
}
|
|
@@ -576,7 +617,7 @@ class ModuleManager {
|
|
|
576
617
|
}
|
|
577
618
|
|
|
578
619
|
// Skip _module-installer directory - it's only needed at install time
|
|
579
|
-
if (file.startsWith('_module-installer/')) {
|
|
620
|
+
if (file.startsWith('_module-installer/') || file === 'module.yaml') {
|
|
580
621
|
continue;
|
|
581
622
|
}
|
|
582
623
|
|
|
@@ -654,8 +695,8 @@ class ModuleManager {
|
|
|
654
695
|
|
|
655
696
|
// IMPORTANT: Replace escape sequence and placeholder BEFORE parsing YAML
|
|
656
697
|
// Otherwise parsing will fail on the placeholder
|
|
657
|
-
yamlContent = yamlContent.replaceAll('
|
|
658
|
-
yamlContent = yamlContent.replaceAll('
|
|
698
|
+
yamlContent = yamlContent.replaceAll('.bmad', '.bmad');
|
|
699
|
+
yamlContent = yamlContent.replaceAll('.bmad', this.bmadFolderName);
|
|
659
700
|
|
|
660
701
|
try {
|
|
661
702
|
// First check if web_bundle exists by parsing
|
|
@@ -812,8 +853,13 @@ class ModuleManager {
|
|
|
812
853
|
// Compile with customizations if any
|
|
813
854
|
const { xml } = compileAgent(yamlContent, {}, agentName, relativePath, { config: this.coreConfig });
|
|
814
855
|
|
|
815
|
-
//
|
|
816
|
-
|
|
856
|
+
// Replace .bmad placeholder if needed
|
|
857
|
+
if (xml.includes('.bmad') && this.bmadFolderName) {
|
|
858
|
+
const processedXml = xml.replaceAll('.bmad', this.bmadFolderName);
|
|
859
|
+
await fs.writeFile(targetMdPath, processedXml, 'utf8');
|
|
860
|
+
} else {
|
|
861
|
+
await fs.writeFile(targetMdPath, xml, 'utf8');
|
|
862
|
+
}
|
|
817
863
|
|
|
818
864
|
// Copy sidecar files if agent has hasSidecar flag
|
|
819
865
|
if (hasSidecar) {
|
|
@@ -826,7 +872,7 @@ class ModuleManager {
|
|
|
826
872
|
const projectDir = path.dirname(bmadDir);
|
|
827
873
|
const resolvedSidecarFolder = agentSidecarFolder
|
|
828
874
|
.replaceAll('{project-root}', projectDir)
|
|
829
|
-
.replaceAll('
|
|
875
|
+
.replaceAll('.bmad', path.basename(bmadDir));
|
|
830
876
|
|
|
831
877
|
// Create sidecar directory for this agent
|
|
832
878
|
const agentSidecarDir = path.join(resolvedSidecarFolder, agentName);
|
|
@@ -984,10 +1030,10 @@ class ModuleManager {
|
|
|
984
1030
|
const installWorkflowPath = item['workflow-install']; // Where to copy TO
|
|
985
1031
|
|
|
986
1032
|
// Parse SOURCE workflow path
|
|
987
|
-
// Handle both
|
|
988
|
-
// Example: {project-root}/
|
|
1033
|
+
// Handle both .bmad placeholder and hardcoded 'bmad'
|
|
1034
|
+
// Example: {project-root}/.bmad/bmm/workflows/4-implementation/create-story/workflow.yaml
|
|
989
1035
|
// Or: {project-root}/bmad/bmm/workflows/4-implementation/create-story/workflow.yaml
|
|
990
|
-
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(
|
|
1036
|
+
const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/(?:\.bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
991
1037
|
if (!sourceMatch) {
|
|
992
1038
|
console.warn(chalk.yellow(` Could not parse workflow path: ${sourceWorkflowPath}`));
|
|
993
1039
|
continue;
|
|
@@ -996,9 +1042,9 @@ class ModuleManager {
|
|
|
996
1042
|
const [, sourceModule, sourceWorkflowSubPath] = sourceMatch;
|
|
997
1043
|
|
|
998
1044
|
// Parse INSTALL workflow path
|
|
999
|
-
// Handle
|
|
1000
|
-
// Example: {project-root}/
|
|
1001
|
-
const installMatch = installWorkflowPath.match(/\{project-root\}\/(
|
|
1045
|
+
// Handle.bmad
|
|
1046
|
+
// Example: {project-root}/.bmad/bmgd/workflows/4-production/create-story/workflow.yaml
|
|
1047
|
+
const installMatch = installWorkflowPath.match(/\{project-root\}\/(\.bmad)\/([^/]+)\/workflows\/(.+)/);
|
|
1002
1048
|
if (!installMatch) {
|
|
1003
1049
|
console.warn(chalk.yellow(` Could not parse workflow-install path: ${installWorkflowPath}`));
|
|
1004
1050
|
continue;
|
|
@@ -1050,9 +1096,9 @@ class ModuleManager {
|
|
|
1050
1096
|
async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
|
|
1051
1097
|
let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
|
|
1052
1098
|
|
|
1053
|
-
// Replace config_source: "{project-root}/
|
|
1054
|
-
// with config_source: "{project-root}/
|
|
1055
|
-
// Note: At this point
|
|
1099
|
+
// Replace config_source: "{project-root}/.bmad/OLD_MODULE/config.yaml"
|
|
1100
|
+
// with config_source: "{project-root}/.bmad/NEW_MODULE/config.yaml"
|
|
1101
|
+
// Note: At this point .bmad has already been replaced with actual folder name
|
|
1056
1102
|
const configSourcePattern = /config_source:\s*["']?\{project-root\}\/[^/]+\/[^/]+\/config\.yaml["']?/g;
|
|
1057
1103
|
const newConfigSource = `config_source: "{project-root}/${this.bmadFolderName}/${newModuleName}/config.yaml"`;
|
|
1058
1104
|
|
|
@@ -59,7 +59,7 @@ function buildSimpleActivation(criticalActions = [], menuItems = [], deploymentT
|
|
|
59
59
|
|
|
60
60
|
// Standard steps
|
|
61
61
|
activation += ` <step n="${stepNum++}">Load persona from this current agent file (already in context)</step>\n`;
|
|
62
|
-
activation += ` <step n="${stepNum++}">Load and read {project-root}/
|
|
62
|
+
activation += ` <step n="${stepNum++}">Load and read {project-root}/.bmad/core/config.yaml to get {user_name}, {communication_language}, {output_folder}</step>\n`;
|
|
63
63
|
activation += ` <step n="${stepNum++}">Remember: user's name is {user_name}</step>\n`;
|
|
64
64
|
|
|
65
65
|
// Agent-specific steps from critical_actions
|
|
@@ -119,7 +119,7 @@ function buildSimpleActivation(criticalActions = [], menuItems = [], deploymentT
|
|
|
119
119
|
if (usedHandlers.has('workflow')) {
|
|
120
120
|
activation += ` <handler type="workflow">
|
|
121
121
|
When menu item has: workflow="path/to/workflow.yaml"
|
|
122
|
-
1. CRITICAL: Always LOAD {project-root}/
|
|
122
|
+
1. CRITICAL: Always LOAD {project-root}/.bmad/core/tasks/workflow.xml
|
|
123
123
|
2. Read the complete file - this is the CORE OS for executing BMAD workflows
|
|
124
124
|
3. Pass the yaml path as 'workflow-config' parameter to those instructions
|
|
125
125
|
4. Execute workflow.xml instructions precisely following all steps
|
|
@@ -150,7 +150,7 @@ function buildSimpleActivation(criticalActions = [], menuItems = [], deploymentT
|
|
|
150
150
|
if (usedHandlers.has('validate-workflow')) {
|
|
151
151
|
activation += ` <handler type="validate-workflow">
|
|
152
152
|
When menu item has: validate-workflow="path/to/workflow.yaml"
|
|
153
|
-
1. CRITICAL: Always LOAD {project-root}/
|
|
153
|
+
1. CRITICAL: Always LOAD {project-root}/.bmad/core/tasks/validate-workflow.xml
|
|
154
154
|
2. Read the complete file - this is the CORE OS for validating BMAD workflows
|
|
155
155
|
3. Pass the workflow.yaml path as 'workflow' parameter to those instructions
|
|
156
156
|
4. Pass any checklist.md from the workflow location as 'checklist' parameter if available
|
|
@@ -445,17 +445,9 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
|
|
|
445
445
|
// Parse YAML
|
|
446
446
|
const agentYaml = yaml.parse(yamlContent);
|
|
447
447
|
|
|
448
|
-
//
|
|
449
|
-
//
|
|
450
|
-
|
|
451
|
-
// Convert kebab-case to title case for the name field
|
|
452
|
-
// e.g., "fred-commit-poet" → "Fred Commit Poet"
|
|
453
|
-
const titleCaseName = agentName
|
|
454
|
-
.split('-')
|
|
455
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
456
|
-
.join(' ');
|
|
457
|
-
agentYaml.agent.metadata.name = titleCaseName;
|
|
458
|
-
}
|
|
448
|
+
// Note: agentName parameter is for UI display only, not for modifying the YAML
|
|
449
|
+
// The persona name (metadata.name) should always come from the YAML file
|
|
450
|
+
// We should NEVER modify metadata.name as it's part of the agent's identity
|
|
459
451
|
|
|
460
452
|
// Extract install_config
|
|
461
453
|
const installConfig = extractInstallConfig(agentYaml);
|
|
@@ -242,7 +242,8 @@ function installAgent(agentInfo, answers, targetPath, options = {}) {
|
|
|
242
242
|
const { xml, metadata, processedYaml } = compileAgent(fs.readFileSync(agentInfo.yamlFile, 'utf8'), answers);
|
|
243
243
|
|
|
244
244
|
// Determine target agent folder name
|
|
245
|
-
|
|
245
|
+
// Use the folder name from agentInfo, NOT the persona name from metadata
|
|
246
|
+
const agentFolderName = agentInfo.name;
|
|
246
247
|
|
|
247
248
|
const agentTargetDir = path.join(targetPath, agentFolderName);
|
|
248
249
|
|
|
@@ -272,7 +273,7 @@ function installAgent(agentInfo, answers, targetPath, options = {}) {
|
|
|
272
273
|
// Resolve path variables
|
|
273
274
|
const resolvedSidecarFolder = agentSidecarFolder
|
|
274
275
|
.replaceAll('{project-root}', options.projectRoot || process.cwd())
|
|
275
|
-
.replaceAll('
|
|
276
|
+
.replaceAll('.bmad', options.bmadFolder || '.bmad');
|
|
276
277
|
|
|
277
278
|
// Create sidecar directory for this agent
|
|
278
279
|
const agentSidecarDir = path.join(resolvedSidecarFolder, agentFolderName);
|
|
@@ -406,7 +407,7 @@ function detectBmadProject(targetPath) {
|
|
|
406
407
|
|
|
407
408
|
// Walk up directory tree looking for BMAD installation
|
|
408
409
|
while (checkPath !== root) {
|
|
409
|
-
const possibleNames = ['.bmad'
|
|
410
|
+
const possibleNames = ['.bmad'];
|
|
410
411
|
for (const name of possibleNames) {
|
|
411
412
|
const bmadFolder = path.join(checkPath, name);
|
|
412
413
|
const cfgFolder = path.join(bmadFolder, '_cfg');
|
|
@@ -3,6 +3,7 @@ const boxen = require('boxen');
|
|
|
3
3
|
const wrapAnsi = require('wrap-ansi');
|
|
4
4
|
const figlet = require('figlet');
|
|
5
5
|
const path = require('node:path');
|
|
6
|
+
const os = require('node:os');
|
|
6
7
|
|
|
7
8
|
const CLIUtils = {
|
|
8
9
|
/**
|
|
@@ -84,8 +85,8 @@ const CLIUtils = {
|
|
|
84
85
|
/**
|
|
85
86
|
* Display module configuration header
|
|
86
87
|
* @param {string} moduleName - Module name (fallback if no custom header)
|
|
87
|
-
* @param {string} header - Custom header from
|
|
88
|
-
* @param {string} subheader - Custom subheader from
|
|
88
|
+
* @param {string} header - Custom header from module.yaml
|
|
89
|
+
* @param {string} subheader - Custom subheader from module.yaml
|
|
89
90
|
*/
|
|
90
91
|
displayModuleConfigHeader(moduleName, header = null, subheader = null) {
|
|
91
92
|
// Simple blue banner with custom header/subheader if provided
|
|
@@ -100,8 +101,8 @@ const CLIUtils = {
|
|
|
100
101
|
/**
|
|
101
102
|
* Display module with no custom configuration
|
|
102
103
|
* @param {string} moduleName - Module name (fallback if no custom header)
|
|
103
|
-
* @param {string} header - Custom header from
|
|
104
|
-
* @param {string} subheader - Custom subheader from
|
|
104
|
+
* @param {string} header - Custom header from module.yaml
|
|
105
|
+
* @param {string} subheader - Custom subheader from module.yaml
|
|
105
106
|
*/
|
|
106
107
|
displayModuleNoConfig(moduleName, header = null, subheader = null) {
|
|
107
108
|
// Show full banner with header/subheader, just like modules with config
|
|
@@ -205,6 +206,22 @@ const CLIUtils = {
|
|
|
205
206
|
// No longer clear screen or show boxes - just a simple completion message
|
|
206
207
|
// This is deprecated but kept for backwards compatibility
|
|
207
208
|
},
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Expand path with ~ expansion
|
|
212
|
+
* @param {string} inputPath - Path to expand
|
|
213
|
+
* @returns {string} Expanded path
|
|
214
|
+
*/
|
|
215
|
+
expandPath(inputPath) {
|
|
216
|
+
if (!inputPath) return inputPath;
|
|
217
|
+
|
|
218
|
+
// Expand ~ to home directory
|
|
219
|
+
if (inputPath.startsWith('~')) {
|
|
220
|
+
return path.join(os.homedir(), inputPath.slice(1));
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return inputPath;
|
|
224
|
+
},
|
|
208
225
|
};
|
|
209
226
|
|
|
210
227
|
module.exports = { CLIUtils };
|