bmad-method 6.0.0-alpha.7 → 6.0.0-alpha.9

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 (457) hide show
  1. package/.github/ISSUE_TEMPLATE/idea_submission.md +1 -1
  2. package/.github/workflows/bundle-latest.yaml +277 -0
  3. package/.github/workflows/manual-release.yaml +55 -16
  4. package/.vscode/settings.json +2 -1
  5. package/CHANGELOG.md +439 -1
  6. package/README.md +12 -4
  7. package/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
  8. package/docs/agent-customization-guide.md +208 -0
  9. package/docs/ide-info/crush.md +1 -1
  10. package/docs/ide-info/cursor.md +7 -7
  11. package/docs/ide-info/iflow.md +3 -3
  12. package/docs/ide-info/opencode.md +1 -1
  13. package/docs/index.md +3 -1
  14. package/docs/installers-bundlers/ide-injections.md +2 -2
  15. package/docs/installers-bundlers/installers-modules-platforms-reference.md +23 -23
  16. package/docs/v4-to-v6-upgrade.md +12 -12
  17. package/docs/web-bundles-gemini-gpt-guide.md +473 -0
  18. package/package.json +1 -1
  19. package/src/core/_module-installer/install-config.yaml +17 -10
  20. package/src/core/_module-installer/installer.js +0 -8
  21. package/src/core/agents/bmad-master.agent.yaml +5 -5
  22. package/src/core/agents/bmad-web-orchestrator.agent.xml +8 -17
  23. package/src/core/tasks/{adv-elicit.xml → advanced-elicitation.xml} +6 -4
  24. package/src/core/tasks/index-docs.xml +1 -1
  25. package/src/core/tasks/validate-workflow.xml +1 -1
  26. package/src/core/tasks/workflow.xml +125 -11
  27. package/src/core/tools/shard-doc.xml +45 -1
  28. package/src/core/workflows/brainstorming/README.md +6 -16
  29. package/src/core/workflows/brainstorming/instructions.md +6 -5
  30. package/src/core/workflows/brainstorming/template.md +4 -0
  31. package/src/core/workflows/brainstorming/workflow.yaml +8 -8
  32. package/src/core/workflows/party-mode/instructions.md +2 -7
  33. package/src/core/workflows/party-mode/workflow.yaml +10 -6
  34. package/src/modules/bmb/_module-installer/install-config.yaml +9 -4
  35. package/src/modules/bmb/agents/bmad-builder.agent.yaml +11 -10
  36. package/src/modules/bmb/workflows/audit-workflow/checklist.md +5 -6
  37. package/src/modules/bmb/workflows/audit-workflow/instructions.md +5 -5
  38. package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +2 -2
  39. package/src/modules/bmb/workflows/convert-legacy/README.md +5 -5
  40. package/src/modules/bmb/workflows/convert-legacy/checklist.md +2 -2
  41. package/src/modules/bmb/workflows/convert-legacy/instructions.md +17 -17
  42. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +6 -6
  43. package/src/modules/bmb/workflows/create-agent/README.md +5 -5
  44. package/src/modules/bmb/workflows/create-agent/agent-architecture.md +15 -19
  45. package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +28 -28
  46. package/src/modules/bmb/workflows/create-agent/agent-types.md +15 -15
  47. package/src/modules/bmb/workflows/create-agent/checklist.md +3 -3
  48. package/src/modules/bmb/workflows/create-agent/instructions.md +24 -27
  49. package/src/modules/bmb/workflows/create-agent/workflow.yaml +12 -12
  50. package/src/modules/bmb/workflows/create-module/README.md +1 -1
  51. package/src/modules/bmb/workflows/create-module/checklist.md +1 -10
  52. package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +1 -1
  53. package/src/modules/bmb/workflows/create-module/instructions.md +12 -17
  54. package/src/modules/bmb/workflows/create-module/module-structure.md +7 -7
  55. package/src/modules/bmb/workflows/create-module/workflow.yaml +9 -9
  56. package/src/modules/bmb/workflows/create-workflow/README.md +4 -4
  57. package/src/modules/bmb/workflows/create-workflow/checklist.md +1 -1
  58. package/src/modules/bmb/workflows/create-workflow/instructions.md +29 -29
  59. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +40 -42
  60. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +2 -2
  61. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +12 -12
  62. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +5 -5
  63. package/src/modules/bmb/workflows/edit-agent/checklist.md +1 -1
  64. package/src/modules/bmb/workflows/edit-agent/instructions.md +2 -2
  65. package/src/modules/bmb/workflows/edit-agent/workflow.yaml +8 -8
  66. package/src/modules/bmb/workflows/edit-module/README.md +2 -2
  67. package/src/modules/bmb/workflows/edit-module/checklist.md +2 -2
  68. package/src/modules/bmb/workflows/edit-module/instructions.md +4 -4
  69. package/src/modules/bmb/workflows/edit-module/workflow.yaml +10 -10
  70. package/src/modules/bmb/workflows/edit-workflow/instructions.md +4 -4
  71. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +5 -5
  72. package/src/modules/bmb/workflows/module-brief/README.md +2 -2
  73. package/src/modules/bmb/workflows/module-brief/checklist.md +2 -2
  74. package/src/modules/bmb/workflows/module-brief/instructions.md +2 -2
  75. package/src/modules/bmb/workflows/module-brief/workflow.yaml +4 -4
  76. package/src/modules/bmb/workflows/redoc/README.md +5 -5
  77. package/src/modules/bmb/workflows/redoc/instructions.md +1 -1
  78. package/src/modules/bmb/workflows/redoc/workflow.yaml +1 -1
  79. package/src/modules/bmgd/README.md +1 -1
  80. package/src/modules/bmgd/_module-installer/install-config.yaml +12 -24
  81. package/src/modules/bmgd/agents/game-architect.agent.yaml +15 -10
  82. package/src/modules/bmgd/agents/game-designer.agent.yaml +16 -11
  83. package/src/modules/bmgd/agents/game-dev.agent.yaml +18 -12
  84. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +30 -25
  85. package/src/modules/bmgd/teams/default-party.csv +10 -0
  86. package/src/modules/bmgd/teams/team-gamedev.yaml +2 -0
  87. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +1 -1
  88. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +9 -9
  89. package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +1 -1
  90. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +8 -8
  91. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +5 -10
  92. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +30 -30
  93. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +1 -6
  94. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +5 -5
  95. package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +0 -26
  96. package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +2 -6
  97. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +2 -7
  98. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +2 -2
  99. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +25 -47
  100. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +13 -32
  101. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +1 -1
  102. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +7 -2
  103. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +32 -25
  104. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +20 -47
  105. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +16 -24
  106. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +8 -3
  107. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +30 -5
  108. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +1 -1
  109. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +10 -35
  110. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +16 -24
  111. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +18 -36
  112. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +16 -37
  113. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +11 -15
  114. package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +1 -1
  115. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +8 -7
  116. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +1 -1
  117. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +1 -1
  118. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +20 -45
  119. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +15 -17
  120. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +1 -1
  121. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +5 -4
  122. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +6 -6
  123. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +5 -7
  124. package/src/modules/bmm/_module-installer/install-config.yaml +9 -28
  125. package/src/modules/bmm/_module-installer/installer.js +2 -2
  126. package/src/modules/bmm/agents/analyst.agent.yaml +20 -15
  127. package/src/modules/bmm/agents/architect.agent.yaml +17 -12
  128. package/src/modules/bmm/agents/dev.agent.yaml +9 -12
  129. package/src/modules/bmm/agents/pm.agent.yaml +24 -23
  130. package/src/modules/bmm/agents/sm.agent.yaml +24 -19
  131. package/src/modules/bmm/agents/tea.agent.yaml +23 -17
  132. package/src/modules/bmm/agents/tech-writer.agent.yaml +15 -11
  133. package/src/modules/bmm/agents/ux-designer.agent.yaml +16 -11
  134. package/src/modules/bmm/docs/agents-guide.md +4 -4
  135. package/src/modules/bmm/docs/brownfield-guide.md +4 -4
  136. package/src/modules/bmm/docs/enterprise-agentic-development.md +3 -3
  137. package/src/modules/bmm/docs/faq.md +1 -1
  138. package/src/modules/bmm/docs/party-mode.md +3 -3
  139. package/src/modules/bmm/docs/quick-start.md +1 -1
  140. package/src/modules/bmm/docs/test-architecture.md +1 -1
  141. package/src/modules/bmm/docs/workflow-document-project-reference.md +1 -1
  142. package/src/modules/bmm/teams/default-party.csv +19 -0
  143. package/src/modules/bmm/teams/team-fullstack.yaml +1 -0
  144. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +1 -1
  145. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +8 -8
  146. package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +1 -1
  147. package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +8 -21
  148. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +10 -12
  149. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +13 -9
  150. package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +2 -2
  151. package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +2 -2
  152. package/src/modules/bmm/workflows/1-analysis/research/checklist.md +2 -2
  153. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +1 -3
  154. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +2 -7
  155. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +1 -1
  156. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +1 -6
  157. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +14 -14
  158. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +7 -2
  159. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +16 -10
  160. package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +8 -12
  161. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +28 -0
  162. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +146 -23
  163. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +7 -9
  164. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +152 -35
  165. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +2 -2
  166. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +20 -16
  167. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +12 -9
  168. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -6
  169. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +434 -0
  170. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +129 -266
  171. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +15 -37
  172. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -26
  173. package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +3 -7
  174. package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +30 -38
  175. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +25 -43
  176. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +7 -13
  177. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +57 -60
  178. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +12 -12
  179. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +25 -47
  180. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +13 -32
  181. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +1 -1
  182. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +7 -2
  183. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +32 -25
  184. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +20 -47
  185. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +16 -24
  186. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +8 -3
  187. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +30 -5
  188. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +1 -1
  189. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +10 -35
  190. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +16 -24
  191. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +18 -36
  192. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +16 -37
  193. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +11 -15
  194. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +1 -1
  195. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +8 -7
  196. package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +1 -1
  197. package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +1 -1
  198. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +20 -45
  199. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +15 -17
  200. package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +1 -1
  201. package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +5 -4
  202. package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +6 -6
  203. package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +5 -7
  204. package/src/modules/bmm/workflows/document-project/checklist.md +1 -1
  205. package/src/modules/bmm/workflows/document-project/instructions.md +5 -5
  206. package/src/modules/bmm/workflows/document-project/workflow.yaml +2 -2
  207. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +4 -4
  208. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +5 -5
  209. package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +13 -13
  210. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +5 -5
  211. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +2 -2
  212. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +2 -2
  213. package/src/modules/bmm/workflows/testarch/automate/instructions.md +2 -2
  214. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +2 -2
  215. package/src/modules/bmm/workflows/testarch/ci/checklist.md +4 -4
  216. package/src/modules/bmm/workflows/testarch/ci/instructions.md +2 -2
  217. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +2 -2
  218. package/src/modules/bmm/workflows/testarch/framework/checklist.md +4 -4
  219. package/src/modules/bmm/workflows/testarch/framework/instructions.md +2 -2
  220. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +2 -2
  221. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +1 -1
  222. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +2 -2
  223. package/src/modules/bmm/workflows/testarch/test-design/checklist.md +4 -4
  224. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +175 -14
  225. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +4 -4
  226. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +7 -3
  227. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +1 -1
  228. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +2 -2
  229. package/src/modules/bmm/workflows/testarch/trace/instructions.md +9 -9
  230. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +2 -2
  231. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +33 -31
  232. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +5 -4
  233. package/src/modules/bmm/workflows/workflow-status/instructions.md +5 -4
  234. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +9 -16
  235. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +11 -18
  236. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +8 -1
  237. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +9 -2
  238. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +1 -1
  239. package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +2 -9
  240. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +2 -2
  241. package/src/modules/cis/README.md +1 -1
  242. package/src/modules/cis/_module-installer/install-config.yaml +6 -4
  243. package/src/modules/cis/agents/README.md +1 -1
  244. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +13 -8
  245. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +13 -8
  246. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +13 -8
  247. package/src/modules/cis/agents/innovation-strategist.agent.yaml +13 -8
  248. package/src/modules/cis/agents/storyteller.agent.yaml +13 -8
  249. package/src/modules/cis/teams/creative-squad.yaml +1 -0
  250. package/src/modules/cis/teams/default-party.csv +11 -0
  251. package/src/modules/cis/workflows/README.md +1 -1
  252. package/src/modules/cis/workflows/design-thinking/instructions.md +2 -2
  253. package/src/modules/cis/workflows/design-thinking/workflow.yaml +7 -7
  254. package/src/modules/cis/workflows/innovation-strategy/instructions.md +2 -2
  255. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +7 -7
  256. package/src/modules/cis/workflows/problem-solving/instructions.md +2 -2
  257. package/src/modules/cis/workflows/problem-solving/workflow.yaml +7 -7
  258. package/src/modules/cis/workflows/storytelling/instructions.md +2 -2
  259. package/src/modules/cis/workflows/storytelling/workflow.yaml +7 -7
  260. package/src/utility/models/action-command-header.md +0 -0
  261. package/src/utility/models/agent-activation-ide.xml +3 -3
  262. package/src/utility/models/agent-activation-web.xml +4 -4
  263. package/src/utility/models/agent-command-header.md +1 -0
  264. package/src/utility/models/fragments/activation-steps.xml +3 -2
  265. package/src/utility/models/fragments/handler-validate-workflow.xml +1 -1
  266. package/src/utility/models/fragments/handler-workflow.xml +1 -1
  267. package/src/utility/models/fragments/web-bundle-activation-steps.xml +3 -3
  268. package/tools/cli/README.md +50 -32
  269. package/tools/cli/bundlers/web-bundler.js +86 -17
  270. package/tools/cli/commands/install.js +1 -4
  271. package/tools/cli/installers/lib/core/config-collector.js +201 -28
  272. package/tools/cli/installers/lib/core/detector.js +62 -7
  273. package/tools/cli/installers/lib/core/installer.js +175 -33
  274. package/tools/cli/installers/lib/core/manifest-generator.js +26 -115
  275. package/tools/cli/installers/lib/ide/_base-ide.js +57 -3
  276. package/tools/cli/installers/lib/ide/auggie.js +78 -224
  277. package/tools/cli/installers/lib/ide/claude-code.js +14 -22
  278. package/tools/cli/installers/lib/ide/cline.js +15 -18
  279. package/tools/cli/installers/lib/ide/codex.js +17 -48
  280. package/tools/cli/installers/lib/ide/crush.js +14 -50
  281. package/tools/cli/installers/lib/ide/cursor.js +51 -8
  282. package/tools/cli/installers/lib/ide/gemini.js +87 -37
  283. package/tools/cli/installers/lib/ide/github-copilot.js +47 -35
  284. package/tools/cli/installers/lib/ide/iflow.js +13 -30
  285. package/tools/cli/installers/lib/ide/kilo.js +20 -16
  286. package/tools/cli/installers/lib/ide/manager.js +15 -0
  287. package/tools/cli/installers/lib/ide/opencode.js +16 -17
  288. package/tools/cli/installers/lib/ide/qwen.js +39 -11
  289. package/tools/cli/installers/lib/ide/roo.js +27 -62
  290. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +90 -0
  291. package/tools/cli/installers/lib/ide/{task-tool-command-generator.js → shared/task-tool-command-generator.js} +1 -1
  292. package/tools/cli/installers/lib/ide/{workflow-command-generator.js → shared/workflow-command-generator.js} +11 -9
  293. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
  294. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
  295. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
  296. package/tools/cli/installers/lib/ide/{workflow-command-template.md → templates/workflow-command-template.md} +3 -5
  297. package/tools/cli/installers/lib/ide/trae.js +20 -32
  298. package/tools/cli/installers/lib/ide/windsurf.js +18 -8
  299. package/tools/cli/installers/lib/modules/manager.js +89 -17
  300. package/tools/cli/lib/cli-utils.js +52 -50
  301. package/tools/cli/lib/ui.js +29 -12
  302. package/tools/cli/lib/yaml-xml-builder.js +20 -2
  303. package/tools/schema/agent.js +7 -3
  304. package/.claude/commands/bmad/bmb/agents/bmad-builder.md +0 -70
  305. package/.claude/commands/bmad/bmb/workflows/audit-workflow.md +0 -15
  306. package/.claude/commands/bmad/bmb/workflows/convert-legacy.md +0 -15
  307. package/.claude/commands/bmad/bmb/workflows/create-agent.md +0 -15
  308. package/.claude/commands/bmad/bmb/workflows/create-module.md +0 -15
  309. package/.claude/commands/bmad/bmb/workflows/create-workflow.md +0 -15
  310. package/.claude/commands/bmad/bmb/workflows/edit-agent.md +0 -15
  311. package/.claude/commands/bmad/bmb/workflows/edit-module.md +0 -15
  312. package/.claude/commands/bmad/bmb/workflows/edit-workflow.md +0 -15
  313. package/.claude/commands/bmad/bmb/workflows/module-brief.md +0 -15
  314. package/.claude/commands/bmad/bmb/workflows/redoc.md +0 -15
  315. package/.claude/commands/bmad/core/agents/bmad-master.md +0 -71
  316. package/.claude/commands/bmad/core/tasks/index-docs.md +0 -9
  317. package/.claude/commands/bmad/core/tools/shard-doc.md +0 -9
  318. package/.claude/commands/bmad/core/workflows/brainstorming.md +0 -15
  319. package/.claude/commands/bmad/core/workflows/party-mode.md +0 -15
  320. package/.claude/settings.local.json +0 -22
  321. package/bmad/_cfg/agent-manifest.csv +0 -5
  322. package/bmad/_cfg/agents/bmb-bmad-builder.customize.yaml +0 -42
  323. package/bmad/_cfg/agents/core-bmad-master.customize.yaml +0 -42
  324. package/bmad/_cfg/files-manifest.csv +0 -82
  325. package/bmad/_cfg/ides/claude-code.yaml +0 -6
  326. package/bmad/_cfg/manifest.yaml +0 -11
  327. package/bmad/_cfg/task-manifest.csv +0 -13
  328. package/bmad/_cfg/tool-manifest.csv +0 -4
  329. package/bmad/_cfg/workflow-manifest.csv +0 -17
  330. package/bmad/bmb/README.md +0 -194
  331. package/bmad/bmb/agents/bmad-builder.md +0 -70
  332. package/bmad/bmb/config.yaml +0 -14
  333. package/bmad/bmb/workflows/audit-workflow/checklist.md +0 -143
  334. package/bmad/bmb/workflows/audit-workflow/instructions.md +0 -341
  335. package/bmad/bmb/workflows/audit-workflow/template.md +0 -118
  336. package/bmad/bmb/workflows/audit-workflow/workflow.yaml +0 -23
  337. package/bmad/bmb/workflows/convert-legacy/README.md +0 -262
  338. package/bmad/bmb/workflows/convert-legacy/checklist.md +0 -205
  339. package/bmad/bmb/workflows/convert-legacy/instructions.md +0 -377
  340. package/bmad/bmb/workflows/convert-legacy/workflow.yaml +0 -32
  341. package/bmad/bmb/workflows/create-agent/README.md +0 -203
  342. package/bmad/bmb/workflows/create-agent/agent-architecture.md +0 -419
  343. package/bmad/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
  344. package/bmad/bmb/workflows/create-agent/agent-types.md +0 -292
  345. package/bmad/bmb/workflows/create-agent/brainstorm-context.md +0 -174
  346. package/bmad/bmb/workflows/create-agent/checklist.md +0 -62
  347. package/bmad/bmb/workflows/create-agent/communication-styles.md +0 -202
  348. package/bmad/bmb/workflows/create-agent/instructions.md +0 -459
  349. package/bmad/bmb/workflows/create-agent/workflow.yaml +0 -37
  350. package/bmad/bmb/workflows/create-module/README.md +0 -229
  351. package/bmad/bmb/workflows/create-module/brainstorm-context.md +0 -137
  352. package/bmad/bmb/workflows/create-module/checklist.md +0 -244
  353. package/bmad/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
  354. package/bmad/bmb/workflows/create-module/installer-templates/installer.js +0 -231
  355. package/bmad/bmb/workflows/create-module/instructions.md +0 -581
  356. package/bmad/bmb/workflows/create-module/module-structure.md +0 -400
  357. package/bmad/bmb/workflows/create-module/workflow.yaml +0 -42
  358. package/bmad/bmb/workflows/create-workflow/README.md +0 -277
  359. package/bmad/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
  360. package/bmad/bmb/workflows/create-workflow/checklist.md +0 -94
  361. package/bmad/bmb/workflows/create-workflow/instructions.md +0 -724
  362. package/bmad/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1308
  363. package/bmad/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
  364. package/bmad/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -13
  365. package/bmad/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
  366. package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -39
  367. package/bmad/bmb/workflows/create-workflow/workflow.yaml +0 -40
  368. package/bmad/bmb/workflows/edit-agent/README.md +0 -112
  369. package/bmad/bmb/workflows/edit-agent/checklist.md +0 -112
  370. package/bmad/bmb/workflows/edit-agent/instructions.md +0 -290
  371. package/bmad/bmb/workflows/edit-agent/workflow.yaml +0 -33
  372. package/bmad/bmb/workflows/edit-module/README.md +0 -187
  373. package/bmad/bmb/workflows/edit-module/checklist.md +0 -165
  374. package/bmad/bmb/workflows/edit-module/instructions.md +0 -339
  375. package/bmad/bmb/workflows/edit-module/workflow.yaml +0 -34
  376. package/bmad/bmb/workflows/edit-workflow/README.md +0 -119
  377. package/bmad/bmb/workflows/edit-workflow/checklist.md +0 -70
  378. package/bmad/bmb/workflows/edit-workflow/instructions.md +0 -342
  379. package/bmad/bmb/workflows/edit-workflow/workflow.yaml +0 -27
  380. package/bmad/bmb/workflows/module-brief/README.md +0 -264
  381. package/bmad/bmb/workflows/module-brief/checklist.md +0 -116
  382. package/bmad/bmb/workflows/module-brief/instructions.md +0 -267
  383. package/bmad/bmb/workflows/module-brief/template.md +0 -275
  384. package/bmad/bmb/workflows/module-brief/workflow.yaml +0 -29
  385. package/bmad/bmb/workflows/redoc/README.md +0 -87
  386. package/bmad/bmb/workflows/redoc/checklist.md +0 -99
  387. package/bmad/bmb/workflows/redoc/instructions.md +0 -265
  388. package/bmad/bmb/workflows/redoc/workflow.yaml +0 -32
  389. package/bmad/core/agents/bmad-master.md +0 -71
  390. package/bmad/core/agents/bmad-web-orchestrator.agent.xml +0 -122
  391. package/bmad/core/config.yaml +0 -9
  392. package/bmad/core/tasks/adv-elicit-methods.csv +0 -39
  393. package/bmad/core/tasks/adv-elicit.xml +0 -104
  394. package/bmad/core/tasks/index-docs.xml +0 -65
  395. package/bmad/core/tasks/validate-workflow.xml +0 -89
  396. package/bmad/core/tasks/workflow.xml +0 -156
  397. package/bmad/core/tools/shard-doc.xml +0 -65
  398. package/bmad/core/workflows/brainstorming/README.md +0 -271
  399. package/bmad/core/workflows/brainstorming/brain-methods.csv +0 -36
  400. package/bmad/core/workflows/brainstorming/instructions.md +0 -314
  401. package/bmad/core/workflows/brainstorming/template.md +0 -102
  402. package/bmad/core/workflows/brainstorming/workflow.yaml +0 -43
  403. package/bmad/core/workflows/party-mode/instructions.md +0 -188
  404. package/bmad/core/workflows/party-mode/workflow.yaml +0 -23
  405. package/bmad/docs/claude-code-instructions.md +0 -25
  406. package/bmd/README.md +0 -193
  407. package/bmd/agents/cli-chief-sidecar/instructions.md +0 -102
  408. package/bmd/agents/cli-chief-sidecar/knowledge/README.md +0 -68
  409. package/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +0 -123
  410. package/bmd/agents/cli-chief-sidecar/memories.md +0 -53
  411. package/bmd/agents/cli-chief.agent.yaml +0 -126
  412. package/bmd/agents/doc-keeper-sidecar/instructions.md +0 -177
  413. package/bmd/agents/doc-keeper-sidecar/knowledge/README.md +0 -81
  414. package/bmd/agents/doc-keeper-sidecar/memories.md +0 -88
  415. package/bmd/agents/doc-keeper.agent.yaml +0 -137
  416. package/bmd/agents/release-chief-sidecar/instructions.md +0 -164
  417. package/bmd/agents/release-chief-sidecar/knowledge/README.md +0 -82
  418. package/bmd/agents/release-chief-sidecar/memories.md +0 -73
  419. package/bmd/agents/release-chief.agent.yaml +0 -127
  420. package/bmd/bmad-custom-module-installer-plan.md +0 -1176
  421. package/bmd/config.yaml +0 -12
  422. package/src/modules/bmgd/workflows/4-production/dev-story/AUDIT-REPORT.md +0 -367
  423. package/src/modules/bmm/sub-modules/claude-code/README.md +0 -87
  424. package/src/modules/bmm/sub-modules/claude-code/config.yaml +0 -5
  425. package/src/modules/bmm/sub-modules/claude-code/injections.yaml +0 -242
  426. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/api-documenter.md +0 -102
  427. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/codebase-analyzer.md +0 -82
  428. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/data-analyst.md +0 -101
  429. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/pattern-detector.md +0 -84
  430. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/dependency-mapper.md +0 -83
  431. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/epic-optimizer.md +0 -81
  432. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/requirements-analyst.md +0 -61
  433. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/technical-decisions-curator.md +0 -168
  434. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/trend-spotter.md +0 -115
  435. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-journey-mapper.md +0 -123
  436. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-researcher.md +0 -72
  437. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/market-researcher.md +0 -51
  438. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/tech-debt-auditor.md +0 -106
  439. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/document-reviewer.md +0 -102
  440. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/technical-evaluator.md +0 -68
  441. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/test-coverage-analyzer.md +0 -108
  442. package/src/modules/bmm/tasks/daily-standup.xml +0 -85
  443. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +0 -200
  444. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +0 -451
  445. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +0 -189
  446. package/src/modules/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +0 -367
  447. package/src/modules/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +0 -49
  448. package/test/fixtures/agent-schema/invalid/persona/principles-as-string.agent.yaml +0 -23
  449. package/web-bundles/bmm/agents/analyst.xml +0 -5028
  450. package/web-bundles/bmm/agents/architect.xml +0 -2047
  451. package/web-bundles/bmm/agents/dev.xml +0 -68
  452. package/web-bundles/bmm/agents/pm.xml +0 -3808
  453. package/web-bundles/bmm/agents/sm.xml +0 -77
  454. package/web-bundles/bmm/agents/tea.xml +0 -66
  455. package/web-bundles/bmm/agents/tech-writer.xml +0 -84
  456. package/web-bundles/bmm/agents/ux-designer.xml +0 -2018
  457. package/web-bundles/bmm/teams/team-fullstack.xml +0 -12039
