bmad-method 6.0.0-alpha.13 → 6.0.0-alpha.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
  2. package/.github/scripts/discord-helpers.sh +15 -0
  3. package/.github/workflows/discord.yaml +278 -8
  4. package/.github/workflows/quality.yaml +19 -0
  5. package/.markdownlint-cli2.yaml +42 -0
  6. package/.prettierignore +3 -0
  7. package/CHANGELOG.md +95 -0
  8. package/CODE_OF_CONDUCT.md +128 -0
  9. package/bmad-method-6.0.0-alpha.14.tgz +0 -0
  10. package/docs/agent-customization-guide.md +2 -2
  11. package/docs/custom-agent-installation.md +56 -102
  12. package/docs/document-sharding-guide.md +1 -1
  13. package/eslint.config.mjs +14 -0
  14. package/example-custom-content/README.md +4 -0
  15. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/instructions.md +4 -4
  16. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/memories.md +1 -1
  17. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith.agent.yaml +17 -16
  18. package/example-custom-content/custom.yaml +3 -0
  19. package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +168 -0
  20. package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +155 -0
  21. package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +89 -0
  22. package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +36 -0
  23. package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +36 -0
  24. package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +36 -0
  25. package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +36 -0
  26. package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +36 -0
  27. package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +36 -0
  28. package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +36 -0
  29. package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +36 -0
  30. package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +150 -0
  31. package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +1 -0
  32. package/example-custom-content/workflows/quiz-master/workflow-plan-quiz-master.md +269 -0
  33. package/example-custom-content/workflows/quiz-master/workflow.md +54 -0
  34. package/example-custom-content/workflows/wassup/workflow.md +26 -0
  35. package/example-custom-module/mwm/README.md +4 -0
  36. package/example-custom-module/mwm/_module-installer/install-config.yaml +27 -0
  37. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +47 -0
  38. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +17 -0
  39. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +150 -0
  40. package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +137 -0
  41. package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +137 -0
  42. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
  43. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
  44. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
  45. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
  46. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +124 -0
  47. package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +31 -0
  48. package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +45 -0
  49. package/example-custom-module/mwm/workflows/crisis-support/README.md +31 -0
  50. package/example-custom-module/mwm/workflows/crisis-support/workflow.md +45 -0
  51. package/example-custom-module/mwm/workflows/daily-checkin/README.md +32 -0
  52. package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +45 -0
  53. package/example-custom-module/mwm/workflows/guided-meditation/README.md +31 -0
  54. package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +45 -0
  55. package/example-custom-module/mwm/workflows/wellness-journal/README.md +31 -0
  56. package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +45 -0
  57. package/package.json +9 -4
  58. package/src/core/_module-installer/install-config.yaml +5 -1
  59. package/src/core/resources/excalidraw/library-loader.md +2 -2
  60. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +1 -1
  61. package/src/core/workflows/brainstorming/workflow.md +1 -1
  62. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +0 -1
  63. package/src/core/workflows/party-mode/workflow.md +2 -3
  64. package/src/modules/bmb/README.md +1 -1
  65. package/src/modules/bmb/_module-installer/install-config.yaml +4 -9
  66. package/src/modules/bmb/_module-installer/installer.js +76 -0
  67. package/src/modules/bmb/agents/bmad-builder.agent.yaml +32 -9
  68. package/src/modules/bmb/docs/agents/agent-menu-patterns.md +5 -5
  69. package/src/modules/bmb/docs/agents/expert-agent-architecture.md +20 -20
  70. package/src/modules/bmb/docs/agents/module-agent-architecture.md +45 -45
  71. package/src/modules/bmb/docs/agents/simple-agent-architecture.md +7 -3
  72. package/src/modules/bmb/docs/workflows/architecture.md +1 -1
  73. package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -0
  74. package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +223 -0
  75. package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/step-file.md +4 -4
  76. package/src/modules/bmb/docs/workflows/{step-template.md → templates/step-template.md} +40 -33
  77. package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
  78. package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/workflow.md +1 -1
  79. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +4 -4
  80. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +8 -8
  81. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
  82. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  83. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +2 -3
  84. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +10 -40
  85. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +1 -1
  86. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +1 -0
  87. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +2 -2
  88. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +2 -2
  89. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +2 -2
  90. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  91. package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +16 -4
  92. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +4 -4
  93. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +7 -7
  94. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +1 -1
  95. package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +3 -3
  96. package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +3 -3
  97. package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +3 -3
  98. package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +3 -3
  99. package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +6 -6
  100. package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +2 -2
  101. package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +3 -3
  102. package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +3 -3
  103. package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +2 -2
  104. package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +3 -3
  105. package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +2 -2
  106. package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +2 -2
  107. package/src/modules/bmb/workflows/create-agent/workflow.md +11 -11
  108. package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +155 -0
  109. package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +169 -0
  110. package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +217 -0
  111. package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +267 -0
  112. package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +228 -0
  113. package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +233 -0
  114. package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +296 -0
  115. package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +228 -0
  116. package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +186 -0
  117. package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +308 -0
  118. package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +336 -0
  119. package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +335 -0
  120. package/src/modules/bmb/workflows/create-module/templates/agent.template.md +317 -0
  121. package/src/modules/bmb/workflows/create-module/templates/install-config.template.yaml +53 -0
  122. package/src/modules/bmb/workflows/create-module/templates/installer.template.js +47 -0
  123. package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +5 -0
  124. package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -0
  125. package/src/modules/bmb/workflows/create-module/validation.md +126 -0
  126. package/src/modules/bmb/workflows/create-module/workflow.md +55 -0
  127. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +45 -56
  128. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +9 -31
  129. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +250 -0
  130. package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +216 -0
  131. package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +289 -0
  132. package/src/modules/bmb/workflows/create-workflow/steps/{step-09-design.md → step-06-design.md} +76 -44
  133. package/src/modules/bmb/workflows/create-workflow/steps/{step-11-build.md → step-07-build.md} +70 -24
  134. package/src/modules/bmb/workflows/create-workflow/steps/{step-12-review.md → step-08-review.md} +30 -16
  135. package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
  136. package/src/modules/bmb/workflows/create-workflow/workflow.md +2 -2
  137. package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +2 -2
  138. package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +14 -14
  139. package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +4 -4
  140. package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +2 -2
  141. package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +4 -4
  142. package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
  143. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +2 -6
  144. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +2 -2
  145. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +1 -1
  146. package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
  147. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +2 -2
  148. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
  149. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +7 -7
  150. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +3 -3
  151. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +3 -3
  152. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +3 -3
  153. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +3 -3
  154. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +2 -2
  155. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
  156. package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +0 -1
  157. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
  158. package/src/modules/bmm/_module-installer/install-config.yaml +1 -1
  159. package/src/modules/bmm/agents/analyst.agent.yaml +11 -8
  160. package/src/modules/bmm/agents/architect.agent.yaml +1 -5
  161. package/src/modules/bmm/agents/pm.agent.yaml +5 -5
  162. package/src/modules/bmm/docs/README.md +23 -1
  163. package/src/modules/bmm/docs/agents-guide.md +16 -35
  164. package/src/modules/bmm/docs/brownfield-guide.md +17 -30
  165. package/src/modules/bmm/docs/enterprise-agentic-development.md +2 -2
  166. package/src/modules/bmm/docs/faq.md +6 -39
  167. package/src/modules/bmm/docs/glossary.md +11 -24
  168. package/src/modules/bmm/docs/images/README.md +37 -0
  169. package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +62 -202
  170. package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +3 -1
  171. package/src/modules/bmm/docs/quick-spec-flow.md +652 -0
  172. package/src/modules/bmm/docs/quick-start.md +9 -25
  173. package/src/modules/bmm/docs/test-architecture.md +6 -6
  174. package/src/modules/bmm/docs/troubleshooting.md +680 -0
  175. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  176. package/src/modules/bmm/docs/workflows-implementation.md +143 -3
  177. package/src/modules/bmm/docs/workflows-solutioning.md +2 -2
  178. package/src/modules/bmm/tasks/daily-standup.xml +85 -0
  179. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
  180. package/src/modules/bmm/testarch/knowledge/overview.md +1 -1
  181. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +2 -2
  182. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +2 -2
  183. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +2 -2
  184. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +2 -2
  185. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +1 -1
  186. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +8 -8
  187. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +18 -18
  188. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +18 -18
  189. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +18 -18
  190. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +17 -17
  191. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +35 -36
  192. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +5 -6
  193. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +20 -19
  194. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +21 -20
  195. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +20 -19
  196. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +21 -20
  197. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +16 -15
  198. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +36 -37
  199. package/src/modules/bmm/workflows/1-analysis/research/research.template.md +0 -1
  200. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +8 -8
  201. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +19 -18
  202. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +20 -19
  203. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +21 -20
  204. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +19 -18
  205. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +38 -39
  206. package/src/modules/bmm/workflows/1-analysis/research/workflow.md +14 -8
  207. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +6 -0
  208. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +7 -0
  209. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +138 -56
  210. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +93 -51
  211. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +223 -78
  212. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +20 -2
  213. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +18 -0
  214. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +21 -0
  215. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +21 -0
  216. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +21 -0
  217. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +18 -0
  218. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +18 -0
  219. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +18 -0
  220. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +13 -0
  221. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +2 -2
  222. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +14 -14
  223. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +7 -7
  224. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -1
  225. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +258 -0
  226. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +232 -0
  227. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +271 -0
  228. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +144 -0
  229. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  230. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  231. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +189 -0
  232. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +177 -0
  233. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +178 -0
  234. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +138 -0
  235. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +251 -0
  236. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +132 -0
  237. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/templates/readiness-report-template.md +4 -0
  238. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +54 -0
  239. package/src/modules/{bmgd/workflows/4-production → bmm/workflows/4-implementation}/code-review/checklist.md +2 -1
  240. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +51 -3
  241. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +1 -1
  242. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +32 -2
  243. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
  244. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +19 -21
  245. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +10 -10
  246. package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +174 -0
  247. package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
  248. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/instructions.md +104 -7
  249. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +4 -0
  250. package/src/modules/bmm/workflows/document-project/instructions.md +1 -1
  251. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +2 -2
  252. package/src/modules/bmm/workflows/generate-project-context/workflow.md +1 -1
  253. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +1 -1
  254. package/src/modules/bmm/workflows/testarch/ci/checklist.md +1 -1
  255. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +36 -3
  256. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +25 -4
  257. package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
  258. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  259. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +1 -6
  260. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +1 -6
  261. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +1 -6
  262. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +1 -7
  263. package/tools/cli/README.md +3 -3
  264. package/tools/cli/commands/build.js +9 -184
  265. package/tools/cli/commands/install.js +1 -6
  266. package/tools/cli/installers/lib/core/config-collector.js +70 -10
  267. package/tools/cli/installers/lib/core/installer.js +153 -388
  268. package/tools/cli/installers/lib/core/manifest-generator.js +91 -30
  269. package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +79 -0
  270. package/tools/cli/installers/lib/custom/handler.js +266 -0
  271. package/tools/cli/installers/lib/ide/_base-ide.js +10 -0
  272. package/tools/cli/installers/lib/ide/auggie.js +19 -7
  273. package/tools/cli/installers/lib/ide/crush.js +19 -6
  274. package/tools/cli/installers/lib/ide/cursor.js +29 -13
  275. package/tools/cli/installers/lib/ide/gemini.js +49 -1
  276. package/tools/cli/installers/lib/ide/iflow.js +20 -1
  277. package/tools/cli/installers/lib/ide/kiro-cli.js +327 -0
  278. package/tools/cli/installers/lib/ide/opencode.js +3 -3
  279. package/tools/cli/installers/lib/ide/roo.js +120 -184
  280. package/tools/cli/installers/lib/ide/rovo-dev.js +1 -1
  281. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +8 -2
  282. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +34 -19
  283. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +18 -14
  284. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  285. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  286. package/tools/cli/installers/lib/modules/manager.js +486 -53
  287. package/tools/cli/lib/agent/compiler.js +54 -5
  288. package/tools/cli/lib/agent/installer.js +127 -27
  289. package/tools/cli/lib/config.js +2 -1
  290. package/tools/cli/lib/ui.js +65 -4
  291. package/tools/cli/lib/yaml-xml-builder.js +0 -15
  292. package/tools/schema/agent.js +149 -89
  293. package/tools/validate-svg-changes.sh +356 -0
  294. package/custom/src/agents/commit-poet/installation-guide.md +0 -36
  295. package/custom/src/agents/toolsmith/installation-guide.md +0 -36
  296. package/src/modules/bmb/docs/workflows/workflow-template.md +0 -152
  297. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-overview.md +0 -127
  298. package/src/modules/bmb/workflows/create-workflow/steps/step-04-core-tools.md +0 -145
  299. package/src/modules/bmb/workflows/create-workflow/steps/step-05-memory-requirements.md +0 -136
  300. package/src/modules/bmb/workflows/create-workflow/steps/step-06-external-tools.md +0 -154
  301. package/src/modules/bmb/workflows/create-workflow/steps/step-07-installation-guidance.md +0 -159
  302. package/src/modules/bmb/workflows/create-workflow/steps/step-08-tools-summary.md +0 -167
  303. package/src/modules/bmb/workflows/create-workflow/steps/step-10-plan-review.md +0 -215
  304. package/src/modules/bmb/workflows/create-workflow/templates/build-summary.md +0 -36
  305. package/src/modules/bmb/workflows/create-workflow/templates/completion-section.md +0 -39
  306. package/src/modules/bmb/workflows/create-workflow/templates/content-template.md +0 -21
  307. package/src/modules/bmb/workflows/create-workflow/templates/design-section.md +0 -53
  308. package/src/modules/bmb/workflows/create-workflow/templates/project-info.md +0 -18
  309. package/src/modules/bmb/workflows/create-workflow/templates/requirements-section.md +0 -47
  310. package/src/modules/bmb/workflows/create-workflow/templates/review-section.md +0 -56
  311. package/src/modules/bmb/workflows/create-workflow/templates/workflow-plan.md +0 -54
  312. package/src/modules/bmb/workflows-legacy/create-module/README.md +0 -229
  313. package/src/modules/bmb/workflows-legacy/create-module/brainstorm-context.md +0 -137
  314. package/src/modules/bmb/workflows-legacy/create-module/checklist.md +0 -235
  315. package/src/modules/bmb/workflows-legacy/create-module/installer-templates/install-config.yaml +0 -92
  316. package/src/modules/bmb/workflows-legacy/create-module/installer-templates/installer.js +0 -231
  317. package/src/modules/bmb/workflows-legacy/create-module/instructions.md +0 -577
  318. package/src/modules/bmb/workflows-legacy/create-module/module-structure.md +0 -400
  319. package/src/modules/bmb/workflows-legacy/create-module/workflow.yaml +0 -52
  320. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md +0 -80
  321. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +0 -387
  322. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +0 -53
  323. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
  324. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
  325. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
  326. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -64
  327. package/tools/cli/commands/agent-install.js +0 -409
  328. package/tools/cli/commands/cleanup.js +0 -141
  329. /package/{custom/src → example-custom-content}/agents/commit-poet/commit-poet.agent.yaml +0 -0
  330. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -0
  331. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -0
  332. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -0
  333. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -0
  334. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -0
  335. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -0
