bmad-method 6.0.0-alpha.13 → 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/discord.yaml +278 -8
- package/.github/workflows/quality.yaml +19 -0
- package/.markdownlint-cli2.yaml +42 -0
- package/.prettierignore +3 -0
- package/CHANGELOG.md +95 -0
- package/CODE_OF_CONDUCT.md +128 -0
- 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 +56 -102
- package/docs/document-sharding-guide.md +1 -1
- package/eslint.config.mjs +14 -0
- package/example-custom-content/README.md +4 -0
- package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/instructions.md +4 -4
- package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/memories.md +1 -1
- package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith.agent.yaml +17 -16
- 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/resources/excalidraw/library-loader.md +2 -2
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +1 -1
- package/src/core/workflows/brainstorming/workflow.md +1 -1
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +0 -1
- package/src/core/workflows/party-mode/workflow.md +2 -3
- package/src/modules/bmb/README.md +1 -1
- 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 +32 -9
- package/src/modules/bmb/docs/agents/agent-menu-patterns.md +5 -5
- package/src/modules/bmb/docs/agents/expert-agent-architecture.md +20 -20
- package/src/modules/bmb/docs/agents/module-agent-architecture.md +45 -45
- package/src/modules/bmb/docs/agents/simple-agent-architecture.md +7 -3
- package/src/modules/bmb/docs/workflows/architecture.md +1 -1
- 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/{workflows/create-workflow → docs/workflows}/templates/step-file.md +4 -4
- package/src/modules/bmb/docs/workflows/{step-template.md → templates/step-template.md} +40 -33
- package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
- package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/workflow.md +1 -1
- 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/security-engineer.agent.yaml +6 -6
- 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 +2 -3
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +10 -40
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +1 -1
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +1 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +2 -2
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +2 -2
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +2 -2
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
- package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +16 -4
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +4 -4
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +7 -7
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +1 -1
- package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +6 -6
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +2 -2
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +2 -2
- package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +3 -3
- package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +2 -2
- package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +2 -2
- package/src/modules/bmb/workflows/create-agent/workflow.md +11 -11
- 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 +45 -56
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +9 -31
- 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-09-design.md → step-06-design.md} +76 -44
- package/src/modules/bmb/workflows/create-workflow/steps/{step-11-build.md → step-07-build.md} +70 -24
- package/src/modules/bmb/workflows/create-workflow/steps/{step-12-review.md → step-08-review.md} +30 -16
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
- package/src/modules/bmb/workflows/create-workflow/workflow.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +14 -14
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +4 -4
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +2 -2
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +4 -4
- package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
- package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +2 -6
- package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +2 -2
- package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +1 -1
- 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 +2 -2
- 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 +7 -7
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +3 -3
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +2 -2
- package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
- package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +0 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
- package/src/modules/bmm/_module-installer/install-config.yaml +1 -1
- package/src/modules/bmm/agents/analyst.agent.yaml +11 -8
- package/src/modules/bmm/agents/architect.agent.yaml +1 -5
- package/src/modules/bmm/agents/pm.agent.yaml +5 -5
- package/src/modules/bmm/docs/README.md +23 -1
- package/src/modules/bmm/docs/agents-guide.md +16 -35
- package/src/modules/bmm/docs/brownfield-guide.md +17 -30
- package/src/modules/bmm/docs/enterprise-agentic-development.md +2 -2
- package/src/modules/bmm/docs/faq.md +6 -39
- package/src/modules/bmm/docs/glossary.md +11 -24
- package/src/modules/bmm/docs/images/README.md +37 -0
- package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +62 -202
- package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +3 -1
- package/src/modules/bmm/docs/quick-spec-flow.md +652 -0
- package/src/modules/bmm/docs/quick-start.md +9 -25
- package/src/modules/bmm/docs/test-architecture.md +6 -6
- 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-implementation.md +143 -3
- package/src/modules/bmm/docs/workflows-solutioning.md +2 -2
- package/src/modules/bmm/tasks/daily-standup.xml +85 -0
- package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
- package/src/modules/bmm/testarch/knowledge/overview.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +2 -2
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +1 -1
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +8 -8
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +18 -18
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +18 -18
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +18 -18
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +17 -17
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +35 -36
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +5 -6
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +20 -19
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +21 -20
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +20 -19
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +21 -20
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +16 -15
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +36 -37
- package/src/modules/bmm/workflows/1-analysis/research/research.template.md +0 -1
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +8 -8
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +19 -18
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +20 -19
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +21 -20
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +19 -18
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +38 -39
- package/src/modules/bmm/workflows/1-analysis/research/workflow.md +14 -8
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +6 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +7 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +138 -56
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +93 -51
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +223 -78
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +20 -2
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +18 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +21 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +21 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +21 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +18 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +18 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +18 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +13 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +2 -2
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +14 -14
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +7 -7
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -1
- 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/{bmgd/workflows/4-production → bmm/workflows/4-implementation}/code-review/checklist.md +2 -1
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +51 -3
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +1 -1
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +32 -2
- 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 +10 -10
- 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/quick-dev/instructions.md +104 -7
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +4 -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/workflow.md +1 -1
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +1 -1
- 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 +2 -2
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +1 -6
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +1 -6
- package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +1 -6
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +1 -7
- package/tools/cli/README.md +3 -3
- package/tools/cli/commands/build.js +9 -184
- package/tools/cli/commands/install.js +1 -6
- package/tools/cli/installers/lib/core/config-collector.js +70 -10
- package/tools/cli/installers/lib/core/installer.js +153 -388
- 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/auggie.js +19 -7
- package/tools/cli/installers/lib/ide/crush.js +19 -6
- package/tools/cli/installers/lib/ide/cursor.js +29 -13
- package/tools/cli/installers/lib/ide/gemini.js +49 -1
- package/tools/cli/installers/lib/ide/iflow.js +20 -1
- 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/roo.js +120 -184
- package/tools/cli/installers/lib/ide/rovo-dev.js +1 -1
- 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/modules/manager.js +486 -53
- package/tools/cli/lib/agent/compiler.js +54 -5
- package/tools/cli/lib/agent/installer.js +127 -27
- package/tools/cli/lib/config.js +2 -1
- package/tools/cli/lib/ui.js +65 -4
- package/tools/cli/lib/yaml-xml-builder.js +0 -15
- package/tools/schema/agent.js +149 -89
- package/tools/validate-svg-changes.sh +356 -0
- package/custom/src/agents/commit-poet/installation-guide.md +0 -36
- package/custom/src/agents/toolsmith/installation-guide.md +0 -36
- package/src/modules/bmb/docs/workflows/workflow-template.md +0 -152
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-overview.md +0 -127
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-core-tools.md +0 -145
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-memory-requirements.md +0 -136
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-external-tools.md +0 -154
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-installation-guidance.md +0 -159
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-tools-summary.md +0 -167
- package/src/modules/bmb/workflows/create-workflow/steps/step-10-plan-review.md +0 -215
- package/src/modules/bmb/workflows/create-workflow/templates/build-summary.md +0 -36
- package/src/modules/bmb/workflows/create-workflow/templates/completion-section.md +0 -39
- package/src/modules/bmb/workflows/create-workflow/templates/content-template.md +0 -21
- package/src/modules/bmb/workflows/create-workflow/templates/design-section.md +0 -53
- package/src/modules/bmb/workflows/create-workflow/templates/project-info.md +0 -18
- package/src/modules/bmb/workflows/create-workflow/templates/requirements-section.md +0 -47
- package/src/modules/bmb/workflows/create-workflow/templates/review-section.md +0 -56
- package/src/modules/bmb/workflows/create-workflow/templates/workflow-plan.md +0 -54
- package/src/modules/bmb/workflows-legacy/create-module/README.md +0 -229
- package/src/modules/bmb/workflows-legacy/create-module/brainstorm-context.md +0 -137
- package/src/modules/bmb/workflows-legacy/create-module/checklist.md +0 -235
- package/src/modules/bmb/workflows-legacy/create-module/installer-templates/install-config.yaml +0 -92
- package/src/modules/bmb/workflows-legacy/create-module/installer-templates/installer.js +0 -231
- package/src/modules/bmb/workflows-legacy/create-module/instructions.md +0 -577
- package/src/modules/bmb/workflows-legacy/create-module/module-structure.md +0 -400
- package/src/modules/bmb/workflows-legacy/create-module/workflow.yaml +0 -52
- 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 -387
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +0 -53
- 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/tools/cli/commands/agent-install.js +0 -409
- package/tools/cli/commands/cleanup.js +0 -141
- /package/{custom/src → example-custom-content}/agents/commit-poet/commit-poet.agent.yaml +0 -0
- /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -0
- /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -0
- /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -0
- /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -0
- /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -0
- /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -0
|
@@ -3,6 +3,7 @@ const fs = require('fs-extra');
|
|
|
3
3
|
const { BaseIdeSetup } = require('./_base-ide');
|
|
4
4
|
const chalk = require('chalk');
|
|
5
5
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
6
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Crush IDE setup handler
|
|
@@ -34,10 +35,23 @@ class CrushSetup extends BaseIdeSetup {
|
|
|
34
35
|
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
35
36
|
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
36
37
|
|
|
37
|
-
// Get tasks, tools, and workflows (
|
|
38
|
+
// Get tasks, tools, and workflows (ALL workflows now generate commands)
|
|
38
39
|
const tasks = await this.getTasks(bmadDir, true);
|
|
39
40
|
const tools = await this.getTools(bmadDir, true);
|
|
40
|
-
|
|
41
|
+
|
|
42
|
+
// Get ALL workflows using the new workflow command generator
|
|
43
|
+
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
44
|
+
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
|
45
|
+
|
|
46
|
+
// Convert workflow artifacts to expected format for organizeByModule
|
|
47
|
+
const workflows = workflowArtifacts
|
|
48
|
+
.filter((artifact) => artifact.type === 'workflow-command')
|
|
49
|
+
.map((artifact) => ({
|
|
50
|
+
module: artifact.module,
|
|
51
|
+
name: path.basename(artifact.relativePath, '.md'),
|
|
52
|
+
path: artifact.sourcePath,
|
|
53
|
+
content: artifact.content,
|
|
54
|
+
}));
|
|
41
55
|
|
|
42
56
|
// Organize by module
|
|
43
57
|
const agentCount = await this.organizeByModule(commandsDir, agentArtifacts, tasks, tools, workflows, projectDir);
|
|
@@ -113,13 +127,12 @@ class CrushSetup extends BaseIdeSetup {
|
|
|
113
127
|
toolCount++;
|
|
114
128
|
}
|
|
115
129
|
|
|
116
|
-
// Copy module-specific
|
|
130
|
+
// Copy module-specific workflow commands (already generated)
|
|
117
131
|
const moduleWorkflows = workflows.filter((w) => w.module === module);
|
|
118
132
|
for (const workflow of moduleWorkflows) {
|
|
119
|
-
|
|
120
|
-
const commandContent = this.createWorkflowCommand(workflow, content);
|
|
133
|
+
// Use the pre-generated workflow command content
|
|
121
134
|
const targetPath = path.join(moduleWorkflowsDir, `${workflow.name}.md`);
|
|
122
|
-
await this.writeFile(targetPath,
|
|
135
|
+
await this.writeFile(targetPath, workflow.content);
|
|
123
136
|
workflowCount++;
|
|
124
137
|
}
|
|
125
138
|
}
|
|
@@ -2,6 +2,7 @@ const path = require('node:path');
|
|
|
2
2
|
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
3
|
const chalk = require('chalk');
|
|
4
4
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
5
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Cursor IDE setup handler
|
|
@@ -53,10 +54,22 @@ class CursorSetup extends BaseIdeSetup {
|
|
|
53
54
|
// Convert artifacts to agent format for index creation
|
|
54
55
|
const agents = agentArtifacts.map((a) => ({ module: a.module, name: a.name }));
|
|
55
56
|
|
|
56
|
-
// Get tasks, tools, and workflows (
|
|
57
|
+
// Get tasks, tools, and workflows (ALL workflows now generate commands)
|
|
57
58
|
const tasks = await this.getTasks(bmadDir, true);
|
|
58
59
|
const tools = await this.getTools(bmadDir, true);
|
|
59
|
-
|
|
60
|
+
|
|
61
|
+
// Get ALL workflows using the new workflow command generator
|
|
62
|
+
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
63
|
+
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
|
64
|
+
|
|
65
|
+
// Convert artifacts to workflow objects for directory creation
|
|
66
|
+
const workflows = workflowArtifacts
|
|
67
|
+
.filter((artifact) => artifact.type === 'workflow-command')
|
|
68
|
+
.map((artifact) => ({
|
|
69
|
+
module: artifact.module,
|
|
70
|
+
name: path.basename(artifact.relativePath, '.md'),
|
|
71
|
+
path: artifact.sourcePath,
|
|
72
|
+
}));
|
|
60
73
|
|
|
61
74
|
// Create directories for each module
|
|
62
75
|
const modules = new Set();
|
|
@@ -113,18 +126,21 @@ class CursorSetup extends BaseIdeSetup {
|
|
|
113
126
|
toolCount++;
|
|
114
127
|
}
|
|
115
128
|
|
|
116
|
-
// Process and copy workflows
|
|
129
|
+
// Process and copy workflow commands (generated, not raw workflows)
|
|
117
130
|
let workflowCount = 0;
|
|
118
|
-
for (const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
131
|
+
for (const artifact of workflowArtifacts) {
|
|
132
|
+
if (artifact.type === 'workflow-command') {
|
|
133
|
+
// Add MDC metadata header to workflow command
|
|
134
|
+
const content = this.wrapLauncherWithMDC(artifact.content, {
|
|
135
|
+
module: artifact.module,
|
|
136
|
+
name: path.basename(artifact.relativePath, '.md'),
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
const targetPath = path.join(bmadRulesDir, artifact.module, 'workflows', `${path.basename(artifact.relativePath, '.md')}.mdc`);
|
|
140
|
+
|
|
141
|
+
await this.writeFile(targetPath, content);
|
|
142
|
+
workflowCount++;
|
|
143
|
+
}
|
|
128
144
|
}
|
|
129
145
|
|
|
130
146
|
// Create BMAD index file (but NOT .cursorrules - user manages that)
|
|
@@ -4,6 +4,7 @@ const yaml = require('js-yaml');
|
|
|
4
4
|
const { BaseIdeSetup } = require('./_base-ide');
|
|
5
5
|
const chalk = require('chalk');
|
|
6
6
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
7
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Gemini CLI setup handler
|
|
@@ -68,9 +69,13 @@ class GeminiSetup extends BaseIdeSetup {
|
|
|
68
69
|
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
69
70
|
const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
|
|
70
71
|
|
|
71
|
-
// Get tasks
|
|
72
|
+
// Get tasks and workflows (ALL workflows now generate commands)
|
|
72
73
|
const tasks = await this.getTasks(bmadDir);
|
|
73
74
|
|
|
75
|
+
// Get ALL workflows using the new workflow command generator
|
|
76
|
+
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
77
|
+
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
|
78
|
+
|
|
74
79
|
// Install agents as TOML files with bmad- prefix (flat structure)
|
|
75
80
|
let agentCount = 0;
|
|
76
81
|
for (const artifact of agentArtifacts) {
|
|
@@ -98,17 +103,37 @@ class GeminiSetup extends BaseIdeSetup {
|
|
|
98
103
|
console.log(chalk.green(` ✓ Added task: /bmad:tasks:${task.module}:${task.name}`));
|
|
99
104
|
}
|
|
100
105
|
|
|
106
|
+
// Install workflows as TOML files with bmad- prefix (flat structure)
|
|
107
|
+
let workflowCount = 0;
|
|
108
|
+
for (const artifact of workflowArtifacts) {
|
|
109
|
+
if (artifact.type === 'workflow-command') {
|
|
110
|
+
// Create TOML wrapper around workflow command content
|
|
111
|
+
const tomlContent = await this.createWorkflowToml(artifact);
|
|
112
|
+
|
|
113
|
+
// Flat structure: bmad-workflow-{module}-{name}.toml
|
|
114
|
+
const workflowName = path.basename(artifact.relativePath, '.md');
|
|
115
|
+
const tomlPath = path.join(commandsDir, `bmad-workflow-${artifact.module}-${workflowName}.toml`);
|
|
116
|
+
await this.writeFile(tomlPath, tomlContent);
|
|
117
|
+
workflowCount++;
|
|
118
|
+
|
|
119
|
+
console.log(chalk.green(` ✓ Added workflow: /bmad:workflows:${artifact.module}:${workflowName}`));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
101
123
|
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
102
124
|
console.log(chalk.dim(` - ${agentCount} agents configured`));
|
|
103
125
|
console.log(chalk.dim(` - ${taskCount} tasks configured`));
|
|
126
|
+
console.log(chalk.dim(` - ${workflowCount} workflows configured`));
|
|
104
127
|
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
|
105
128
|
console.log(chalk.dim(` - Agent activation: /bmad:agents:{agent-name}`));
|
|
106
129
|
console.log(chalk.dim(` - Task activation: /bmad:tasks:{task-name}`));
|
|
130
|
+
console.log(chalk.dim(` - Workflow activation: /bmad:workflows:{workflow-name}`));
|
|
107
131
|
|
|
108
132
|
return {
|
|
109
133
|
success: true,
|
|
110
134
|
agents: agentCount,
|
|
111
135
|
tasks: taskCount,
|
|
136
|
+
workflows: workflowCount,
|
|
112
137
|
};
|
|
113
138
|
}
|
|
114
139
|
|
|
@@ -149,6 +174,7 @@ ${contentWithoutFrontmatter}
|
|
|
149
174
|
// Note: {user_name} and other {config_values} are left as-is for runtime substitution by Gemini
|
|
150
175
|
const tomlContent = template
|
|
151
176
|
.replaceAll('{{title}}', title)
|
|
177
|
+
.replaceAll('{{*bmad_folder*}}', '{bmad_folder}')
|
|
152
178
|
.replaceAll('{{bmad_folder}}', this.bmadFolderName)
|
|
153
179
|
.replaceAll('{{module}}', agent.module)
|
|
154
180
|
.replaceAll('{{name}}', agent.name);
|
|
@@ -170,6 +196,7 @@ ${contentWithoutFrontmatter}
|
|
|
170
196
|
// Replace template variables
|
|
171
197
|
const tomlContent = template
|
|
172
198
|
.replaceAll('{{taskName}}', taskName)
|
|
199
|
+
.replaceAll('{{*bmad_folder*}}', '{bmad_folder}')
|
|
173
200
|
.replaceAll('{{bmad_folder}}', this.bmadFolderName)
|
|
174
201
|
.replaceAll('{{module}}', task.module)
|
|
175
202
|
.replaceAll('{{filename}}', task.filename);
|
|
@@ -177,6 +204,27 @@ ${contentWithoutFrontmatter}
|
|
|
177
204
|
return tomlContent;
|
|
178
205
|
}
|
|
179
206
|
|
|
207
|
+
/**
|
|
208
|
+
* Create workflow TOML content from artifact
|
|
209
|
+
*/
|
|
210
|
+
async createWorkflowToml(artifact) {
|
|
211
|
+
// Extract description from artifact content
|
|
212
|
+
const descriptionMatch = artifact.content.match(/description:\s*"([^"]+)"/);
|
|
213
|
+
const description = descriptionMatch
|
|
214
|
+
? descriptionMatch[1]
|
|
215
|
+
: `BMAD ${artifact.module.toUpperCase()} Workflow: ${path.basename(artifact.relativePath, '.md')}`;
|
|
216
|
+
|
|
217
|
+
// Strip frontmatter from command content
|
|
218
|
+
const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
|
|
219
|
+
const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
|
|
220
|
+
|
|
221
|
+
return `description = "${description}"
|
|
222
|
+
prompt = """
|
|
223
|
+
${contentWithoutFrontmatter}
|
|
224
|
+
"""
|
|
225
|
+
`;
|
|
226
|
+
}
|
|
227
|
+
|
|
180
228
|
/**
|
|
181
229
|
* Cleanup Gemini configuration - surgically remove only BMAD files
|
|
182
230
|
*/
|
|
@@ -3,6 +3,7 @@ const fs = require('fs-extra');
|
|
|
3
3
|
const { BaseIdeSetup } = require('./_base-ide');
|
|
4
4
|
const chalk = require('chalk');
|
|
5
5
|
const { AgentCommandGenerator } = require('./shared/agent-command-generator');
|
|
6
|
+
const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* iFlow CLI setup handler
|
|
@@ -29,9 +30,11 @@ class IFlowSetup extends BaseIdeSetup {
|
|
|
29
30
|
const commandsDir = path.join(iflowDir, this.commandsDir, 'bmad');
|
|
30
31
|
const agentsDir = path.join(commandsDir, 'agents');
|
|
31
32
|
const tasksDir = path.join(commandsDir, 'tasks');
|
|
33
|
+
const workflowsDir = path.join(commandsDir, 'workflows');
|
|
32
34
|
|
|
33
35
|
await this.ensureDir(agentsDir);
|
|
34
36
|
await this.ensureDir(tasksDir);
|
|
37
|
+
await this.ensureDir(workflowsDir);
|
|
35
38
|
|
|
36
39
|
// Generate agent launchers
|
|
37
40
|
const agentGen = new AgentCommandGenerator(this.bmadFolderName);
|
|
@@ -47,9 +50,13 @@ class IFlowSetup extends BaseIdeSetup {
|
|
|
47
50
|
agentCount++;
|
|
48
51
|
}
|
|
49
52
|
|
|
50
|
-
// Get tasks
|
|
53
|
+
// Get tasks and workflows (ALL workflows now generate commands)
|
|
51
54
|
const tasks = await this.getTasks(bmadDir);
|
|
52
55
|
|
|
56
|
+
// Get ALL workflows using the new workflow command generator
|
|
57
|
+
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
58
|
+
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
|
59
|
+
|
|
53
60
|
// Setup tasks as commands
|
|
54
61
|
let taskCount = 0;
|
|
55
62
|
for (const task of tasks) {
|
|
@@ -61,15 +68,27 @@ class IFlowSetup extends BaseIdeSetup {
|
|
|
61
68
|
taskCount++;
|
|
62
69
|
}
|
|
63
70
|
|
|
71
|
+
// Setup workflows as commands (already generated)
|
|
72
|
+
let workflowCount = 0;
|
|
73
|
+
for (const artifact of workflowArtifacts) {
|
|
74
|
+
if (artifact.type === 'workflow-command') {
|
|
75
|
+
const targetPath = path.join(workflowsDir, `${artifact.module}-${path.basename(artifact.relativePath, '.md')}.md`);
|
|
76
|
+
await this.writeFile(targetPath, artifact.content);
|
|
77
|
+
workflowCount++;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
64
81
|
console.log(chalk.green(`✓ ${this.name} configured:`));
|
|
65
82
|
console.log(chalk.dim(` - ${agentCount} agent commands created`));
|
|
66
83
|
console.log(chalk.dim(` - ${taskCount} task commands created`));
|
|
84
|
+
console.log(chalk.dim(` - ${workflowCount} workflow commands created`));
|
|
67
85
|
console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
|
|
68
86
|
|
|
69
87
|
return {
|
|
70
88
|
success: true,
|
|
71
89
|
agents: agentCount,
|
|
72
90
|
tasks: taskCount,
|
|
91
|
+
workflows: workflowCount,
|
|
73
92
|
};
|
|
74
93
|
}
|
|
75
94
|
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
const { BaseIdeSetup } = require('./_base-ide');
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const fs = require('fs-extra');
|
|
5
|
+
const yaml = require('js-yaml');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Kiro CLI setup handler for BMad Method
|
|
9
|
+
*/
|
|
10
|
+
class KiroCliSetup extends BaseIdeSetup {
|
|
11
|
+
constructor() {
|
|
12
|
+
super('kiro-cli', 'Kiro CLI', false);
|
|
13
|
+
this.configDir = '.kiro';
|
|
14
|
+
this.agentsDir = 'agents';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Cleanup old BMAD installation before reinstalling
|
|
19
|
+
* @param {string} projectDir - Project directory
|
|
20
|
+
*/
|
|
21
|
+
async cleanup(projectDir) {
|
|
22
|
+
const bmadAgentsDir = path.join(projectDir, this.configDir, this.agentsDir);
|
|
23
|
+
|
|
24
|
+
if (await fs.pathExists(bmadAgentsDir)) {
|
|
25
|
+
// Remove existing BMad agents
|
|
26
|
+
const files = await fs.readdir(bmadAgentsDir);
|
|
27
|
+
for (const file of files) {
|
|
28
|
+
if (file.startsWith('bmad-') || file.includes('bmad')) {
|
|
29
|
+
await fs.remove(path.join(bmadAgentsDir, file));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
console.log(chalk.dim(` Cleaned old BMAD agents from ${this.name}`));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Setup Kiro CLI configuration with BMad agents
|
|
38
|
+
* @param {string} projectDir - Project directory
|
|
39
|
+
* @param {string} bmadDir - BMAD installation directory
|
|
40
|
+
* @param {Object} options - Setup options
|
|
41
|
+
*/
|
|
42
|
+
async setup(projectDir, bmadDir, options = {}) {
|
|
43
|
+
console.log(chalk.cyan(`Setting up ${this.name}...`));
|
|
44
|
+
|
|
45
|
+
await this.cleanup(projectDir);
|
|
46
|
+
|
|
47
|
+
const kiroDir = path.join(projectDir, this.configDir);
|
|
48
|
+
const agentsDir = path.join(kiroDir, this.agentsDir);
|
|
49
|
+
|
|
50
|
+
await this.ensureDir(agentsDir);
|
|
51
|
+
|
|
52
|
+
// Create BMad agents from source YAML files
|
|
53
|
+
await this.createBmadAgentsFromSource(agentsDir, projectDir);
|
|
54
|
+
|
|
55
|
+
console.log(chalk.green(`✓ ${this.name} configured with BMad agents`));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Create BMad agent definitions from source YAML files
|
|
60
|
+
* @param {string} agentsDir - Agents directory
|
|
61
|
+
* @param {string} projectDir - Project directory
|
|
62
|
+
*/
|
|
63
|
+
async createBmadAgentsFromSource(agentsDir, projectDir) {
|
|
64
|
+
const sourceDir = path.join(__dirname, '../../../../../src/modules');
|
|
65
|
+
|
|
66
|
+
// Find all agent YAML files
|
|
67
|
+
const agentFiles = await this.findAgentFiles(sourceDir);
|
|
68
|
+
|
|
69
|
+
for (const agentFile of agentFiles) {
|
|
70
|
+
try {
|
|
71
|
+
await this.processAgentFile(agentFile, agentsDir, projectDir);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.warn(chalk.yellow(`⚠️ Failed to process ${agentFile}: ${error.message}`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Find all agent YAML files in modules and core
|
|
80
|
+
* @param {string} sourceDir - Source modules directory
|
|
81
|
+
* @returns {Array} Array of agent file paths
|
|
82
|
+
*/
|
|
83
|
+
async findAgentFiles(sourceDir) {
|
|
84
|
+
const agentFiles = [];
|
|
85
|
+
|
|
86
|
+
// Check core agents
|
|
87
|
+
const coreAgentsDir = path.join(__dirname, '../../../../../src/core/agents');
|
|
88
|
+
if (await fs.pathExists(coreAgentsDir)) {
|
|
89
|
+
const files = await fs.readdir(coreAgentsDir);
|
|
90
|
+
|
|
91
|
+
for (const file of files) {
|
|
92
|
+
if (file.endsWith('.agent.yaml')) {
|
|
93
|
+
agentFiles.push(path.join(coreAgentsDir, file));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Check module agents
|
|
99
|
+
if (!(await fs.pathExists(sourceDir))) {
|
|
100
|
+
return agentFiles;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const modules = await fs.readdir(sourceDir);
|
|
104
|
+
|
|
105
|
+
for (const module of modules) {
|
|
106
|
+
const moduleAgentsDir = path.join(sourceDir, module, 'agents');
|
|
107
|
+
|
|
108
|
+
if (await fs.pathExists(moduleAgentsDir)) {
|
|
109
|
+
const files = await fs.readdir(moduleAgentsDir);
|
|
110
|
+
|
|
111
|
+
for (const file of files) {
|
|
112
|
+
if (file.endsWith('.agent.yaml')) {
|
|
113
|
+
agentFiles.push(path.join(moduleAgentsDir, file));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return agentFiles;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Validate BMad Core compliance
|
|
124
|
+
* @param {Object} agentData - Agent YAML data
|
|
125
|
+
* @returns {boolean} True if compliant
|
|
126
|
+
*/
|
|
127
|
+
validateBmadCompliance(agentData) {
|
|
128
|
+
const requiredFields = ['agent.metadata.id', 'agent.persona.role', 'agent.persona.principles'];
|
|
129
|
+
|
|
130
|
+
for (const field of requiredFields) {
|
|
131
|
+
const keys = field.split('.');
|
|
132
|
+
let current = agentData;
|
|
133
|
+
|
|
134
|
+
for (const key of keys) {
|
|
135
|
+
if (!current || !current[key]) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
current = current[key];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Process individual agent YAML file
|
|
147
|
+
* @param {string} agentFile - Path to agent YAML file
|
|
148
|
+
* @param {string} agentsDir - Target agents directory
|
|
149
|
+
* @param {string} projectDir - Project directory
|
|
150
|
+
*/
|
|
151
|
+
async processAgentFile(agentFile, agentsDir, projectDir) {
|
|
152
|
+
const yamlContent = await fs.readFile(agentFile, 'utf8');
|
|
153
|
+
const agentData = yaml.load(yamlContent);
|
|
154
|
+
|
|
155
|
+
if (!this.validateBmadCompliance(agentData)) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Extract module from file path
|
|
160
|
+
const normalizedPath = path.normalize(agentFile);
|
|
161
|
+
const pathParts = normalizedPath.split(path.sep);
|
|
162
|
+
const basename = path.basename(agentFile, '.agent.yaml');
|
|
163
|
+
|
|
164
|
+
// Find the module name from path
|
|
165
|
+
let moduleName = 'unknown';
|
|
166
|
+
if (pathParts.includes('src')) {
|
|
167
|
+
const srcIndex = pathParts.indexOf('src');
|
|
168
|
+
if (srcIndex + 3 < pathParts.length) {
|
|
169
|
+
const folderAfterSrc = pathParts[srcIndex + 1];
|
|
170
|
+
// Handle both src/core/agents and src/modules/[module]/agents patterns
|
|
171
|
+
if (folderAfterSrc === 'core') {
|
|
172
|
+
moduleName = 'core';
|
|
173
|
+
} else if (folderAfterSrc === 'modules') {
|
|
174
|
+
moduleName = pathParts[srcIndex + 2]; // The actual module name
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Extract the agent name from the ID path in YAML if available
|
|
180
|
+
let agentBaseName = basename;
|
|
181
|
+
if (agentData.agent && agentData.agent.metadata && agentData.agent.metadata.id) {
|
|
182
|
+
const idPath = agentData.agent.metadata.id;
|
|
183
|
+
agentBaseName = path.basename(idPath, '.md');
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const agentName = `bmad-${moduleName}-${agentBaseName}`;
|
|
187
|
+
const sanitizedAgentName = this.sanitizeAgentName(agentName);
|
|
188
|
+
|
|
189
|
+
// Create JSON definition
|
|
190
|
+
await this.createAgentDefinitionFromYaml(agentsDir, sanitizedAgentName, agentData);
|
|
191
|
+
|
|
192
|
+
// Create prompt file
|
|
193
|
+
await this.createAgentPromptFromYaml(agentsDir, sanitizedAgentName, agentData, projectDir);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Sanitize agent name for file naming
|
|
198
|
+
* @param {string} name - Agent name
|
|
199
|
+
* @returns {string} Sanitized name
|
|
200
|
+
*/
|
|
201
|
+
sanitizeAgentName(name) {
|
|
202
|
+
return name
|
|
203
|
+
.toLowerCase()
|
|
204
|
+
.replaceAll(/\s+/g, '-')
|
|
205
|
+
.replaceAll(/[^a-z0-9-]/g, '');
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Create agent JSON definition from YAML data
|
|
210
|
+
* @param {string} agentsDir - Agents directory
|
|
211
|
+
* @param {string} agentName - Agent name (role-based)
|
|
212
|
+
* @param {Object} agentData - Agent YAML data
|
|
213
|
+
*/
|
|
214
|
+
async createAgentDefinitionFromYaml(agentsDir, agentName, agentData) {
|
|
215
|
+
const personName = agentData.agent.metadata.name;
|
|
216
|
+
const role = agentData.agent.persona.role;
|
|
217
|
+
|
|
218
|
+
const agentConfig = {
|
|
219
|
+
name: agentName,
|
|
220
|
+
description: `${personName} - ${role}`,
|
|
221
|
+
prompt: `file://./${agentName}-prompt.md`,
|
|
222
|
+
tools: ['*'],
|
|
223
|
+
mcpServers: {},
|
|
224
|
+
useLegacyMcpJson: true,
|
|
225
|
+
resources: [],
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
const agentPath = path.join(agentsDir, `${agentName}.json`);
|
|
229
|
+
await fs.writeJson(agentPath, agentConfig, { spaces: 2 });
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Create agent prompt from YAML data
|
|
234
|
+
* @param {string} agentsDir - Agents directory
|
|
235
|
+
* @param {string} agentName - Agent name (role-based)
|
|
236
|
+
* @param {Object} agentData - Agent YAML data
|
|
237
|
+
* @param {string} projectDir - Project directory
|
|
238
|
+
*/
|
|
239
|
+
async createAgentPromptFromYaml(agentsDir, agentName, agentData, projectDir) {
|
|
240
|
+
const promptPath = path.join(agentsDir, `${agentName}-prompt.md`);
|
|
241
|
+
|
|
242
|
+
// Generate prompt from YAML data
|
|
243
|
+
const prompt = this.generatePromptFromYaml(agentData);
|
|
244
|
+
await fs.writeFile(promptPath, prompt);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Generate prompt content from YAML data
|
|
249
|
+
* @param {Object} agentData - Agent YAML data
|
|
250
|
+
* @returns {string} Generated prompt
|
|
251
|
+
*/
|
|
252
|
+
generatePromptFromYaml(agentData) {
|
|
253
|
+
const agent = agentData.agent;
|
|
254
|
+
const name = agent.metadata.name;
|
|
255
|
+
const icon = agent.metadata.icon || '🤖';
|
|
256
|
+
const role = agent.persona.role;
|
|
257
|
+
const identity = agent.persona.identity;
|
|
258
|
+
const style = agent.persona.communication_style;
|
|
259
|
+
const principles = agent.persona.principles;
|
|
260
|
+
|
|
261
|
+
let prompt = `# ${name} ${icon}\n\n`;
|
|
262
|
+
prompt += `## Role\n${role}\n\n`;
|
|
263
|
+
|
|
264
|
+
if (identity) {
|
|
265
|
+
prompt += `## Identity\n${identity}\n\n`;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
if (style) {
|
|
269
|
+
prompt += `## Communication Style\n${style}\n\n`;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (principles) {
|
|
273
|
+
prompt += `## Principles\n`;
|
|
274
|
+
if (typeof principles === 'string') {
|
|
275
|
+
// Handle multi-line string principles
|
|
276
|
+
prompt += principles + '\n\n';
|
|
277
|
+
} else if (Array.isArray(principles)) {
|
|
278
|
+
// Handle array principles
|
|
279
|
+
for (const principle of principles) {
|
|
280
|
+
prompt += `- ${principle}\n`;
|
|
281
|
+
}
|
|
282
|
+
prompt += '\n';
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
// Add menu items if available
|
|
287
|
+
if (agent.menu && agent.menu.length > 0) {
|
|
288
|
+
prompt += `## Available Workflows\n`;
|
|
289
|
+
for (let i = 0; i < agent.menu.length; i++) {
|
|
290
|
+
const item = agent.menu[i];
|
|
291
|
+
prompt += `${i + 1}. **${item.trigger}**: ${item.description}\n`;
|
|
292
|
+
}
|
|
293
|
+
prompt += '\n';
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
prompt += `## Instructions\nYou are ${name}, part of the BMad Method. Follow your role and principles while assisting users with their development needs.\n`;
|
|
297
|
+
|
|
298
|
+
return prompt;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Check if Kiro CLI is available
|
|
303
|
+
* @returns {Promise<boolean>} True if available
|
|
304
|
+
*/
|
|
305
|
+
async isAvailable() {
|
|
306
|
+
try {
|
|
307
|
+
const { execSync } = require('node:child_process');
|
|
308
|
+
execSync('kiro-cli --version', { stdio: 'ignore' });
|
|
309
|
+
return true;
|
|
310
|
+
} catch {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Get installation instructions
|
|
317
|
+
* @returns {string} Installation instructions
|
|
318
|
+
*/
|
|
319
|
+
getInstallInstructions() {
|
|
320
|
+
return `Install Kiro CLI:
|
|
321
|
+
curl -fsSL https://github.com/aws/kiro-cli/releases/latest/download/install.sh | bash
|
|
322
|
+
|
|
323
|
+
Or visit: https://github.com/aws/kiro-cli`;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
module.exports = { KiroCliSetup };
|
|
@@ -47,7 +47,7 @@ class OpenCodeSetup extends BaseIdeSetup {
|
|
|
47
47
|
agentCount++;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
// Install workflow commands with flat naming: bmad-
|
|
50
|
+
// Install workflow commands with flat naming: bmad-{module}-{workflow-name}
|
|
51
51
|
const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
|
|
52
52
|
const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
|
|
53
53
|
|
|
@@ -55,10 +55,10 @@ class OpenCodeSetup extends BaseIdeSetup {
|
|
|
55
55
|
for (const artifact of workflowArtifacts) {
|
|
56
56
|
if (artifact.type === 'workflow-command') {
|
|
57
57
|
const commandContent = artifact.content;
|
|
58
|
-
// Flat structure: bmad-
|
|
58
|
+
// Flat structure: bmad-{module}-{workflow-name}.md
|
|
59
59
|
// artifact.relativePath is like: bmm/workflows/plan-project.md
|
|
60
60
|
const workflowName = path.basename(artifact.relativePath, '.md');
|
|
61
|
-
const targetPath = path.join(commandsBaseDir, `bmad
|
|
61
|
+
const targetPath = path.join(commandsBaseDir, `bmad-${artifact.module}-${workflowName}.md`);
|
|
62
62
|
await this.writeFile(targetPath, commandContent);
|
|
63
63
|
workflowCommandCount++;
|
|
64
64
|
}
|