@@ -13,14 +13,56 @@ class ConfigCollector {
13
13
  this.currentProjectDir = null;
14
14
  }
15
15
 
16
+ /**
17
+ * Find the bmad installation directory in a project
18
+ * V6+ installations can use ANY folder name but ALWAYS have _cfg/manifest.yaml
19
+ * @param {string} projectDir - Project directory
20
+ * @returns {Promise<string>} Path to bmad directory
21
+ */
22
+ async findBmadDir(projectDir) {
23
+ // Check if project directory exists
24
+ if (!(await fs.pathExists(projectDir))) {
25
+ // Project doesn't exist yet, return default
26
+ return path.join(projectDir, 'bmad');
27
+ }
28
+
29
+ // V6+ strategy: Look for ANY directory with _cfg/manifest.yaml
30
+ // This is the definitive marker of a V6+ installation
31
+ try {
32
+ const entries = await fs.readdir(projectDir, { withFileTypes: true });
33
+ for (const entry of entries) {
34
+ if (entry.isDirectory()) {
35
+ const manifestPath = path.join(projectDir, entry.name, '_cfg', 'manifest.yaml');
36
+ if (await fs.pathExists(manifestPath)) {
37
+ // Found a V6+ installation
38
+ return path.join(projectDir, entry.name);
39
+ }
40
+ }
41
+ }
42
+ } catch {
43
+ // Ignore errors, fall through to default
44
+ }
45
+
46
+ // No V6+ installation found, return default
47
+ // This will be used for new installations
48
+ return path.join(projectDir, 'bmad');
49
+ }
50
+
16
51
  /**
17
52
  * Load existing config if it exists from module config files
18
53
  * @param {string} projectDir - Target project directory
19
54
  */
