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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/.coderabbit.yaml +36 -0
  2. package/.github/CODE_OF_CONDUCT.md +128 -0
  3. package/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
  4. package/.github/scripts/discord-helpers.sh +15 -0
  5. package/.github/workflows/discord.yaml +278 -8
  6. package/.github/workflows/quality.yaml +19 -0
  7. package/.markdownlint-cli2.yaml +42 -0
  8. package/.prettierignore +3 -0
  9. package/CHANGELOG.md +183 -360
  10. package/README.md +4 -1
  11. package/docs/agent-customization-guide.md +2 -2
  12. package/docs/custom-content-installation.md +245 -0
  13. package/docs/document-sharding-guide.md +1 -1
  14. package/docs/index.md +2 -2
  15. package/docs/installers-bundlers/installers-modules-platforms-reference.md +6 -5
  16. package/docs/web-bundles-gemini-gpt-guide.md +1 -1
  17. package/eslint.config.mjs +14 -0
  18. package/example-custom-content/README.md +8 -0
  19. package/{custom/src → example-custom-content}/agents/commit-poet/commit-poet.agent.yaml +1 -1
  20. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/instructions.md +5 -5
  21. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +1 -1
  22. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +1 -1
  23. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +2 -2
  24. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/memories.md +1 -1
  25. package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith.agent.yaml +18 -17
  26. package/example-custom-content/module.yaml +4 -0
  27. package/example-custom-content/workflows/quiz-master/steps/step-01-init.md +168 -0
  28. package/example-custom-content/workflows/quiz-master/steps/step-02-q1.md +155 -0
  29. package/example-custom-content/workflows/quiz-master/steps/step-03-q2.md +89 -0
  30. package/example-custom-content/workflows/quiz-master/steps/step-04-q3.md +36 -0
  31. package/example-custom-content/workflows/quiz-master/steps/step-05-q4.md +36 -0
  32. package/example-custom-content/workflows/quiz-master/steps/step-06-q5.md +36 -0
  33. package/example-custom-content/workflows/quiz-master/steps/step-07-q6.md +36 -0
  34. package/example-custom-content/workflows/quiz-master/steps/step-08-q7.md +36 -0
  35. package/example-custom-content/workflows/quiz-master/steps/step-09-q8.md +36 -0
  36. package/example-custom-content/workflows/quiz-master/steps/step-10-q9.md +36 -0
  37. package/example-custom-content/workflows/quiz-master/steps/step-11-q10.md +36 -0
  38. package/example-custom-content/workflows/quiz-master/steps/step-12-results.md +150 -0
  39. package/example-custom-content/workflows/quiz-master/templates/csv-headers.template +1 -0
  40. package/example-custom-content/workflows/quiz-master/workflow.md +54 -0
  41. package/example-custom-content/workflows/wassup/workflow.md +26 -0
  42. package/example-custom-module/mwm/README.md +9 -0
  43. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +47 -0
  44. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +17 -0
  45. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +151 -0
  46. package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +138 -0
  47. package/example-custom-module/mwm/agents/meditation-guide.agent.yaml +138 -0
  48. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/insights.md +13 -0
  49. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/instructions.md +30 -0
  50. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/memories.md +13 -0
  51. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion-sidecar/patterns.md +17 -0
  52. package/example-custom-module/mwm/agents/wellness-companion/wellness-companion.agent.yaml +125 -0
  53. package/example-custom-module/mwm/module.yaml +28 -0
  54. package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +31 -0
  55. package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +45 -0
  56. package/example-custom-module/mwm/workflows/crisis-support/README.md +31 -0
  57. package/example-custom-module/mwm/workflows/crisis-support/workflow.md +45 -0
  58. package/example-custom-module/mwm/workflows/daily-checkin/README.md +32 -0
  59. package/example-custom-module/mwm/workflows/daily-checkin/workflow.md +45 -0
  60. package/example-custom-module/mwm/workflows/guided-meditation/README.md +31 -0
  61. package/example-custom-module/mwm/workflows/guided-meditation/workflow.md +45 -0
  62. package/example-custom-module/mwm/workflows/wellness-journal/README.md +31 -0
  63. package/example-custom-module/mwm/workflows/wellness-journal/workflow.md +45 -0
  64. package/package.json +9 -4
  65. package/src/core/_module-installer/installer.js +1 -1
  66. package/src/core/{_module-installer/install-config.yaml → module.yaml} +5 -1
  67. package/src/core/resources/excalidraw/library-loader.md +2 -2
  68. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +1 -1
  69. package/src/core/workflows/brainstorming/workflow.md +1 -1
  70. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +0 -1
  71. package/src/core/workflows/party-mode/workflow.md +2 -3
  72. package/src/modules/bmb/README.md +1 -1
  73. package/src/modules/bmb/_module-installer/installer.js +76 -0
  74. package/src/modules/bmb/agents/bmad-builder.agent.yaml +32 -9
  75. package/src/modules/bmb/docs/agents/agent-menu-patterns.md +5 -5
  76. package/src/modules/bmb/docs/agents/expert-agent-architecture.md +20 -20
  77. package/src/modules/bmb/docs/agents/index.md +1 -1
  78. package/src/modules/bmb/docs/agents/module-agent-architecture.md +45 -45
  79. package/src/modules/bmb/docs/agents/simple-agent-architecture.md +7 -3
  80. package/src/modules/bmb/docs/workflows/architecture.md +1 -1
  81. package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +241 -0
  82. package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +223 -0
  83. package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/step-file.md +4 -4
  84. package/src/modules/bmb/docs/workflows/{step-template.md → templates/step-template.md} +40 -33
  85. package/src/modules/bmb/docs/workflows/templates/workflow-template.md +104 -0
  86. package/src/modules/bmb/{workflows/create-workflow → docs/workflows}/templates/workflow.md +1 -1
  87. package/src/modules/bmb/{_module-installer/install-config.yaml → module.yaml} +4 -9
  88. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/README.md +4 -4
  89. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +8 -8
  90. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
  91. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  92. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +2 -3
  93. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +10 -40
  94. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +1 -1
  95. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +1 -0
  96. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +2 -2
  97. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +2 -2
  98. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +2 -2
  99. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  100. package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +16 -4
  101. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +4 -4
  102. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +7 -7
  103. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +1 -1
  104. package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +3 -3
  105. package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +3 -3
  106. package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +3 -3
  107. package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +3 -3
  108. package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +6 -6
  109. package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +2 -2
  110. package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +3 -3
  111. package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +3 -3
  112. package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +2 -2
  113. package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +3 -3
  114. package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +2 -2
  115. package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +2 -2
  116. package/src/modules/bmb/workflows/create-agent/workflow.md +11 -11
  117. package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +155 -0
  118. package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +169 -0
  119. package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +217 -0
  120. package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +267 -0
  121. package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +228 -0
  122. package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +233 -0
  123. package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +296 -0
  124. package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +228 -0
  125. package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +186 -0
  126. package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +309 -0
  127. package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +337 -0
  128. package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +335 -0
  129. package/src/modules/bmb/workflows/create-module/templates/agent.template.md +317 -0
  130. package/src/modules/bmb/workflows/create-module/templates/installer.template.js +47 -0
  131. package/src/modules/bmb/workflows/create-module/templates/module-plan.template.md +5 -0
  132. package/src/modules/bmb/workflows/create-module/templates/module.template.yaml +53 -0
  133. package/src/modules/bmb/workflows/create-module/templates/workflow-plan-template.md +23 -0
  134. package/src/modules/bmb/workflows/create-module/validation.md +126 -0
  135. package/src/modules/bmb/workflows/create-module/workflow.md +55 -0
  136. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +45 -56
  137. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +9 -31
  138. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +250 -0
  139. package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +216 -0
  140. package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +289 -0
  141. package/src/modules/bmb/workflows/create-workflow/steps/{step-09-design.md → step-06-design.md} +76 -44
  142. package/src/modules/bmb/workflows/create-workflow/steps/{step-11-build.md → step-07-build.md} +71 -25
  143. package/src/modules/bmb/workflows/create-workflow/steps/{step-12-review.md → step-08-review.md} +30 -16
  144. package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +187 -0
  145. package/src/modules/bmb/workflows/create-workflow/workflow.md +2 -2
  146. package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +2 -2
  147. package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +14 -14
  148. package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +4 -4
  149. package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +2 -2
  150. package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +4 -4
  151. package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
  152. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +2 -6
  153. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +2 -2
  154. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +1 -1
  155. package/src/modules/bmb/workflows/edit-workflow/workflow.md +1 -1
  156. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +2 -2
  157. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +5 -5
  158. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +7 -7
  159. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +3 -3
  160. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +3 -3
  161. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +3 -3
  162. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +3 -3
  163. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +2 -2
  164. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
  165. package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +0 -1
  166. package/src/modules/bmgd/README.md +2 -1
  167. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +8 -8
  168. package/src/modules/bmm/_module-installer/installer.js +1 -1
  169. package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +1 -1
  170. package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +1 -1
  171. package/src/modules/bmm/agents/analyst.agent.yaml +11 -8
  172. package/src/modules/bmm/agents/architect.agent.yaml +1 -5
  173. package/src/modules/bmm/agents/pm.agent.yaml +5 -5
  174. package/src/modules/bmm/docs/README.md +23 -1
  175. package/src/modules/bmm/docs/agents-guide.md +16 -35
  176. package/src/modules/bmm/docs/brownfield-guide.md +17 -30
  177. package/src/modules/bmm/docs/enterprise-agentic-development.md +2 -2
  178. package/src/modules/bmm/docs/faq.md +6 -39
  179. package/src/modules/bmm/docs/glossary.md +11 -24
  180. package/src/modules/bmm/docs/images/README.md +37 -0
  181. package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +62 -202
  182. package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +3 -1
  183. package/src/modules/bmm/docs/quick-spec-flow.md +652 -0
  184. package/src/modules/bmm/docs/quick-start.md +9 -25
  185. package/src/modules/bmm/docs/test-architecture.md +6 -6
  186. package/src/modules/bmm/docs/troubleshooting.md +680 -0
  187. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  188. package/src/modules/bmm/docs/workflows-implementation.md +143 -3
  189. package/src/modules/bmm/docs/workflows-solutioning.md +2 -2
  190. package/src/modules/bmm/{_module-installer/install-config.yaml → module.yaml} +1 -1
  191. package/src/modules/bmm/tasks/daily-standup.xml +85 -0
  192. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +1 -1
  193. package/src/modules/bmm/testarch/knowledge/overview.md +1 -1
  194. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +2 -2
  195. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +2 -2
  196. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +2 -2
  197. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +2 -2
  198. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +1 -1
  199. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +8 -8
  200. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +18 -18
  201. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +18 -18
  202. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +18 -18
  203. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +17 -17
  204. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +35 -36
  205. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +5 -6
  206. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +20 -19
  207. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +21 -20
  208. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +20 -19
  209. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +21 -20
  210. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +16 -15
  211. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +36 -37
  212. package/src/modules/bmm/workflows/1-analysis/research/research.template.md +0 -1
  213. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +8 -8
  214. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +19 -18
  215. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +20 -19
  216. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +21 -20
  217. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +19 -18
  218. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +38 -39
  219. package/src/modules/bmm/workflows/1-analysis/research/workflow.md +14 -8
  220. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +6 -0
  221. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +7 -0
  222. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +138 -56
  223. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +93 -51
  224. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +223 -78
  225. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +20 -2
  226. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +18 -0
  227. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +21 -0
  228. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +21 -0
  229. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +21 -0
  230. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +18 -0
  231. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +18 -0
  232. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +18 -0
  233. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +13 -0
  234. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +2 -2
  235. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +14 -14
  236. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +7 -7
  237. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +2 -1
  238. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +258 -0
  239. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +232 -0
  240. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +271 -0
  241. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +144 -0
  242. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  243. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  244. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-01-document-discovery.md +189 -0
  245. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-02-prd-analysis.md +177 -0
  246. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-03-epic-coverage-validation.md +178 -0
  247. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-04-ux-alignment.md +138 -0
  248. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-05-epic-quality-review.md +251 -0
  249. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/steps/step-06-final-assessment.md +132 -0
  250. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/templates/readiness-report-template.md +4 -0
  251. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.md +54 -0
  252. package/src/modules/{bmgd/workflows/4-production → bmm/workflows/4-implementation}/code-review/checklist.md +2 -1
  253. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +51 -3
  254. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +1 -1
  255. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +32 -2
  256. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
  257. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +19 -21
  258. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +10 -10
  259. package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +174 -0
  260. package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +35 -0
  261. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/instructions.md +104 -7
  262. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +4 -0
  263. package/src/modules/bmm/workflows/document-project/instructions.md +1 -1
  264. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +2 -2
  265. package/src/modules/bmm/workflows/generate-project-context/workflow.md +1 -1
  266. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +1 -1
  267. package/src/modules/bmm/workflows/testarch/ci/checklist.md +1 -1
  268. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +36 -3
  269. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +25 -4
  270. package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
  271. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  272. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +1 -6
  273. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +1 -6
  274. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +1 -6
  275. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +1 -7
  276. package/src/modules/cis/_module-installer/installer.js +1 -1
  277. package/tools/cli/README.md +7 -7
  278. package/tools/cli/commands/build.js +9 -184
  279. package/tools/cli/commands/install.js +1 -6
  280. package/tools/cli/installers/lib/core/config-collector.js +80 -12
  281. package/tools/cli/installers/lib/core/custom-module-cache.js +239 -0
  282. package/tools/cli/installers/lib/core/detector.js +8 -4
  283. package/tools/cli/installers/lib/core/installer.js +933 -376
  284. package/tools/cli/installers/lib/core/manifest-generator.js +265 -41
  285. package/tools/cli/installers/lib/core/manifest.js +47 -0
  286. package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +79 -0
  287. package/tools/cli/installers/lib/custom/handler.js +396 -0
  288. package/tools/cli/installers/lib/ide/_base-ide.js +10 -0
  289. package/tools/cli/installers/lib/ide/auggie.js +19 -7
  290. package/tools/cli/installers/lib/ide/crush.js +19 -6
  291. package/tools/cli/installers/lib/ide/cursor.js +29 -13
  292. package/tools/cli/installers/lib/ide/gemini.js +49 -1
  293. package/tools/cli/installers/lib/ide/iflow.js +20 -1
  294. package/tools/cli/installers/lib/ide/kiro-cli.js +327 -0
  295. package/tools/cli/installers/lib/ide/opencode.js +3 -3
  296. package/tools/cli/installers/lib/ide/roo.js +120 -184
  297. package/tools/cli/installers/lib/ide/rovo-dev.js +1 -1
  298. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +8 -2
  299. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +34 -19
  300. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +18 -14
  301. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  302. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  303. package/tools/cli/installers/lib/modules/manager.js +535 -56
  304. package/tools/cli/lib/agent/compiler.js +57 -16
  305. package/tools/cli/lib/agent/installer.js +129 -28
  306. package/tools/cli/lib/cli-utils.js +21 -4
  307. package/tools/cli/lib/config.js +2 -1
  308. package/tools/cli/lib/ui.js +561 -12
  309. package/tools/cli/lib/yaml-xml-builder.js +0 -15
  310. package/tools/maintainer/review-pr-README.md +55 -0
  311. package/tools/maintainer/review-pr.md +242 -0
  312. package/tools/migrate-custom-module-paths.js +124 -0
  313. package/tools/schema/agent.js +149 -89
  314. package/tools/validate-svg-changes.sh +356 -0
  315. package/custom/src/agents/commit-poet/installation-guide.md +0 -36
  316. package/custom/src/agents/toolsmith/installation-guide.md +0 -36
  317. package/docs/custom-agent-installation.md +0 -183
  318. package/src/modules/bmb/docs/workflows/workflow-template.md +0 -152
  319. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-overview.md +0 -127
  320. package/src/modules/bmb/workflows/create-workflow/steps/step-04-core-tools.md +0 -145
  321. package/src/modules/bmb/workflows/create-workflow/steps/step-05-memory-requirements.md +0 -136
  322. package/src/modules/bmb/workflows/create-workflow/steps/step-06-external-tools.md +0 -154
  323. package/src/modules/bmb/workflows/create-workflow/steps/step-07-installation-guidance.md +0 -159
  324. package/src/modules/bmb/workflows/create-workflow/steps/step-08-tools-summary.md +0 -167
  325. package/src/modules/bmb/workflows/create-workflow/steps/step-10-plan-review.md +0 -215
  326. package/src/modules/bmb/workflows/create-workflow/templates/build-summary.md +0 -36
  327. package/src/modules/bmb/workflows/create-workflow/templates/completion-section.md +0 -39
  328. package/src/modules/bmb/workflows/create-workflow/templates/content-template.md +0 -21
  329. package/src/modules/bmb/workflows/create-workflow/templates/design-section.md +0 -53
  330. package/src/modules/bmb/workflows/create-workflow/templates/project-info.md +0 -18
  331. package/src/modules/bmb/workflows/create-workflow/templates/requirements-section.md +0 -47
  332. package/src/modules/bmb/workflows/create-workflow/templates/review-section.md +0 -56
  333. package/src/modules/bmb/workflows/create-workflow/templates/workflow-plan.md +0 -54
  334. package/src/modules/bmb/workflows-legacy/create-module/README.md +0 -229
  335. package/src/modules/bmb/workflows-legacy/create-module/brainstorm-context.md +0 -137
  336. package/src/modules/bmb/workflows-legacy/create-module/checklist.md +0 -235
  337. package/src/modules/bmb/workflows-legacy/create-module/installer-templates/install-config.yaml +0 -92
  338. package/src/modules/bmb/workflows-legacy/create-module/installer-templates/installer.js +0 -231
  339. package/src/modules/bmb/workflows-legacy/create-module/instructions.md +0 -577
  340. package/src/modules/bmb/workflows-legacy/create-module/module-structure.md +0 -400
  341. package/src/modules/bmb/workflows-legacy/create-module/workflow.yaml +0 -52
  342. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/epics-template.md +0 -80
  343. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +0 -387
  344. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +0 -53
  345. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
  346. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
  347. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
  348. package/src/modules/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -64
  349. package/tools/cli/commands/agent-install.js +0 -409
  350. package/tools/cli/commands/cleanup.js +0 -141
  351. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -0
  352. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -0
  353. /package/{custom/src → example-custom-content}/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -0
  354. /package/src/modules/bmgd/{_module-installer/install-config.yaml → module.yaml} +0 -0
  355. /package/src/modules/cis/{_module-installer/install-config.yaml → module.yaml} +0 -0