@@ -438,9 +438,10 @@ function compileToXml(agentYaml, agentName = '', targetPath = '') {
438
438
  * @param {Object} answers - Answers from install_config questions (or defaults)
439
439
  * @param {string} agentName - Optional final agent name (user's custom persona name)
440
440
  * @param {string} targetPath - Optional target path for agent ID
441
+ * @param {Object} options - Additional options including config
441
442
  * @returns {Object} { xml: string, metadata: Object }
442
443
  */
443
- function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = '') {
444
+ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = '', options = {}) {
444
445
  // Parse YAML
445
446
  const agentYaml = yaml.parse(yamlContent);
446
447
 
@@ -466,14 +467,22 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
466
467
  finalAnswers = { ...defaults, ...answers };
467
468
  }
468
469
 
470
+ // Add agent_sidecar_folder to answers if provided in config
471
+ if (options.config && options.config.agent_sidecar_folder) {
472
+ finalAnswers.agent_sidecar_folder = options.config.agent_sidecar_folder;
473
+ }
474
+
469
475
  // Process templates with answers
470
476
  const processedYaml = processAgentYaml(agentYaml, finalAnswers);
471
477
 
472
478
  // Strip install_config from output
473
479
  const cleanYaml = stripInstallConfig(processedYaml);
474
480
 
475
- // Compile to XML
476
- const xml = compileToXml(cleanYaml, agentName, targetPath);
481
+ // Replace {agent_sidecar_folder} in XML content
482
+ let xml = compileToXml(cleanYaml, agentName, targetPath);
483
+ if (finalAnswers.agent_sidecar_folder) {
484
+ xml = xml.replaceAll('{agent_sidecar_folder}', finalAnswers.agent_sidecar_folder);
485
+ }
477
486
 
478
487
  return {
479
488
  xml,
@@ -482,10 +491,39 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
482
491
  };
483
492
  }
