bmad-method 6.0.0-alpha.12 → 6.0.0-alpha.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
- package/.github/scripts/discord-helpers.sh +15 -0
- package/.github/workflows/bundle-latest.yaml +79 -27
- package/.github/workflows/discord.yaml +278 -8
- package/.github/workflows/quality.yaml +19 -0
- package/.markdownlint-cli2.yaml +42 -0
- package/.prettierignore +3 -0
- package/CHANGELOG.md +254 -1
- package/CODE_OF_CONDUCT.md +128 -0
- package/README.md +3 -1
- package/bmad-method-6.0.0-alpha.14.tgz +0 -0
- package/docs/agent-customization-guide.md +2 -2
- package/docs/custom-agent-installation.md +58 -90
- package/docs/document-sharding-guide.md +1 -1
- package/docs/ide-info/rovo-dev.md +388 -0
- package/docs/index.md +6 -81
- package/docs/installers-bundlers/installers-modules-platforms-reference.md +1 -1
- package/eslint.config.mjs +14 -0
- package/example-custom-content/README.md +4 -0
- package/example-custom-content/agents/commit-poet/commit-poet.agent.yaml +129 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +161 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
- package/example-custom-content/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
- package/example-custom-content/agents/toolsmith/toolsmith.agent.yaml +109 -0
- package/example-custom-content/custom.yaml +3 -0
- package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +168 -0
- package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +155 -0
- package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +89 -0
- package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +36 -0
- package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +150 -0
- package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +1 -0
- package/example-custom-content/workflows/quiz-master/workflow-plan-quiz-master.md +269 -0
- package/example-custom-content/workflows/quiz-master/workflow.md +54 -0
- package/example-custom-content/workflows/wassup/workflow.md +26 -0
- package/example-custom-module/mwm/README.md +4 -0
- package/example-custom-module/mwm/_module-installer/install-config.yaml +27 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +47 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +17 -0
- package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +150 -0
- package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +137 -0
- package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +137 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
- package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +124 -0
- package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +31 -0
- package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/crisis-support/README.md +31 -0
- package/example-custom-module/mwm/workflows/crisis-support/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/daily-checkin/README.md +32 -0
- package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/guided-meditation/README.md +31 -0
- package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +45 -0
- package/example-custom-module/mwm/workflows/wellness-journal/README.md +31 -0
- package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +45 -0
- package/package.json +9 -4
- package/src/core/_module-installer/install-config.yaml +5 -1
- package/src/core/agents/bmad-master.agent.yaml +1 -1
- package/src/core/agents/bmad-web-orchestrator.agent.xml +1 -1
- package/src/core/resources/excalidraw/library-loader.md +2 -2
- package/src/core/tasks/advanced-elicitation-methods.csv +51 -21
- package/src/core/tasks/advanced-elicitation.xml +18 -8
- package/src/core/tasks/workflow.xml +36 -71
- package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
- package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +196 -0
- package/src/core/workflows/brainstorming/steps/step-01b-continue.md +121 -0
- package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +224 -0
- package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +236 -0
- package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +208 -0
- package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +263 -0
- package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +339 -0
- package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +302 -0
- package/src/core/workflows/brainstorming/template.md +13 -104
- package/src/core/workflows/brainstorming/workflow.md +51 -0
- package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
- package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +203 -0
- package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +158 -0
- package/src/core/workflows/party-mode/workflow.md +206 -0
- package/src/modules/bmb/README.md +153 -86
- package/src/modules/bmb/_module-installer/install-config.yaml +4 -9
- package/src/modules/bmb/_module-installer/installer.js +76 -0
- package/src/modules/bmb/agents/bmad-builder.agent.yaml +75 -38
- package/src/modules/bmb/docs/{agent-menu-patterns.md → agents/agent-menu-patterns.md} +6 -6
- package/src/modules/bmb/docs/{expert-agent-architecture.md → agents/expert-agent-architecture.md} +20 -20
- package/src/modules/bmb/docs/agents/kb.csv +0 -0
- package/src/modules/bmb/docs/{module-agent-architecture.md → agents/module-agent-architecture.md} +46 -46
- package/src/modules/bmb/docs/{simple-agent-architecture.md → agents/simple-agent-architecture.md} +7 -3
- package/src/modules/bmb/docs/workflows/architecture.md +220 -0
- package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +19 -0
- package/src/modules/bmb/docs/workflows/csv-data-file-standards.md +206 -0
- package/src/modules/bmb/docs/workflows/index.md +45 -0
- package/src/modules/bmb/docs/workflows/intent-vs-prescriptive-spectrum.md +220 -0
- package/src/modules/bmb/docs/workflows/kb.csv +0 -0
- package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -0
- package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +223 -0
- package/src/modules/bmb/docs/workflows/templates/step-file.md +139 -0
- package/src/modules/bmb/docs/workflows/templates/step-template.md +290 -0
- package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
- package/src/modules/bmb/docs/workflows/templates/workflow.md +58 -0
- package/src/modules/bmb/docs/workflows/terms.md +97 -0
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +4 -4
- package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +8 -8
- package/src/modules/bmb/reference/agents/module-examples/README.md +1 -1
- package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +7 -7
- package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +176 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +120 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +153 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
- package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +29 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/README.md +3 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +242 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +24 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +108 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +46 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +39 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +152 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +50 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +53 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +57 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +223 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +126 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +150 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +152 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
- package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
- package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +305 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +145 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +210 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +260 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +237 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +231 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +224 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +234 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +179 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +197 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +180 -0
- package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +222 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_commands.md +21 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_persona.md +25 -0
- package/src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md +23 -0
- package/src/modules/bmb/workflows/create-agent/workflow.md +91 -0
- package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +155 -0
- package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +169 -0
- package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +217 -0
- package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +267 -0
- package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +228 -0
- package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +233 -0
- package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +296 -0
- package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +228 -0
- package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +186 -0
- package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +308 -0
- package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +336 -0
- package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +335 -0
- package/src/modules/bmb/workflows/create-module/templates/agent.template.md +317 -0
- package/src/modules/bmb/workflows/create-module/templates/install-config.template.yaml +53 -0
- package/src/modules/bmb/workflows/create-module/templates/installer.template.js +47 -0
- package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +5 -0
- package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -0
- package/src/modules/bmb/workflows/create-module/validation.md +126 -0
- package/src/modules/bmb/workflows/create-module/workflow.md +55 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +157 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +211 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +250 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +216 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +289 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +271 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +308 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +284 -0
- package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
- package/src/modules/bmb/workflows/create-workflow/workflow.md +58 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +134 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +202 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +157 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +150 -0
- package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +150 -0
- package/src/modules/bmb/workflows/edit-agent/workflow.md +58 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +217 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +253 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +217 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +193 -0
- package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +245 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/completion-summary.md +75 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/improvement-goals.md +68 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/improvement-log.md +40 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/validation-results.md +51 -0
- package/src/modules/bmb/workflows/edit-workflow/templates/workflow-analysis.md +56 -0
- package/src/modules/bmb/workflows/edit-workflow/workflow.md +58 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +152 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +243 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +274 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +295 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +264 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +360 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +258 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +301 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/templates/compliance-report.md +140 -0
- package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +58 -0
- package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/checklist.md +0 -1
- package/src/modules/bmgd/agents/game-architect.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-designer.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-dev.agent.yaml +1 -1
- package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +1 -1
- package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
- package/src/modules/bmm/_module-installer/install-config.yaml +10 -16
- package/src/modules/bmm/agents/analyst.agent.yaml +25 -22
- package/src/modules/bmm/agents/architect.agent.yaml +12 -14
- package/src/modules/bmm/agents/dev.agent.yaml +20 -16
- package/src/modules/bmm/agents/pm.agent.yaml +14 -32
- package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +36 -0
- package/src/modules/bmm/agents/sm.agent.yaml +13 -31
- package/src/modules/bmm/agents/tea.agent.yaml +10 -7
- package/src/modules/bmm/agents/tech-writer.agent.yaml +7 -20
- package/src/modules/bmm/agents/ux-designer.agent.yaml +12 -10
- package/src/modules/bmm/data/README.md +29 -0
- package/src/modules/bmm/data/project-context-template.md +40 -0
- package/src/modules/bmm/docs/README.md +44 -10
- package/src/modules/bmm/docs/agents-guide.md +80 -53
- package/src/modules/bmm/docs/bmad-quick-flow.md +528 -0
- package/src/modules/bmm/docs/brownfield-guide.md +25 -39
- package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
- package/src/modules/bmm/docs/faq.md +6 -39
- package/src/modules/bmm/docs/glossary.md +12 -25
- package/src/modules/bmm/docs/images/README.md +37 -0
- package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +960 -1845
- package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +4 -2
- package/src/modules/bmm/docs/quick-flow-solo-dev.md +337 -0
- package/src/modules/bmm/docs/quick-spec-flow.md +5 -5
- package/src/modules/bmm/docs/quick-start.md +9 -25
- package/src/modules/bmm/docs/scale-adaptive-system.md +5 -5
- package/src/modules/bmm/docs/test-architecture.md +90 -24
- package/src/modules/bmm/docs/troubleshooting.md +680 -0
- package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
- package/src/modules/bmm/docs/workflows-analysis.md +36 -140
- package/src/modules/bmm/docs/workflows-implementation.md +175 -160
- package/src/modules/bmm/docs/workflows-planning.md +51 -212
- package/src/modules/bmm/docs/workflows-solutioning.md +26 -71
- package/src/modules/bmm/tasks/daily-standup.xml +85 -0
- package/src/modules/bmm/teams/default-party.csv +15 -14
- package/src/modules/bmm/teams/team-fullstack.yaml +0 -1
- package/src/modules/bmm/testarch/knowledge/api-request.md +303 -0
- package/src/modules/bmm/testarch/knowledge/auth-session.md +356 -0
- package/src/modules/bmm/testarch/knowledge/burn-in.md +273 -0
- package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
- package/src/modules/bmm/testarch/knowledge/file-utils.md +260 -0
- package/src/modules/bmm/testarch/knowledge/fixtures-composition.md +382 -0
- package/src/modules/bmm/testarch/knowledge/intercept-network-call.md +280 -0
- package/src/modules/bmm/testarch/knowledge/log.md +294 -0
- package/src/modules/bmm/testarch/knowledge/network-error-monitor.md +272 -0
- package/src/modules/bmm/testarch/knowledge/network-recorder.md +265 -0
- package/src/modules/bmm/testarch/knowledge/overview.md +284 -0
- package/src/modules/bmm/testarch/knowledge/recurse.md +296 -0
- package/src/modules/bmm/testarch/tea-index.csv +11 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/product-brief.template.md +8 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01-init.md +192 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01b-continue.md +167 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +203 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +206 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +209 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +223 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-06-complete.md +199 -0
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +58 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +136 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +228 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +237 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +205 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +233 -0
- package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +442 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +181 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +236 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +199 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +248 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +258 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +176 -0
- package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +474 -0
- package/src/modules/bmm/workflows/1-analysis/research/research.template.md +15 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +136 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +238 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +247 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +201 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +238 -0
- package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +485 -0
- package/src/modules/bmm/workflows/1-analysis/research/workflow.md +204 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +159 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +126 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +209 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +215 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +218 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +233 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +251 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +253 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +240 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +247 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +236 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +263 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +226 -0
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +6 -138
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +59 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +12 -200
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +243 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +165 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +420 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +289 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +290 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +270 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +261 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +257 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +298 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +269 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +293 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +223 -0
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +61 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-decision-template.md +13 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/data/domain-complexity.csv +11 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/data/project-types.csv +7 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md +194 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01b-continue.md +163 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md +223 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +330 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +317 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md +358 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md +378 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md +358 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +351 -0
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +49 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +258 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +232 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +271 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +144 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +189 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +177 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +178 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +138 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +251 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +132 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/templates/readiness-report-template.md +4 -0
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +54 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +2 -1
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +224 -0
- package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +4 -11
- package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +332 -214
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +354 -0
- package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +21 -34
- package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +65 -23
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +406 -0
- package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +6 -37
- package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +19 -21
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +11 -10
- package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +174 -0
- package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/instructions.md +115 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +26 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/checklist.md +25 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/instructions.md +202 -0
- package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +33 -0
- package/src/modules/bmm/workflows/document-project/instructions.md +1 -1
- package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +2 -2
- package/src/modules/bmm/workflows/generate-project-context/project-context-template.md +20 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +193 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +317 -0
- package/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +277 -0
- package/src/modules/bmm/workflows/generate-project-context/workflow.md +48 -0
- package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +1 -1
- package/src/modules/bmm/workflows/testarch/atdd/instructions.md +23 -3
- package/src/modules/bmm/workflows/testarch/automate/instructions.md +23 -2
- package/src/modules/bmm/workflows/testarch/ci/checklist.md +1 -1
- package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +36 -3
- package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +25 -4
- package/src/modules/bmm/workflows/testarch/ci/instructions.md +20 -3
- package/src/modules/bmm/workflows/testarch/framework/instructions.md +27 -1
- package/src/modules/bmm/workflows/testarch/test-design/instructions.md +8 -2
- package/src/modules/bmm/workflows/testarch/test-review/instructions.md +29 -9
- package/src/modules/bmm/workflows/workflow-status/init/instructions.md +66 -54
- package/src/modules/bmm/workflows/workflow-status/instructions.md +11 -4
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +4 -8
- package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +4 -9
- package/src/modules/cis/agents/README.md +1 -1
- package/src/modules/cis/agents/brainstorming-coach.agent.yaml +3 -2
- package/src/modules/cis/agents/creative-problem-solver.agent.yaml +2 -1
- package/src/modules/cis/agents/design-thinking-coach.agent.yaml +2 -1
- package/src/modules/cis/agents/innovation-strategist.agent.yaml +2 -1
- package/src/modules/cis/agents/presentation-master.agent.yaml +3 -2
- package/src/modules/cis/agents/storyteller.agent.yaml +2 -1
- package/src/modules/cis/teams/default-party.csv +6 -5
- package/src/utility/models/agent-activation-ide.xml +4 -4
- package/src/utility/models/agent-activation-web.xml +1 -11
- package/src/utility/models/fragments/activation-rules.xml +5 -6
- package/src/utility/models/fragments/handler-exec.xml +6 -5
- package/src/utility/models/fragments/handler-multi.xml +14 -0
- package/test/README.md +1 -1
- package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +1 -3
- package/tools/cli/README.md +4 -3
- package/tools/cli/bundlers/web-bundler.js +3 -14
- package/tools/cli/commands/build.js +9 -184
- package/tools/cli/commands/install.js +42 -2
- package/tools/cli/installers/lib/core/config-collector.js +94 -10
- package/tools/cli/installers/lib/core/installer.js +389 -55
- package/tools/cli/installers/lib/core/manifest-generator.js +91 -30
- package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +79 -0
- package/tools/cli/installers/lib/custom/handler.js +266 -0
- package/tools/cli/installers/lib/ide/_base-ide.js +10 -0
- package/tools/cli/installers/lib/ide/antigravity.js +51 -7
- package/tools/cli/installers/lib/ide/auggie.js +72 -7
- package/tools/cli/installers/lib/ide/claude-code.js +1 -6
- package/tools/cli/installers/lib/ide/cline.js +49 -0
- package/tools/cli/installers/lib/ide/codex.js +2 -2
- package/tools/cli/installers/lib/ide/crush.js +66 -6
- package/tools/cli/installers/lib/ide/cursor.js +29 -13
- package/tools/cli/installers/lib/ide/gemini.js +96 -1
- package/tools/cli/installers/lib/ide/github-copilot.js +59 -48
- package/tools/cli/installers/lib/ide/iflow.js +67 -1
- package/tools/cli/installers/lib/ide/kilo.js +74 -0
- package/tools/cli/installers/lib/ide/kiro-cli.js +327 -0
- package/tools/cli/installers/lib/ide/opencode.js +3 -3
- package/tools/cli/installers/lib/ide/qwen.js +54 -0
- package/tools/cli/installers/lib/ide/roo.js +145 -138
- package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
- package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +8 -2
- package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +34 -19
- package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +18 -14
- package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
- package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
- package/tools/cli/installers/lib/ide/trae.js +47 -0
- package/tools/cli/installers/lib/modules/manager.js +486 -53
- package/tools/cli/lib/agent/compiler.js +210 -27
- package/tools/cli/lib/agent/installer.js +140 -30
- package/tools/cli/lib/agent-analyzer.js +46 -18
- package/tools/cli/lib/config.js +2 -1
- package/tools/cli/lib/ui.js +269 -13
- package/tools/cli/lib/yaml-xml-builder.js +123 -39
- package/tools/platform-codes.yaml +12 -0
- package/tools/schema/agent.js +229 -20
- package/tools/validate-svg-changes.sh +356 -0
- package/src/core/tasks/adv-elicit-methods.csv +0 -39
- package/src/core/workflows/brainstorming/README.md +0 -261
- package/src/core/workflows/brainstorming/instructions.md +0 -315
- package/src/core/workflows/brainstorming/workflow.yaml +0 -38
- package/src/core/workflows/party-mode/instructions.md +0 -183
- package/src/core/workflows/party-mode/workflow.yaml +0 -28
- package/src/modules/bmb/workflows/audit-workflow/checklist.md +0 -142
- package/src/modules/bmb/workflows/audit-workflow/instructions.md +0 -341
- package/src/modules/bmb/workflows/audit-workflow/template.md +0 -118
- package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +0 -25
- package/src/modules/bmb/workflows/convert-legacy/README.md +0 -262
- package/src/modules/bmb/workflows/convert-legacy/checklist.md +0 -205
- package/src/modules/bmb/workflows/convert-legacy/instructions.md +0 -377
- package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +0 -30
- package/src/modules/bmb/workflows/create-agent/instructions.md +0 -519
- package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -55
- package/src/modules/bmb/workflows/create-module/README.md +0 -229
- package/src/modules/bmb/workflows/create-module/brainstorm-context.md +0 -137
- package/src/modules/bmb/workflows/create-module/checklist.md +0 -235
- package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
- package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +0 -231
- package/src/modules/bmb/workflows/create-module/instructions.md +0 -577
- package/src/modules/bmb/workflows/create-module/module-structure.md +0 -400
- package/src/modules/bmb/workflows/create-module/workflow.yaml +0 -52
- package/src/modules/bmb/workflows/create-workflow/README.md +0 -277
- package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
- package/src/modules/bmb/workflows/create-workflow/checklist.md +0 -94
- package/src/modules/bmb/workflows/create-workflow/instructions.md +0 -725
- package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1327
- package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
- package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -15
- package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
- package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -61
- package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -41
- package/src/modules/bmb/workflows/edit-agent/README.md +0 -239
- package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -654
- package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -49
- package/src/modules/bmb/workflows/edit-workflow/README.md +0 -119
- package/src/modules/bmb/workflows/edit-workflow/checklist.md +0 -70
- package/src/modules/bmb/workflows/edit-workflow/instructions.md +0 -342
- package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +0 -27
- package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +0 -22
- package/src/modules/bmm/_module-installer/assets/bmm-kb.md +0 -1
- package/src/modules/bmm/_module-installer/assets/technical-decisions.md +0 -30
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -112
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
- package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -39
- package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +0 -425
- package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +0 -180
- package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -56
- package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
- package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
- package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +0 -181
- package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -61
- package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
- package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
- package/src/modules/bmm/workflows/1-analysis/research/checklist.md +0 -299
- package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
- package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -438
- package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -675
- package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -134
- package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -534
- package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
- package/src/modules/bmm/workflows/1-analysis/research/template-market.md +0 -347
- package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +0 -245
- package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +0 -62
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1308
- package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -93
- package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
- package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -703
- package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -78
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -436
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -980
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
- package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -60
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
- package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
- package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
- package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
- package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +0 -768
- package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
- package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -100
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md +0 -80
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +0 -616
- package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +0 -63
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
- package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -64
- package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
- package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
- package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
- package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
- package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -58
- package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
- package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
- package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
- package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -63
- package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
- package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -28
- package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
- package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -25
- package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
- package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
- package/tools/cli/commands/agent-install.js +0 -409
- /package/src/modules/bmb/docs/{agent-compilation.md → agents/agent-compilation.md} +0 -0
- /package/src/modules/bmb/docs/{index.md → agents/index.md} +0 -0
- /package/src/modules/bmb/docs/{understanding-agent-types.md → agents/understanding-agent-types.md} +0 -0
- /package/src/modules/bmb/reference/{readme.md → README.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{agent-validation-checklist.md → data/agent-validation-checklist.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{brainstorm-context.md → data/brainstorm-context.md} +0 -0
- /package/src/modules/bmb/workflows/create-agent/{communication-presets.csv → data/communication-presets.csv} +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/README.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/instructions.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/workflow.yaml +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/README.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/checklist.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/instructions.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/template.md +0 -0
- /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/workflow.yaml +0 -0
- /package/src/modules/bmm/{workflows/techdoc → data}/documentation-standards.md +0 -0
|
@@ -1,3 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File: tools/cli/installers/lib/core/installer.js
|
|
3
|
+
*
|
|
4
|
+
* BMAD Method - Business Model Agile Development Method
|
|
5
|
+
* Repository: https://github.com/paulpreibisch/BMAD-METHOD
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2025 Paul Preibisch
|
|
8
|
+
* Licensed under the Apache License, Version 2.0
|
|
9
|
+
*
|
|
10
|
+
* ---
|
|
11
|
+
*
|
|
12
|
+
* @fileoverview Core BMAD installation orchestrator with AgentVibes injection point support
|
|
13
|
+
* @context Manages complete BMAD installation flow including core agents, modules, IDE configs, and optional TTS integration
|
|
14
|
+
* @architecture Orchestrator pattern - coordinates Detector, ModuleManager, IdeManager, and file operations to build complete BMAD installation
|
|
15
|
+
* @dependencies fs-extra, ora, chalk, detector.js, module-manager.js, ide-manager.js, config.js
|
|
16
|
+
* @entrypoints Called by install.js command via installer.install(config)
|
|
17
|
+
* @patterns Injection point processing (AgentVibes), placeholder replacement ({bmad_folder}), module dependency resolution
|
|
18
|
+
* @related GitHub AgentVibes#34 (injection points), ui.js (user prompts), copyFileWithPlaceholderReplacement()
|
|
19
|
+
*/
|
|
20
|
+
|
|
1
21
|
const path = require('node:path');
|
|
2
22
|
const fs = require('fs-extra');
|
|
3
23
|
const chalk = require('chalk');
|
|
@@ -17,6 +37,7 @@ const { AgentPartyGenerator } = require('../../../lib/agent-party-generator');
|
|
|
17
37
|
const { CLIUtils } = require('../../../lib/cli-utils');
|
|
18
38
|
const { ManifestGenerator } = require('./manifest-generator');
|
|
19
39
|
const { IdeConfigManager } = require('./ide-config-manager');
|
|
40
|
+
const { replaceAgentSidecarFolders } = require('./post-install-sidecar-replacement');
|
|
20
41
|
|
|
21
42
|
class Installer {
|
|
22
43
|
constructor() {
|
|
@@ -31,6 +52,7 @@ class Installer {
|
|
|
31
52
|
this.configCollector = new ConfigCollector();
|
|
32
53
|
this.ideConfigManager = new IdeConfigManager();
|
|
33
54
|
this.installedFiles = []; // Track all installed files
|
|
55
|
+
this.ttsInjectedFiles = []; // Track files with TTS injection applied
|
|
34
56
|
}
|
|
35
57
|
|
|
36
58
|
/**
|
|
@@ -69,10 +91,41 @@ class Installer {
|
|
|
69
91
|
}
|
|
70
92
|
|
|
71
93
|
/**
|
|
72
|
-
*
|
|
73
|
-
* @
|
|
74
|
-
* @
|
|
75
|
-
* @param {string}
|
|
94
|
+
* @function copyFileWithPlaceholderReplacement
|
|
95
|
+
* @intent Copy files from BMAD source to installation directory with dynamic content transformation
|
|
96
|
+
* @why Enables installation-time customization: {bmad_folder} replacement + optional AgentVibes TTS injection
|
|
97
|
+
* @param {string} sourcePath - Absolute path to source file in BMAD repository
|
|
98
|
+
* @param {string} targetPath - Absolute path to destination file in user's project
|
|
99
|
+
* @param {string} bmadFolderName - User's chosen bmad folder name (default: 'bmad')
|
|
100
|
+
* @returns {Promise<void>} Resolves when file copy and transformation complete
|
|
101
|
+
* @sideeffects Writes transformed file to targetPath, creates parent directories if needed
|
|
102
|
+
* @edgecases Binary files bypass transformation, falls back to raw copy if UTF-8 read fails
|
|
103
|
+
* @calledby installCore(), installModule(), IDE installers during file vendoring
|
|
104
|
+
* @calls processTTSInjectionPoints(), fs.readFile(), fs.writeFile(), fs.copy()
|
|
105
|
+
*
|
|
106
|
+
* AI NOTE: This is the core transformation pipeline for ALL BMAD installation file copies.
|
|
107
|
+
* It performs two transformations in sequence:
|
|
108
|
+
* 1. {bmad_folder} → user's custom folder name (e.g., ".bmad" or "bmad")
|
|
109
|
+
* 2. <!-- TTS_INJECTION:* --> → TTS bash calls (if enabled) OR stripped (if disabled)
|
|
110
|
+
*
|
|
111
|
+
* The injection point processing enables loose coupling between BMAD and TTS providers:
|
|
112
|
+
* - BMAD source contains injection markers (not actual TTS code)
|
|
113
|
+
* - At install-time, markers are replaced OR removed based on user preference
|
|
114
|
+
* - Result: Clean installs for users without TTS, working TTS for users with it
|
|
115
|
+
*
|
|
116
|
+
* PATTERN: Adding New Injection Points
|
|
117
|
+
* =====================================
|
|
118
|
+
* 1. Add HTML comment marker in BMAD source file:
|
|
119
|
+
* <!-- TTS_INJECTION:feature-name -->
|
|
120
|
+
*
|
|
121
|
+
* 2. Add replacement logic in processTTSInjectionPoints():
|
|
122
|
+
* if (enableAgentVibes) {
|
|
123
|
+
* content = content.replace(/<!-- TTS_INJECTION:feature-name -->/g, 'actual code');
|
|
124
|
+
* } else {
|
|
125
|
+
* content = content.replace(/<!-- TTS_INJECTION:feature-name -->\n?/g, '');
|
|
126
|
+
* }
|
|
127
|
+
*
|
|
128
|
+
* 3. Document marker in instructions.md (if applicable)
|
|
76
129
|
*/
|
|
77
130
|
async copyFileWithPlaceholderReplacement(sourcePath, targetPath, bmadFolderName) {
|
|
78
131
|
// List of text file extensions that should have placeholder replacement
|
|
@@ -90,6 +143,14 @@ class Installer {
|
|
|
90
143
|
content = content.replaceAll('{bmad_folder}', bmadFolderName);
|
|
91
144
|
}
|
|
92
145
|
|
|
146
|
+
// Replace escape sequence {*bmad_folder*} with literal {bmad_folder}
|
|
147
|
+
if (content.includes('{*bmad_folder*}')) {
|
|
148
|
+
content = content.replaceAll('{*bmad_folder*}', '{bmad_folder}');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Process AgentVibes injection points (pass targetPath for tracking)
|
|
152
|
+
content = this.processTTSInjectionPoints(content, targetPath);
|
|
153
|
+
|
|
93
154
|
// Write to target with replaced content
|
|
94
155
|
await fs.ensureDir(path.dirname(targetPath));
|
|
95
156
|
await fs.writeFile(targetPath, content, 'utf8');
|
|
@@ -103,6 +164,116 @@ class Installer {
|
|
|
103
164
|
}
|
|
104
165
|
}
|
|
105
166
|
|
|
167
|
+
/**
|
|
168
|
+
* @function processTTSInjectionPoints
|
|
169
|
+
* @intent Transform TTS injection markers based on user's installation choice
|
|
170
|
+
* @why Enables optional TTS integration without tight coupling between BMAD and TTS providers
|
|
171
|
+
* @param {string} content - Raw file content containing potential injection markers
|
|
172
|
+
* @returns {string} Transformed content with markers replaced (if enabled) or stripped (if disabled)
|
|
173
|
+
* @sideeffects None - pure transformation function
|
|
174
|
+
* @edgecases Returns content unchanged if no markers present, safe to call on all files
|
|
175
|
+
* @calledby copyFileWithPlaceholderReplacement() during every file copy operation
|
|
176
|
+
* @calls String.replace() with regex patterns for each injection point type
|
|
177
|
+
*
|
|
178
|
+
* AI NOTE: This implements the injection point pattern for TTS integration.
|
|
179
|
+
* Key architectural decisions:
|
|
180
|
+
*
|
|
181
|
+
* 1. **Why Injection Points vs Direct Integration?**
|
|
182
|
+
* - BMAD and TTS providers are separate projects with different maintainers
|
|
183
|
+
* - Users may install BMAD without TTS support (and vice versa)
|
|
184
|
+
* - Hard-coding TTS calls would break BMAD for non-TTS users
|
|
185
|
+
* - Injection points allow conditional feature inclusion at install-time
|
|
186
|
+
*
|
|
187
|
+
* 2. **How It Works:**
|
|
188
|
+
* - BMAD source contains markers: <!-- TTS_INJECTION:feature-name -->
|
|
189
|
+
* - During installation, user is prompted: "Enable AgentVibes TTS?"
|
|
190
|
+
* - If YES: markers → replaced with actual bash TTS calls
|
|
191
|
+
* - If NO: markers → stripped cleanly from installed files
|
|
192
|
+
*
|
|
193
|
+
* 3. **State Management:**
|
|
194
|
+
* - this.enableAgentVibes set in install() method from config.enableAgentVibes
|
|
195
|
+
* - config.enableAgentVibes comes from ui.promptAgentVibes() user choice
|
|
196
|
+
* - Flag persists for entire installation, all files get same treatment
|
|
197
|
+
*
|
|
198
|
+
* CURRENT INJECTION POINTS:
|
|
199
|
+
* ==========================
|
|
200
|
+
* - party-mode: Injects TTS calls after each agent speaks in party mode
|
|
201
|
+
* Location: src/core/workflows/party-mode/instructions.md
|
|
202
|
+
* Marker: <!-- TTS_INJECTION:party-mode -->
|
|
203
|
+
* Replacement: Bash call to .claude/hooks/bmad-speak.sh with agent name and dialogue
|
|
204
|
+
*
|
|
205
|
+
* - agent-tts: Injects TTS rule for individual agent conversations
|
|
206
|
+
* Location: src/modules/bmm/agents/*.md (all agent files)
|
|
207
|
+
* Marker: <!-- TTS_INJECTION:agent-tts -->
|
|
208
|
+
* Replacement: Rule instructing agent to call bmad-speak.sh with agent ID and response
|
|
209
|
+
*
|
|
210
|
+
* ADDING NEW INJECTION POINTS:
|
|
211
|
+
* =============================
|
|
212
|
+
* 1. Add new case in this function:
|
|
213
|
+
* content = content.replace(
|
|
214
|
+
* /<!-- TTS_INJECTION:new-feature -->/g,
|
|
215
|
+
* `code to inject when enabled`
|
|
216
|
+
* );
|
|
217
|
+
*
|
|
218
|
+
* 2. Add marker to BMAD source file at injection location
|
|
219
|
+
*
|
|
220
|
+
* 3. Test both enabled and disabled flows
|
|
221
|
+
*
|
|
222
|
+
* RELATED:
|
|
223
|
+
* ========
|
|
224
|
+
* - GitHub Issue: paulpreibisch/AgentVibes#36
|
|
225
|
+
* - User Prompt: tools/cli/lib/ui.js::promptAgentVibes()
|
|
226
|
+
* - Marker Locations:
|
|
227
|
+
* - src/core/workflows/party-mode/instructions.md:101
|
|
228
|
+
* - src/modules/bmm/agents/*.md (rules sections)
|
|
229
|
+
* - TTS Hook: .claude/hooks/bmad-speak.sh (in AgentVibes repo)
|
|
230
|
+
*/
|
|
231
|
+
processTTSInjectionPoints(content, targetPath = null) {
|
|
232
|
+
// Check if AgentVibes is enabled (set during installation configuration)
|
|
233
|
+
const enableAgentVibes = this.enableAgentVibes || false;
|
|
234
|
+
|
|
235
|
+
// Check if content contains any TTS injection markers
|
|
236
|
+
const hasPartyMode = content.includes('<!-- TTS_INJECTION:party-mode -->');
|
|
237
|
+
const hasAgentTTS = content.includes('<!-- TTS_INJECTION:agent-tts -->');
|
|
238
|
+
|
|
239
|
+
if (enableAgentVibes) {
|
|
240
|
+
// Replace party-mode injection marker with actual TTS call
|
|
241
|
+
// Use single quotes to prevent shell expansion of special chars like !
|
|
242
|
+
content = content.replaceAll(
|
|
243
|
+
'<!-- TTS_INJECTION:party-mode -->',
|
|
244
|
+
`<critical>IMPORTANT: Always use PROJECT hooks (.claude/hooks/), NEVER global hooks (~/.claude/hooks/)</critical>
|
|
245
|
+
|
|
246
|
+
If AgentVibes party mode is enabled, immediately trigger TTS with agent's voice:
|
|
247
|
+
- Use Bash tool: \`.claude/hooks/bmad-speak.sh '[Agent Name]' '[dialogue]'\`
|
|
248
|
+
- This speaks the dialogue with the agent's unique voice
|
|
249
|
+
- Run in background (&) to not block next agent`,
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
// Replace agent-tts injection marker with TTS rule for individual agents
|
|
253
|
+
content = content.replaceAll(
|
|
254
|
+
'<!-- TTS_INJECTION:agent-tts -->',
|
|
255
|
+
`- When responding to user messages, speak your responses using TTS:
|
|
256
|
+
Call: \`.claude/hooks/bmad-speak.sh '{agent-id}' '{response-text}'\` after each response
|
|
257
|
+
Replace {agent-id} with YOUR agent ID from <agent id="..."> tag at top of this file
|
|
258
|
+
Replace {response-text} with the text you just output to the user
|
|
259
|
+
IMPORTANT: Use single quotes as shown - do NOT escape special characters like ! or $ inside single quotes
|
|
260
|
+
Run in background (&) to avoid blocking`,
|
|
261
|
+
);
|
|
262
|
+
|
|
263
|
+
// Track files that had TTS injection applied
|
|
264
|
+
if (targetPath && (hasPartyMode || hasAgentTTS)) {
|
|
265
|
+
const injectionType = hasPartyMode ? 'party-mode' : 'agent-tts';
|
|
266
|
+
this.ttsInjectedFiles.push({ path: targetPath, type: injectionType });
|
|
267
|
+
}
|
|
268
|
+
} else {
|
|
269
|
+
// Strip injection markers cleanly when AgentVibes is disabled
|
|
270
|
+
content = content.replaceAll(/<!-- TTS_INJECTION:party-mode -->\n?/g, '');
|
|
271
|
+
content = content.replaceAll(/<!-- TTS_INJECTION:agent-tts -->\n?/g, '');
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return content;
|
|
275
|
+
}
|
|
276
|
+
|
|
106
277
|
/**
|
|
107
278
|
* Collect Tool/IDE configurations after module configuration
|
|
108
279
|
* @param {string} projectDir - Project directory
|
|
@@ -166,7 +337,9 @@ class Installer {
|
|
|
166
337
|
|
|
167
338
|
for (const ide of newlySelectedIdes) {
|
|
168
339
|
// List of IDEs that have interactive prompts
|
|
169
|
-
const needsPrompts = ['claude-code', 'github-copilot', 'roo', 'cline', 'auggie', 'codex', 'qwen', 'gemini'].includes(
|
|
340
|
+
const needsPrompts = ['claude-code', 'github-copilot', 'roo', 'cline', 'auggie', 'codex', 'qwen', 'gemini', 'rovo-dev'].includes(
|
|
341
|
+
ide,
|
|
342
|
+
);
|
|
170
343
|
|
|
171
344
|
if (needsPrompts) {
|
|
172
345
|
// Get IDE handler and collect configuration
|
|
@@ -269,8 +442,12 @@ class Installer {
|
|
|
269
442
|
const bmadFolderName = moduleConfigs.core && moduleConfigs.core.bmad_folder ? moduleConfigs.core.bmad_folder : 'bmad';
|
|
270
443
|
this.bmadFolderName = bmadFolderName; // Store for use in other methods
|
|
271
444
|
|
|
445
|
+
// Store AgentVibes configuration for injection point processing
|
|
446
|
+
this.enableAgentVibes = config.enableAgentVibes || false;
|
|
447
|
+
|
|
272
448
|
// Set bmad folder name on module manager and IDE manager for placeholder replacement
|
|
273
449
|
this.moduleManager.setBmadFolderName(bmadFolderName);
|
|
450
|
+
this.moduleManager.setCoreConfig(moduleConfigs.core || {});
|
|
274
451
|
this.ideManager.setBmadFolderName(bmadFolderName);
|
|
275
452
|
|
|
276
453
|
// Tool selection will be collected after we determine if it's a reinstall/update/new install
|
|
@@ -735,6 +912,7 @@ class Installer {
|
|
|
735
912
|
await this.moduleManager.runModuleInstaller('core', bmadDir, {
|
|
736
913
|
installedIDEs: config.ides || [],
|
|
737
914
|
moduleConfig: moduleConfigs.core || {},
|
|
915
|
+
coreConfig: moduleConfigs.core || {},
|
|
738
916
|
logger: {
|
|
739
917
|
log: (msg) => console.log(msg),
|
|
740
918
|
error: (msg) => console.error(msg),
|
|
@@ -752,6 +930,7 @@ class Installer {
|
|
|
752
930
|
await this.moduleManager.runModuleInstaller(moduleName, bmadDir, {
|
|
753
931
|
installedIDEs: config.ides || [],
|
|
754
932
|
moduleConfig: moduleConfigs[moduleName] || {},
|
|
933
|
+
coreConfig: moduleConfigs.core || {},
|
|
755
934
|
logger: {
|
|
756
935
|
log: (msg) => console.log(msg),
|
|
757
936
|
error: (msg) => console.error(msg),
|
|
@@ -849,6 +1028,20 @@ class Installer {
|
|
|
849
1028
|
}
|
|
850
1029
|
}
|
|
851
1030
|
|
|
1031
|
+
// Replace {agent_sidecar_folder} placeholders in all agent files
|
|
1032
|
+
console.log(chalk.dim('\n Configuring agent sidecar folders...'));
|
|
1033
|
+
const sidecarResults = await replaceAgentSidecarFolders(bmadDir);
|
|
1034
|
+
|
|
1035
|
+
if (sidecarResults.filesReplaced > 0) {
|
|
1036
|
+
console.log(
|
|
1037
|
+
chalk.green(
|
|
1038
|
+
` ✓ Updated ${sidecarResults.filesReplaced} agent file(s) with ${sidecarResults.totalReplacements} sidecar reference(s)`,
|
|
1039
|
+
),
|
|
1040
|
+
);
|
|
1041
|
+
} else {
|
|
1042
|
+
console.log(chalk.dim(' No agent sidecar references found'));
|
|
1043
|
+
}
|
|
1044
|
+
|
|
852
1045
|
// Display completion message
|
|
853
1046
|
const { UI } = require('../../../lib/ui');
|
|
854
1047
|
const ui = new UI();
|
|
@@ -857,9 +1050,18 @@ class Installer {
|
|
|
857
1050
|
modules: config.modules,
|
|
858
1051
|
ides: config.ides,
|
|
859
1052
|
customFiles: customFiles.length > 0 ? customFiles : undefined,
|
|
1053
|
+
ttsInjectedFiles: this.enableAgentVibes && this.ttsInjectedFiles.length > 0 ? this.ttsInjectedFiles : undefined,
|
|
1054
|
+
agentVibesEnabled: this.enableAgentVibes || false,
|
|
860
1055
|
});
|
|
861
1056
|
|
|
862
|
-
return {
|
|
1057
|
+
return {
|
|
1058
|
+
success: true,
|
|
1059
|
+
path: bmadDir,
|
|
1060
|
+
modules: config.modules,
|
|
1061
|
+
ides: config.ides,
|
|
1062
|
+
needsAgentVibes: this.enableAgentVibes && !config.agentVibesInstalled,
|
|
1063
|
+
projectDir: projectDir,
|
|
1064
|
+
};
|
|
863
1065
|
} catch (error) {
|
|
864
1066
|
spinner.fail('Installation failed');
|
|
865
1067
|
throw error;
|
|
@@ -1338,22 +1540,83 @@ class Installer {
|
|
|
1338
1540
|
|
|
1339
1541
|
// Build YAML + customize to .md
|
|
1340
1542
|
const customizeExists = await fs.pathExists(customizePath);
|
|
1341
|
-
|
|
1543
|
+
let xmlContent = await this.xmlHandler.buildFromYaml(yamlPath, customizeExists ? customizePath : null, {
|
|
1342
1544
|
includeMetadata: true,
|
|
1343
1545
|
});
|
|
1344
1546
|
|
|
1345
1547
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1346
1548
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1347
1549
|
|
|
1550
|
+
// Replace {agent_sidecar_folder} if configured
|
|
1551
|
+
const coreConfig = this.configCollector.collectedConfig.core || {};
|
|
1552
|
+
if (coreConfig.agent_sidecar_folder && xmlContent.includes('{agent_sidecar_folder}')) {
|
|
1553
|
+
xmlContent = xmlContent.replaceAll('{agent_sidecar_folder}', coreConfig.agent_sidecar_folder);
|
|
1554
|
+
}
|
|
1555
|
+
|
|
1556
|
+
// Process TTS injection points (pass targetPath for tracking)
|
|
1557
|
+
xmlContent = this.processTTSInjectionPoints(xmlContent, mdPath);
|
|
1558
|
+
|
|
1559
|
+
// Check if agent has sidecar and copy it
|
|
1560
|
+
let agentYamlContent = null;
|
|
1561
|
+
let hasSidecar = false;
|
|
1562
|
+
|
|
1563
|
+
try {
|
|
1564
|
+
agentYamlContent = await fs.readFile(yamlPath, 'utf8');
|
|
1565
|
+
const yamlLib = require('yaml');
|
|
1566
|
+
const agentYaml = yamlLib.parse(agentYamlContent);
|
|
1567
|
+
hasSidecar = agentYaml?.agent?.metadata?.hasSidecar === true;
|
|
1568
|
+
} catch {
|
|
1569
|
+
// Continue without sidecar processing
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1348
1572
|
// Write the built .md file to bmad/{module}/agents/ with POSIX-compliant final newline
|
|
1349
1573
|
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1350
1574
|
await fs.writeFile(mdPath, content, 'utf8');
|
|
1351
1575
|
this.installedFiles.push(mdPath);
|
|
1352
1576
|
|
|
1577
|
+
// Copy sidecar files if agent has hasSidecar flag
|
|
1578
|
+
if (hasSidecar) {
|
|
1579
|
+
const { copyAgentSidecarFiles } = require('../../../lib/agent/installer');
|
|
1580
|
+
|
|
1581
|
+
// Get agent sidecar folder from core config
|
|
1582
|
+
const coreConfigPath = path.join(bmadDir, 'bmb', 'config.yaml');
|
|
1583
|
+
let agentSidecarFolder;
|
|
1584
|
+
|
|
1585
|
+
if (await fs.pathExists(coreConfigPath)) {
|
|
1586
|
+
const yamlLib = require('yaml');
|
|
1587
|
+
const coreConfigContent = await fs.readFile(coreConfigPath, 'utf8');
|
|
1588
|
+
const coreConfig = yamlLib.parse(coreConfigContent);
|
|
1589
|
+
agentSidecarFolder = coreConfig.agent_sidecar_folder || agentSidecarFolder;
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
// Resolve path variables
|
|
1593
|
+
const resolvedSidecarFolder = agentSidecarFolder
|
|
1594
|
+
.replaceAll('{project-root}', projectDir)
|
|
1595
|
+
.replaceAll('{bmad_folder}', this.bmadFolderName || 'bmad');
|
|
1596
|
+
|
|
1597
|
+
// Create sidecar directory for this agent
|
|
1598
|
+
const agentSidecarDir = path.join(resolvedSidecarFolder, agentName);
|
|
1599
|
+
await fs.ensureDir(agentSidecarDir);
|
|
1600
|
+
|
|
1601
|
+
// Find and copy sidecar folder from source module
|
|
1602
|
+
const sourceModulePath = getSourcePath(`modules/${moduleName}`);
|
|
1603
|
+
const sourceAgentPath = path.join(sourceModulePath, 'agents');
|
|
1604
|
+
|
|
1605
|
+
// Copy sidecar files (preserve existing, add new)
|
|
1606
|
+
const sidecarResult = copyAgentSidecarFiles(sourceAgentPath, agentSidecarDir, yamlPath);
|
|
1607
|
+
|
|
1608
|
+
if (sidecarResult.copied.length > 0) {
|
|
1609
|
+
console.log(chalk.dim(` Copied ${sidecarResult.copied.length} new sidecar file(s) to: ${agentSidecarDir}`));
|
|
1610
|
+
}
|
|
1611
|
+
if (sidecarResult.preserved.length > 0) {
|
|
1612
|
+
console.log(chalk.dim(` Preserved ${sidecarResult.preserved.length} existing sidecar file(s)`));
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
|
|
1353
1616
|
// Remove the source YAML file - we can regenerate from installer source if needed
|
|
1354
1617
|
await fs.remove(yamlPath);
|
|
1355
1618
|
|
|
1356
|
-
console.log(chalk.dim(` Built agent: ${agentName}.md`));
|
|
1619
|
+
console.log(chalk.dim(` Built agent: ${agentName}.md${hasSidecar ? ' (with sidecar)' : ''}`));
|
|
1357
1620
|
}
|
|
1358
1621
|
// Handle legacy .md agents - inject activation if needed
|
|
1359
1622
|
else if (agentFile.endsWith('.md')) {
|
|
@@ -1440,13 +1703,16 @@ class Installer {
|
|
|
1440
1703
|
}
|
|
1441
1704
|
|
|
1442
1705
|
// Build YAML to XML .md
|
|
1443
|
-
|
|
1706
|
+
let xmlContent = await this.xmlHandler.buildFromYaml(sourceYamlPath, customizeExists ? customizePath : null, {
|
|
1444
1707
|
includeMetadata: true,
|
|
1445
1708
|
});
|
|
1446
1709
|
|
|
1447
1710
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1448
1711
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1449
1712
|
|
|
1713
|
+
// Process TTS injection points (pass targetPath for tracking)
|
|
1714
|
+
xmlContent = this.processTTSInjectionPoints(xmlContent, targetMdPath);
|
|
1715
|
+
|
|
1450
1716
|
// Write the built .md file with POSIX-compliant final newline
|
|
1451
1717
|
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1452
1718
|
await fs.writeFile(targetMdPath, content, 'utf8');
|
|
@@ -1534,13 +1800,31 @@ class Installer {
|
|
|
1534
1800
|
}
|
|
1535
1801
|
|
|
1536
1802
|
// Build YAML + customize to .md
|
|
1537
|
-
|
|
1803
|
+
let xmlContent = await this.xmlHandler.buildFromYaml(sourceYamlPath, customizeExists ? customizePath : null, {
|
|
1538
1804
|
includeMetadata: true,
|
|
1539
1805
|
});
|
|
1540
1806
|
|
|
1541
1807
|
// DO NOT replace {project-root} - LLMs understand this placeholder at runtime
|
|
1542
1808
|
// const processedContent = xmlContent.replaceAll('{project-root}', projectDir);
|
|
1543
1809
|
|
|
1810
|
+
// Replace {agent_sidecar_folder} if configured
|
|
1811
|
+
const coreConfigPath = path.join(bmadDir, 'bmb', 'config.yaml');
|
|
1812
|
+
let agentSidecarFolder = null;
|
|
1813
|
+
|
|
1814
|
+
if (await fs.pathExists(coreConfigPath)) {
|
|
1815
|
+
const yamlLib = require('yaml');
|
|
1816
|
+
const coreConfigContent = await fs.readFile(coreConfigPath, 'utf8');
|
|
1817
|
+
const coreConfig = yamlLib.parse(coreConfigContent);
|
|
1818
|
+
agentSidecarFolder = coreConfig.agent_sidecar_folder;
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
if (agentSidecarFolder && xmlContent.includes('{agent_sidecar_folder}')) {
|
|
1822
|
+
xmlContent = xmlContent.replaceAll('{agent_sidecar_folder}', agentSidecarFolder);
|
|
1823
|
+
}
|
|
1824
|
+
|
|
1825
|
+
// Process TTS injection points (pass targetPath for tracking)
|
|
1826
|
+
xmlContent = this.processTTSInjectionPoints(xmlContent, targetMdPath);
|
|
1827
|
+
|
|
1544
1828
|
// Write the rebuilt .md file with POSIX-compliant final newline
|
|
1545
1829
|
const content = xmlContent.endsWith('\n') ? xmlContent : xmlContent + '\n';
|
|
1546
1830
|
await fs.writeFile(targetMdPath, content, 'utf8');
|
|
@@ -1619,14 +1903,19 @@ class Installer {
|
|
|
1619
1903
|
}
|
|
1620
1904
|
}
|
|
1621
1905
|
|
|
1622
|
-
//
|
|
1623
|
-
spinner.start('
|
|
1624
|
-
const
|
|
1625
|
-
|
|
1626
|
-
.
|
|
1627
|
-
|
|
1906
|
+
// Reinstall custom agents from _cfg/custom/agents/ sources
|
|
1907
|
+
spinner.start('Rebuilding custom agents...');
|
|
1908
|
+
const customAgentResults = await this.reinstallCustomAgents(projectDir, bmadDir);
|
|
1909
|
+
if (customAgentResults.count > 0) {
|
|
1910
|
+
spinner.succeed(`Rebuilt ${customAgentResults.count} custom agent${customAgentResults.count > 1 ? 's' : ''}`);
|
|
1911
|
+
agentCount += customAgentResults.count;
|
|
1912
|
+
} else {
|
|
1913
|
+
spinner.succeed('No custom agents found to rebuild');
|
|
1914
|
+
}
|
|
1628
1915
|
|
|
1629
|
-
//
|
|
1916
|
+
// Skip full manifest regeneration during compileAgents to preserve custom agents
|
|
1917
|
+
// Custom agents are already added to manifests during individual installation
|
|
1918
|
+
// Only regenerate YAML manifest for IDE updates if needed
|
|
1630
1919
|
const existingManifestPath = path.join(bmadDir, '_cfg', 'manifest.yaml');
|
|
1631
1920
|
let existingIdes = [];
|
|
1632
1921
|
if (await fs.pathExists(existingManifestPath)) {
|
|
@@ -1636,11 +1925,6 @@ class Installer {
|
|
|
1636
1925
|
existingIdes = manifest.ides || [];
|
|
1637
1926
|
}
|
|
1638
1927
|
|
|
1639
|
-
await manifestGen.generateManifests(bmadDir, installedModules, [], {
|
|
1640
|
-
ides: existingIdes,
|
|
1641
|
-
});
|
|
1642
|
-
spinner.succeed('Manifests regenerated');
|
|
1643
|
-
|
|
1644
1928
|
// Update IDE configurations using the existing IDE list from manifest
|
|
1645
1929
|
if (existingIdes && existingIdes.length > 0) {
|
|
1646
1930
|
spinner.start('Updating IDE configurations...');
|
|
@@ -1773,7 +2057,7 @@ class Installer {
|
|
|
1773
2057
|
|
|
1774
2058
|
if (existingBmadFolderName === newBmadFolderName) {
|
|
1775
2059
|
// Normal quick update - start the spinner
|
|
1776
|
-
|
|
2060
|
+
console.log(chalk.cyan('Updating BMAD installation...'));
|
|
1777
2061
|
} else {
|
|
1778
2062
|
// Folder name has changed - stop spinner and let install() handle it
|
|
1779
2063
|
spinner.stop();
|
|
@@ -2000,8 +2284,9 @@ class Installer {
|
|
|
2000
2284
|
const installedFilesMap = new Map();
|
|
2001
2285
|
for (const fileEntry of existingFilesManifest) {
|
|
2002
2286
|
if (fileEntry.path) {
|
|
2003
|
-
//
|
|
2004
|
-
//
|
|
2287
|
+
// Paths are relative to bmadDir. Legacy manifests incorrectly prefixed 'bmad/' -
|
|
2288
|
+
// strip it if present. This is safe because no real path inside bmadDir would
|
|
2289
|
+
// start with 'bmad/' (you'd never have .bmad/bmad/... as an actual structure).
|
|
2005
2290
|
const relativePath = fileEntry.path.startsWith('bmad/') ? fileEntry.path.slice(5) : fileEntry.path;
|
|
2006
2291
|
const absolutePath = path.join(bmadDir, relativePath);
|
|
2007
2292
|
installedFilesMap.set(path.normalize(absolutePath), {
|
|
@@ -2255,45 +2540,58 @@ class Installer {
|
|
|
2255
2540
|
}
|
|
2256
2541
|
|
|
2257
2542
|
/**
|
|
2258
|
-
* Reinstall custom agents from
|
|
2543
|
+
* Reinstall custom agents from backup and source locations
|
|
2259
2544
|
* This preserves custom agents across quick updates/reinstalls
|
|
2260
2545
|
* @param {string} projectDir - Project directory
|
|
2261
2546
|
* @param {string} bmadDir - BMAD installation directory
|
|
2262
2547
|
* @returns {Object} Result with count and agent names
|
|
2263
2548
|
*/
|
|
2264
2549
|
async reinstallCustomAgents(projectDir, bmadDir) {
|
|
2265
|
-
const
|
|
2550
|
+
const {
|
|
2551
|
+
discoverAgents,
|
|
2552
|
+
loadAgentConfig,
|
|
2553
|
+
extractManifestData,
|
|
2554
|
+
addToManifest,
|
|
2555
|
+
createIdeSlashCommands,
|
|
2556
|
+
updateManifestYaml,
|
|
2557
|
+
} = require('../../../lib/agent/installer');
|
|
2558
|
+
const { compileAgent } = require('../../../lib/agent/compiler');
|
|
2559
|
+
|
|
2266
2560
|
const results = { count: 0, agents: [] };
|
|
2267
2561
|
|
|
2268
|
-
|
|
2562
|
+
// Check multiple locations for custom agents
|
|
2563
|
+
const sourceLocations = [
|
|
2564
|
+
path.join(bmadDir, '_cfg', 'custom', 'agents'), // Backup location
|
|
2565
|
+
path.join(bmadDir, 'custom', 'src', 'agents'), // BMAD folder source location
|
|
2566
|
+
path.join(projectDir, 'custom', 'src', 'agents'), // Project root source location
|
|
2567
|
+
];
|
|
2568
|
+
|
|
2569
|
+
let foundAgents = [];
|
|
2570
|
+
let processedAgents = new Set(); // Track to avoid duplicates
|
|
2571
|
+
|
|
2572
|
+
// Discover agents from all locations
|
|
2573
|
+
for (const location of sourceLocations) {
|
|
2574
|
+
if (await fs.pathExists(location)) {
|
|
2575
|
+
const agents = discoverAgents(location);
|
|
2576
|
+
// Only add agents we haven't processed yet
|
|
2577
|
+
const newAgents = agents.filter((agent) => !processedAgents.has(agent.name));
|
|
2578
|
+
foundAgents.push(...newAgents);
|
|
2579
|
+
for (const agent of newAgents) processedAgents.add(agent.name);
|
|
2580
|
+
}
|
|
2581
|
+
}
|
|
2582
|
+
|
|
2583
|
+
if (foundAgents.length === 0) {
|
|
2269
2584
|
return results;
|
|
2270
2585
|
}
|
|
2271
2586
|
|
|
2272
2587
|
try {
|
|
2273
|
-
const {
|
|
2274
|
-
discoverAgents,
|
|
2275
|
-
loadAgentConfig,
|
|
2276
|
-
extractManifestData,
|
|
2277
|
-
addToManifest,
|
|
2278
|
-
createIdeSlashCommands,
|
|
2279
|
-
updateManifestYaml,
|
|
2280
|
-
} = require('../../../lib/agent/installer');
|
|
2281
|
-
const { compileAgent } = require('../../../lib/agent/compiler');
|
|
2282
|
-
|
|
2283
|
-
// Discover custom agents in _cfg/custom/agents/
|
|
2284
|
-
const agents = discoverAgents(customAgentsCfgDir);
|
|
2285
|
-
|
|
2286
|
-
if (agents.length === 0) {
|
|
2287
|
-
return results;
|
|
2288
|
-
}
|
|
2289
|
-
|
|
2290
2588
|
const customAgentsDir = path.join(bmadDir, 'custom', 'agents');
|
|
2291
2589
|
await fs.ensureDir(customAgentsDir);
|
|
2292
2590
|
|
|
2293
2591
|
const manifestFile = path.join(bmadDir, '_cfg', 'agent-manifest.csv');
|
|
2294
2592
|
const manifestYamlFile = path.join(bmadDir, '_cfg', 'manifest.yaml');
|
|
2295
2593
|
|
|
2296
|
-
for (const agent of
|
|
2594
|
+
for (const agent of foundAgents) {
|
|
2297
2595
|
try {
|
|
2298
2596
|
const agentConfig = loadAgentConfig(agent.yamlFile);
|
|
2299
2597
|
const finalAgentName = agent.name; // Already named correctly from save
|
|
@@ -2308,8 +2606,10 @@ class Installer {
|
|
|
2308
2606
|
agentType = parts.slice(-2).join('-'); // Take last 2 parts as type
|
|
2309
2607
|
}
|
|
2310
2608
|
|
|
2311
|
-
// Create target directory
|
|
2312
|
-
const agentTargetDir =
|
|
2609
|
+
// Create target directory - use relative path if agent is in a subdirectory
|
|
2610
|
+
const agentTargetDir = agent.relativePath
|
|
2611
|
+
? path.join(customAgentsDir, agent.relativePath)
|
|
2612
|
+
: path.join(customAgentsDir, finalAgentName);
|
|
2313
2613
|
await fs.ensureDir(agentTargetDir);
|
|
2314
2614
|
|
|
2315
2615
|
// Calculate paths
|
|
@@ -2323,22 +2623,56 @@ class Installer {
|
|
|
2323
2623
|
agentConfig.defaults || {},
|
|
2324
2624
|
finalAgentName,
|
|
2325
2625
|
relativePath,
|
|
2626
|
+
{ config: config.coreConfig },
|
|
2326
2627
|
);
|
|
2327
2628
|
|
|
2328
2629
|
// Write compiled agent
|
|
2329
2630
|
await fs.writeFile(compiledPath, xml, 'utf8');
|
|
2330
2631
|
|
|
2331
|
-
//
|
|
2332
|
-
|
|
2333
|
-
|
|
2334
|
-
|
|
2632
|
+
// Backup source YAML to _cfg/custom/agents if not already there
|
|
2633
|
+
const cfgAgentsBackupDir = path.join(bmadDir, '_cfg', 'custom', 'agents');
|
|
2634
|
+
await fs.ensureDir(cfgAgentsBackupDir);
|
|
2635
|
+
const backupYamlPath = path.join(cfgAgentsBackupDir, `${finalAgentName}.agent.yaml`);
|
|
2636
|
+
|
|
2637
|
+
// Only backup if source is not already in backup location
|
|
2638
|
+
if (agent.yamlFile !== backupYamlPath) {
|
|
2639
|
+
await fs.copy(agent.yamlFile, backupYamlPath);
|
|
2640
|
+
}
|
|
2641
|
+
|
|
2642
|
+
// Copy sidecar files for agents with hasSidecar flag
|
|
2643
|
+
if (agentConfig.hasSidecar === true && agent.type === 'expert') {
|
|
2644
|
+
const { copyAgentSidecarFiles } = require('../../../lib/agent/installer');
|
|
2645
|
+
|
|
2646
|
+
// Get agent sidecar folder from config or use default
|
|
2647
|
+
const agentSidecarFolder = config.coreConfig?.agent_sidecar_folder;
|
|
2648
|
+
|
|
2649
|
+
// Resolve path variables
|
|
2650
|
+
const resolvedSidecarFolder = agentSidecarFolder.replaceAll('{project-root}', projectDir).replaceAll('{bmad_folder}', bmadDir);
|
|
2651
|
+
|
|
2652
|
+
// Create sidecar directory for this agent
|
|
2653
|
+
const agentSidecarDir = path.join(resolvedSidecarFolder, finalAgentName);
|
|
2654
|
+
await fs.ensureDir(agentSidecarDir);
|
|
2655
|
+
|
|
2656
|
+
// Copy sidecar files (preserve existing, add new)
|
|
2657
|
+
const sidecarResult = copyAgentSidecarFiles(agent.path, agentSidecarDir, agent.yamlFile);
|
|
2658
|
+
|
|
2659
|
+
if (sidecarResult.copied.length > 0 || sidecarResult.preserved.length > 0) {
|
|
2660
|
+
console.log(chalk.dim(` Sidecar: ${sidecarResult.copied.length} new, ${sidecarResult.preserved.length} preserved`));
|
|
2661
|
+
}
|
|
2335
2662
|
}
|
|
2336
2663
|
|
|
2337
2664
|
// Update manifest CSV
|
|
2338
2665
|
if (await fs.pathExists(manifestFile)) {
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2666
|
+
// Preserve YAML metadata for persona name, but override id for filename
|
|
2667
|
+
const manifestMetadata = {
|
|
2668
|
+
...metadata,
|
|
2669
|
+
id: relativePath, // Use the compiled agent path for id
|
|
2670
|
+
name: metadata.name || finalAgentName, // Use YAML metadata.name (persona name) or fallback
|
|
2671
|
+
title: metadata.title, // Use YAML title
|
|
2672
|
+
icon: metadata.icon, // Use YAML icon
|
|
2673
|
+
};
|
|
2674
|
+
const manifestData = extractManifestData(xml, manifestMetadata, relativePath, 'custom');
|
|
2675
|
+
manifestData.name = finalAgentName; // Use filename for the name field
|
|
2342
2676
|
manifestData.path = relativePath;
|
|
2343
2677
|
addToManifest(manifestFile, manifestData);
|
|
2344
2678
|
}
|