@@ -438,23 +438,16 @@ function compileToXml(agentYaml, agentName = '', targetPath = '') {
438
438
  * @param {Object} answers - Answers from install_config questions (or defaults)
439
439
  * @param {string} agentName - Optional final agent name (user's custom persona name)
440
440
  * @param {string} targetPath - Optional target path for agent ID
441
+ * @param {Object} options - Additional options including config
441
442
  * @returns {Object} { xml: string, metadata: Object }
442
443
  */
443
- function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = '') {
444
+ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = '', options = {}) {
444
445
  // Parse YAML
445
446
  const agentYaml = yaml.parse(yamlContent);
446
447
 
447
- // Inject custom agent name into metadata.name if provided
448
- // This is the user's chosen persona name (e.g., "Fred" instead of "Inkwell Von Comitizen")
449
- if (agentName && agentYaml.agent && agentYaml.agent.metadata) {
450
- // Convert kebab-case to title case for the name field
451
- // e.g., "fred-commit-poet" → "Fred Commit Poet"
452
- const titleCaseName = agentName
453
- .split('-')
454
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
455
- .join(' ');
456
- agentYaml.agent.metadata.name = titleCaseName;
457
- }
448
+ // Note: agentName parameter is for UI display only, not for modifying the YAML
449
+ // The persona name (metadata.name) should always come from the YAML file
450
+ // We should NEVER modify metadata.name as it's part of the agent's identity
458
451
 
459
452
  // Extract install_config
460
453
  const installConfig = extractInstallConfig(agentYaml);
@@ -466,14 +459,22 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
466
459
  finalAnswers = { ...defaults, ...answers };
467
460
  }
468
461
 
462
+ // Add agent_sidecar_folder to answers if provided in config
463
+ if (options.config && options.config.agent_sidecar_folder) {
464
+ finalAnswers.agent_sidecar_folder = options.config.agent_sidecar_folder;
465
+ }
466
+
469
467
  // Process templates with answers
470
468
  const processedYaml = processAgentYaml(agentYaml, finalAnswers);
471
469
 
472
470
  // Strip install_config from output
473
471
  const cleanYaml = stripInstallConfig(processedYaml);
474
472
 
475
- // Compile to XML
476
- const xml = compileToXml(cleanYaml, agentName, targetPath);
473
+ // Replace {agent_sidecar_folder} in XML content
474
+ let xml = compileToXml(cleanYaml, agentName, targetPath);
475
+ if (finalAnswers.agent_sidecar_folder) {
476
+ xml = xml.replaceAll('{agent_sidecar_folder}', finalAnswers.agent_sidecar_folder);
477
+ }
477
478
 
478
479
  return {
479
480
  xml,
@@ -482,10 +483,39 @@ function compileAgent(yamlContent, answers = {}, agentName = '', targetPath = ''
482
483
  };
483
484
  }
484
485
 
486
+ /**
487
+ * Process TTS injection markers in content
488
+ * @param {string} content - Content to process
489
+ * @param {boolean} enableAgentVibes - Whether AgentVibes is enabled
490
+ * @returns {Object} { content: string, hadInjection: boolean }
491
+ */
492
+ function processTTSInjectionPoints(content, enableAgentVibes) {
493
+ const hasAgentTTS = content.includes('<!-- TTS_INJECTION:agent-tts -->');
494
+
495
+ if (enableAgentVibes && hasAgentTTS) {
496
+ // Replace agent-tts injection marker with TTS rule
497
+ content = content.replaceAll(
498
+ '<!-- TTS_INJECTION:agent-tts -->',
499
+ `- When responding to user messages, speak your responses using TTS:
500
+ Call: \`.claude/hooks/bmad-speak.sh '{agent-id}' '{response-text}'\` after each response
501
+ Replace {agent-id} with YOUR agent ID from <agent id="..."> tag at top of this file
502
+ Replace {response-text} with the text you just output to the user
503
+ IMPORTANT: Use single quotes as shown - do NOT escape special characters like ! or $ inside single quotes
504
+ Run in background (&) to avoid blocking`,
505
+ );
506
+ return { content, hadInjection: true };
507
+ } else if (!enableAgentVibes && hasAgentTTS) {
508
+ // Strip injection markers when disabled
509
+ content = content.replaceAll(/<!-- TTS_INJECTION:agent-tts -->\n?/g, '');
510
+ }
511
+
512
+ return { content, hadInjection: false };
513
+ }
514
+
485
515
  /**
486
516
  * Compile agent file to .md
487
517
  * @param {string} yamlPath - Path to agent YAML file
488
- * @param {Object} options - { answers: {}, outputPath: string }
518
+ * @param {Object} options - { answers: {}, outputPath: string, enableAgentVibes: boolean }
489
519
  * @returns {Object} Compilation result
490
520
  */
491
521
  function compileAgentFile(yamlPath, options = {}) {
@@ -501,13 +531,24 @@ function compileAgentFile(yamlPath, options = {}) {
501
531
  outputPath = path.join(dir, `${basename}.md`);
502
532
  }
503
533
 
534
+ // Process TTS injection points if enableAgentVibes option is provided
535
+ let xml = result.xml;
536
+ let ttsInjected = false;
537
+ if (options.enableAgentVibes !== undefined) {
538
+ const ttsResult = processTTSInjectionPoints(xml, options.enableAgentVibes);
539
+ xml = ttsResult.content;
540
+ ttsInjected = ttsResult.hadInjection;
541
+ }
542
+
504
543
  // Write compiled XML
505
- fs.writeFileSync(outputPath, result.xml, 'utf8');
544
+ fs.writeFileSync(outputPath, xml, 'utf8');
506
545
 
507
546
  return {
508
547
  ...result,
548
+ xml,
509
549
  outputPath,
510
550
  sourcePath: yamlPath,
551
+ ttsInjected,
511
552
  };
512
553
  }
513
554
 
@@ -46,7 +46,7 @@ function resolvePath(pathStr, context) {
46
46
  }
47
47
 
48
48
  /**
49
- * Discover available agents in the custom agent location
49
+ * Discover available agents in the custom agent location recursively
50
50
  * @param {string} searchPath - Path to search for agents
51
51
  * @returns {Array} List of agent info objects
52
52
  */
@@ -56,35 +56,58 @@ function discoverAgents(searchPath) {
56
56
  }
57
57
 
58
58
  const agents = [];
59
- const entries = fs.readdirSync(searchPath, { withFileTypes: true });
60
59
 
61
- 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,14 +234,16 @@ async function promptInstallQuestions(installConfig, defaults, presetAnswers = {
208
234
  * @param {Object} agentInfo - Agent discovery info
209
235
  * @param {Object} answers - User answers for install_config
210
236
  * @param {string} targetPath - Target installation directory
237
+ * @param {Object} options - Additional options including config
211
238
  * @returns {Object} Installation result
212
239
  */
213
- function installAgent(agentInfo, answers, targetPath) {
240
+ function installAgent(agentInfo, answers, targetPath, options = {}) {
214
241
  // Compile the agent
215
242
  const { xml, metadata, processedYaml } = compileAgent(fs.readFileSync(agentInfo.yamlFile, 'utf8'), answers);
216
243
 
217
244
  // Determine target agent folder name
218
- const agentFolderName = metadata.name ? metadata.name.toLowerCase().replaceAll(/\s+/g, '-') : agentInfo.name;
245
+ // Use the folder name from agentInfo, NOT the persona name from metadata
246
+ const agentFolderName = agentInfo.name;
219
247
 
220
248
  const agentTargetDir = path.join(targetPath, agentFolderName);
221
249
 
@@ -237,11 +265,27 @@ function installAgent(agentInfo, answers, targetPath) {
237
265
  sidecarCopied: false,
238
266
  };
239
267
 
240
- // Copy sidecar files for expert agents
241
- if (agentInfo.hasSidecar && agentInfo.type === 'expert') {
242
- const sidecarFiles = copySidecarFiles(agentInfo.path, agentTargetDir, agentInfo.yamlFile);
268
+ // Handle sidecar files for agents with hasSidecar flag
269
+ if (agentInfo.hasSidecar === true && agentInfo.type === 'expert') {
270
+ // Get agent sidecar folder from config or use default
271
+ const agentSidecarFolder = options.config?.agent_sidecar_folder || '{project-root}/.myagent-data';
272
+
273
+ // Resolve path variables
274
+ const resolvedSidecarFolder = agentSidecarFolder
275
+ .replaceAll('{project-root}', options.projectRoot || process.cwd())
276
+ .replaceAll('{bmad_folder}', options.bmadFolder || '.bmad');
277
+
278
+ // Create sidecar directory for this agent
279
+ const agentSidecarDir = path.join(resolvedSidecarFolder, agentFolderName);
280
+ if (!fs.existsSync(agentSidecarDir)) {
281
+ fs.mkdirSync(agentSidecarDir, { recursive: true });
282
+ }
283
+
284
+ // Find and copy sidecar folder
285
+ const sidecarFiles = copyAgentSidecarFiles(agentInfo.path, agentSidecarDir, agentInfo.yamlFile);
243
286
  result.sidecarCopied = true;
244
287
  result.sidecarFiles = sidecarFiles;
288
+ result.sidecarDir = agentSidecarDir;
245
289
  }
246
290
 
247
291
  return result;
@@ -285,6 +329,62 @@ function copySidecarFiles(sourceDir, targetDir, excludeYaml) {
285
329
  return copied;
286
330
  }
287
331
 
332
+ /**
333
+ * Find and copy agent sidecar folders
334
+ * @param {string} sourceDir - Source agent directory
335
+ * @param {string} targetSidecarDir - Target sidecar directory for the agent
336
+ * @param {string} excludeYaml - The .agent.yaml file to exclude
337
+ * @returns {Array} List of copied files
338
+ */
339
+ function copyAgentSidecarFiles(sourceDir, targetSidecarDir, excludeYaml) {
340
+ const copied = [];
341
+ const preserved = [];
342
+
343
+ // Find folders with "sidecar" in the name
344
+ const entries = fs.readdirSync(sourceDir, { withFileTypes: true });
345
+
346
+ for (const entry of entries) {
347
+ if (entry.isDirectory() && entry.name.toLowerCase().includes('sidecar')) {
348
+ const sidecarSourcePath = path.join(sourceDir, entry.name);
349
+
350
+ // Recursively sync the sidecar folder contents (preserve existing, add new)
351
+ function syncSidecarDir(src, dest) {
352
+ if (!fs.existsSync(dest)) {
353
+ fs.mkdirSync(dest, { recursive: true });
354
+ }
355
+
356
+ // Get all files in source
357
+ const sourceEntries = fs.readdirSync(src, { withFileTypes: true });
358
+
359
+ for (const sourceEntry of sourceEntries) {
360
+ const srcPath = path.join(src, sourceEntry.name);
361
+ const destPath = path.join(dest, sourceEntry.name);
362
+
363
+ if (sourceEntry.isDirectory()) {
364
+ // Recursively sync subdirectories
365
+ syncSidecarDir(srcPath, destPath);
366
+ } else {
367
+ // Check if file already exists in destination
368
+ if (fs.existsSync(destPath)) {
369
+ // File exists - preserve it
370
+ preserved.push(destPath);
371
+ } else {
372
+ // File doesn't exist - copy it
373
+ fs.copyFileSync(srcPath, destPath);
374
+ copied.push(destPath);
375
+ }
376
+ }
377
+ }
378
+ }
379
+
380
+ syncSidecarDir(sidecarSourcePath, targetSidecarDir);
381
+ }
382
+ }
383
+
384
+ // Return info about what was preserved and what was copied
385
+ return { copied, preserved };
386
+ }
387
+
288
388
  /**
289
389
  * Update agent metadata ID to reflect installed location
290
390
  * @param {string} compiledContent - Compiled XML content
@@ -721,6 +821,7 @@ module.exports = {
721
821
  promptInstallQuestions,
722
822
  installAgent,
723
823
  copySidecarFiles,
824
+ copyAgentSidecarFiles,
724
825
  updateAgentId,
725
826
  detectBmadProject,
726
827
  addToManifest,
@@ -3,6 +3,7 @@ const boxen = require('boxen');
3
3
  const wrapAnsi = require('wrap-ansi');
4
4
  const figlet = require('figlet');
5
5
  const path = require('node:path');
6
+ const os = require('node:os');
6
7
 
7
8
  const CLIUtils = {
8
9
  /**
@@ -84,8 +85,8 @@ const CLIUtils = {
84
85
  /**
85
86
  * Display module configuration header
86
87
  * @param {string} moduleName - Module name (fallback if no custom header)
87
- * @param {string} header - Custom header from install-config.yaml
88
- * @param {string} subheader - Custom subheader from install-config.yaml
88
+ * @param {string} header - Custom header from module.yaml
89
+ * @param {string} subheader - Custom subheader from module.yaml
89
90
  */
90
91
  displayModuleConfigHeader(moduleName, header = null, subheader = null) {
91
92
  // Simple blue banner with custom header/subheader if provided
@@ -100,8 +101,8 @@ const CLIUtils = {
100
101
  /**
101
102
  * Display module with no custom configuration
102
103
  * @param {string} moduleName - Module name (fallback if no custom header)
103
- * @param {string} header - Custom header from install-config.yaml
104
- * @param {string} subheader - Custom subheader from install-config.yaml
104
+ * @param {string} header - Custom header from module.yaml
105
+ * @param {string} subheader - Custom subheader from module.yaml
105
106
  */
106
107
  displayModuleNoConfig(moduleName, header = null, subheader = null) {
107
108
  // Show full banner with header/subheader, just like modules with config
@@ -205,6 +206,22 @@ const CLIUtils = {
205
206
  // No longer clear screen or show boxes - just a simple completion message
206
207
  // This is deprecated but kept for backwards compatibility
207
208
  },
209
+
210
+ /**
211
+ * Expand path with ~ expansion
212
+ * @param {string} inputPath - Path to expand
213
+ * @returns {string} Expanded path
214
+ */
215
+ expandPath(inputPath) {
216
+ if (!inputPath) return inputPath;
217
+
218
+ // Expand ~ to home directory
219
+ if (inputPath.startsWith('~')) {
220
+ return path.join(os.homedir(), inputPath.slice(1));
221
+ }
222
+
223
+ return inputPath;
224
+ },
208
225
  };
209
226
 
210
227
  module.exports = { CLIUtils };
@@ -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