484
493
 
494
+ /**
495
+ * Process TTS injection markers in content
496
+ * @param {string} content - Content to process
497
+ * @param {boolean} enableAgentVibes - Whether AgentVibes is enabled
498
+ * @returns {Object} { content: string, hadInjection: boolean }
499
+ */
500
+ function processTTSInjectionPoints(content, enableAgentVibes) {
501
+ const hasAgentTTS = content.includes('<!-- TTS_INJECTION:agent-tts -->');
502
+
503
+ if (enableAgentVibes && hasAgentTTS) {
504
+ // Replace agent-tts injection marker with TTS rule
505
+ content = content.replaceAll(
506
+ '<!-- TTS_INJECTION:agent-tts -->',
507
+ `- When responding to user messages, speak your responses using TTS:
508
+ Call: \`.claude/hooks/bmad-speak.sh '{agent-id}' '{response-text}'\` after each response
509
+ Replace {agent-id} with YOUR agent ID from <agent id="..."> tag at top of this file
510
+ Replace {response-text} with the text you just output to the user
511
+ IMPORTANT: Use single quotes as shown - do NOT escape special characters like ! or $ inside single quotes
512
+ Run in background (&) to avoid blocking`,
513
+ );
514
+ return { content, hadInjection: true };
515
+ } else if (!enableAgentVibes && hasAgentTTS) {
516
+ // Strip injection markers when disabled
517
+ content = content.replaceAll(/<!-- TTS_INJECTION:agent-tts -->\n?/g, '');
518
+ }
519
+
520
+ return { content, hadInjection: false };
521
+ }
522
+
485
523
  /**
486
524
  * Compile agent file to .md
487
525
  * @param {string} yamlPath - Path to agent YAML file
488
- * @param {Object} options - { answers: {}, outputPath: string }
526
+ * @param {Object} options - { answers: {}, outputPath: string, enableAgentVibes: boolean }
489
527
  * @returns {Object} Compilation result
490
528
  */