20
55
  async loadExistingConfig(projectDir) {
21
- const bmadDir = path.join(projectDir, 'bmad');
22
56
  this.existingConfig = {};
23
57
 
58
+ // Check if project directory exists first
59
+ if (!(await fs.pathExists(projectDir))) {
60
+ return false;
61
+ }
62
+
63
+ // Find the actual bmad directory (handles custom folder names)
64
+ const bmadDir = await this.findBmadDir(projectDir);
65
+
24
66
  // Check if bmad directory exists
25
67
  if (!(await fs.pathExists(bmadDir))) {
26
68
  return false;
@@ -159,27 +201,25 @@ class ConfigCollector {
159
201
  this.allAnswers[`${moduleName}_${key}`] = value;
160
202
  }
161
203
  }
204
+ // Show "no config" message for modules with no new questions
205
+ CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
162
206
  return false; // No new fields
163
207
  }
164
208
 
165
- // If we have new fields, show prompt section and collect only new fields
209
+ // If we have new fields, build questions first
166
210
  if (newKeys.length > 0) {
167
- console.log(chalk.yellow(`\n📋 New configuration options available for ${moduleName}`));
168
- if (moduleConfig.prompt) {
169
- const prompts = Array.isArray(moduleConfig.prompt) ? moduleConfig.prompt : [moduleConfig.prompt];
170
- CLIUtils.displayPromptSection(prompts);
171
- }
172
-
173
211
  const questions = [];
174
212
  for (const key of newKeys) {
175
213
  const item = moduleConfig[key];
176
- const question = await this.buildQuestion(moduleName, key, item);
214
+ const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
177
215
  if (question) {
178
216
  questions.push(question);
179
217
  }
180
218
  }
181
219
 
182
220
  if (questions.length > 0) {
221
+ // Only show header if we actually have questions
222
+ CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
183
223
  console.log(); // Line break before questions
184
224
  const answers = await inquirer.prompt(questions);
185
225
 
@@ -206,6 +246,9 @@ class ConfigCollector {
206
246
  }
207
247
  this.collectedConfig[moduleName][originalKey] = result;
208
248
  }
249
+ } else {
250
+ // New keys exist but no questions generated - show no config message
251
+ CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
209
252
  }
