bmad-method 6.0.0-alpha.13 → 6.0.0-alpha.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.coderabbit.yaml +36 -0
- package/.github/CODE_OF_CONDUCT.md +128 -0
- 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 +183 -360
- package/README.md +4 -1
- package/docs/agent-customization-guide.md +2 -2
- package/docs/custom-content-installation.md +245 -0
- package/docs/document-sharding-guide.md +1 -1
- package/docs/index.md +2 -2
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +6 -5
- package/docs/web-bundles-gemini-gpt-guide.md +1 -1
- package/eslint.config.mjs +14 -0
- package/example-custom-content/README.md +8 -0
- package/{custom/src → example-custom-content}/agents/commit-poet/commit-poet.agent.yaml +1 -1
- package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/instructions.md +5 -5
- package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +1 -1
- package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +1 -1
- package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +2 -2
- 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 +18 -17
- package/example-custom-content/module.yaml +4 -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.md +54 -0
- package/example-custom-content/workflows/wassup/workflow.md +26 -0
- package/example-custom-module/mwm/README.md +9 -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 +151 -0
- package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +138 -0
- package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +138 -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 +125 -0
- package/example-custom-module/mwm/module.yaml +28 -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/installer.js +1 -1
- package/src/core/{_module-installer/install-config.yaml → module.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/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/index.md +1 -1
- 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/{_module-installer/install-config.yaml → module.yaml} +4 -9
- 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 +309 -0
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +337 -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/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/module.template.yaml +53 -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} +71 -25
- 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/README.md +2 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
- package/src/modules/bmm/_module-installer/installer.js +1 -1
- package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +1 -1
- package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +1 -1
- package/src/modules/bmm/agents/analyst.agent.yaml +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/{_module-installer/install-config.yaml → module.yaml} +1 -1
- 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/src/modules/cis/_module-installer/installer.js +1 -1
- package/tools/cli/README.md +7 -7
- 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 +80 -12
- package/tools/cli/installers/lib/core/custom-module-cache.js +239 -0
- package/tools/cli/installers/lib/core/detector.js +8 -4
- package/tools/cli/installers/lib/core/installer.js +933 -376
- package/tools/cli/installers/lib/core/manifest-generator.js +265 -41
- package/tools/cli/installers/lib/core/manifest.js +47 -0
- package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +79 -0
- package/tools/cli/installers/lib/custom/handler.js +396 -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 +535 -56
- package/tools/cli/lib/agent/compiler.js +57 -16
- package/tools/cli/lib/agent/installer.js +129 -28
- package/tools/cli/lib/cli-utils.js +21 -4
- package/tools/cli/lib/config.js +2 -1
- package/tools/cli/lib/ui.js +561 -12
- package/tools/cli/lib/yaml-xml-builder.js +0 -15
- package/tools/maintainer/review-pr-README.md +55 -0
- package/tools/maintainer/review-pr.md +242 -0
- package/tools/migrate-custom-module-paths.js +124 -0
- package/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/docs/custom-agent-installation.md +0 -183
- 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/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/tests.md +0 -0
- /package/src/modules/bmgd/{_module-installer/install-config.yaml → module.yaml} +0 -0
- /package/src/modules/cis/{_module-installer/install-config.yaml → module.yaml} +0 -0
|
@@ -438,23 +438,16 @@ 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
|
|
|
447
|
-
//
|
|
448
|
-
//
|
|
449
|
-
|
|
450
|
-
// Convert kebab-case to title case for the name field
|
|
451
|
-
// e.g., "fred-commit-poet" → "Fred Commit Poet"
|
|
452
|
-
const titleCaseName = agentName
|
|
453
|
-
.split('-')
|
|
454
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
455
|
-
.join(' ');
|
|
456
|
-
agentYaml.agent.metadata.name = titleCaseName;
|
|
457
|
-
}
|
|
448
|
+
// Note: agentName parameter is for UI display only, not for modifying the YAML
|
|
449
|
+
// The persona name (metadata.name) should always come from the YAML file
|
|
450
|
+
// We should NEVER modify metadata.name as it's part of the agent's identity
|
|
458
451
|
|
|
459
452
|
// Extract install_config
|
|
460
453
|
const installConfig = extractInstallConfig(agentYaml);
|
|
@@ -466,14 +459,22 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
|
|
|
466
459
|
finalAnswers = { ...defaults, ...answers };
|
|
467
460
|
}
|
|
468
461
|
|
|
462
|
+
// Add agent_sidecar_folder to answers if provided in config
|
|
463
|
+
if (options.config && options.config.agent_sidecar_folder) {
|
|
464
|
+
finalAnswers.agent_sidecar_folder = options.config.agent_sidecar_folder;
|
|
465
|
+
}
|
|
466
|
+
|
|
469
467
|
// Process templates with answers
|
|
470
468
|
const processedYaml = processAgentYaml(agentYaml, finalAnswers);
|
|
471
469
|
|
|
472
470
|
// Strip install_config from output
|
|
473
471
|
const cleanYaml = stripInstallConfig(processedYaml);
|
|
474
472
|
|
|
475
|
-
//
|
|
476
|
-
|
|
473
|
+
// Replace {agent_sidecar_folder} in XML content
|
|
474
|
+
let xml = compileToXml(cleanYaml, agentName, targetPath);
|
|
475
|
+
if (finalAnswers.agent_sidecar_folder) {
|
|
476
|
+
xml = xml.replaceAll('{agent_sidecar_folder}', finalAnswers.agent_sidecar_folder);
|
|
477
|
+
}
|
|
477
478
|
|
|
478
479
|
return {
|
|
479
480
|
xml,
|
|
@@ -482,10 +483,39 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
|
|
|
482
483
|
};
|
|
483
484
|
}
|
|
484
485
|
|
|
486
|
+
/**
|
|
487
|
+
* Process TTS injection markers in content
|
|
488
|
+
* @param {string} content - Content to process
|
|
489
|
+
* @param {boolean} enableAgentVibes - Whether AgentVibes is enabled
|
|
490
|
+
* @returns {Object} { content: string, hadInjection: boolean }
|
|
491
|
+
*/
|
|
492
|
+
function processTTSInjectionPoints(content, enableAgentVibes) {
|
|
493
|
+
const hasAgentTTS = content.includes('<!-- TTS_INJECTION:agent-tts -->');
|
|
494
|
+
|
|
495
|
+
if (enableAgentVibes && hasAgentTTS) {
|
|
496
|
+
// Replace agent-tts injection marker with TTS rule
|
|
497
|
+
content = content.replaceAll(
|
|
498
|
+
'<!-- TTS_INJECTION:agent-tts -->',
|
|
499
|
+
`- When responding to user messages, speak your responses using TTS:
|
|
500
|
+
Call: \`.claude/hooks/bmad-speak.sh '{agent-id}' '{response-text}'\` after each response
|
|
501
|
+
Replace {agent-id} with YOUR agent ID from <agent id="..."> tag at top of this file
|
|
502
|
+
Replace {response-text} with the text you just output to the user
|
|
503
|
+
IMPORTANT: Use single quotes as shown - do NOT escape special characters like ! or $ inside single quotes
|
|
504
|
+
Run in background (&) to avoid blocking`,
|
|
505
|
+
);
|
|
506
|
+
return { content, hadInjection: true };
|
|
507
|
+
} else if (!enableAgentVibes && hasAgentTTS) {
|
|
508
|
+
// Strip injection markers when disabled
|
|
509
|
+
content = content.replaceAll(/<!-- TTS_INJECTION:agent-tts -->\n?/g, '');
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
return { content, hadInjection: false };
|
|
513
|
+
}
|
|
514
|
+
|
|
485
515
|
/**
|
|
486
516
|
* Compile agent file to .md
|
|
487
517
|
* @param {string} yamlPath - Path to agent YAML file
|
|
488
|
-
* @param {Object} options - { answers: {}, outputPath: string }
|
|
518
|
+
* @param {Object} options - { answers: {}, outputPath: string, enableAgentVibes: boolean }
|
|
489
519
|
* @returns {Object} Compilation result
|
|
490
520
|
*/
|
|
491
521
|
function compileAgentFile(yamlPath, options = {}) {
|
|
@@ -501,13 +531,24 @@ function compileAgentFile(yamlPath, options = {}) {
|
|
|
501
531
|
outputPath = path.join(dir, `${basename}.md`);
|
|
502
532
|
}
|
|
503
533
|
|
|
534
|
+
// Process TTS injection points if enableAgentVibes option is provided
|
|
535
|
+
let xml = result.xml;
|
|
536
|
+
let ttsInjected = false;
|
|
537
|
+
if (options.enableAgentVibes !== undefined) {
|
|
538
|
+
const ttsResult = processTTSInjectionPoints(xml, options.enableAgentVibes);
|
|
539
|
+
xml = ttsResult.content;
|
|
540
|
+
ttsInjected = ttsResult.hadInjection;
|
|
541
|
+
}
|
|
542
|
+
|
|
504
543
|
// Write compiled XML
|
|
505
|
-
fs.writeFileSync(outputPath,
|
|
544
|
+
fs.writeFileSync(outputPath, xml, 'utf8');
|
|
506
545
|
|
|
507
546
|
return {
|
|
508
547
|
...result,
|
|
548
|
+
xml,
|
|
509
549
|
outputPath,
|
|
510
550
|
sourcePath: yamlPath,
|
|
551
|
+
ttsInjected,
|
|
511
552
|
};
|
|
512
553
|
}
|
|
513
554
|
|
|
@@ -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,14 +234,16 @@ 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
|
|
|
217
244
|
// Determine target agent folder name
|
|
218
|
-
|
|
245
|
+
// Use the folder name from agentInfo, NOT the persona name from metadata
|
|
246
|
+
const agentFolderName = agentInfo.name;
|
|
219
247
|
|
|
220
248
|
const agentTargetDir = path.join(targetPath, agentFolderName);
|
|
221
249
|
|
|
@@ -237,11 +265,27 @@ function installAgent(agentInfo, answers, targetPath) {
|
|
|
237
265
|
sidecarCopied: false,
|
|
238
266
|
};
|
|
239
267
|
|
|
240
|
-
//
|
|
241
|
-
if (agentInfo.hasSidecar && agentInfo.type === 'expert') {
|
|
242
|
-
|
|
268
|
+
// Handle sidecar files for agents with hasSidecar flag
|
|
269
|
+
if (agentInfo.hasSidecar === true && agentInfo.type === 'expert') {
|
|
270
|
+
// Get agent sidecar folder from config or use default
|
|
271
|
+
const agentSidecarFolder = options.config?.agent_sidecar_folder || '{project-root}/.myagent-data';
|
|
272
|
+
|
|
273
|
+
// Resolve path variables
|
|
274
|
+
const resolvedSidecarFolder = agentSidecarFolder
|
|
275
|
+
.replaceAll('{project-root}', options.projectRoot || process.cwd())
|
|
276
|
+
.replaceAll('{bmad_folder}', options.bmadFolder || '.bmad');
|
|
277
|
+
|
|
278
|
+
// Create sidecar directory for this agent
|
|
279
|
+
const agentSidecarDir = path.join(resolvedSidecarFolder, agentFolderName);
|
|
280
|
+
if (!fs.existsSync(agentSidecarDir)) {
|
|
281
|
+
fs.mkdirSync(agentSidecarDir, { recursive: true });
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// Find and copy sidecar folder
|
|
285
|
+
const sidecarFiles = copyAgentSidecarFiles(agentInfo.path, agentSidecarDir, agentInfo.yamlFile);
|
|
243
286
|
result.sidecarCopied = true;
|
|
244
287
|
result.sidecarFiles = sidecarFiles;
|
|
288
|
+
result.sidecarDir = agentSidecarDir;
|
|
245
289
|
}
|
|
246
290
|
|
|
247
291
|
return result;
|
|
@@ -285,6 +329,62 @@ function copySidecarFiles(sourceDir, targetDir, excludeYaml) {
|
|
|
285
329
|
return copied;
|
|
286
330
|
}
|
|
287
331
|
|
|
332
|
+
/**
|
|
333
|
+
* Find and copy agent sidecar folders
|
|
334
|
+
* @param {string} sourceDir - Source agent directory
|
|
335
|
+
* @param {string} targetSidecarDir - Target sidecar directory for the agent
|
|
336
|
+
* @param {string} excludeYaml - The .agent.yaml file to exclude
|
|
337
|
+
* @returns {Array} List of copied files
|
|
338
|
+
*/
|
|
339
|
+
function copyAgentSidecarFiles(sourceDir, targetSidecarDir, excludeYaml) {
|
|
340
|
+
const copied = [];
|
|
341
|
+
const preserved = [];
|
|
342
|
+
|
|
343
|
+
// Find folders with "sidecar" in the name
|
|
344
|
+
const entries = fs.readdirSync(sourceDir, { withFileTypes: true });
|
|
345
|
+
|
|
346
|
+
for (const entry of entries) {
|
|
347
|
+
if (entry.isDirectory() && entry.name.toLowerCase().includes('sidecar')) {
|
|
348
|
+
const sidecarSourcePath = path.join(sourceDir, entry.name);
|
|
349
|
+
|
|
350
|
+
// Recursively sync the sidecar folder contents (preserve existing, add new)
|
|
351
|
+
function syncSidecarDir(src, dest) {
|
|
352
|
+
if (!fs.existsSync(dest)) {
|
|
353
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Get all files in source
|
|
357
|
+
const sourceEntries = fs.readdirSync(src, { withFileTypes: true });
|
|
358
|
+
|
|
359
|
+
for (const sourceEntry of sourceEntries) {
|
|
360
|
+
const srcPath = path.join(src, sourceEntry.name);
|
|
361
|
+
const destPath = path.join(dest, sourceEntry.name);
|
|
362
|
+
|
|
363
|
+
if (sourceEntry.isDirectory()) {
|
|
364
|
+
// Recursively sync subdirectories
|
|
365
|
+
syncSidecarDir(srcPath, destPath);
|
|
366
|
+
} else {
|
|
367
|
+
// Check if file already exists in destination
|
|
368
|
+
if (fs.existsSync(destPath)) {
|
|
369
|
+
// File exists - preserve it
|
|
370
|
+
preserved.push(destPath);
|
|
371
|
+
} else {
|
|
372
|
+
// File doesn't exist - copy it
|
|
373
|
+
fs.copyFileSync(srcPath, destPath);
|
|
374
|
+
copied.push(destPath);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
syncSidecarDir(sidecarSourcePath, targetSidecarDir);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// Return info about what was preserved and what was copied
|
|
385
|
+
return { copied, preserved };
|
|
386
|
+
}
|
|
387
|
+
|
|
288
388
|
/**
|
|
289
389
|
* Update agent metadata ID to reflect installed location
|
|
290
390
|
* @param {string} compiledContent - Compiled XML content
|
|
@@ -721,6 +821,7 @@ module.exports = {
|
|
|
721
821
|
promptInstallQuestions,
|
|
722
822
|
installAgent,
|
|
723
823
|
copySidecarFiles,
|
|
824
|
+
copyAgentSidecarFiles,
|
|
724
825
|
updateAgentId,
|
|
725
826
|
detectBmadProject,
|
|
726
827
|
addToManifest,
|
|
@@ -3,6 +3,7 @@ const boxen = require('boxen');
|
|
|
3
3
|
const wrapAnsi = require('wrap-ansi');
|
|
4
4
|
const figlet = require('figlet');
|
|
5
5
|
const path = require('node:path');
|
|
6
|
+
const os = require('node:os');
|
|
6
7
|
|
|
7
8
|
const CLIUtils = {
|
|
8
9
|
/**
|
|
@@ -84,8 +85,8 @@ const CLIUtils = {
|
|
|
84
85
|
/**
|
|
85
86
|
* Display module configuration header
|
|
86
87
|
* @param {string} moduleName - Module name (fallback if no custom header)
|
|
87
|
-
* @param {string} header - Custom header from
|
|
88
|
-
* @param {string} subheader - Custom subheader from
|
|
88
|
+
* @param {string} header - Custom header from module.yaml
|
|
89
|
+
* @param {string} subheader - Custom subheader from module.yaml
|
|
89
90
|
*/
|
|
90
91
|
displayModuleConfigHeader(moduleName, header = null, subheader = null) {
|
|
91
92
|
// Simple blue banner with custom header/subheader if provided
|
|
@@ -100,8 +101,8 @@ const CLIUtils = {
|
|
|
100
101
|
/**
|
|
101
102
|
* Display module with no custom configuration
|
|
102
103
|
* @param {string} moduleName - Module name (fallback if no custom header)
|
|
103
|
-
* @param {string} header - Custom header from
|
|
104
|
-
* @param {string} subheader - Custom subheader from
|
|
104
|
+
* @param {string} header - Custom header from module.yaml
|
|
105
|
+
* @param {string} subheader - Custom subheader from module.yaml
|
|
105
106
|
*/
|
|
106
107
|
displayModuleNoConfig(moduleName, header = null, subheader = null) {
|
|
107
108
|
// Show full banner with header/subheader, just like modules with config
|
|
@@ -205,6 +206,22 @@ const CLIUtils = {
|
|
|
205
206
|
// No longer clear screen or show boxes - just a simple completion message
|
|
206
207
|
// This is deprecated but kept for backwards compatibility
|
|
207
208
|
},
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Expand path with ~ expansion
|
|
212
|
+
* @param {string} inputPath - Path to expand
|
|
213
|
+
* @returns {string} Expanded path
|
|
214
|
+
*/
|
|
215
|
+
expandPath(inputPath) {
|
|
216
|
+
if (!inputPath) return inputPath;
|
|
217
|
+
|
|
218
|
+
// Expand ~ to home directory
|
|
219
|
+
if (inputPath.startsWith('~')) {
|
|
220
|
+
return path.join(os.homedir(), inputPath.slice(1));
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return inputPath;
|
|
224
|
+
},
|
|
208
225
|
};
|
|
209
226
|
|
|
210
227
|
module.exports = { CLIUtils };
|
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
|
|