491
529
  function compileAgentFile(yamlPath, options = {}) {
@@ -501,13 +539,24 @@ function compileAgentFile(yamlPath, options = {}) {
501
539
  outputPath = path.join(dir, `${basename}.md`);
502
540
  }
503
541
 
542
+ // Process TTS injection points if enableAgentVibes option is provided
543
+ let xml = result.xml;
544
+ let ttsInjected = false;
545
+ if (options.enableAgentVibes !== undefined) {
546
+ const ttsResult = processTTSInjectionPoints(xml, options.enableAgentVibes);
547
+ xml = ttsResult.content;
548
+ ttsInjected = ttsResult.hadInjection;
549
+ }
550
+
504
551
  // Write compiled XML
505
- fs.writeFileSync(outputPath, result.xml, 'utf8');
552
+ fs.writeFileSync(outputPath, xml, 'utf8');
506
553
 
507
554
  return {
508
555
  ...result,
556
+ xml,
509
557
  outputPath,
510
558
  sourcePath: yamlPath,
559
+ ttsInjected,
511
560
  };
512
561
  }
513
562
 
@@ -46,7 +46,7 @@ function resolvePath(pathStr, context) {
46
46
  }
47
47
 
48
48
  /**
49
- * Discover available agents in the custom agent location
49
+ * Discover available agents in the custom agent location recursively
50
50
  * @param {string} searchPath - Path to search for agents
51
51
  * @returns {Array} List of agent info objects
52
52
  */