210
253
  }
211
254
 
@@ -325,12 +368,6 @@ class ConfigCollector {
325
368
  return;
326
369
  }
327
370
 
328
- // Display module prompts using better formatting
329
- if (moduleConfig.prompt) {
330
- const prompts = Array.isArray(moduleConfig.prompt) ? moduleConfig.prompt : [moduleConfig.prompt];
331
- CLIUtils.displayPromptSection(prompts);
332
- }
333
-
334
371
  // Process each config item
335
372
  const questions = [];
336
373
  const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
@@ -343,13 +380,15 @@ class ConfigCollector {
343
380
  continue;
344
381
  }
345
382
 
346
- const question = await this.buildQuestion(moduleName, key, item);
383
+ const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
347
384
  if (question) {
348
385
  questions.push(question);
349
386
  }
350
387
  }
351
388
 
389
+ // Display appropriate header based on whether there are questions
352
390
  if (questions.length > 0) {
391
+ CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
353
392
  console.log(); // Line break before questions
354
393
  const answers = await inquirer.prompt(questions);
355
394
 
@@ -450,20 +489,68 @@ class ConfigCollector {
450
489
  this.collectedConfig[moduleName][originalKey] = result;
451
490
  }
452
491
 
453
- // Display module completion message after collecting all answers (unless skipped)
454
- if (!skipCompletion) {
455
- CLIUtils.displayModuleComplete(moduleName);
456
- }
492
+ // No longer display completion boxes - keep output clean
493
+ } else {
494
+ // No questions for this module - show completion message
495
+ CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
457
496
  }
