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

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 (512) hide show
  1. package/.coderabbit.yaml +8 -4
  2. package/.github/scripts/discord-helpers.sh +21 -2
  3. package/.github/workflows/discord.yaml +31 -7
  4. package/.github/workflows/manual-release.yaml +12 -42
  5. package/.markdownlint-cli2.yaml +2 -2
  6. package/.prettierignore +2 -2
  7. package/.vscode/settings.json +1 -1
  8. package/CHANGELOG.md +126 -1
  9. package/LICENSE +1 -1
  10. package/README.md +29 -2
  11. package/docs/agent-customization-guide.md +10 -10
  12. package/docs/custom-content-installation.md +100 -196
  13. package/docs/custom-content.md +122 -0
  14. package/docs/ide-info/crush.md +1 -1
  15. package/docs/ide-info/cursor.md +7 -7
  16. package/docs/ide-info/iflow.md +3 -3
  17. package/docs/ide-info/opencode.md +1 -1
  18. package/docs/ide-info/rovo-dev.md +1 -1
  19. package/docs/index.md +2 -2
  20. package/docs/installers-bundlers/ide-injections.md +2 -2
  21. package/docs/installers-bundlers/installers-modules-platforms-reference.md +25 -25
  22. package/docs/sample-custom-modules/README.md +11 -0
  23. package/docs/sample-custom-modules/sample-unitary-module/README.md +8 -0
  24. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/commit-poet/commit-poet.agent.yaml +1 -1
  25. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith.agent.yaml +14 -14
  26. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/module.yaml +5 -1
  27. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-01-init.md +2 -2
  28. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-02-q1.md +1 -1
  29. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-03-q2.md +1 -1
  30. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-04-q3.md +1 -1
  31. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-05-q4.md +1 -1
  32. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-06-q5.md +1 -1
  33. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-07-q6.md +1 -1
  34. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-08-q7.md +1 -1
  35. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-09-q8.md +1 -1
  36. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-10-q9.md +1 -1
  37. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-11-q10.md +1 -1
  38. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/steps/step-12-results.md +1 -1
  39. package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/workflow.md +1 -1
  40. package/docs/sample-custom-modules/sample-wellness-module/README.md +6 -0
  41. package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/agents/meditation-guide.agent.yaml +37 -39
  42. package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/foo.md +3 -0
  43. package/docs/sample-custom-modules/sample-wellness-module/agents/wellness-companion/wellness-companion-sidecar/addition1.md +1 -0
  44. package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/agents/wellness-companion/wellness-companion.agent.yaml +8 -13
  45. package/docs/sample-custom-modules/sample-wellness-module/module.yaml +17 -0
  46. package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/workflows/wellness-journal/workflow.md +3 -3
  47. package/docs/v4-to-v6-upgrade.md +27 -27
  48. package/docs/web-bundles-gemini-gpt-guide.md +6 -458
  49. package/eslint.config.mjs +2 -2
  50. package/package.json +1 -1
  51. package/src/core/agents/bmad-master.agent.yaml +6 -11
  52. package/src/core/module.yaml +10 -24
  53. package/src/core/resources/excalidraw/README.md +6 -6
  54. package/src/core/tasks/advanced-elicitation.xml +3 -3
  55. package/src/core/tasks/index-docs.xml +1 -1
  56. package/src/core/tasks/validate-workflow.xml +1 -1
  57. package/src/core/tasks/workflow.xml +4 -4
  58. package/src/core/tools/shard-doc.xml +12 -12
  59. package/src/core/workflows/brainstorming/workflow.md +3 -3
  60. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +2 -2
  61. package/src/core/workflows/party-mode/workflow.md +4 -4
  62. package/src/modules/bmb/agents/bmad-builder.agent.yaml +15 -15
  63. package/src/modules/bmb/{README.md → docs/README.md} +15 -27
  64. package/src/modules/bmb/docs/agents/agent-compilation.md +3 -3
  65. package/src/modules/bmb/docs/agents/agent-menu-patterns.md +23 -24
  66. package/src/modules/bmb/docs/agents/expert-agent-architecture.md +21 -22
  67. package/src/modules/bmb/docs/agents/index.md +1 -1
  68. package/src/modules/bmb/docs/agents/simple-agent-architecture.md +17 -52
  69. package/src/modules/bmb/docs/agents/understanding-agent-types.md +6 -6
  70. package/src/modules/bmb/docs/workflows/architecture.md +1 -1
  71. package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +3 -3
  72. package/src/modules/bmb/docs/workflows/templates/step-01-init-continuable-template.md +1 -1
  73. package/src/modules/bmb/docs/workflows/templates/step-1b-template.md +1 -1
  74. package/src/modules/bmb/docs/workflows/templates/step-file.md +3 -3
  75. package/src/modules/bmb/docs/workflows/templates/step-template.md +3 -3
  76. package/src/modules/bmb/docs/workflows/templates/workflow-template.md +2 -2
  77. package/src/modules/bmb/docs/workflows/templates/workflow.md +1 -1
  78. package/src/modules/bmb/module.yaml +6 -16
  79. package/src/modules/bmb/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +7 -7
  80. package/src/modules/bmb/reference/agents/module-examples/README.md +3 -4
  81. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +5 -5
  82. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  83. package/src/modules/bmb/reference/agents/simple-examples/README.md +1 -1
  84. package/src/modules/bmb/reference/agents/simple-examples/commit-poet.agent.yaml +1 -1
  85. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
  86. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
  87. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
  88. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
  89. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
  90. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
  91. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
  92. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  93. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +1 -3
  94. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +6 -6
  95. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +7 -7
  96. package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +1 -1
  97. package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +1 -1
  98. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +1 -1
  99. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +1 -1
  100. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +3 -3
  101. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +3 -3
  102. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +5 -5
  103. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +5 -5
  104. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +5 -5
  105. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +2 -2
  106. package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +5 -5
  107. package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +5 -5
  108. package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +7 -11
  109. package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +7 -7
  110. package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +10 -10
  111. package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +7 -6
  112. package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +20 -58
  113. package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +6 -6
  114. package/src/modules/bmb/workflows/create-agent/steps/{step-11-celebrate.md → step-08-celebrate.md} +3 -7
  115. package/src/modules/bmb/workflows/create-agent/templates/agent-plan.template.md +3 -0
  116. package/src/modules/bmb/workflows/create-agent/templates/expert-agent.template.md +364 -0
  117. package/src/modules/bmb/workflows/create-agent/templates/simple-agent.template.md +257 -0
  118. package/src/modules/bmb/workflows/create-agent/workflow.md +2 -35
  119. package/src/modules/bmb/workflows/create-module/steps/step-01-init.md +4 -4
  120. package/src/modules/bmb/workflows/create-module/steps/step-01b-continue.md +2 -2
  121. package/src/modules/bmb/workflows/create-module/steps/step-02-concept.md +5 -5
  122. package/src/modules/bmb/workflows/create-module/steps/step-03-components.md +5 -5
  123. package/src/modules/bmb/workflows/create-module/steps/step-04-structure.md +6 -6
  124. package/src/modules/bmb/workflows/create-module/steps/step-05-config.md +5 -5
  125. package/src/modules/bmb/workflows/create-module/steps/step-06-agents.md +9 -9
  126. package/src/modules/bmb/workflows/create-module/steps/step-07-workflows.md +5 -5
  127. package/src/modules/bmb/workflows/create-module/steps/step-08-installer.md +8 -8
  128. package/src/modules/bmb/workflows/create-module/steps/step-09-documentation.md +7 -7
  129. package/src/modules/bmb/workflows/create-module/steps/step-10-roadmap.md +7 -7
  130. package/src/modules/bmb/workflows/create-module/steps/step-11-validate.md +6 -6
  131. package/src/modules/bmb/workflows/create-module/templates/agent.template.md +15 -19
  132. package/src/modules/bmb/workflows/create-module/templates/module.template.yaml +1 -1
  133. package/src/modules/bmb/workflows/create-module/workflow.md +3 -3
  134. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +4 -4
  135. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +6 -6
  136. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-configuration.md +5 -5
  137. package/src/modules/bmb/workflows/create-workflow/steps/step-04-plan-review.md +4 -4
  138. package/src/modules/bmb/workflows/create-workflow/steps/step-05-output-format-design.md +4 -4
  139. package/src/modules/bmb/workflows/create-workflow/steps/step-06-design.md +11 -11
  140. package/src/modules/bmb/workflows/create-workflow/steps/step-07-build.md +14 -14
  141. package/src/modules/bmb/workflows/create-workflow/steps/step-08-review.md +4 -4
  142. package/src/modules/bmb/workflows/create-workflow/steps/step-09-complete.md +2 -2
  143. package/src/modules/bmb/workflows/create-workflow/workflow.md +2 -2
  144. package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +3 -3
  145. package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +13 -13
  146. package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +5 -5
  147. package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +3 -3
  148. package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +5 -5
  149. package/src/modules/bmb/workflows/edit-agent/workflow.md +1 -1
  150. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +4 -4
  151. package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +3 -3
  152. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +6 -6
  153. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +3 -3
  154. package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +3 -3
  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 +3 -3
  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 +6 -6
  159. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +4 -4
  160. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +4 -4
  161. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +4 -4
  162. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +4 -4
  163. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +3 -3
  164. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +1 -1
  165. package/src/modules/bmb/workflows-legacy/edit-module/README.md +1 -17
  166. package/src/modules/bmb/workflows-legacy/edit-module/checklist.md +3 -4
  167. package/src/modules/bmb/workflows-legacy/edit-module/instructions.md +4 -5
  168. package/src/modules/bmb/workflows-legacy/edit-module/workflow.yaml +10 -10
  169. package/src/modules/bmb/workflows-legacy/module-brief/README.md +2 -2
  170. package/src/modules/bmb/workflows-legacy/module-brief/instructions.md +2 -2
  171. package/src/modules/bmb/workflows-legacy/module-brief/workflow.yaml +4 -4
  172. package/src/modules/bmgd/README.md +1 -1
  173. package/src/modules/bmgd/agents/game-architect.agent.yaml +6 -6
  174. package/src/modules/bmgd/agents/game-designer.agent.yaml +7 -7
  175. package/src/modules/bmgd/agents/game-dev.agent.yaml +10 -10
  176. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +21 -21
  177. package/src/modules/bmgd/module.yaml +2 -8
  178. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
  179. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +9 -9
  180. package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
  181. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +8 -8
  182. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +4 -4
  183. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
  184. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -1
  185. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
  186. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +1 -1
  187. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
  188. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +4 -4
  189. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +2 -2
  190. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
  191. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +2 -2
  192. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +2 -2
  193. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +2 -2
  194. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +2 -2
  195. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +2 -2
  196. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +2 -2
  197. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +1 -1
  198. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +2 -2
  199. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +2 -2
  200. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +2 -2
  201. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +3 -3
  202. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +2 -2
  203. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +2 -2
  204. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +1 -1
  205. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +2 -2
  206. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +2 -2
  207. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +2 -2
  208. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
  209. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +2 -2
  210. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +1 -1
  211. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +2 -2
  212. package/src/modules/bmm/README.md +1 -1
  213. package/src/modules/bmm/agents/analyst.agent.yaml +9 -9
  214. package/src/modules/bmm/agents/architect.agent.yaml +8 -8
  215. package/src/modules/bmm/agents/dev.agent.yaml +5 -5
  216. package/src/modules/bmm/agents/pm.agent.yaml +8 -8
  217. package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +5 -5
  218. package/src/modules/bmm/agents/sm.agent.yaml +11 -11
  219. package/src/modules/bmm/agents/tea.agent.yaml +13 -13
  220. package/src/modules/bmm/agents/tech-writer.agent.yaml +9 -9
  221. package/src/modules/bmm/agents/ux-designer.agent.yaml +6 -6
  222. package/src/modules/bmm/docs/README.md +0 -25
  223. package/src/modules/bmm/docs/agents-guide.md +16 -14
  224. package/src/modules/bmm/docs/brownfield-guide.md +6 -6
  225. package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
  226. package/src/modules/bmm/docs/faq.md +5 -18
  227. package/src/modules/bmm/docs/glossary.md +3 -4
  228. package/src/modules/bmm/docs/images/README.md +1 -1
  229. package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +8 -8
  230. package/src/modules/bmm/docs/party-mode.md +3 -3
  231. package/src/modules/bmm/docs/quick-flow-solo-dev.md +5 -5
  232. package/src/modules/bmm/docs/quick-spec-flow.md +2 -16
  233. package/src/modules/bmm/docs/quick-start.md +3 -3
  234. package/src/modules/bmm/docs/test-architecture.md +15 -23
  235. package/src/modules/bmm/docs/troubleshooting.md +6 -25
  236. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  237. package/src/modules/bmm/docs/workflows-implementation.md +3 -104
  238. package/src/modules/bmm/module.yaml +25 -24
  239. package/src/modules/bmm/testarch/knowledge/overview.md +0 -1
  240. package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-01-init.md +1 -1
  241. package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-01b-continue.md +1 -1
  242. package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-02-vision.md +3 -3
  243. package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-03-users.md +3 -3
  244. package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-04-metrics.md +3 -3
  245. package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-05-scope.md +3 -3
  246. package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/steps/step-06-complete.md +5 -3
  247. package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/workflow.md +2 -2
  248. package/src/modules/bmm/workflows/1-analysis/research/workflow.md +2 -2
  249. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +4 -4
  250. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +4 -4
  251. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +4 -4
  252. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +4 -4
  253. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +4 -4
  254. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +4 -4
  255. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +4 -4
  256. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +4 -4
  257. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +4 -4
  258. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +4 -4
  259. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +4 -4
  260. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +4 -4
  261. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +2 -2
  262. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +1 -1
  263. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +1 -1
  264. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +3 -3
  265. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +7 -7
  266. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +8 -8
  267. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +12 -12
  268. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +12 -12
  269. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +10 -10
  270. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +7 -7
  271. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +9 -9
  272. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +9 -9
  273. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +1 -1
  274. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +2 -2
  275. package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-01-document-discovery.md +1 -1
  276. package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-02-prd-analysis.md +1 -1
  277. package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-03-epic-coverage-validation.md +6 -6
  278. package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-04-ux-alignment.md +1 -1
  279. package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-05-epic-quality-review.md +2 -2
  280. package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/steps/step-06-final-assessment.md +1 -1
  281. package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/workflow.md +1 -1
  282. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-01-init.md +1 -1
  283. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-02-context.md +4 -4
  284. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-03-starter.md +4 -4
  285. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-04-decisions.md +4 -4
  286. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-05-patterns.md +4 -4
  287. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-06-structure.md +4 -4
  288. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-07-validation.md +4 -4
  289. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-08-complete.md +3 -3
  290. package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/workflow.md +2 -2
  291. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +3 -3
  292. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +3 -3
  293. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +3 -3
  294. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +3 -3
  295. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +3 -3
  296. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +4 -3
  297. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +2 -2
  298. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
  299. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +2 -2
  300. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +2 -2
  301. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +2 -2
  302. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +5 -5
  303. package/src/modules/bmm/workflows/4-implementation/create-story/template.md +3 -5
  304. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +2 -2
  305. package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +2 -2
  306. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +11 -8
  307. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +2 -2
  308. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +3 -3
  309. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +3 -3
  310. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +15 -22
  311. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +4 -5
  312. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -2
  313. package/src/modules/bmm/workflows/4-implementation/sprint-status/instructions.md +90 -35
  314. package/src/modules/bmm/workflows/4-implementation/sprint-status/workflow.yaml +2 -2
  315. package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +5 -5
  316. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +7 -7
  317. package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
  318. package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
  319. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
  320. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
  321. package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/instructions.md +1 -1
  322. package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/workflow.yaml +6 -6
  323. package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/instructions.md +2 -2
  324. package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/workflow.yaml +6 -6
  325. package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/instructions.md +2 -2
  326. package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/workflow.yaml +6 -6
  327. package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/instructions.md +1 -1
  328. package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/workflow.yaml +6 -6
  329. package/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +2 -2
  330. package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +3 -3
  331. package/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +2 -2
  332. package/src/modules/bmm/workflows/generate-project-context/workflow.md +5 -5
  333. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
  334. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
  335. package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
  336. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
  337. package/src/modules/bmm/workflows/testarch/ci/instructions.md +1 -1
  338. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
  339. package/src/modules/bmm/workflows/testarch/framework/instructions.md +3 -3
  340. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
  341. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
  342. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
  343. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +3 -3
  344. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +1 -1
  345. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +10 -4
  346. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  347. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
  348. package/src/modules/bmm/workflows/testarch/trace/instructions.md +6 -6
  349. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
  350. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +1 -1
  351. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +4 -4
  352. package/src/modules/bmm/workflows/workflow-status/instructions.md +3 -3
  353. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
  354. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
  355. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +4 -4
  356. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +4 -4
  357. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +4 -4
  358. package/src/modules/cis/agents/innovation-strategist.agent.yaml +4 -4
  359. package/src/modules/cis/agents/presentation-master.agent.yaml +3 -3
  360. package/src/modules/cis/agents/storyteller/storyteller-sidecar/stories-told.md +7 -0
  361. package/src/modules/cis/agents/storyteller/storyteller-sidecar/story-preferences.md +7 -0
  362. package/src/modules/cis/agents/{storyteller.agent.yaml → storyteller/storyteller.agent.yaml} +9 -4
  363. package/src/modules/cis/module.yaml +3 -8
  364. package/src/modules/cis/{README.md → readme.md} +1 -1
  365. package/src/modules/cis/workflows/README.md +1 -1
  366. package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
  367. package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
  368. package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
  369. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
  370. package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
  371. package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
  372. package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
  373. package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
  374. package/src/utility/agent-components/activation-rules.txt +7 -0
  375. package/src/utility/agent-components/activation-steps.txt +13 -0
  376. package/src/utility/agent-components/agent-command-header.md +1 -0
  377. package/src/utility/{templates → agent-components}/agent.customize.template.yaml +0 -1
  378. package/src/utility/agent-components/handler-action.txt +4 -0
  379. package/src/utility/agent-components/handler-exec.txt +6 -0
  380. package/src/utility/agent-components/handler-multi.txt +14 -0
  381. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  382. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  383. package/src/utility/agent-components/handler-workflow.txt +10 -0
  384. package/src/utility/agent-components/menu-handlers.txt +6 -0
  385. package/test/README.md +1 -1
  386. package/test/test-agent-schema.js +2 -2
  387. package/tools/cli/README.md +1 -607
  388. package/tools/cli/commands/build.js +7 -7
  389. package/tools/cli/commands/install.js +9 -20
  390. package/tools/cli/commands/list.js +13 -1
  391. package/tools/cli/installers/lib/core/config-collector.js +243 -73
  392. package/tools/cli/installers/lib/core/custom-module-cache.js +36 -16
  393. package/tools/cli/installers/lib/core/dependency-resolver.js +2 -2
  394. package/tools/cli/installers/lib/core/detector.js +16 -16
  395. package/tools/cli/installers/lib/core/ide-config-manager.js +9 -7
  396. package/tools/cli/installers/lib/core/installer.js +595 -1006
  397. package/tools/cli/installers/lib/core/manifest-generator.js +43 -40
  398. package/tools/cli/installers/lib/core/manifest.js +23 -20
  399. package/tools/cli/installers/lib/custom/handler.js +16 -49
  400. package/tools/cli/installers/lib/ide/_base-ide.js +26 -33
  401. package/tools/cli/installers/lib/ide/antigravity.js +3 -3
  402. package/tools/cli/installers/lib/ide/claude-code.js +3 -3
  403. package/tools/cli/installers/lib/ide/codex.js +2 -2
  404. package/tools/cli/installers/lib/ide/gemini.js +6 -6
  405. package/tools/cli/installers/lib/ide/kiro-cli.js +2 -2
  406. package/tools/cli/installers/lib/ide/opencode.js +2 -2
  407. package/tools/cli/installers/lib/ide/roo.js +15 -5
  408. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +2 -2
  409. package/tools/cli/installers/lib/ide/shared/module-injections.js +2 -2
  410. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +2 -2
  411. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +4 -4
  412. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  413. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +3 -3
  414. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +3 -3
  415. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +1 -1
  416. package/tools/cli/installers/lib/modules/manager.js +304 -313
  417. package/tools/cli/lib/activation-builder.js +8 -13
  418. package/tools/cli/lib/agent/compiler.js +68 -168
  419. package/tools/cli/lib/agent/installer.js +8 -128
  420. package/tools/cli/lib/agent-analyzer.js +2 -2
  421. package/tools/cli/lib/agent-party-generator.js +5 -17
  422. package/tools/cli/lib/config.js +2 -2
  423. package/tools/cli/lib/platform-codes.js +2 -2
  424. package/tools/cli/lib/ui.js +610 -551
  425. package/tools/cli/lib/xml-handler.js +3 -55
  426. package/tools/cli/lib/yaml-format.js +4 -6
  427. package/tools/cli/lib/yaml-xml-builder.js +14 -26
  428. package/tools/flattener/ignoreRules.js +1 -1
  429. package/tools/flattener/xml.js +1 -7
  430. package/tools/lib/xml-utils.js +13 -0
  431. package/tools/migrate-custom-module-paths.js +2 -2
  432. package/tools/validate-agent-schema.js +2 -2
  433. package/docs/v6-open-items.md +0 -17
  434. package/example-custom-content/README.md +0 -8
  435. package/example-custom-module/mwm/README.md +0 -9
  436. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/cognitive-distortions.md +0 -47
  437. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach-sidecar/thought-records.md +0 -17
  438. package/example-custom-module/mwm/agents/cbt-coach/cbt-coach.agent.yaml +0 -151
  439. package/example-custom-module/mwm/agents/crisis-navigator.agent.yaml +0 -138
  440. package/example-custom-module/mwm/module.yaml +0 -28
  441. package/example-custom-module/mwm/workflows/cbt-thought-record/README.md +0 -31
  442. package/example-custom-module/mwm/workflows/cbt-thought-record/workflow.md +0 -45
  443. package/example-custom-module/mwm/workflows/crisis-support/README.md +0 -31
  444. package/example-custom-module/mwm/workflows/crisis-support/workflow.md +0 -45
  445. package/src/core/agents/bmad-web-orchestrator.agent.xml +0 -113
  446. package/src/modules/bmb/_module-installer/installer.js +0 -76
  447. package/src/modules/bmb/docs/agents/module-agent-architecture.md +0 -367
  448. package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +0 -179
  449. package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +0 -197
  450. package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +0 -180
  451. package/src/modules/bmb/workflows/create-agent/templates/agent_commands.md +0 -21
  452. package/src/modules/bmb/workflows/create-agent/templates/agent_persona.md +0 -25
  453. package/src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md +0 -23
  454. package/src/modules/bmm/tasks/daily-standup.xml +0 -85
  455. package/src/modules/cis/agents/README.md +0 -104
  456. package/src/utility/models/action-command-header.md +0 -0
  457. package/src/utility/models/agent-activation-ide.xml +0 -51
  458. package/src/utility/models/agent-activation-web.xml +0 -50
  459. package/src/utility/models/agent-command-header.md +0 -1
  460. package/src/utility/models/agent-config-template.md +0 -23
  461. package/src/utility/models/agent-in-team-activation.xml +0 -3
  462. package/src/utility/models/fragments/activation-rules.xml +0 -7
  463. package/src/utility/models/fragments/activation-steps.xml +0 -16
  464. package/src/utility/models/fragments/handler-action.xml +0 -4
  465. package/src/utility/models/fragments/handler-exec.xml +0 -6
  466. package/src/utility/models/fragments/handler-multi.xml +0 -14
  467. package/src/utility/models/fragments/handler-tmpl.xml +0 -5
  468. package/src/utility/models/fragments/handler-validate-workflow.xml +0 -7
  469. package/src/utility/models/fragments/handler-workflow.xml +0 -9
  470. package/src/utility/models/fragments/menu-handlers.xml +0 -6
  471. package/src/utility/models/fragments/web-bundle-activation-steps.xml +0 -32
  472. package/tools/cli/bundlers/bundle-web.js +0 -179
  473. package/tools/cli/bundlers/test-analyst.js +0 -28
  474. package/tools/cli/bundlers/test-bundler.js +0 -118
  475. package/tools/cli/bundlers/web-bundler.js +0 -1764
  476. package/tools/cli/installers/lib/core/post-install-sidecar-replacement.js +0 -79
  477. package/tools/cli/lib/replace-project-root.js +0 -239
  478. package/tools/cli/regenerate-manifests.js +0 -28
  479. package/tools/cli/test-yaml-builder.js +0 -43
  480. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith-sidecar/instructions.md +0 -0
  481. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +0 -0
  482. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +0 -0
  483. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +0 -0
  484. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +0 -0
  485. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +0 -0
  486. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +0 -0
  487. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/agents/toolsmith/toolsmith-sidecar/memories.md +0 -0
  488. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/quiz-master/templates/csv-headers.template +0 -0
  489. /package/{example-custom-content → docs/sample-custom-modules/sample-unitary-module}/workflows/wassup/workflow.md +0 -0
  490. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/agents/wellness-companion/wellness-companion-sidecar/insights.md +0 -0
  491. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/agents/wellness-companion/wellness-companion-sidecar/instructions.md +0 -0
  492. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/agents/wellness-companion/wellness-companion-sidecar/memories.md +0 -0
  493. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/agents/wellness-companion/wellness-companion-sidecar/patterns.md +0 -0
  494. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/workflows/daily-checkin/README.md +0 -0
  495. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/workflows/daily-checkin/workflow.md +0 -0
  496. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/workflows/guided-meditation/README.md +0 -0
  497. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/workflows/guided-meditation/workflow.md +0 -0
  498. /package/{example-custom-module/mwm → docs/sample-custom-modules/sample-wellness-module}/workflows/wellness-journal/README.md +0 -0
  499. /package/src/modules/bmgd/workflows/4-production/code-review/{backlog_template.md → backlog-template.md} +0 -0
  500. /package/src/modules/bmm/workflows/1-analysis/{product-brief → create-product-brief}/product-brief.template.md +0 -0
  501. /package/src/modules/bmm/workflows/3-solutioning/{implementation-readiness → check-implementation-readiness}/templates/readiness-report-template.md +0 -0
  502. /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/architecture-decision-template.md +0 -0
  503. /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/data/domain-complexity.csv +0 -0
  504. /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/data/project-types.csv +0 -0
  505. /package/src/modules/bmm/workflows/3-solutioning/{architecture → create-architecture}/steps/step-01b-continue.md +0 -0
  506. /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/_shared/excalidraw-library.json +0 -0
  507. /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/_shared/excalidraw-templates.yaml +0 -0
  508. /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-dataflow/checklist.md +0 -0
  509. /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-diagram/checklist.md +0 -0
  510. /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-flowchart/checklist.md +0 -0
  511. /package/src/modules/bmm/workflows/{diagrams → excalidraw-diagrams}/create-wireframe/checklist.md +0 -0
  512. /package/src/utility/{models/fragments/handler-data.xml → agent-components/handler-data.txt} +0 -0