@@ -56,35 +56,58 @@ function discoverAgents(searchPath) {
56
56
  }
57
57
 
58
58
  const agents = [];
59
- const entries = fs.readdirSync(searchPath, { withFileTypes: true });
60
59
 
61
- for (const entry of entries) {
62
- const fullPath = path.join(searchPath, entry.name);
63
-
64
- if (entry.isFile() && entry.name.endsWith('.agent.yaml')) {
65
- // Simple agent (single file)
66
- agents.push({
67
- type: 'simple',
68
- name: entry.name.replace('.agent.yaml', ''),
69
- path: fullPath,
70
- yamlFile: fullPath,
71
- });
72
- } else if (entry.isDirectory()) {
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: 'expert',
79
- name: entry.name,
73
+ type: 'simple',
74
+ name: agentName,
80
75
  path: fullPath,
81
- yamlFile: agentYamlPath,
82
- hasSidecar: true,
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: agentYaml?.agent?.metadata || {},
136
+ metadata,
137
+ hasSidecar: metadata.hasSidecar === true,
112
138
  };
113
139
  }
114
140
 
@@ -208,9 +234,10 @@ async function promptInstallQuestions(installConfig, defaults, presetAnswers = {
208
234
  * @param {Object} agentInfo - Agent discovery info
209
235
  * @param {Object} answers - User answers for install_config
210
236
  * @param {string} targetPath - Target installation directory
237
+ * @param {Object} options - Additional options including config
211
238
  * @returns {Object} Installation result
212
239
  */
213
- function installAgent(agentInfo, answers, targetPath) {
240
+ function installAgent(agentInfo, answers, targetPath, options = {}) {
214
241
  // Compile the agent
215
242
  const { xml, metadata, processedYaml } = compileAgent(fs.readFileSync(agentInfo.yamlFile, 'utf8'), answers);
216
243
 
@@ -237,11 +264,27 @@ function installAgent(agentInfo, answers, targetPath) {
237
264
  sidecarCopied: false,
238
265
  };
239
266
 
240
- // Copy sidecar files for expert agents
241
- if (agentInfo.hasSidecar && agentInfo.type === 'expert') {
242
- const sidecarFiles = copySidecarFiles(agentInfo.path, agentTargetDir, agentInfo.yamlFile);
267
+ // Handle sidecar files for agents with hasSidecar flag
268
+ if (agentInfo.hasSidecar === true && agentInfo.type === 'expert') {
269
+ // Get agent sidecar folder from config or use default
270
+ const agentSidecarFolder = options.config?.agent_sidecar_folder || '{project-root}/.myagent-data';
271
+
272
+ // Resolve path variables
273
+ const resolvedSidecarFolder = agentSidecarFolder
274
+ .replaceAll('{project-root}', options.projectRoot || process.cwd())
275
+ .replaceAll('{bmad_folder}', options.bmadFolder || '.bmad');
276
+
277
+ // Create sidecar directory for this agent
278
+ const agentSidecarDir = path.join(resolvedSidecarFolder, agentFolderName);
279
+ if (!fs.existsSync(agentSidecarDir)) {
280
+ fs.mkdirSync(agentSidecarDir, { recursive: true });
281
+ }
282
+
283
+ // Find and copy sidecar folder
284
+ const sidecarFiles = copyAgentSidecarFiles(agentInfo.path, agentSidecarDir, agentInfo.yamlFile);
243
285
  result.sidecarCopied = true;
244
286
  result.sidecarFiles = sidecarFiles;
287
+ result.sidecarDir = agentSidecarDir;
245
288
  }
246
289
 
247
290
  return result;
@@ -285,6 +328,62 @@ function copySidecarFiles(sourceDir, targetDir, excludeYaml) {
285
328
  return copied;
286
329
  }
287
330
 
331
+ /**
332
+ * Find and copy agent sidecar folders
333
+ * @param {string} sourceDir - Source agent directory
334
+ * @param {string} targetSidecarDir - Target sidecar directory for the agent
335
+ * @param {string} excludeYaml - The .agent.yaml file to exclude
336
+ * @returns {Array} List of copied files
337
+ */
338
+ function copyAgentSidecarFiles(sourceDir, targetSidecarDir, excludeYaml) {
339
+ const copied = [];
340
+ const preserved = [];
341
+
342
+ // Find folders with "sidecar" in the name
343
+ const entries = fs.readdirSync(sourceDir, { withFileTypes: true });
344
+
345
+ for (const entry of entries) {
346
+ if (entry.isDirectory() && entry.name.toLowerCase().includes('sidecar')) {
347
+ const sidecarSourcePath = path.join(sourceDir, entry.name);
348
+
349
+ // Recursively sync the sidecar folder contents (preserve existing, add new)
350
+ function syncSidecarDir(src, dest) {
351
+ if (!fs.existsSync(dest)) {
352
+ fs.mkdirSync(dest, { recursive: true });
353
+ }
354
+
355
+ // Get all files in source
356
+ const sourceEntries = fs.readdirSync(src, { withFileTypes: true });
357
+
358
+ for (const sourceEntry of sourceEntries) {
359
+ const srcPath = path.join(src, sourceEntry.name);
360
+ const destPath = path.join(dest, sourceEntry.name);
361
+
362
+ if (sourceEntry.isDirectory()) {
363
+ // Recursively sync subdirectories
364
+ syncSidecarDir(srcPath, destPath);
365
+ } else {
366
+ // Check if file already exists in destination
367
+ if (fs.existsSync(destPath)) {
368
+ // File exists - preserve it
369
+ preserved.push(destPath);
370
+ } else {
371
+ // File doesn't exist - copy it
372
+ fs.copyFileSync(srcPath, destPath);
373
+ copied.push(destPath);
374
+ }
375
+ }
376
+ }
377
+ }
378
+
379
+ syncSidecarDir(sidecarSourcePath, targetSidecarDir);
380
+ }
381
+ }
382
+
383
+ // Return info about what was preserved and what was copied
384
+ return { copied, preserved };
385
+ }
386
+
288
387
  /**
289
388
  * Update agent metadata ID to reflect installed location
290
389
  * @param {string} compiledContent - Compiled XML content
@@ -721,6 +820,7 @@ module.exports = {
721
820
  promptInstallQuestions,
722
821
  installAgent,
723
822
  copySidecarFiles,
823
+ copyAgentSidecarFiles,
724
824
  updateAgentId,
725
825
  detectBmadProject,
726
826
  addToManifest,
@@ -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 || '5.0.0',
54
+ '{version}': replacements.version || packageJson.version,
54
55
  '{date}': new Date().toISOString().split('T')[0],
55
56
  };
56
57
 
@@ -116,8 +116,18 @@ class UI {
116
116
 
117
117
  const { installedModuleIds } = await this.getExistingInstallation(confirmedDirectory);
118
118
  const coreConfig = await this.collectCoreConfig(confirmedDirectory);
119
- const moduleChoices = await this.getModuleChoices(installedModuleIds);
120
- const selectedModules = await this.selectModules(moduleChoices);
119
+
120
+ // Skip module selection during update/reinstall - keep existing modules
121
+ let selectedModules;
122
+ if (actionType === 'update' || actionType === 'reinstall') {
123
+ // Keep all existing installed modules during update/reinstall
124
+ selectedModules = [...installedModuleIds];
125
+ console.log(chalk.cyan('\n📦 Keeping existing modules: ') + selectedModules.join(', '));
126
+ } else {
127
+ // Only show module selection for new installs
128
+ const moduleChoices = await this.getModuleChoices(installedModuleIds);
129
+ selectedModules = await this.selectModules(moduleChoices);
130
+ }
121
131
 
122
132
  // Prompt for AgentVibes TTS integration
123
133
  const agentVibesConfig = await this.promptAgentVibes(confirmedDirectory);
@@ -363,11 +373,60 @@ class UI {
363
373
  `🔧 Tools Configured: ${result.ides?.length > 0 ? result.ides.join(', ') : 'none'}`,
364
374
  ];
365
375
 
376
+ // Add AgentVibes TTS info if enabled
377
+ if (result.agentVibesEnabled) {
378
+ summary.push(`🎤 AgentVibes TTS: Enabled`);
379
+ }
380
+
366
381
  CLIUtils.displayBox(summary.join('\n\n'), {
367
382
  borderColor: 'green',
368
383
  borderStyle: 'round',
369
384
  });
370
385
 
386
+ // Display TTS injection details if present
387
+ if (result.ttsInjectedFiles && result.ttsInjectedFiles.length > 0) {
388
+ console.log('\n' + chalk.cyan.bold('═══════════════════════════════════════════════════'));
389
+ console.log(chalk.cyan.bold(' AgentVibes TTS Injection Summary'));
390
+ console.log(chalk.cyan.bold('═══════════════════════════════════════════════════\n'));
391
+
392
+ // Explain what TTS injection is
393
+ console.log(chalk.white.bold('What is TTS Injection?\n'));
394
+ console.log(chalk.dim(' TTS (Text-to-Speech) injection adds voice instructions to BMAD agents,'));
395
+ console.log(chalk.dim(' enabling them to speak their responses aloud using AgentVibes.\n'));
396
+ console.log(chalk.dim(' Example: When you activate the PM agent, it will greet you with'));
397
+ console.log(chalk.dim(' spoken audio like "Hey! I\'m your Project Manager. How can I help?"\n'));
398
+
399
+ console.log(chalk.green(`✅ TTS injection applied to ${result.ttsInjectedFiles.length} file(s):\n`));
400
+
401
+ // Group by type
402
+ const partyModeFiles = result.ttsInjectedFiles.filter((f) => f.type === 'party-mode');
403
+ const agentTTSFiles = result.ttsInjectedFiles.filter((f) => f.type === 'agent-tts');
404
+
405
+ if (partyModeFiles.length > 0) {
406
+ console.log(chalk.yellow(' Party Mode (multi-agent conversations):'));
407
+ for (const file of partyModeFiles) {
408
+ console.log(chalk.dim(` • ${file.path}`));
409
+ }
410
+ }
411
+
412
+ if (agentTTSFiles.length > 0) {
413
+ console.log(chalk.yellow(' Agent TTS (individual agent voices):'));
414
+ for (const file of agentTTSFiles) {
415
+ console.log(chalk.dim(` • ${file.path}`));
416
+ }
417
+ }
418
+
419
+ // Show backup info and restore command
420
+ console.log('\n' + chalk.white.bold('Backups & Recovery:\n'));
421
+ console.log(chalk.dim(' Pre-injection backups are stored in:'));
422
+ console.log(chalk.cyan(' ~/.bmad-tts-backups/\n'));
423
+ console.log(chalk.dim(' To restore original files (removes TTS instructions):'));
424
+ console.log(chalk.cyan(` bmad-tts-injector.sh --restore ${result.path}\n`));
425
+
426
+ console.log(chalk.cyan('💡 BMAD agents will now speak when activated!'));
427
+ console.log(chalk.dim(' Ensure AgentVibes is installed: https://agentvibes.org'));
428
+ }
429
+
371
430
  console.log('\n' + chalk.green.bold('✨ BMAD is ready to use!'));
372
431
  }
373
432
 
@@ -432,11 +491,13 @@ class UI {
432
491
  const availableModules = await moduleManager.listAvailable();
433
492
 
434
493
  const isNewInstallation = installedModuleIds.size === 0;
435
- return availableModules.map((mod) => ({
436
- name: mod.name,
494
+ const moduleChoices = availableModules.map((mod) => ({
495
+ name: mod.isCustom ? `${mod.name} ${chalk.red('(Custom)')}` : mod.name,
437
496
  value: mod.id,
438
497
  checked: isNewInstallation ? mod.defaultSelected || false : installedModuleIds.has(mod.id),
439
498
  }));
499
+
500
+ return moduleChoices;
440
501
  }
441
502
 
442
503
  /**
@@ -232,21 +232,6 @@ class YamlXmlBuilder {
232
232
  return xml;
233
233
  }
234
234
 
235
- /**
236
- * Build metadata comment
237
- */
238
- buildMetadataComment(metadata) {
239
- const lines = ['<!-- BUILD-META', ` source: ${metadata.sourceFile || 'unknown'} (hash: ${metadata.sourceHash || 'unknown'})`];
240
-
241
- if (metadata.customizeFile) {
242
- lines.push(` customize: ${metadata.customizeFile} (hash: ${metadata.customizeHash || 'unknown'})`);
243
- }
244
-
245
- lines.push(` built: ${new Date().toISOString()}`, ` builder-version: ${metadata.builderVersion || '1.0.0'}`, '-->\n');
246
-
247
- return lines.join('\n');
248
- }
249
-
250
235
  /**
251
236
  * Build persona XML section
252
237
  */