458
497
  }
459
498
 
499
+ /**
500
+ * Replace placeholders in a string with collected config values
501
+ * @param {string} str - String with placeholders
502
+ * @param {string} currentModule - Current module name (to look up defaults in same module)
503
+ * @param {Object} moduleConfig - Current module's config schema (to look up defaults)
504
+ * @returns {string} String with placeholders replaced
505
+ */
506
+ replacePlaceholders(str, currentModule = null, moduleConfig = null) {
507
+ if (typeof str !== 'string') {
508
+ return str;
509
+ }
510
+
511
+ return str.replaceAll(/{([^}]+)}/g, (match, configKey) => {
512
+ // Preserve special placeholders
513
+ if (configKey === 'project-root' || configKey === 'value' || configKey === 'directory_name') {
514
+ return match;
515
+ }
516
+
517
+ // Look for the config value in allAnswers (already answered questions)
518
+ let configValue = this.allAnswers[configKey] || this.allAnswers[`core_${configKey}`];
519
+
520
+ // Check in already collected config
521
+ if (!configValue) {
522
+ for (const mod of Object.keys(this.collectedConfig)) {
523
+ if (mod !== '_meta' && this.collectedConfig[mod] && this.collectedConfig[mod][configKey]) {
524
+ configValue = this.collectedConfig[mod][configKey];
525
+ // Remove {project-root}/ prefix if present for cleaner display
526
+ if (typeof configValue === 'string' && configValue.includes('{project-root}/')) {
527
+ configValue = configValue.replace('{project-root}/', '');
528
+ }
529
+ break;
530
+ }
531
+ }
532
+ }
533
+
534
+ // If still not found and we're in the same module, use the default from the config schema
535
+ if (!configValue && currentModule && moduleConfig && moduleConfig[configKey]) {
536
+ const referencedItem = moduleConfig[configKey];
537
+ if (referencedItem && referencedItem.default !== undefined) {
538
+ configValue = referencedItem.default;
539
+ }
540
+ }
541
+
542
+ return configValue || match;
543
+ });
544
+ }
545
+
460
546
  /**
461
547
  * Build an inquirer question from a config item
462
548
  * @param {string} moduleName - Module name
463
549
  * @param {string} key - Config key
464
550
  * @param {Object} item - Config item definition
551
+ * @param {Object} moduleConfig - Full module config schema (for resolving defaults)
465
552
  */