@@ -21,29 +21,20 @@ module.exports = {
21
21
  return;
22
22
  }
23
23
 
24
- // Handle agent compilation separately
25
- if (config.actionType === 'compile') {
26
- const result = await installer.compileAgents(config);
27
- console.log(chalk.green('\n✨ Agent compilation complete!'));
28
- console.log(chalk.cyan(`Rebuilt ${result.agentCount} agents and ${result.taskCount} tasks`));
29
- process.exit(0);
30
- return;
31
- }
32
-
33
24
  // Handle quick update separately
34
25
  if (config.actionType === 'quick-update') {
35
26
  const result = await installer.quickUpdate(config);
36
27
  console.log(chalk.green('\n✨ Quick update complete!'));
37
28
  console.log(chalk.cyan(`Updated ${result.moduleCount} modules with preserved settings`));
29
+ console.log(
30
+ chalk.magenta(
31
+ "\n📋 Want to see what's new? Check out the changelog: https://github.com/bmad-code-org/BMAD-METHOD/blob/main/CHANGELOG.md",
32
+ ),
33
+ );
38
34
  process.exit(0);
39
35
  return;
40
36
  }
41
37
 
42
- // Handle reinstall by setting force flag
43
- if (config.actionType === 'reinstall') {
44
- config._requestedReinstall = true;
45
- }
46
-
47
38
  // Regular install/update flow
