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
|
@@ -438,9 +438,10 @@ function compileToXml(agentYaml, agentName = '', targetPath = '') {
|
|
|
438
438
|
* @param {Object} answers - Answers from install_config questions (or defaults)
|
|
439
439
|
* @param {string} agentName - Optional final agent name (user's custom persona name)
|
|
440
440
|
* @param {string} targetPath - Optional target path for agent ID
|
|
441
|
+
* @param {Object} options - Additional options including config
|
|
441
442
|
* @returns {Object} { xml: string, metadata: Object }
|
|
442
443
|
*/
|
|
443
|
-
function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = '') {
|
|
444
|
+
function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = '', options = {}) {
|
|
444
445
|
// Parse YAML
|
|
445
446
|
const agentYaml = yaml.parse(yamlContent);
|
|
446
447
|
|
|
@@ -466,14 +467,22 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
|
|
|
466
467
|
finalAnswers = { ...defaults, ...answers };
|
|
467
468
|
}
|
|
468
469
|
|
|
470
|
+
// Add agent_sidecar_folder to answers if provided in config
|
|
471
|
+
if (options.config && options.config.agent_sidecar_folder) {
|
|
472
|
+
finalAnswers.agent_sidecar_folder = options.config.agent_sidecar_folder;
|
|
473
|
+
}
|
|
474
|
+
|
|
469
475
|
// Process templates with answers
|
|
470
476
|
const processedYaml = processAgentYaml(agentYaml, finalAnswers);
|
|
471
477
|
|
|
472
478
|
// Strip install_config from output
|
|
473
479
|
const cleanYaml = stripInstallConfig(processedYaml);
|
|
474
480
|
|
|
475
|
-
//
|
|
476
|
-
|
|
481
|
+
// Replace {agent_sidecar_folder} in XML content
|
|
482
|
+
let xml = compileToXml(cleanYaml, agentName, targetPath);
|
|
483
|
+
if (finalAnswers.agent_sidecar_folder) {
|
|
484
|
+
xml = xml.replaceAll('{agent_sidecar_folder}', finalAnswers.agent_sidecar_folder);
|
|
485
|
+
}
|
|
477
486
|
|
|
478
487
|
return {
|
|
479
488
|
xml,
|
|
@@ -482,10 +491,39 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
|
|
|
482
491
|
};
|
|
483
492
|
}
|
|
484
493
|
|
|
494
|
+
/**
|
|
495
|
+
* Process TTS injection markers in content
|
|
496
|
+
* @param {string} content - Content to process
|
|
497
|
+
* @param {boolean} enableAgentVibes - Whether AgentVibes is enabled
|
|
498
|
+
* @returns {Object} { content: string, hadInjection: boolean }
|
|
499
|
+
*/
|
|
500
|
+
function processTTSInjectionPoints(content, enableAgentVibes) {
|
|
501
|
+
const hasAgentTTS = content.includes('<!-- TTS_INJECTION:agent-tts -->');
|
|
502
|
+
|
|
503
|
+
if (enableAgentVibes && hasAgentTTS) {
|
|
504
|
+
// Replace agent-tts injection marker with TTS rule
|
|
505
|
+
content = content.replaceAll(
|
|
506
|
+
'<!-- TTS_INJECTION:agent-tts -->',
|
|
507
|
+
`- When responding to user messages, speak your responses using TTS:
|
|
508
|
+
Call: \`.claude/hooks/bmad-speak.sh '{agent-id}' '{response-text}'\` after each response
|
|
509
|
+
Replace {agent-id} with YOUR agent ID from <agent id="..."> tag at top of this file
|
|
510
|
+
Replace {response-text} with the text you just output to the user
|
|
511
|
+
IMPORTANT: Use single quotes as shown - do NOT escape special characters like ! or $ inside single quotes
|
|
512
|
+
Run in background (&) to avoid blocking`,
|
|
513
|
+
);
|
|
514
|
+
return { content, hadInjection: true };
|
|
515
|
+
} else if (!enableAgentVibes && hasAgentTTS) {
|
|
516
|
+
// Strip injection markers when disabled
|
|
517
|
+
content = content.replaceAll(/<!-- TTS_INJECTION:agent-tts -->\n?/g, '');
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
return { content, hadInjection: false };
|
|
521
|
+
}
|
|
522
|
+
|
|
485
523
|
/**
|
|
486
524
|
* Compile agent file to .md
|
|
487
525
|
* @param {string} yamlPath - Path to agent YAML file
|
|
488
|
-
* @param {Object} options - { answers: {}, outputPath: string }
|
|
526
|
+
* @param {Object} options - { answers: {}, outputPath: string, enableAgentVibes: boolean }
|
|
489
527
|
* @returns {Object} Compilation result
|
|
490
528
|
*/
|
|
491
529
|
function compileAgentFile(yamlPath, options = {}) {
|
|
@@ -501,13 +539,24 @@ function compileAgentFile(yamlPath, options = {}) {
|
|
|
501
539
|
outputPath = path.join(dir, `${basename}.md`);
|
|
502
540
|
}
|
|
503
541
|
|
|
542
|
+
// Process TTS injection points if enableAgentVibes option is provided
|
|
543
|
+
let xml = result.xml;
|
|
544
|
+
let ttsInjected = false;
|
|
545
|
+
if (options.enableAgentVibes !== undefined) {
|
|
546
|
+
const ttsResult = processTTSInjectionPoints(xml, options.enableAgentVibes);
|
|
547
|
+
xml = ttsResult.content;
|
|
548
|
+
ttsInjected = ttsResult.hadInjection;
|
|
549
|
+
}
|
|
550
|
+
|
|
504
551
|
// Write compiled XML
|
|
505
|
-
fs.writeFileSync(outputPath,
|
|
552
|
+
fs.writeFileSync(outputPath, xml, 'utf8');
|
|
506
553
|
|
|
507
554
|
return {
|
|
508
555
|
...result,
|
|
556
|
+
xml,
|
|
509
557
|
outputPath,
|
|
510
558
|
sourcePath: yamlPath,
|
|
559
|
+
ttsInjected,
|
|
511
560
|
};
|
|
512
561
|
}
|
|
513
562
|
|
|
@@ -46,7 +46,7 @@ function resolvePath(pathStr, context) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/**
|
|
49
|
-
* Discover available agents in the custom agent location
|
|
49
|
+
* Discover available agents in the custom agent location recursively
|
|
50
50
|
* @param {string} searchPath - Path to search for agents
|
|
51
51
|
* @returns {Array} List of agent info objects
|
|
52
52
|
*/
|
|
@@ -56,35 +56,58 @@ function discoverAgents(searchPath) {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
const agents = [];
|
|
59
|
-
const entries = fs.readdirSync(searchPath, { withFileTypes: true });
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
// Check for agent with sidecar (folder containing .agent.yaml)
|
|
74
|
-
const yamlFiles = fs.readdirSync(fullPath).filter((f) => f.endsWith('.agent.yaml'));
|
|
75
|
-
if (yamlFiles.length === 1) {
|
|
76
|
-
const agentYamlPath = path.join(fullPath, yamlFiles[0]);
|
|
60
|
+
// Helper function to recursively search
|
|
61
|
+
function searchDirectory(dir, relativePath = '') {
|
|
62
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
63
|
+
|
|
64
|
+
for (const entry of entries) {
|
|
65
|
+
const fullPath = path.join(dir, entry.name);
|
|
66
|
+
const agentRelativePath = relativePath ? path.join(relativePath, entry.name) : entry.name;
|
|
67
|
+
|
|
68
|
+
if (entry.isFile() && entry.name.endsWith('.agent.yaml')) {
|
|
69
|
+
// Simple agent (single file)
|
|
70
|
+
// The agent name is based on the filename
|
|
71
|
+
const agentName = entry.name.replace('.agent.yaml', '');
|
|
77
72
|
agents.push({
|
|
78
|
-
type: '
|
|
79
|
-
name:
|
|
73
|
+
type: 'simple',
|
|
74
|
+
name: agentName,
|
|
80
75
|
path: fullPath,
|
|
81
|
-
yamlFile:
|
|
82
|
-
|
|
76
|
+
yamlFile: fullPath,
|
|
77
|
+
relativePath: agentRelativePath.replace('.agent.yaml', ''),
|
|
83
78
|
});
|
|
79
|
+
} else if (entry.isDirectory()) {
|
|
80
|
+
// Check if this directory contains an .agent.yaml file
|
|
81
|
+
try {
|
|
82
|
+
const dirContents = fs.readdirSync(fullPath);
|
|
83
|
+
const yamlFiles = dirContents.filter((f) => f.endsWith('.agent.yaml'));
|
|
84
|
+
|
|
85
|
+
if (yamlFiles.length > 0) {
|
|
86
|
+
// Found .agent.yaml files in this directory
|
|
87
|
+
for (const yamlFile of yamlFiles) {
|
|
88
|
+
const agentYamlPath = path.join(fullPath, yamlFile);
|
|
89
|
+
const agentName = path.basename(yamlFile, '.agent.yaml');
|
|
90
|
+
|
|
91
|
+
agents.push({
|
|
92
|
+
type: 'expert',
|
|
93
|
+
name: agentName,
|
|
94
|
+
path: fullPath,
|
|
95
|
+
yamlFile: agentYamlPath,
|
|
96
|
+
relativePath: agentRelativePath,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
} else {
|
|
100
|
+
// No .agent.yaml in this directory, recurse deeper
|
|
101
|
+
searchDirectory(fullPath, agentRelativePath);
|
|
102
|
+
}
|
|
103
|
+
} catch {
|
|
104
|
+
// Skip directories we can't read
|
|
105
|
+
}
|
|
84
106
|
}
|
|
85
107
|
}
|
|
86
108
|
}
|
|
87
109
|
|
|
110
|
+
searchDirectory(searchPath);
|
|
88
111
|
return agents;
|
|
89
112
|
}
|
|
90
113
|
|
|
@@ -103,12 +126,15 @@ function loadAgentConfig(yamlPath) {
|
|
|
103
126
|
// These take precedence over defaults
|
|
104
127
|
const savedAnswers = agentYaml?.saved_answers || {};
|
|
105
128
|
|
|
129
|
+
const metadata = agentYaml?.agent?.metadata || {};
|
|
130
|
+
|
|
106
131
|
return {
|
|
107
132
|
yamlContent: content,
|
|
108
133
|
agentYaml,
|
|
109
134
|
installConfig,
|
|
110
135
|
defaults: { ...defaults, ...savedAnswers }, // saved_answers override defaults
|
|
111
|
-
metadata
|
|
136
|
+
metadata,
|
|
137
|
+
hasSidecar: metadata.hasSidecar === true,
|
|
112
138
|
};
|
|
113
139
|
}
|
|
114
140
|
|
|
@@ -208,9 +234,10 @@ async function promptInstallQuestions(installConfig, defaults, presetAnswers = {
|
|
|
208
234
|
* @param {Object} agentInfo - Agent discovery info
|
|
209
235
|
* @param {Object} answers - User answers for install_config
|
|
210
236
|
* @param {string} targetPath - Target installation directory
|
|
237
|
+
* @param {Object} options - Additional options including config
|
|
211
238
|
* @returns {Object} Installation result
|
|
212
239
|
*/
|
|
213
|
-
function installAgent(agentInfo, answers, targetPath) {
|
|
240
|
+
function installAgent(agentInfo, answers, targetPath, options = {}) {
|
|
214
241
|
// Compile the agent
|
|
215
242
|
const { xml, metadata, processedYaml } = compileAgent(fs.readFileSync(agentInfo.yamlFile, 'utf8'), answers);
|
|
216
243
|
|
|
@@ -237,11 +264,27 @@ function installAgent(agentInfo, answers, targetPath) {
|
|
|
237
264
|
sidecarCopied: false,
|
|
238
265
|
};
|
|
239
266
|
|
|
240
|
-
//
|
|
241
|
-
if (agentInfo.hasSidecar && agentInfo.type === 'expert') {
|
|
242
|
-
|
|
267
|
+
// Handle sidecar files for agents with hasSidecar flag
|
|
268
|
+
if (agentInfo.hasSidecar === true && agentInfo.type === 'expert') {
|
|
269
|
+
// Get agent sidecar folder from config or use default
|
|
270
|
+
const agentSidecarFolder = options.config?.agent_sidecar_folder || '{project-root}/.myagent-data';
|
|
271
|
+
|
|
272
|
+
// Resolve path variables
|
|
273
|
+
const resolvedSidecarFolder = agentSidecarFolder
|
|
274
|
+
.replaceAll('{project-root}', options.projectRoot || process.cwd())
|
|
275
|
+
.replaceAll('{bmad_folder}', options.bmadFolder || '.bmad');
|
|
276
|
+
|
|
277
|
+
// Create sidecar directory for this agent
|
|
278
|
+
const agentSidecarDir = path.join(resolvedSidecarFolder, agentFolderName);
|
|
279
|
+
if (!fs.existsSync(agentSidecarDir)) {
|
|
280
|
+
fs.mkdirSync(agentSidecarDir, { recursive: true });
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Find and copy sidecar folder
|
|
284
|
+
const sidecarFiles = copyAgentSidecarFiles(agentInfo.path, agentSidecarDir, agentInfo.yamlFile);
|
|
243
285
|
result.sidecarCopied = true;
|
|
244
286
|
result.sidecarFiles = sidecarFiles;
|
|
287
|
+
result.sidecarDir = agentSidecarDir;
|
|
245
288
|
}
|
|
246
289
|
|
|
247
290
|
return result;
|
|
@@ -285,6 +328,62 @@ function copySidecarFiles(sourceDir, targetDir, excludeYaml) {
|
|
|
285
328
|
return copied;
|
|
286
329
|
}
|
|
287
330
|
|
|
331
|
+
/**
|
|
332
|
+
* Find and copy agent sidecar folders
|
|
333
|
+
* @param {string} sourceDir - Source agent directory
|
|
334
|
+
* @param {string} targetSidecarDir - Target sidecar directory for the agent
|
|
335
|
+
* @param {string} excludeYaml - The .agent.yaml file to exclude
|
|
336
|
+
* @returns {Array} List of copied files
|
|
337
|
+
*/
|
|
338
|
+
function copyAgentSidecarFiles(sourceDir, targetSidecarDir, excludeYaml) {
|
|
339
|
+
const copied = [];
|
|
340
|
+
const preserved = [];
|
|
341
|
+
|
|
342
|
+
// Find folders with "sidecar" in the name
|
|
343
|
+
const entries = fs.readdirSync(sourceDir, { withFileTypes: true });
|
|
344
|
+
|
|
345
|
+
for (const entry of entries) {
|
|
346
|
+
if (entry.isDirectory() && entry.name.toLowerCase().includes('sidecar')) {
|
|
347
|
+
const sidecarSourcePath = path.join(sourceDir, entry.name);
|
|
348
|
+
|
|
349
|
+
// Recursively sync the sidecar folder contents (preserve existing, add new)
|
|
350
|
+
function syncSidecarDir(src, dest) {
|
|
351
|
+
if (!fs.existsSync(dest)) {
|
|
352
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Get all files in source
|
|
356
|
+
const sourceEntries = fs.readdirSync(src, { withFileTypes: true });
|
|
357
|
+
|
|
358
|
+
for (const sourceEntry of sourceEntries) {
|
|
359
|
+
const srcPath = path.join(src, sourceEntry.name);
|
|
360
|
+
const destPath = path.join(dest, sourceEntry.name);
|
|
361
|
+
|
|
362
|
+
if (sourceEntry.isDirectory()) {
|
|
363
|
+
// Recursively sync subdirectories
|
|
364
|
+
syncSidecarDir(srcPath, destPath);
|
|
365
|
+
} else {
|
|
366
|
+
// Check if file already exists in destination
|
|
367
|
+
if (fs.existsSync(destPath)) {
|
|
368
|
+
// File exists - preserve it
|
|
369
|
+
preserved.push(destPath);
|
|
370
|
+
} else {
|
|
371
|
+
// File doesn't exist - copy it
|
|
372
|
+
fs.copyFileSync(srcPath, destPath);
|
|
373
|
+
copied.push(destPath);
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
syncSidecarDir(sidecarSourcePath, targetSidecarDir);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
// Return info about what was preserved and what was copied
|
|
384
|
+
return { copied, preserved };
|
|
385
|
+
}
|
|
386
|
+
|
|
288
387
|
/**
|
|
289
388
|
* Update agent metadata ID to reflect installed location
|
|
290
389
|
* @param {string} compiledContent - Compiled XML content
|
|
@@ -721,6 +820,7 @@ module.exports = {
|
|
|
721
820
|
promptInstallQuestions,
|
|
722
821
|
installAgent,
|
|
723
822
|
copySidecarFiles,
|
|
823
|
+
copyAgentSidecarFiles,
|
|
724
824
|
updateAgentId,
|
|
725
825
|
detectBmadProject,
|
|
726
826
|
addToManifest,
|
package/tools/cli/lib/config.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const fs = require('fs-extra');
|
|
2
2
|
const yaml = require('js-yaml');
|
|
3
3
|
const path = require('node:path');
|
|
4
|
+
const packageJson = require('../../../package.json');
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Configuration utility class
|
|
@@ -50,7 +51,7 @@ class Config {
|
|
|
50
51
|
const standardReplacements = {
|
|
51
52
|
'{project-root}': replacements.root || '',
|
|
52
53
|
'{module}': replacements.module || '',
|
|
53
|
-
'{version}': replacements.version ||
|
|
54
|
+
'{version}': replacements.version || packageJson.version,
|
|
54
55
|
'{date}': new Date().toISOString().split('T')[0],
|
|
55
56
|
};
|
|
56
57
|
|
package/tools/cli/lib/ui.js
CHANGED
|
@@ -116,8 +116,18 @@ class UI {
|
|
|
116
116
|
|
|
117
117
|
const { installedModuleIds } = await this.getExistingInstallation(confirmedDirectory);
|
|
118
118
|
const coreConfig = await this.collectCoreConfig(confirmedDirectory);
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
|
|
120
|
+
// Skip module selection during update/reinstall - keep existing modules
|
|
121
|
+
let selectedModules;
|
|
122
|
+
if (actionType === 'update' || actionType === 'reinstall') {
|
|
123
|
+
// Keep all existing installed modules during update/reinstall
|
|
124
|
+
selectedModules = [...installedModuleIds];
|
|
125
|
+
console.log(chalk.cyan('\n📦 Keeping existing modules: ') + selectedModules.join(', '));
|
|
126
|
+
} else {
|
|
127
|
+
// Only show module selection for new installs
|
|
128
|
+
const moduleChoices = await this.getModuleChoices(installedModuleIds);
|
|
129
|
+
selectedModules = await this.selectModules(moduleChoices);
|
|
130
|
+
}
|
|
121
131
|
|
|
122
132
|
// Prompt for AgentVibes TTS integration
|
|
123
133
|
const agentVibesConfig = await this.promptAgentVibes(confirmedDirectory);
|
|
@@ -363,11 +373,60 @@ class UI {
|
|
|
363
373
|
`🔧 Tools Configured: ${result.ides?.length > 0 ? result.ides.join(', ') : 'none'}`,
|
|
364
374
|
];
|
|
365
375
|
|
|
376
|
+
// Add AgentVibes TTS info if enabled
|
|
377
|
+
if (result.agentVibesEnabled) {
|
|
378
|
+
summary.push(`🎤 AgentVibes TTS: Enabled`);
|
|
379
|
+
}
|
|
380
|
+
|
|
366
381
|
CLIUtils.displayBox(summary.join('\n\n'), {
|
|
367
382
|
borderColor: 'green',
|
|
368
383
|
borderStyle: 'round',
|
|
369
384
|
});
|
|
370
385
|
|
|
386
|
+
// Display TTS injection details if present
|
|
387
|
+
if (result.ttsInjectedFiles && result.ttsInjectedFiles.length > 0) {
|
|
388
|
+
console.log('\n' + chalk.cyan.bold('═══════════════════════════════════════════════════'));
|
|
389
|
+
console.log(chalk.cyan.bold(' AgentVibes TTS Injection Summary'));
|
|
390
|
+
console.log(chalk.cyan.bold('═══════════════════════════════════════════════════\n'));
|
|
391
|
+
|
|
392
|
+
// Explain what TTS injection is
|
|
393
|
+
console.log(chalk.white.bold('What is TTS Injection?\n'));
|
|
394
|
+
console.log(chalk.dim(' TTS (Text-to-Speech) injection adds voice instructions to BMAD agents,'));
|
|
395
|
+
console.log(chalk.dim(' enabling them to speak their responses aloud using AgentVibes.\n'));
|
|
396
|
+
console.log(chalk.dim(' Example: When you activate the PM agent, it will greet you with'));
|
|
397
|
+
console.log(chalk.dim(' spoken audio like "Hey! I\'m your Project Manager. How can I help?"\n'));
|
|
398
|
+
|
|
399
|
+
console.log(chalk.green(`✅ TTS injection applied to ${result.ttsInjectedFiles.length} file(s):\n`));
|
|
400
|
+
|
|
401
|
+
// Group by type
|
|
402
|
+
const partyModeFiles = result.ttsInjectedFiles.filter((f) => f.type === 'party-mode');
|
|
403
|
+
const agentTTSFiles = result.ttsInjectedFiles.filter((f) => f.type === 'agent-tts');
|
|
404
|
+
|
|
405
|
+
if (partyModeFiles.length > 0) {
|
|
406
|
+
console.log(chalk.yellow(' Party Mode (multi-agent conversations):'));
|
|
407
|
+
for (const file of partyModeFiles) {
|
|
408
|
+
console.log(chalk.dim(` • ${file.path}`));
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
if (agentTTSFiles.length > 0) {
|
|
413
|
+
console.log(chalk.yellow(' Agent TTS (individual agent voices):'));
|
|
414
|
+
for (const file of agentTTSFiles) {
|
|
415
|
+
console.log(chalk.dim(` • ${file.path}`));
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
// Show backup info and restore command
|
|
420
|
+
console.log('\n' + chalk.white.bold('Backups & Recovery:\n'));
|
|
421
|
+
console.log(chalk.dim(' Pre-injection backups are stored in:'));
|
|
422
|
+
console.log(chalk.cyan(' ~/.bmad-tts-backups/\n'));
|
|
423
|
+
console.log(chalk.dim(' To restore original files (removes TTS instructions):'));
|
|
424
|
+
console.log(chalk.cyan(` bmad-tts-injector.sh --restore ${result.path}\n`));
|
|
425
|
+
|
|
426
|
+
console.log(chalk.cyan('💡 BMAD agents will now speak when activated!'));
|
|
427
|
+
console.log(chalk.dim(' Ensure AgentVibes is installed: https://agentvibes.org'));
|
|
428
|
+
}
|
|
429
|
+
|
|
371
430
|
console.log('\n' + chalk.green.bold('✨ BMAD is ready to use!'));
|
|
372
431
|
}
|
|
373
432
|
|
|
@@ -432,11 +491,13 @@ class UI {
|
|
|
432
491
|
const availableModules = await moduleManager.listAvailable();
|
|
433
492
|
|
|
434
493
|
const isNewInstallation = installedModuleIds.size === 0;
|
|
435
|
-
|
|
436
|
-
name: mod.name,
|
|
494
|
+
const moduleChoices = availableModules.map((mod) => ({
|
|
495
|
+
name: mod.isCustom ? `${mod.name} ${chalk.red('(Custom)')}` : mod.name,
|
|
437
496
|
value: mod.id,
|
|
438
497
|
checked: isNewInstallation ? mod.defaultSelected || false : installedModuleIds.has(mod.id),
|
|
439
498
|
}));
|
|
499
|
+
|
|
500
|
+
return moduleChoices;
|
|
440
501
|
}
|
|
441
502
|
|
|
442
503
|
/**
|
|
@@ -232,21 +232,6 @@ class YamlXmlBuilder {
|
|
|
232
232
|
return xml;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
/**
|
|
236
|
-
* Build metadata comment
|
|
237
|
-
*/
|
|
238
|
-
buildMetadataComment(metadata) {
|
|
239
|
-
const lines = ['<!-- BUILD-META', ` source: ${metadata.sourceFile || 'unknown'} (hash: ${metadata.sourceHash || 'unknown'})`];
|
|
240
|
-
|
|
241
|
-
if (metadata.customizeFile) {
|
|
242
|
-
lines.push(` customize: ${metadata.customizeFile} (hash: ${metadata.customizeHash || 'unknown'})`);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
lines.push(` built: ${new Date().toISOString()}`, ` builder-version: ${metadata.builderVersion || '1.0.0'}`, '-->\n');
|
|
246
|
-
|
|
247
|
-
return lines.join('\n');
|
|
248
|
-
}
|
|
249
|
-
|
|
250
235
|
/**
|
|
251
236
|
* Build persona XML section
|
|
252
237
|
*/
|