466
- async buildQuestion(moduleName, key, item) {
553
+ async buildQuestion(moduleName, key, item, moduleConfig = null) {
467
554
  const questionName = `${moduleName}_${key}`;
468
555
 
469
556
  // Check for existing value
@@ -483,9 +570,42 @@ class ConfigCollector {
483
570
  let defaultValue = item.default;
484
571
  let choices = null;
485
572
 
486
- if (typeof defaultValue === 'string' && defaultValue.includes('{directory_name}') && this.currentProjectDir) {
487
- const dirName = path.basename(this.currentProjectDir);
488
- defaultValue = defaultValue.replaceAll('{directory_name}', dirName);
573
+ // Check if default contains references to other fields in the same module
574
+ const hasSameModuleReference = typeof defaultValue === 'string' && defaultValue.match(/{([^}]+)}/);
575
+ let dynamicDefault = false;
576
+
577
+ // Replace placeholders in default value with collected config values
578
+ if (typeof defaultValue === 'string') {
579
+ if (defaultValue.includes('{directory_name}') && this.currentProjectDir) {
580
+ const dirName = path.basename(this.currentProjectDir);
581
+ defaultValue = defaultValue.replaceAll('{directory_name}', dirName);
582
+ }
583
+
584
+ // Check if this references another field in the same module (for dynamic defaults)
585
+ if (hasSameModuleReference && moduleConfig) {
586
+ const matches = defaultValue.match(/{([^}]+)}/g);
587
+ if (matches) {
588
+ for (const match of matches) {
589
+ const fieldName = match.slice(1, -1); // Remove { }
590
+ // Check if this field exists in the same module config
591
+ if (moduleConfig[fieldName]) {
592
+ dynamicDefault = true;
593
+ break;
594
+ }
595
+ }
596
+ }
597
+ }
598
+
599
+ // If not dynamic, replace placeholders now
600
+ if (!dynamicDefault) {
601
+ defaultValue = this.replacePlaceholders(defaultValue, moduleName, moduleConfig);
602
+ }
603
+
604
+ // Strip {project-root}/ from defaults since it will be added back by result template
605
+ // This makes the display cleaner and user input simpler
606
+ if (defaultValue.includes('{project-root}/')) {
607
+ defaultValue = defaultValue.replace('{project-root}/', '');
608
+ }
489
609
  }
490
610
 
491
611
  // Handle different question types
@@ -548,31 +668,67 @@ class ConfigCollector {
548
668
  message = item.prompt;
549
669
  }
550
670
 
671
+ // Replace placeholders in prompt message with collected config values
672
+ if (typeof message === 'string') {
673
+ message = this.replacePlaceholders(message, moduleName, moduleConfig);
674
+ }
675
+
551
676
  // Add current value indicator for existing configs
552
677
  if (existingValue !== null && existingValue !== undefined) {
553
678
  if (typeof existingValue === 'boolean') {
554
679
  message += chalk.dim(` (current: ${existingValue ? 'true' : 'false'})`);
555
- defaultValue = existingValue;
556
680
  } else if (Array.isArray(existingValue)) {
557
681
  message += chalk.dim(` (current: ${existingValue.join(', ')})`);
558
682
  } else if (questionType !== 'list') {
559
683
  // Show the cleaned value (without {project-root}/) for display
560
684
  message += chalk.dim(` (current: ${existingValue})`);
561
- defaultValue = existingValue;
562
685
  }
563
686
  } else if (item.example && questionType === 'input') {
564
687
  // Show example for input fields
565
- const exampleText = typeof item.example === 'string' ? item.example.replace('{project-root}/', '') : JSON.stringify(item.example);
688
+ let exampleText = typeof item.example === 'string' ? item.example : JSON.stringify(item.example);
689
+ // Replace placeholders in example
690
+ if (typeof exampleText === 'string') {
691
+ exampleText = this.replacePlaceholders(exampleText, moduleName, moduleConfig);
692
+ exampleText = exampleText.replace('{project-root}/', '');
693
+ }
566
694
  message += chalk.dim(` (e.g., ${exampleText})`);
567
695
  }
568
696
 
697
+ // Build the question object
569
698
  const question = {
570
699
  type: questionType,
571
700
  name: questionName,
572
701
  message: message,
573
- default: defaultValue,
574
702
  };
575
703
 
704
+ // Set default - if it's dynamic, use a function that inquirer will evaluate with current answers
705
+ // But if we have an existing value, always use that instead
706
+ if (existingValue !== null && existingValue !== undefined && questionType !== 'list') {
707
+ question.default = existingValue;
708
+ } else if (dynamicDefault && typeof item.default === 'string') {
709
+ const originalDefault = item.default;
710
+ question.default = (answers) => {
711
+ // Replace placeholders using answers from previous questions in the same batch
712
+ let resolved = originalDefault;
713
+ resolved = resolved.replaceAll(/{([^}]+)}/g, (match, fieldName) => {
714
+ // Look for the answer in the current batch (prefixed with module name)
715
+ const answerKey = `${moduleName}_${fieldName}`;
716
+ if (answers[answerKey] !== undefined) {
717
+ return answers[answerKey];
718
+ }
719
+ // Fall back to collected config
720
+ return this.collectedConfig[moduleName]?.[fieldName] || match;
721
+ });
722
+ // Strip {project-root}/ for cleaner display
723
+ if (resolved.includes('{project-root}/')) {
724
+ resolved = resolved.replace('{project-root}/', '');
725
+ }
726
+ return resolved;
727
+ };
728
+ } else {
729
+ question.default = defaultValue;
730
+ }
731
+
576
732
  // Add choices for select types
577
733
  if (choices) {
578
734
  question.choices = choices;
@@ -584,6 +740,23 @@ class ConfigCollector {
584
740
  if (!input && item.required) {
585
741
  return 'This field is required';
586
742
  }
743
+ // Validate against regex pattern if provided
744
+ if (input && item.regex) {
745
+ const regex = new RegExp(item.regex);
746
+ if (!regex.test(input)) {
747
+ return `Invalid format. Must match pattern: ${item.regex}`;
748
+ }
749
+ }
750
+ return true;
751
+ };
752
+ }
753
+
754
+ // Add validation for checkbox (multi-select) fields
755
+ if (questionType === 'checkbox' && item.required) {
756
+ question.validate = (answers) => {
757
+ if (!answers || answers.length === 0) {
758
+ return 'At least one option must be selected';
759
+ }
587
760
  return true;
588
761
  };
589
762
  }
@@ -199,6 +199,8 @@ class Detector {
199
199
 
200
200
  /**
201
201
  * Detect legacy BMAD v4 footprints (case-sensitive path checks)
202
+ * V4 used .bmad-method as default folder name
203
+ * V6+ uses configurable folder names and ALWAYS has _cfg/manifest.yaml with installation.version
202
204
  * @param {string} projectDir - Project directory to check
203
205
  * @returns {{ hasLegacyV4: boolean, offenders: string[] }}
204
206
  */
@@ -223,18 +225,62 @@ class Detector {
223
225
  return true;
224
226
  };
225
227
 
228
+ // Helper: check if a directory is a V6+ installation
229
+ const isV6Installation = async (dirPath) => {
230
+ const manifestPath = path.join(dirPath, '_cfg', 'manifest.yaml');
231
+ if (!(await fs.pathExists(manifestPath))) {
232
+ return false;
233
+ }
234
+ try {
235
+ const yaml = require('js-yaml');
236
+ const manifestContent = await fs.readFile(manifestPath, 'utf8');
237
+ const manifest = yaml.load(manifestContent);
238
+ // V6+ manifest has installation.version
239
+ return manifest && manifest.installation && manifest.installation.version;
240
+ } catch {
241
+ return false;
242
+ }
243
+ };
244
+
226
245
  const offenders = [];
227
246
 
228
- // Find all directories starting with .bmad, bmad, or Bmad
247
+ // Strategy:
248
+ // 1. First scan for ANY V6+ installation (_cfg/manifest.yaml)
249
+ // 2. If V6+ found → don't flag anything (user is already on V6+)
250
+ // 3. If NO V6+ found → flag folders with "bmad" in name as potential V4 legacy
251
+
252
+ let hasV6Installation = false;
253
+ const potentialV4Folders = [];
254
+
229
255
  try {
230
256
  const entries = await fs.readdir(projectDir, { withFileTypes: true });
257
+
231
258
  for (const entry of entries) {
232
259
  if (entry.isDirectory()) {
233
260
  const name = entry.name;
234
- // Match .bmad*, bmad* (lowercase), or Bmad* (capital B)
235
- // BUT exclude 'bmad' exactly (that's the new v6 installation directory)
236
- if ((name.startsWith('.bmad') || name.startsWith('bmad') || name.startsWith('Bmad')) && name !== 'bmad') {
237
- offenders.push(path.join(projectDir, entry.name));
261
+ const fullPath = path.join(projectDir, entry.name);
262
+
263
+ // Check if directory is empty (skip empty leftover folders)
264
+ const dirContents = await fs.readdir(fullPath);
265
+ if (dirContents.length === 0) {
266
+ continue; // Skip empty folders
267
+ }
268
+
269
+ // Check if it's a V6+ installation by looking for _cfg/manifest.yaml
270
+ // This works for ANY folder name (not just bmad-prefixed)
271
+ const isV6 = await isV6Installation(fullPath);
272
+
273
+ if (isV6) {
274
+ // Found a V6+ installation - user is already on V6+
275
+ hasV6Installation = true;
276
+ // Don't break - continue scanning to be thorough
277
+ } else {
278
+ // Not V6+, check if folder name contains "bmad" (case insensitive)
279
+ const nameLower = name.toLowerCase();
280
+ if (nameLower.includes('bmad')) {
281
+ // Potential V4 legacy folder
282
+ potentialV4Folders.push(fullPath);
283
+ }
238
284
  }
239
285
  }
240
286
  }
@@ -242,8 +288,15 @@ class Detector {
242
288
  // Ignore errors reading directory
243
289
  }
244
290
 
291
+ // Only flag V4 folders if NO V6+ installation was found
292
+ if (!hasV6Installation && potentialV4Folders.length > 0) {
293
+ offenders.push(...potentialV4Folders);
294
+ }
295
+
245
296
  // Check inside various IDE command folders for legacy bmad folders
246
- // List of IDE config folders that might have commands directories
297
+ // V4 used folders like 'bmad-method' or custom names in IDE commands
298
+ // V6+ uses 'bmad' in IDE commands (hardcoded in IDE handlers)
299
+ // Legacy V4 IDE command folders won't have a corresponding V6+ installation
247
300
  const ideConfigFolders = ['.opencode', '.claude', '.crush', '.continue', '.cursor', '.windsurf', '.cline', '.roo-cline'];
248
301
 
249
302
  for (const ideFolder of ideConfigFolders) {
@@ -255,7 +308,9 @@ class Detector {
255
308
  for (const entry of commandEntries) {
256
309
  if (entry.isDirectory()) {
257
310
  const name = entry.name;
258
- // Find bmad-related folders (excluding exact 'bmad' if it exists)
311
+ // V4 used 'bmad-method' or similar in IDE commands folders
312
+ // V6+ uses 'bmad' (hardcoded)
313
+ // So anything that's NOT 'bmad' but starts with bmad/Bmad is likely V4
259
314
  if ((name.startsWith('bmad') || name.startsWith('Bmad') || name === 'BMad') && name !== 'bmad') {
260
315
  offenders.push(path.join(commandsPath, entry.name));
261
316
  }