48
39
  const result = await installer.install(config);
49
40
 
@@ -55,14 +46,11 @@ module.exports = {
55
46
 
56
47
  // Check if installation succeeded
57
48
  if (result && result.success) {
58
- console.log(chalk.green('\n✨ Installation complete!'));
59
- console.log(chalk.cyan('BMAD Core and Selected Modules have been installed to:'), chalk.bold(result.path));
60
- console.log(chalk.yellow('\nThank you for helping test the early release version of the new BMad Core and BMad Method!'));
61
- console.log(chalk.cyan('Stable Beta coming soon - please read the full README.md and linked documentation to get started!'));
62
-
63
49
  // Run AgentVibes installer if needed
64
50
  if (result.needsAgentVibes) {
65
- console.log(chalk.magenta('\n🎙️ AgentVibes TTS Setup'));
51
+ // Add some spacing before AgentVibes setup
52
+ console.log('');
53
+ console.log(chalk.magenta('🎙️ AgentVibes TTS Setup'));
66
54
  console.log(chalk.cyan('AgentVibes provides voice synthesis for BMAD agents with:'));
67
55
  console.log(chalk.dim(' • ElevenLabs AI (150+ premium voices)'));
68
56
  console.log(chalk.dim(' • Piper TTS (50+ free voices)\n'));
@@ -91,6 +79,7 @@ module.exports = {
91
79
  shell: true,
92
80
  });
93
81
  console.log(chalk.green('\n✓ AgentVibes installation complete'));
82
+ console.log(chalk.cyan('\n✨ BMAD with TTS is ready to use!'));
94
83
  } catch {
95
84
  console.log(chalk.yellow('\n⚠ AgentVibes installation was interrupted or failed'));
96
85
  console.log(chalk.cyan('You can run it manually later with:'));
@@ -9,7 +9,9 @@ module.exports = {
9
9
  options: [],
10
10
  action: async () => {
11
11
  try {
12
- const modules = await installer.getAvailableModules();
12
+ const result = await installer.getAvailableModules();
13
+ const { modules, customModules } = result;
14
+
13
15
  console.log(chalk.cyan('\n📦 Available BMAD Modules:\n'));
14
16
 
15
17
  for (const module of modules) {
@@ -19,6 +21,16 @@ module.exports = {
19
21
  console.log();
20
22
  }
21
23
 
24
+ if (customModules && customModules.length > 0) {
25
+ console.log(chalk.cyan('\n🔧 Custom Modules:\n'));
26
+ for (const module of customModules) {
27
+ console.log(chalk.bold(` ${module.id}`));
28
+ console.log(chalk.dim(` ${module.description}`));
29
+ console.log(chalk.dim(` Version: ${module.version}`));
30
+ console.log();
31
+ }
32
+ }
33
+
22
34
  process.exit(0);
23
35
  } catch (error) {
24
36
  console.error(chalk.red('Error:'), error.message);
@@ -1,6 +1,6 @@
1
1
  const path = require('node:path');
2
2
  const fs = require('fs-extra');
3
- const yaml = require('js-yaml');
3
+ const yaml = require('yaml');
4
4
  const chalk = require('chalk');
5
5
  const inquirer = require('inquirer');
6
6
  const { getProjectRoot, getModulePath } = require('../../../lib/project-root');
@@ -15,7 +15,7 @@ class ConfigCollector {
15
15
 
16
16
  /**
17
17
  * Find the bmad installation directory in a project
18
- * V6+ installations can use ANY folder name but ALWAYS have _cfg/manifest.yaml
18
+ * V6+ installations can use ANY folder name but ALWAYS have _config/manifest.yaml
19
19
  * @param {string} projectDir - Project directory
20
20
  * @returns {Promise<string>} Path to bmad directory
21
21
  */
@@ -26,13 +26,13 @@ class ConfigCollector {
26
26
  return path.join(projectDir, 'bmad');
27
27
  }
28
28
 
29
- // V6+ strategy: Look for ANY directory with _cfg/manifest.yaml
29
+ // V6+ strategy: Look for ANY directory with _config/manifest.yaml
30
30
  // This is the definitive marker of a V6+ installation
31
31
  try {
32
32
  const entries = await fs.readdir(projectDir, { withFileTypes: true });
33
33
  for (const entry of entries) {
34
34
  if (entry.isDirectory()) {
35
- const manifestPath = path.join(projectDir, entry.name, '_cfg', 'manifest.yaml');
35
+ const manifestPath = path.join(projectDir, entry.name, '_config', 'manifest.yaml');
36
36
  if (await fs.pathExists(manifestPath)) {
37
37
  // Found a V6+ installation
38
38
  return path.join(projectDir, entry.name);
@@ -59,12 +59,12 @@ class ConfigCollector {
59
59
  return null;
60
60
  }
61
61
 
62
- // Look for ANY directory with _cfg/manifest.yaml
62
+ // Look for ANY directory with _config/manifest.yaml
63
63
  try {
64
64
  const entries = await fs.readdir(projectDir, { withFileTypes: true });
65
65
  for (const entry of entries) {
66
66
  if (entry.isDirectory()) {
67
- const manifestPath = path.join(projectDir, entry.name, '_cfg', 'manifest.yaml');
67
+ const manifestPath = path.join(projectDir, entry.name, '_config', 'manifest.yaml');
68
68
  if (await fs.pathExists(manifestPath)) {
69
69
  // Found a V6+ installation, return just the folder name
70
70
  return entry.name;
@@ -105,11 +105,17 @@ class ConfigCollector {
105
105
 
106
106
  for (const entry of entries) {
107
107
  if (entry.isDirectory()) {
108
+ // Skip the _config directory - it's for system use
109
+ if (entry.name === '_config' || entry.name === '_memory') {
110
+ continue;
111
+ }
112
+
108
113
  const moduleConfigPath = path.join(bmadDir, entry.name, 'config.yaml');
114
+
109
115
  if (await fs.pathExists(moduleConfigPath)) {
110
116
  try {
111
117
  const content = await fs.readFile(moduleConfigPath, 'utf8');
112
- const moduleConfig = yaml.load(content);
118
+ const moduleConfig = yaml.parse(content);
113
119
  if (moduleConfig) {
114
120
  this.existingConfig[entry.name] = moduleConfig;
115
121
  foundAny = true;
@@ -121,10 +127,6 @@ class ConfigCollector {
121
127
  }
122
128
  }
123
129
 
124
- if (foundAny) {
125
- console.log(chalk.cyan('\n📋 Found existing BMAD module configurations'));
126
- }
127
-
128
130
  return foundAny;
129
131
  }
130
132
 
@@ -132,8 +134,12 @@ class ConfigCollector {
132
134
  * Collect configuration for all modules
133
135
  * @param {Array} modules - List of modules to configure (including 'core')
134
136
  * @param {string} projectDir - Target project directory
137
+ * @param {Object} options - Additional options
138
+ * @param {Map} options.customModulePaths - Map of module ID to source path for custom modules
135
139
  */
136
- async collectAllConfigurations(modules, projectDir) {
140
+ async collectAllConfigurations(modules, projectDir, options = {}) {
141
+ // Store custom module paths for use in collectModuleConfig
142
+ this.customModulePaths = options.customModulePaths || new Map();
137
143
  await this.loadExistingConfig(projectDir);
138
144
 
139
145
  // Check if core was already collected (e.g., in early collection phase)
@@ -234,7 +240,7 @@ class ConfigCollector {
234
240
  }
235
241
 
236
242
  const configContent = await fs.readFile(configPath, 'utf8');
237
- const moduleConfig = yaml.load(configContent);
243
+ const moduleConfig = yaml.parse(configContent);
238
244
 
239
245
  if (!moduleConfig) {
240
246
  return false;
@@ -244,14 +250,41 @@ class ConfigCollector {
244
250
  const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
245
251
  const existingKeys = this.existingConfig && this.existingConfig[moduleName] ? Object.keys(this.existingConfig[moduleName]) : [];
246
252
 
253
+ // Check if this module has no configuration keys at all (like CIS)
254
+ // Filter out metadata fields and only count actual config objects
255
+ const metadataFields = new Set(['code', 'name', 'header', 'subheader', 'default_selected']);
256
+ const actualConfigKeys = configKeys.filter((key) => !metadataFields.has(key));
257
+ const hasNoConfig = actualConfigKeys.length === 0;
258
+
259
+ // If module has no config keys at all, handle it specially
260
+ if (hasNoConfig && moduleConfig.subheader) {
261
+ // Add blank line for better readability (matches other modules)
262
+ console.log();
263
+ const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
264
+
265
+ // Display the module name in color first (matches other modules)
266
+ console.log(chalk.cyan('?') + ' ' + chalk.magenta(moduleDisplayName));
267
+
268
+ // Show the subheader since there's no configuration to ask about
269
+ console.log(chalk.dim(` ✓ ${moduleConfig.subheader}`));
270
+ return false; // No new fields
271
+ }
272
+
273
+ // Find new interactive fields (with prompt)
247
274
  const newKeys = configKeys.filter((key) => {
248
275
  const item = moduleConfig[key];
249
276
  // Check if it's a config item and doesn't exist in existing config
250
277
  return item && typeof item === 'object' && item.prompt && !existingKeys.includes(key);
251
278
  });
252
279
 
253
- // If in silent mode and no new keys, use existing config and skip prompts
254
- if (silentMode && newKeys.length === 0) {
280
+ // Find new static fields (without prompt, just result)
281
+ const newStaticKeys = configKeys.filter((key) => {
282
+ const item = moduleConfig[key];
283
+ return item && typeof item === 'object' && !item.prompt && item.result && !existingKeys.includes(key);
284
+ });
285
+
286
+ // If in silent mode and no new keys (neither interactive nor static), use existing config and skip prompts
287
+ if (silentMode && newKeys.length === 0 && newStaticKeys.length === 0) {
255
288
  if (this.existingConfig && this.existingConfig[moduleName]) {
256
289
  if (!this.collectedConfig[moduleName]) {
257
290
  this.collectedConfig[moduleName] = {};
@@ -285,14 +318,18 @@ class ConfigCollector {
285
318
  this.allAnswers[`${moduleName}_user_name`] = this.getDefaultUsername();
286
319
  }
287
320
  }
288
- // Show "no config" message for modules with no new questions
289
- CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
290
- return false; // No new fields
291
321
  }
292
322
 
293
- // If we have new fields, build questions first
294
- if (newKeys.length > 0) {
323
+ // Show "no config" message for modules with no new questions (that have config keys)
324
+ console.log(chalk.dim(` ✓ ${moduleName.toUpperCase()} module already up to date`));
325
+ return false; // No new fields
326
+
327
+ // If we have new fields (interactive or static), process them
328
+ if (newKeys.length > 0 || newStaticKeys.length > 0) {
295
329
  const questions = [];
330
+ const staticAnswers = {};
331
+
332
+ // Build questions for interactive fields
296
333
  for (const key of newKeys) {
297
334
  const item = moduleConfig[key];
298
335
  const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
@@ -301,38 +338,49 @@ class ConfigCollector {
301
338
  }
302
339
  }
303
340
 
341
+ // Prepare static answers (no prompt, just result)
342
+ for (const key of newStaticKeys) {
343
+ staticAnswers[`${moduleName}_${key}`] = undefined;
344
+ }
345
+
346
+ // Collect all answers (static + prompted)
347
+ let allAnswers = { ...staticAnswers };
348
+
304
349
  if (questions.length > 0) {
305
350
  // Only show header if we actually have questions
306
351
  CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
307
352
  console.log(); // Line break before questions
308
- const answers = await inquirer.prompt(questions);
309
-
310
- // Store answers for cross-referencing
311
- Object.assign(this.allAnswers, answers);
312
-
313
- // Process answers and build result values
314
- for (const key of Object.keys(answers)) {
315
- const originalKey = key.replace(`${moduleName}_`, '');
316
- const item = moduleConfig[originalKey];
317
- const value = answers[key];
318
-
319
- let result;
320
- if (Array.isArray(value)) {
321
- result = value;
322
- } else if (item.result) {
323
- result = this.processResultTemplate(item.result, value);
324
- } else {
325
- result = value;
326
- }
353
+ const promptedAnswers = await inquirer.prompt(questions);
327
354
 
328
- if (!this.collectedConfig[moduleName]) {
329
- this.collectedConfig[moduleName] = {};
330
- }
331
- this.collectedConfig[moduleName][originalKey] = result;
355
+ // Merge prompted answers with static answers
356
+ Object.assign(allAnswers, promptedAnswers);
357
+ } else if (newStaticKeys.length > 0) {
358
+ // Only static fields, no questions - show no config message
359
+ console.log(chalk.dim(` ✓ ${moduleName.toUpperCase()} module configuration updated`));
360
+ }
361
+
362
+ // Store all answers for cross-referencing
363
+ Object.assign(this.allAnswers, allAnswers);
364
+
365
+ // Process all answers (both static and prompted)
366
+ for (const key of Object.keys(allAnswers)) {
367
+ const originalKey = key.replace(`${moduleName}_`, '');
368
+ const item = moduleConfig[originalKey];
369
+ const value = allAnswers[key];
370
+
371
+ let result;
372
+ if (Array.isArray(value)) {
373
+ result = value;
374
+ } else if (item.result) {
375
+ result = this.processResultTemplate(item.result, value);
376
+ } else {
377
+ result = value;
332
378
  }
333
- } else {
334
- // New keys exist but no questions generated - show no config message
335
- CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
379
+
380
+ if (!this.collectedConfig[moduleName]) {
381
+ this.collectedConfig[moduleName] = {};
382
+ }
383
+ this.collectedConfig[moduleName][originalKey] = result;
336
384
  }
337
385
  }
338
386
 
@@ -349,7 +397,7 @@ class ConfigCollector {
349
397
  }
350
398
  }
351
399
 
352
- return newKeys.length > 0; // Return true if we prompted for new fields
400
+ return newKeys.length > 0 || newStaticKeys.length > 0; // Return true if we had any new fields (interactive or static)
353
401
  }
354
402
 
355
403
  /**
@@ -451,11 +499,21 @@ class ConfigCollector {
451
499
  this.allAnswers = {};
452
500
  }
453
501
  // Load module's config
454
- // First, try the standard src/modules location
455
- let installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'module.yaml');
456
- let moduleConfigPath = path.join(getModulePath(moduleName), 'module.yaml');
502
+ // First, check if we have a custom module path for this module
503
+ let installerConfigPath = null;
504
+ let moduleConfigPath = null;
505
+
506
+ if (this.customModulePaths && this.customModulePaths.has(moduleName)) {
507
+ const customPath = this.customModulePaths.get(moduleName);
508
+ installerConfigPath = path.join(customPath, '_module-installer', 'module.yaml');
509
+ moduleConfigPath = path.join(customPath, 'module.yaml');
510
+ } else {
511
+ // Try the standard src/modules location
512
+ installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'module.yaml');
513
+ moduleConfigPath = path.join(getModulePath(moduleName), 'module.yaml');
514
+ }
457
515
 
458
- // If not found in src/modules, we need to find it by searching the project
516
+ // If not found in src/modules or custom paths, search the project
459
517
  if (!(await fs.pathExists(installerConfigPath)) && !(await fs.pathExists(moduleConfigPath))) {
460
518
  // Use the module manager to find the module source
461
519
  const { ModuleManager } = require('../modules/manager');
@@ -479,7 +537,7 @@ class ConfigCollector {
479
537
  }
480
538
 
481
539
  const configContent = await fs.readFile(configPath, 'utf8');
482
- const moduleConfig = yaml.load(configContent);
540
+ const moduleConfig = yaml.parse(configContent);
483
541
 
484
542
  if (!moduleConfig) {
485
543
  return;
@@ -487,30 +545,91 @@ class ConfigCollector {
487
545
 
488
546
  // Process each config item
489
547
  const questions = [];
548
+ const staticAnswers = {};
490
549
  const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
491
550
 
492
551
  for (const key of configKeys) {
493
552
  const item = moduleConfig[key];
494
553
 
495
554
  // Skip if not a config object
496
- if (!item || typeof item !== 'object' || !item.prompt) {
555
+ if (!item || typeof item !== 'object') {
497
556
  continue;
498
557
  }
499
558
 
500
- const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
501
- if (question) {
502
- questions.push(question);
559
+ // Handle static values (no prompt, just result)
560
+ if (!item.prompt && item.result) {
561
+ // Add to static answers with a marker value
562
+ staticAnswers[`${moduleName}_${key}`] = undefined;
563
+ continue;
564
+ }
565
+
566
+ // Handle interactive values (with prompt)
567
+ if (item.prompt) {
568
+ const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
569
+ if (question) {
570
+ questions.push(question);
571
+ }
503
572
  }
504
573
  }
505
574
 
506
- // Display appropriate header based on whether there are questions
575
+ // Collect all answers (static + prompted)
576
+ let allAnswers = { ...staticAnswers };
577
+
578
+ // If there are questions to ask, prompt for accepting defaults vs customizing
507
579
  if (questions.length > 0) {
508
- CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
509
- console.log(); // Line break before questions
510
- const answers = await inquirer.prompt(questions);
580
+ // Get friendly module name from config or use uppercase module name
581
+ const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
582
+
583
+ // Add blank line for better readability
584
+ console.log();
585
+
586
+ // Display the module name in color first
587
+ console.log(chalk.cyan('?') + ' ' + chalk.magenta(moduleDisplayName));
588
+
589
+ // Ask user if they want to accept defaults or customize on the next line
590
+ const { customize } = await inquirer.prompt([
591
+ {
592
+ type: 'confirm',
593
+ name: 'customize',
594
+ message: 'Accept Defaults (no to customize)?',
595
+ default: true,
596
+ },
597
+ ]);
598
+
599
+ if (customize) {
600
+ // Accept defaults - only ask questions that have NO default value
601
+ const questionsWithoutDefaults = questions.filter((q) => q.default === undefined || q.default === null || q.default === '');
602
+
603
+ if (questionsWithoutDefaults.length > 0) {
604
+ console.log(chalk.dim(`\n Asking required questions for ${moduleName.toUpperCase()}...`));
605
+ const promptedAnswers = await inquirer.prompt(questionsWithoutDefaults);
606
+ Object.assign(allAnswers, promptedAnswers);
607
+ }
608
+
609
+ // For questions with defaults that weren't asked, we need to process them with their default values
610
+ const questionsWithDefaults = questions.filter((q) => q.default !== undefined && q.default !== null && q.default !== '');
611
+ for (const question of questionsWithDefaults) {
612
+ // Skip function defaults - these are dynamic and will be evaluated later
613
+ if (typeof question.default === 'function') {
614
+ continue;
615
+ }
616
+ allAnswers[question.name] = question.default;
617
+ }
618
+ } else {
619
+ // Customize - ask all questions
620
+ console.log(chalk.dim(`\n Configuring ${moduleName.toUpperCase()}...`));
621
+ const promptedAnswers = await inquirer.prompt(questions);
622
+ Object.assign(allAnswers, promptedAnswers);
623
+ }
624
+ }
625
+
626
+ // Store all answers for cross-referencing
627
+ Object.assign(this.allAnswers, allAnswers);
511
628
 
512
- // Store answers for cross-referencing
513
- Object.assign(this.allAnswers, answers);
629
+ // Process all answers (both static and prompted)
630
+ // Always process if we have any answers or static answers
631
+ if (Object.keys(allAnswers).length > 0 || Object.keys(staticAnswers).length > 0) {
632
+ const answers = allAnswers;
514
633
 
515
634
  // Process answers and build result values
516
635
  for (const key of Object.keys(answers)) {
@@ -608,8 +727,68 @@ class ConfigCollector {
608
727
 
609
728
  // No longer display completion boxes - keep output clean
610
729
  } else {
611
- // No questions for this module - show completion message
612
- CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
730
+ // No questions for this module - show completion message with header if available
731
+ const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
732
+
733
+ // Check if this module has NO configuration keys at all (like CIS)
734
+ // Filter out metadata fields and only count actual config objects
735
+ const metadataFields = new Set(['code', 'name', 'header', 'subheader', 'default_selected']);
736
+ const actualConfigKeys = configKeys.filter((key) => !metadataFields.has(key));
737
+ const hasNoConfig = actualConfigKeys.length === 0;
738
+
739
+ if (hasNoConfig && (moduleConfig.subheader || moduleConfig.header)) {
740
+ // Module explicitly has no configuration - show with special styling
741
+ // Add blank line for better readability (matches other modules)
742
+ console.log();
743
+
744
+ // Display the module name in color first (matches other modules)
745
+ console.log(chalk.cyan('?') + ' ' + chalk.magenta(moduleDisplayName));
746
+
747
+ // Ask user if they want to accept defaults or customize on the next line
748
+ const { customize } = await inquirer.prompt([
749
+ {
750
+ type: 'confirm',
751
+ name: 'customize',
752
+ message: 'Accept Defaults (no to customize)?',
753
+ default: true,
754
+ },
755
+ ]);
756
+
757
+ // Show the subheader if available, otherwise show a default message
758
+ if (moduleConfig.subheader) {
759
+ console.log(chalk.dim(` ✓ ${moduleConfig.subheader}`));
760
+ } else {
761
+ console.log(chalk.dim(` ✓ No custom configuration required`));
762
+ }
763
+ } else {
764
+ // Module has config but just no questions to ask
765
+ console.log(chalk.dim(` ✓ ${moduleName.toUpperCase()} module configured`));
766
+ }
767
+ }
768
+
769
+ // If we have no collected config for this module, but we have a module schema,
770
+ // ensure we have at least an empty object
771
+ if (!this.collectedConfig[moduleName]) {
772
+ this.collectedConfig[moduleName] = {};
773
+
774
+ // If we accepted defaults and have no answers, we still need to check
775
+ // if there are any static values in the schema that should be applied
776
+ if (moduleConfig) {
777
+ for (const key of Object.keys(moduleConfig)) {
778
+ if (key !== 'prompt' && moduleConfig[key] && typeof moduleConfig[key] === 'object') {
779
+ const item = moduleConfig[key];
780
+ // For static items (no prompt, just result), apply the result
781
+ if (!item.prompt && item.result) {
782
+ // Apply any placeholder replacements to the result
783
+ let result = item.result;
784
+ if (typeof result === 'string') {
785
+ result = this.replacePlaceholders(result, moduleName, moduleConfig);
786
+ }
787
+ this.collectedConfig[moduleName][key] = result;
788
+ }
789
+ }
790
+ }
791
+ }
613
792
  }
614
793
  }
615
794
 
@@ -682,15 +861,6 @@ class ConfigCollector {
682
861
  }
683
862
  }
684
863
 
685
- // Special handling for bmad_folder: detect existing folder name
686
- if (moduleName === 'core' && key === 'bmad_folder' && !existingValue && this.currentProjectDir) {
687
- // Try to detect the existing BMAD folder name
688
- const detectedFolder = await this.detectExistingBmadFolder(this.currentProjectDir);
689
- if (detectedFolder) {
690
- existingValue = detectedFolder;
691
- }
692
- }
693
-
694
864
  // Special handling for user_name: default to system user
695
865
  if (moduleName === 'core' && key === 'user_name' && !existingValue) {
696
866
  item.default = this.getDefaultUsername();
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Custom Module Source Cache
3
- * Caches custom module sources under _cfg/custom/ to ensure they're never lost
3
+ * Caches custom module sources under _config/custom/ to ensure they're never lost
4
4
  * and can be checked into source control
5
5
  */
6
6
 
@@ -11,7 +11,7 @@ const crypto = require('node:crypto');
11
11
  class CustomModuleCache {
12
12
  constructor(bmadDir) {
13
13
  this.bmadDir = bmadDir;
14
- this.customCacheDir = path.join(bmadDir, '_cfg', 'custom');
14
+ this.customCacheDir = path.join(bmadDir, '_config', 'custom');
15
15
  this.manifestPath = path.join(this.customCacheDir, 'cache-manifest.yaml');
16
16
  }
17
17
 
@@ -31,19 +31,21 @@ class CustomModuleCache {
31
31
  }
32
32
 
33
33
  const content = await fs.readFile(this.manifestPath, 'utf8');
34
- const yaml = require('js-yaml');
35
- return yaml.load(content) || {};
34
+ const yaml = require('yaml');
35
+ return yaml.parse(content) || {};
36
36
  }
37
37
 
38
38
  /**
39
39
  * Update cache manifest
40
40
  */
41
41
  async updateCacheManifest(manifest) {
42
- const yaml = require('js-yaml');
43
- const content = yaml.dump(manifest, {
42
+ const yaml = require('yaml');
43
+ // Clean the manifest to remove any non-serializable values
44
+ const cleanManifest = structuredClone(manifest);
45
+
46
+ const content = yaml.stringify(cleanManifest, {
44
47
  indent: 2,
45
- lineWidth: -1,
46
- noRefs: true,
48
+ lineWidth: 0,
47
49
  sortKeys: false,
48
50
  });
49
51
 
@@ -51,7 +53,19 @@ class CustomModuleCache {
51
53
  }
52
54
 
53
55
  /**
54
- * Calculate hash of a file or directory
56
+ * Stream a file into the hash to avoid loading entire file into memory
57
+ */
58
+ async hashFileStream(filePath, hash) {
59
+ return new Promise((resolve, reject) => {
60
+ const stream = require('node:fs').createReadStream(filePath);
61
+ stream.on('data', (chunk) => hash.update(chunk));
62
+ stream.on('end', resolve);
63
+ stream.on('error', reject);
64
+ });
65
+ }
66
+
67
+ /**
68
+ * Calculate hash of a file or directory using streaming to minimize memory usage
55
69
  */
56
70
  async calculateHash(sourcePath) {
57
71
  const hash = crypto.createHash('sha256');
@@ -76,14 +90,14 @@ class CustomModuleCache {
76
90
  files.sort(); // Ensure consistent order
77
91
 
78
92
  for (const file of files) {
79
- const content = await fs.readFile(file);
80
93
  const relativePath = path.relative(sourcePath, file);
81
- hash.update(relativePath + '|' + content.toString('base64'));
94
+ // Hash the path first, then stream file contents
95
+ hash.update(relativePath + '|');
96
+ await this.hashFileStream(file, hash);
82
97
  }
83
98
  } else {
84
- // For single files
85
- const content = await fs.readFile(sourcePath);
86
- hash.update(content);
99
+ // For single files, stream directly into hash
100
+ await this.hashFileStream(sourcePath, hash);
87
101
  }
88
102
 
89
103
  return hash.digest('hex');
@@ -133,12 +147,18 @@ class CustomModuleCache {
133
147
  const sourceHash = await this.calculateHash(sourcePath);
134
148
  const cacheHash = await this.calculateHash(cacheDir);
135
149
 
136
- // Update manifest - don't store originalPath for source control friendliness
150
+ // Update manifest - don't store absolute paths for portability
151
+ // Clean metadata to remove absolute paths
152
+ const cleanMetadata = { ...metadata };
153
+ if (cleanMetadata.sourcePath) {
154
+ delete cleanMetadata.sourcePath;
155
+ }
156
+
137
157
  cacheManifest[moduleId] = {
138
158
  originalHash: sourceHash,
139
159
  cacheHash: cacheHash,
140
160
  cachedAt: new Date().toISOString(),
141
- ...metadata,
161
+ ...cleanMetadata,
142
162
  };
143
163
 
144
164
  await this.updateCacheManifest(cacheManifest);