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

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 (367) hide show
  1. package/.claude/settings.local.json +13 -6
  2. package/.github/workflows/{lint.yaml → quality.yaml} +19 -2
  3. package/.husky/pre-commit +4 -0
  4. package/README.md +59 -1
  5. package/bmad/_cfg/agent-manifest.csv +2 -8
  6. package/bmad/_cfg/files-manifest.csv +8 -202
  7. package/bmad/_cfg/ides/claude-code.yaml +3 -4
  8. package/bmad/_cfg/manifest.yaml +5 -4
  9. package/bmad/_cfg/task-manifest.csv +8 -1
  10. package/bmad/_cfg/tool-manifest.csv +2 -0
  11. package/bmad/_cfg/workflow-manifest.csv +4 -31
  12. package/bmad/bmb/config.yaml +2 -2
  13. package/bmad/bmb/workflows/create-agent/instructions.md +25 -9
  14. package/bmad/bmb/workflows/create-module/module-structure.md +34 -0
  15. package/bmad/core/config.yaml +2 -2
  16. package/docs/installers-bundlers/installers-modules-platforms-reference.md +61 -0
  17. package/package.json +5 -3
  18. package/src/core/tasks/adv-elicit.xml +1 -1
  19. package/src/modules/bmb/workflows/create-agent/instructions.md +25 -9
  20. package/src/modules/bmb/workflows/create-module/module-structure.md +34 -0
  21. package/src/modules/bmgd/README.md +208 -0
  22. package/src/modules/bmgd/_module-installer/install-config.yaml +66 -0
  23. package/src/modules/{bmm → bmgd}/agents/game-architect.agent.yaml +5 -12
  24. package/src/modules/{bmm → bmgd}/agents/game-designer.agent.yaml +10 -22
  25. package/src/modules/{bmm → bmgd}/agents/game-dev.agent.yaml +9 -10
  26. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +70 -0
  27. package/{bmad/bmm → src/modules/bmgd}/teams/team-gamedev.yaml +3 -1
  28. package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/workflow.yaml +7 -7
  29. package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/workflow.yaml +9 -9
  30. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +81 -0
  31. package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/narrative/workflow.yaml +6 -6
  32. package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/workflow.yaml +16 -16
  33. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/workflow.yaml +3 -1
  34. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/workflow.yaml +3 -1
  35. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/workflow.yaml +3 -1
  36. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/workflow.yaml +3 -1
  37. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/workflow.yaml +3 -1
  38. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/retrospective/workflow.yaml +3 -1
  39. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/workflow.yaml +3 -1
  40. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/workflow.yaml +3 -1
  41. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-done/workflow.yaml +3 -1
  42. package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-ready/workflow.yaml +3 -1
  43. package/src/modules/bmm/docs/README.md +8 -9
  44. package/src/modules/bmm/docs/agents-guide.md +0 -1
  45. package/src/modules/bmm/docs/brownfield-guide.md +5 -9
  46. package/src/modules/bmm/docs/faq.md +4 -6
  47. package/src/modules/bmm/docs/glossary.md +0 -1
  48. package/src/modules/bmm/docs/quick-spec-flow.md +4 -4
  49. package/src/modules/bmm/docs/quick-start.md +4 -4
  50. package/src/modules/bmm/docs/scale-adaptive-system.md +5 -5
  51. package/src/modules/bmm/docs/test-architecture.md +183 -118
  52. package/src/modules/bmm/docs/workflows-analysis.md +203 -539
  53. package/src/modules/bmm/docs/workflows-planning.md +326 -850
  54. package/src/modules/bmm/docs/workflows-solutioning.md +250 -505
  55. package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +65 -32
  56. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +4 -0
  57. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +1 -1
  58. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +34 -5
  59. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +1 -1
  60. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +8 -0
  61. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +6 -0
  62. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +47 -0
  63. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +50 -0
  64. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +18 -11
  65. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +18 -11
  66. package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +42 -65
  67. package/test/test-installation-components.js +214 -0
  68. package/tools/cli/bundlers/web-bundler.js +127 -8
  69. package/tools/cli/installers/lib/ide/auggie.js +9 -20
  70. package/tools/cli/installers/lib/ide/claude-code.js +33 -3
  71. package/tools/cli/installers/lib/ide/cursor.js +17 -0
  72. package/tools/cli/installers/lib/modules/manager.js +128 -0
  73. package/tools/cli/lib/yaml-xml-builder.js +9 -1
  74. package/tools/schema/agent.js +1 -0
  75. package/v6-open-items.md +3 -9
  76. package/web-bundles/bmm/agents/analyst.xml +5028 -0
  77. package/web-bundles/bmm/agents/architect.xml +2047 -0
  78. package/web-bundles/bmm/agents/dev.xml +68 -0
  79. package/web-bundles/bmm/agents/pm.xml +3808 -0
  80. package/web-bundles/bmm/agents/sm.xml +77 -0
  81. package/web-bundles/bmm/agents/tea.xml +66 -0
  82. package/web-bundles/bmm/agents/tech-writer.xml +84 -0
  83. package/web-bundles/bmm/agents/ux-designer.xml +2018 -0
  84. package/web-bundles/bmm/teams/team-fullstack.xml +12039 -0
  85. package/.claude/agents/bmad-analysis/api-documenter.md +0 -102
  86. package/.claude/agents/bmad-analysis/codebase-analyzer.md +0 -82
  87. package/.claude/agents/bmad-analysis/data-analyst.md +0 -101
  88. package/.claude/agents/bmad-analysis/pattern-detector.md +0 -84
  89. package/.claude/agents/bmad-planning/dependency-mapper.md +0 -83
  90. package/.claude/agents/bmad-planning/epic-optimizer.md +0 -81
  91. package/.claude/agents/bmad-planning/requirements-analyst.md +0 -61
  92. package/.claude/agents/bmad-planning/technical-decisions-curator.md +0 -168
  93. package/.claude/agents/bmad-planning/trend-spotter.md +0 -115
  94. package/.claude/agents/bmad-planning/user-journey-mapper.md +0 -123
  95. package/.claude/agents/bmad-planning/user-researcher.md +0 -72
  96. package/.claude/agents/bmad-research/market-researcher.md +0 -51
  97. package/.claude/agents/bmad-research/tech-debt-auditor.md +0 -106
  98. package/.claude/agents/bmad-review/document-reviewer.md +0 -102
  99. package/.claude/agents/bmad-review/technical-evaluator.md +0 -68
  100. package/.claude/agents/bmad-review/test-coverage-analyzer.md +0 -108
  101. package/.claude/commands/bmad/bmb/workflows/README.md +0 -67
  102. package/.claude/commands/bmad/bmm/agents/analyst.md +0 -67
  103. package/.claude/commands/bmad/bmm/agents/architect.md +0 -72
  104. package/.claude/commands/bmad/bmm/agents/dev.md +0 -69
  105. package/.claude/commands/bmad/bmm/agents/pm.md +0 -76
  106. package/.claude/commands/bmad/bmm/agents/sm.md +0 -85
  107. package/.claude/commands/bmad/bmm/agents/tea.md +0 -72
  108. package/.claude/commands/bmad/bmm/agents/tech-writer.md +0 -82
  109. package/.claude/commands/bmad/bmm/agents/ux-designer.md +0 -71
  110. package/.claude/commands/bmad/bmm/workflows/README.md +0 -132
  111. package/.claude/commands/bmad/bmm/workflows/architecture.md +0 -15
  112. package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +0 -15
  113. package/.claude/commands/bmad/bmm/workflows/code-review.md +0 -15
  114. package/.claude/commands/bmad/bmm/workflows/correct-course.md +0 -15
  115. package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +0 -15
  116. package/.claude/commands/bmad/bmm/workflows/create-story.md +0 -15
  117. package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +0 -15
  118. package/.claude/commands/bmad/bmm/workflows/dev-story.md +0 -15
  119. package/.claude/commands/bmad/bmm/workflows/document-project.md +0 -15
  120. package/.claude/commands/bmad/bmm/workflows/epic-tech-context.md +0 -15
  121. package/.claude/commands/bmad/bmm/workflows/narrative.md +0 -15
  122. package/.claude/commands/bmad/bmm/workflows/prd.md +0 -15
  123. package/.claude/commands/bmad/bmm/workflows/product-brief.md +0 -15
  124. package/.claude/commands/bmad/bmm/workflows/research.md +0 -15
  125. package/.claude/commands/bmad/bmm/workflows/retrospective.md +0 -15
  126. package/.claude/commands/bmad/bmm/workflows/solutioning-gate-check.md +0 -15
  127. package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +0 -15
  128. package/.claude/commands/bmad/bmm/workflows/story-context.md +0 -15
  129. package/.claude/commands/bmad/bmm/workflows/story-done.md +0 -15
  130. package/.claude/commands/bmad/bmm/workflows/story-ready.md +0 -15
  131. package/.claude/commands/bmad/bmm/workflows/tech-spec.md +0 -15
  132. package/.claude/commands/bmad/bmm/workflows/workflow-init.md +0 -15
  133. package/.claude/commands/bmad/bmm/workflows/workflow-status.md +0 -15
  134. package/.claude/commands/bmad/cis/agents/README.md +0 -104
  135. package/.claude/commands/bmad/cis/agents/brainstorming-coach.md +0 -62
  136. package/.claude/commands/bmad/cis/agents/creative-problem-solver.md +0 -62
  137. package/.claude/commands/bmad/cis/agents/design-thinking-coach.md +0 -62
  138. package/.claude/commands/bmad/cis/agents/innovation-strategist.md +0 -62
  139. package/.claude/commands/bmad/cis/agents/storyteller.md +0 -59
  140. package/.claude/commands/bmad/cis/workflows/README.md +0 -37
  141. package/.claude/commands/bmad/cis/workflows/design-thinking.md +0 -15
  142. package/.claude/commands/bmad/cis/workflows/innovation-strategy.md +0 -15
  143. package/.claude/commands/bmad/cis/workflows/problem-solving.md +0 -15
  144. package/.claude/commands/bmad/cis/workflows/storytelling.md +0 -15
  145. package/.claude/commands/bmad/core/workflows/README.md +0 -27
  146. package/bmad/_cfg/agents/bmm-analyst.customize.yaml +0 -42
  147. package/bmad/_cfg/agents/bmm-architect.customize.yaml +0 -42
  148. package/bmad/_cfg/agents/bmm-dev.customize.yaml +0 -42
  149. package/bmad/_cfg/agents/bmm-pm.customize.yaml +0 -42
  150. package/bmad/_cfg/agents/bmm-sm.customize.yaml +0 -42
  151. package/bmad/_cfg/agents/bmm-tea.customize.yaml +0 -42
  152. package/bmad/_cfg/agents/bmm-tech-writer.customize.yaml +0 -42
  153. package/bmad/_cfg/agents/bmm-ux-designer.customize.yaml +0 -42
  154. package/bmad/bmm/README.md +0 -128
  155. package/bmad/bmm/agents/analyst.md +0 -67
  156. package/bmad/bmm/agents/architect.md +0 -72
  157. package/bmad/bmm/agents/dev.md +0 -69
  158. package/bmad/bmm/agents/pm.md +0 -76
  159. package/bmad/bmm/agents/sm.md +0 -85
  160. package/bmad/bmm/agents/tea.md +0 -72
  161. package/bmad/bmm/agents/tech-writer.md +0 -82
  162. package/bmad/bmm/agents/ux-designer.md +0 -71
  163. package/bmad/bmm/config.yaml +0 -18
  164. package/bmad/bmm/tasks/daily-standup.xml +0 -85
  165. package/bmad/bmm/teams/team-fullstack.yaml +0 -11
  166. package/bmad/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  167. package/bmad/bmm/testarch/knowledge/component-tdd.md +0 -486
  168. package/bmad/bmm/testarch/knowledge/contract-testing.md +0 -957
  169. package/bmad/bmm/testarch/knowledge/data-factories.md +0 -500
  170. package/bmad/bmm/testarch/knowledge/email-auth.md +0 -721
  171. package/bmad/bmm/testarch/knowledge/error-handling.md +0 -725
  172. package/bmad/bmm/testarch/knowledge/feature-flags.md +0 -750
  173. package/bmad/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  174. package/bmad/bmm/testarch/knowledge/network-first.md +0 -486
  175. package/bmad/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  176. package/bmad/bmm/testarch/knowledge/playwright-config.md +0 -730
  177. package/bmad/bmm/testarch/knowledge/probability-impact.md +0 -601
  178. package/bmad/bmm/testarch/knowledge/risk-governance.md +0 -615
  179. package/bmad/bmm/testarch/knowledge/selective-testing.md +0 -732
  180. package/bmad/bmm/testarch/knowledge/selector-resilience.md +0 -527
  181. package/bmad/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  182. package/bmad/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  183. package/bmad/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  184. package/bmad/bmm/testarch/knowledge/test-quality.md +0 -664
  185. package/bmad/bmm/testarch/knowledge/timing-debugging.md +0 -372
  186. package/bmad/bmm/testarch/knowledge/visual-debugging.md +0 -524
  187. package/bmad/bmm/testarch/tea-index.csv +0 -22
  188. package/bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -110
  189. package/bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  190. package/bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -26
  191. package/bmad/bmm/workflows/1-analysis/domain-research/instructions.md +0 -423
  192. package/bmad/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  193. package/bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -36
  194. package/bmad/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  195. package/bmad/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
  196. package/bmad/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  197. package/bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -45
  198. package/bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  199. package/bmad/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  200. package/bmad/bmm/workflows/1-analysis/research/checklist.md +0 -299
  201. package/bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  202. package/bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -439
  203. package/bmad/bmm/workflows/1-analysis/research/instructions-market.md +0 -679
  204. package/bmad/bmm/workflows/1-analysis/research/instructions-router.md +0 -133
  205. package/bmad/bmm/workflows/1-analysis/research/instructions-technical.md +0 -538
  206. package/bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  207. package/bmad/bmm/workflows/1-analysis/research/template-market.md +0 -347
  208. package/bmad/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  209. package/bmad/bmm/workflows/1-analysis/research/workflow.yaml +0 -44
  210. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  211. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1301
  212. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
  213. package/bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -64
  214. package/bmad/bmm/workflows/2-plan-workflows/narrative/workflow.yaml +0 -29
  215. package/bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -350
  216. package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +0 -52
  217. package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +0 -169
  218. package/bmad/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +0 -45
  219. package/bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
  220. package/bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -408
  221. package/bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -237
  222. package/bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
  223. package/bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -46
  224. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -214
  225. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -80
  226. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +0 -200
  227. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +0 -451
  228. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -1115
  229. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  230. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
  231. package/bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -60
  232. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +0 -175
  233. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -305
  234. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +0 -146
  235. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +0 -189
  236. package/bmad/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +0 -64
  237. package/bmad/bmm/workflows/document-project/checklist.md +0 -245
  238. package/bmad/bmm/workflows/document-project/documentation-requirements.csv +0 -12
  239. package/bmad/bmm/workflows/document-project/instructions.md +0 -222
  240. package/bmad/bmm/workflows/document-project/templates/deep-dive-template.md +0 -345
  241. package/bmad/bmm/workflows/document-project/templates/index-template.md +0 -169
  242. package/bmad/bmm/workflows/document-project/templates/project-overview-template.md +0 -103
  243. package/bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
  244. package/bmad/bmm/workflows/document-project/templates/source-tree-template.md +0 -135
  245. package/bmad/bmm/workflows/document-project/workflow.yaml +0 -34
  246. package/bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
  247. package/bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  248. package/bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
  249. package/bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  250. package/bmad/bmm/workflows/techdoc/documentation-standards.md +0 -262
  251. package/bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  252. package/bmad/bmm/workflows/testarch/atdd/checklist.md +0 -373
  253. package/bmad/bmm/workflows/testarch/atdd/instructions.md +0 -785
  254. package/bmad/bmm/workflows/testarch/atdd/workflow.yaml +0 -52
  255. package/bmad/bmm/workflows/testarch/automate/checklist.md +0 -580
  256. package/bmad/bmm/workflows/testarch/automate/instructions.md +0 -1303
  257. package/bmad/bmm/workflows/testarch/automate/workflow.yaml +0 -61
  258. package/bmad/bmm/workflows/testarch/ci/checklist.md +0 -246
  259. package/bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
  260. package/bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
  261. package/bmad/bmm/workflows/testarch/ci/instructions.md +0 -517
  262. package/bmad/bmm/workflows/testarch/ci/workflow.yaml +0 -53
  263. package/bmad/bmm/workflows/testarch/framework/checklist.md +0 -321
  264. package/bmad/bmm/workflows/testarch/framework/instructions.md +0 -455
  265. package/bmad/bmm/workflows/testarch/framework/workflow.yaml +0 -53
  266. package/bmad/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
  267. package/bmad/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
  268. package/bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
  269. package/bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -56
  270. package/bmad/bmm/workflows/testarch/test-design/checklist.md +0 -234
  271. package/bmad/bmm/workflows/testarch/test-design/instructions.md +0 -621
  272. package/bmad/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
  273. package/bmad/bmm/workflows/testarch/test-design/workflow.yaml +0 -52
  274. package/bmad/bmm/workflows/testarch/test-review/checklist.md +0 -470
  275. package/bmad/bmm/workflows/testarch/test-review/instructions.md +0 -608
  276. package/bmad/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
  277. package/bmad/bmm/workflows/testarch/test-review/workflow.yaml +0 -53
  278. package/bmad/bmm/workflows/testarch/trace/checklist.md +0 -654
  279. package/bmad/bmm/workflows/testarch/trace/instructions.md +0 -1045
  280. package/bmad/bmm/workflows/testarch/trace/trace-template.md +0 -673
  281. package/bmad/bmm/workflows/testarch/trace/workflow.yaml +0 -66
  282. package/bmad/bmm/workflows/workflow-status/init/instructions.md +0 -771
  283. package/bmad/bmm/workflows/workflow-status/init/workflow.yaml +0 -27
  284. package/bmad/bmm/workflows/workflow-status/instructions.md +0 -386
  285. package/bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -120
  286. package/bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -108
  287. package/bmad/bmm/workflows/workflow-status/paths/game-design.yaml +0 -75
  288. package/bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -97
  289. package/bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -88
  290. package/bmad/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  291. package/bmad/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  292. package/bmad/bmm/workflows/workflow-status/project-levels.yaml +0 -59
  293. package/bmad/bmm/workflows/workflow-status/sample-level-3-workflow.yaml +0 -49
  294. package/bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -31
  295. package/bmad/bmm/workflows/workflow-status/workflow.yaml +0 -28
  296. package/src/modules/bmm/docs/troubleshooting.md +0 -680
  297. package/src/modules/bmm/teams/team-gamedev.yaml +0 -14
  298. package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +0 -81
  299. package/src/modules/bmm/workflows/2-plan-workflows/narrative/checklist.md +0 -139
  300. package/src/modules/bmm/workflows/2-plan-workflows/narrative/instructions-narrative.md +0 -608
  301. package/src/modules/bmm/workflows/2-plan-workflows/narrative/narrative-template.md +0 -195
  302. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-brain-methods.csv +0 -0
  303. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/game-context.md +0 -0
  304. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/brainstorm-game/instructions.md +0 -0
  305. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/checklist.md +0 -0
  306. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/instructions.md +0 -0
  307. /package/src/modules/{bmm/workflows/1-analysis → bmgd/workflows/1-preproduction}/game-brief/template.md +0 -0
  308. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/checklist.md +0 -0
  309. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/action-platformer.md +0 -0
  310. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/adventure.md +0 -0
  311. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/card-game.md +0 -0
  312. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/fighting.md +0 -0
  313. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/horror.md +0 -0
  314. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/idle-incremental.md +0 -0
  315. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/metroidvania.md +0 -0
  316. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/moba.md +0 -0
  317. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/party-game.md +0 -0
  318. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/puzzle.md +0 -0
  319. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/racing.md +0 -0
  320. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/rhythm.md +0 -0
  321. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/roguelike.md +0 -0
  322. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/rpg.md +0 -0
  323. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/sandbox.md +0 -0
  324. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/shooter.md +0 -0
  325. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/simulation.md +0 -0
  326. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/sports.md +0 -0
  327. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/strategy.md +0 -0
  328. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/survival.md +0 -0
  329. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/text-based.md +0 -0
  330. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/tower-defense.md +0 -0
  331. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/turn-based-tactics.md +0 -0
  332. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types/visual-novel.md +0 -0
  333. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/game-types.csv +0 -0
  334. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/gdd-template.md +0 -0
  335. /package/src/modules/{bmm/workflows/2-plan-workflows → bmgd/workflows/2-design}/gdd/instructions-gdd.md +0 -0
  336. /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/checklist.md +0 -0
  337. /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/instructions-narrative.md +0 -0
  338. /package/{bmad/bmm/workflows/2-plan-workflows → src/modules/bmgd/workflows/2-design}/narrative/narrative-template.md +0 -0
  339. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/architecture-patterns.yaml +0 -0
  340. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/architecture-template.md +0 -0
  341. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/checklist.md +0 -0
  342. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/decision-catalog.yaml +0 -0
  343. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/instructions.md +0 -0
  344. /package/{bmad/bmm/workflows/3-solutioning/architecture → src/modules/bmgd/workflows/3-technical/game-architecture}/pattern-categories.csv +0 -0
  345. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/backlog_template.md +0 -0
  346. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/checklist.md +0 -0
  347. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/code-review/instructions.md +0 -0
  348. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/checklist.md +0 -0
  349. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/correct-course/instructions.md +0 -0
  350. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/checklist.md +0 -0
  351. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/instructions.md +0 -0
  352. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/create-story/template.md +0 -0
  353. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/AUDIT-REPORT.md +0 -0
  354. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/checklist.md +0 -0
  355. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/dev-story/instructions.md +0 -0
  356. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/checklist.md +0 -0
  357. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/instructions.md +0 -0
  358. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/epic-tech-context/template.md +0 -0
  359. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/retrospective/instructions.md +0 -0
  360. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/checklist.md +0 -0
  361. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/instructions.md +0 -0
  362. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/sprint-planning/sprint-status-template.yaml +0 -0
  363. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/checklist.md +0 -0
  364. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/context-template.xml +0 -0
  365. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-context/instructions.md +0 -0
  366. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-done/instructions.md +0 -0
  367. /package/{bmad/bmm/workflows/4-implementation → src/modules/bmgd/workflows/4-production}/story-ready/instructions.md +0 -0
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Installation Component Tests
3
+ *
4
+ * Tests individual installation components in isolation:
5
+ * - Agent YAML → XML compilation
6
+ * - Manifest generation
7
+ * - Path resolution
8
+ * - Customization merging
9
+ *
10
+ * These are deterministic unit tests that don't require full installation.
11
+ * Usage: node test/test-installation-components.js
12
+ */
13
+
14
+ const path = require('node:path');
15
+ const fs = require('fs-extra');
16
+ const { YamlXmlBuilder } = require('../tools/cli/lib/yaml-xml-builder');
17
+ const { ManifestGenerator } = require('../tools/cli/installers/lib/core/manifest-generator');
18
+
19
+ // ANSI colors
20
+ const colors = {
21
+ reset: '\u001B[0m',
22
+ green: '\u001B[32m',
23
+ red: '\u001B[31m',
24
+ yellow: '\u001B[33m',
25
+ cyan: '\u001B[36m',
26
+ dim: '\u001B[2m',
27
+ };
28
+
29
+ let passed = 0;
30
+ let failed = 0;
31
+
32
+ /**
33
+ * Test helper: Assert condition
34
+ */
35
+ function assert(condition, testName, errorMessage = '') {
36
+ if (condition) {
37
+ console.log(`${colors.green}✓${colors.reset} ${testName}`);
38
+ passed++;
39
+ } else {
40
+ console.log(`${colors.red}✗${colors.reset} ${testName}`);
41
+ if (errorMessage) {
42
+ console.log(` ${colors.dim}${errorMessage}${colors.reset}`);
43
+ }
44
+ failed++;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Test Suite
50
+ */
51
+ async function runTests() {
52
+ console.log(`${colors.cyan}========================================`);
53
+ console.log('Installation Component Tests');
54
+ console.log(`========================================${colors.reset}\n`);
55
+
56
+ const projectRoot = path.join(__dirname, '..');
57
+
58
+ // ============================================================
59
+ // Test 1: YAML → XML Agent Compilation (In-Memory)
60
+ // ============================================================
61
+ console.log(`${colors.yellow}Test Suite 1: Agent Compilation${colors.reset}\n`);
62
+
63
+ try {
64
+ const builder = new YamlXmlBuilder();
65
+ const pmAgentPath = path.join(projectRoot, 'src/modules/bmm/agents/pm.agent.yaml');
66
+
67
+ // Create temp output path
68
+ const tempOutput = path.join(__dirname, 'temp-pm-agent.md');
69
+
70
+ try {
71
+ const result = await builder.buildAgent(pmAgentPath, null, tempOutput, { includeMetadata: true });
72
+
73
+ assert(result && result.outputPath === tempOutput, 'Agent compilation returns result object with outputPath');
74
+
75
+ // Read the output
76
+ const compiled = await fs.readFile(tempOutput, 'utf8');
77
+
78
+ assert(compiled.includes('<agent'), 'Compiled agent contains <agent> tag');
79
+
80
+ assert(compiled.includes('<persona>'), 'Compiled agent contains <persona> tag');
81
+
82
+ assert(compiled.includes('<menu>'), 'Compiled agent contains <menu> tag');
83
+
84
+ assert(compiled.includes('Product Manager'), 'Compiled agent contains agent title');
85
+
86
+ // Cleanup
87
+ await fs.remove(tempOutput);
88
+ } catch (error) {
89
+ assert(false, 'Agent compilation succeeds', error.message);
90
+ }
91
+ } catch (error) {
92
+ assert(false, 'YamlXmlBuilder instantiates', error.message);
93
+ }
94
+
95
+ console.log('');
96
+
97
+ // ============================================================
98
+ // Test 2: Customization Merging
99
+ // ============================================================
100
+ console.log(`${colors.yellow}Test Suite 2: Customization Merging${colors.reset}\n`);
101
+
102
+ try {
103
+ const builder = new YamlXmlBuilder();
104
+
105
+ // Test deepMerge function
106
+ const base = {
107
+ agent: {
108
+ metadata: { name: 'John', title: 'PM' },
109
+ persona: { role: 'Product Manager', style: 'Analytical' },
110
+ },
111
+ };
112
+
113
+ const customize = {
114
+ agent: {
115
+ metadata: { name: 'Sarah' }, // Override name only
116
+ persona: { style: 'Concise' }, // Override style only
117
+ },
118
+ };
119
+
120
+ const merged = builder.deepMerge(base, customize);
121
+
122
+ assert(merged.agent.metadata.name === 'Sarah', 'Deep merge overrides customized name');
123
+
124
+ assert(merged.agent.metadata.title === 'PM', 'Deep merge preserves non-overridden title');
125
+
126
+ assert(merged.agent.persona.role === 'Product Manager', 'Deep merge preserves non-overridden role');
127
+
128
+ assert(merged.agent.persona.style === 'Concise', 'Deep merge overrides customized style');
129
+ } catch (error) {
130
+ assert(false, 'Customization merging works', error.message);
131
+ }
132
+
133
+ console.log('');
134
+
135
+ // ============================================================
136
+ // Test 3: Path Resolution
137
+ // ============================================================
138
+ console.log(`${colors.yellow}Test Suite 3: Path Variable Resolution${colors.reset}\n`);
139
+
140
+ try {
141
+ const builder = new YamlXmlBuilder();
142
+
143
+ // Test path resolution logic (if exposed)
144
+ // This would test {project-root}, {installed_path}, {config_source} resolution
145
+
146
+ const testPath = '{project-root}/bmad/bmm/config.yaml';
147
+ const expectedPattern = /\/bmad\/bmm\/config\.yaml$/;
148
+
149
+ assert(
150
+ true, // Placeholder - would test actual resolution
151
+ 'Path variable resolution pattern matches expected format',
152
+ 'Note: This test validates path resolution logic exists',
153
+ );
154
+ } catch (error) {
155
+ assert(false, 'Path resolution works', error.message);
156
+ }
157
+
158
+ console.log('');
159
+
160
+ // ============================================================
161
+ // Test 5: TEA Agent Special Handling
162
+ // ============================================================
163
+ console.log(`${colors.yellow}Test Suite 5: TEA Agent Compilation${colors.reset}\n`);
164
+
165
+ try {
166
+ const builder = new YamlXmlBuilder();
167
+ const teaAgentPath = path.join(projectRoot, 'src/modules/bmm/agents/tea.agent.yaml');
168
+ const tempOutput = path.join(__dirname, 'temp-tea-agent.md');
169
+
170
+ try {
171
+ const result = await builder.buildAgent(teaAgentPath, null, tempOutput, { includeMetadata: true });
172
+ const compiled = await fs.readFile(tempOutput, 'utf8');
173
+
174
+ assert(compiled.includes('tea-index.csv'), 'TEA agent compilation includes critical_actions with tea-index.csv reference');
175
+
176
+ assert(compiled.includes('testarch/knowledge'), 'TEA agent compilation includes knowledge base path');
177
+
178
+ assert(compiled.includes('*test-design'), 'TEA agent menu includes test-design workflow');
179
+
180
+ // Cleanup
181
+ await fs.remove(tempOutput);
182
+ } catch (error) {
183
+ assert(false, 'TEA agent compiles successfully', error.message);
184
+ }
185
+ } catch (error) {
186
+ assert(false, 'TEA compilation test setup', error.message);
187
+ }
188
+
189
+ console.log('');
190
+
191
+ // ============================================================
192
+ // Summary
193
+ // ============================================================
194
+ console.log(`${colors.cyan}========================================`);
195
+ console.log('Test Results:');
196
+ console.log(` Passed: ${colors.green}${passed}${colors.reset}`);
197
+ console.log(` Failed: ${colors.red}${failed}${colors.reset}`);
198
+ console.log(`========================================${colors.reset}\n`);
199
+
200
+ if (failed === 0) {
201
+ console.log(`${colors.green}✨ All installation component tests passed!${colors.reset}\n`);
202
+ process.exit(0);
203
+ } else {
204
+ console.log(`${colors.red}❌ Some installation component tests failed${colors.reset}\n`);
205
+ process.exit(1);
206
+ }
207
+ }
208
+
209
+ // Run tests
210
+ runTests().catch((error) => {
211
+ console.error(`${colors.red}Test runner failed:${colors.reset}`, error.message);
212
+ console.error(error.stack);
213
+ process.exit(1);
214
+ });
@@ -51,8 +51,13 @@ class WebBundler {
51
51
  console.log(chalk.cyan.bold('═══════════════════════════════════════════════\n'));
52
52
 
53
53
  try {
54
- // Pre-discover all modules to generate complete manifests
54
+ // Vendor cross-module workflows FIRST
55
55
  const modules = await this.discoverModules();
56
+ for (const module of modules) {
57
+ await this.vendorCrossModuleWorkflows(module);
58
+ }
59
+
60
+ // Pre-discover all modules to generate complete manifests
56
61
  for (const module of modules) {
57
62
  await this.preDiscoverModule(module);
58
63
  }
@@ -92,6 +97,9 @@ class WebBundler {
92
97
  teams: [],
93
98
  };
94
99
 
100
+ // Vendor cross-module workflows first (if not already done by bundleAll)
101
+ await this.vendorCrossModuleWorkflows(moduleName);
102
+
95
103
  // Pre-discover all agents and teams for manifest generation
96
104
  await this.preDiscoverModule(moduleName);
97
105
 
@@ -134,6 +142,9 @@ class WebBundler {
134
142
 
135
143
  console.log(chalk.dim(` → Processing: ${agentName}`));
136
144
 
145
+ // Vendor cross-module workflows first (if not already done)
146
+ await this.vendorCrossModuleWorkflows(moduleName);
147
+
137
148
  const agentPath = path.join(this.modulesPath, moduleName, 'agents', agentFile);
138
149
 
139
150
  // Check if agent file exists
@@ -433,6 +444,97 @@ class WebBundler {
433
444
  return parts.join('\n');
434
445
  }
435
446
 
447
+ /**
448
+ * Vendor cross-module workflows for a module
449
+ * Scans source agent YAML files for workflow-install attributes and copies workflows
450
+ */
451
+ async vendorCrossModuleWorkflows(moduleName) {
452
+ const modulePath = path.join(this.modulesPath, moduleName);
453
+ const agentsPath = path.join(modulePath, 'agents');
454
+
455
+ if (!(await fs.pathExists(agentsPath))) {
456
+ return;
457
+ }
458
+
459
+ // Find all agent YAML files
460
+ const files = await fs.readdir(agentsPath);
461
+ const yamlFiles = files.filter((f) => f.endsWith('.agent.yaml'));
462
+
463
+ for (const agentFile of yamlFiles) {
464
+ const agentPath = path.join(agentsPath, agentFile);
465
+ const agentYaml = yaml.load(await fs.readFile(agentPath, 'utf8'));
466
+
467
+ const menuItems = agentYaml?.agent?.menu || [];
468
+ const workflowInstallItems = menuItems.filter((item) => item['workflow-install']);
469
+
470
+ for (const item of workflowInstallItems) {
471
+ const sourceWorkflowPath = item.workflow;
472
+ const installWorkflowPath = item['workflow-install'];
473
+
474
+ if (!sourceWorkflowPath || !installWorkflowPath) {
475
+ continue;
476
+ }
477
+
478
+ // Parse paths to extract module and workflow location
479
+ const sourceMatch = sourceWorkflowPath.match(/\{project-root\}\/bmad\/([^/]+)\/workflows\/(.+)/);
480
+ const installMatch = installWorkflowPath.match(/\{project-root\}\/bmad\/([^/]+)\/workflows\/(.+)/);
481
+
482
+ if (!sourceMatch || !installMatch) {
483
+ continue;
484
+ }
485
+
486
+ const sourceModule = sourceMatch[1];
487
+ const sourceWorkflowRelPath = sourceMatch[2];
488
+ const installModule = installMatch[1];
489
+ const installWorkflowRelPath = installMatch[2];
490
+
491
+ // Build actual filesystem paths
492
+ const actualSourceWorkflowPath = path.join(this.modulesPath, sourceModule, 'workflows', sourceWorkflowRelPath);
493
+ const actualDestWorkflowPath = path.join(this.modulesPath, installModule, 'workflows', installWorkflowRelPath);
494
+
495
+ // Check if source workflow exists
496
+ if (!(await fs.pathExists(actualSourceWorkflowPath))) {
497
+ console.log(chalk.yellow(` ⚠ Source workflow not found for vendoring: ${sourceWorkflowPath}`));
498
+ continue;
499
+ }
500
+
501
+ // Check if destination already exists (skip if already vendored)
502
+ if (await fs.pathExists(actualDestWorkflowPath)) {
503
+ continue;
504
+ }
505
+
506
+ // Get workflow directory (workflow.yaml is in a directory with other files)
507
+ const sourceWorkflowDir = path.dirname(actualSourceWorkflowPath);
508
+ const destWorkflowDir = path.dirname(actualDestWorkflowPath);
509
+
510
+ // Copy entire workflow directory
511
+ await fs.copy(sourceWorkflowDir, destWorkflowDir, { overwrite: false });
512
+
513
+ // Update config_source in the vendored workflow.yaml
514
+ const workflowYamlPath = actualDestWorkflowPath;
515
+ if (await fs.pathExists(workflowYamlPath)) {
516
+ await this.updateWorkflowConfigSource(workflowYamlPath, installModule);
517
+ }
518
+
519
+ console.log(chalk.dim(` → Vendored workflow: ${sourceWorkflowRelPath} → ${installModule}/workflows/${installWorkflowRelPath}`));
520
+ }
521
+ }
522
+ }
523
+
524
+ /**
525
+ * Update config_source in a vendored workflow YAML file
526
+ */
527
+ async updateWorkflowConfigSource(workflowYamlPath, newModuleName) {
528
+ let yamlContent = await fs.readFile(workflowYamlPath, 'utf8');
529
+
530
+ // Replace config_source with new module reference
531
+ const configSourcePattern = /config_source:\s*["']?\{project-root\}\/bmad\/[^/]+\/config\.yaml["']?/g;
532
+ const newConfigSource = `config_source: "{project-root}/bmad/${newModuleName}/config.yaml"`;
533
+
534
+ const updatedYaml = yamlContent.replaceAll(configSourcePattern, newConfigSource);
535
+ await fs.writeFile(workflowYamlPath, updatedYaml, 'utf8');
536
+ }
537
+
436
538
  /**
437
539
  * Pre-discover all agents and teams in a module for manifest generation
438
540
  */
@@ -595,16 +697,25 @@ class WebBundler {
595
697
  removeSkippedWorkflowCommands(agentXml, skippedWorkflows) {
596
698
  let modifiedXml = agentXml;
597
699
 
598
- // For each skipped workflow, find and remove the corresponding <c> command
700
+ // For each skipped workflow, find and remove menu items and commands
599
701
  for (const workflowPath of skippedWorkflows) {
600
- // Match: <c cmd="..." run-workflow="workflowPath">...</c>
601
702
  // Need to escape special regex characters in the path
602
703
  const escapedPath = workflowPath.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`);
603
704
 
604
- // Pattern to match the command line with this workflow
605
- const pattern = new RegExp(`\\s*<c\\s+cmd="[^"]*"\\s+run-workflow="[^"]*${escapedPath}"[^>]*>.*?</c>\\s*`, 'gs');
705
+ // Pattern 1: Remove <item> tags with workflow attribute
706
+ // Match: <item cmd="..." workflow="workflowPath">...</item>
707
+ const itemWorkflowPattern = new RegExp(`\\s*<item\\s+[^>]*workflow="[^"]*${escapedPath}"[^>]*>.*?</item>\\s*`, 'gs');
708
+ modifiedXml = modifiedXml.replace(itemWorkflowPattern, '');
606
709
 
607
- modifiedXml = modifiedXml.replace(pattern, '');
710
+ // Pattern 2: Remove <item> tags with run-workflow attribute
711
+ // Match: <item cmd="..." run-workflow="workflowPath">...</item>
712
+ const itemRunWorkflowPattern = new RegExp(`\\s*<item\\s+[^>]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?</item>\\s*`, 'gs');
713
+ modifiedXml = modifiedXml.replace(itemRunWorkflowPattern, '');
714
+
715
+ // Pattern 3: Remove <c> tags with run-workflow attribute (legacy)
716
+ // Match: <c cmd="..." run-workflow="workflowPath">...</c>
717
+ const cPattern = new RegExp(`\\s*<c\\s+[^>]*run-workflow="[^"]*${escapedPath}"[^>]*>.*?</c>\\s*`, 'gs');
718
+ modifiedXml = modifiedXml.replace(cPattern, '');
608
719
  }
609
720
 
610
721
  return modifiedXml;
@@ -894,9 +1005,12 @@ class WebBundler {
894
1005
  processed.add(bundleFilePath);
895
1006
 
896
1007
  // Read the file content
897
- const fileContent = await fs.readFile(bundleActualPath, 'utf8');
1008
+ let fileContent = await fs.readFile(bundleActualPath, 'utf8');
898
1009
  const fileExt = path.extname(bundleActualPath).toLowerCase().replace('.', '');
899
1010
 
1011
+ // Process {project-root} references before wrapping
1012
+ fileContent = this.processProjectRootReferences(fileContent);
1013
+
900
1014
  // Wrap in XML with proper escaping
901
1015
  const wrappedContent = this.wrapContentInXml(fileContent, bundleFilePath, fileExt);
902
1016
  dependencies.set(bundleFilePath, wrappedContent);
@@ -1447,7 +1561,10 @@ class WebBundler {
1447
1561
  }
1448
1562
 
1449
1563
  // Display warnings summary
1450
- if (this.stats.warnings.length > 0) {
1564
+ // Check if there are actually any warnings with content
1565
+ const hasActualWarnings = this.stats.warnings.some((w) => w && w.warnings && w.warnings.length > 0);
1566
+
1567
+ if (hasActualWarnings) {
1451
1568
  console.log(chalk.yellow('\n⚠ Missing Dependencies by Agent:'));
1452
1569
 
1453
1570
  // Group and display warnings by agent
@@ -1461,6 +1578,8 @@ class WebBundler {
1461
1578
  }
1462
1579
  }
1463
1580
  }
1581
+ } else {
1582
+ console.log(chalk.green('\n✓ No missing dependencies'));
1464
1583
  }
1465
1584
 
1466
1585
  // Final status
@@ -83,6 +83,9 @@ class AuggieSetup extends BaseIdeSetup {
83
83
  return { success: false, reason: 'no-locations' };
84
84
  }
85
85
 
86
+ // Clean up old BMAD installation first
87
+ await this.cleanup(projectDir);
88
+
86
89
  // Get agents, tasks, tools, and workflows (standalone only)
87
90
  const agents = await this.getAgents(bmadDir);
88
91
  const tasks = await this.getTasks(bmadDir, true);
@@ -305,31 +308,17 @@ BMAD ${workflow.module.toUpperCase()} module
305
308
  async cleanup(projectDir) {
306
309
  const fs = require('fs-extra');
307
310
 
308
- // Check common locations
311
+ // Check common locations - bmad folder structure
309
312
  const locations = [path.join(os.homedir(), '.augment', 'commands'), path.join(projectDir, '.augment', 'commands')];
310
313
 
311
314
  for (const location of locations) {
312
- const agentsDir = path.join(location, 'agents');
313
- const tasksDir = path.join(location, 'tasks');
314
- const toolsDir = path.join(location, 'tools');
315
- const workflowsDir = path.join(location, 'workflows');
316
-
317
- const dirs = [agentsDir, tasksDir, toolsDir, workflowsDir];
318
-
319
- for (const dir of dirs) {
320
- if (await fs.pathExists(dir)) {
321
- // Remove only BMAD files (those with module prefix)
322
- const files = await fs.readdir(dir);
323
- for (const file of files) {
324
- if (file.includes('-') && file.endsWith('.md')) {
325
- await fs.remove(path.join(dir, file));
326
- }
327
- }
328
- }
315
+ const bmadDir = path.join(location, 'bmad');
316
+
317
+ if (await fs.pathExists(bmadDir)) {
318
+ await fs.remove(bmadDir);
319
+ console.log(chalk.dim(` Removed old BMAD commands from ${location}`));
329
320
  }
330
321
  }
331
-
332
- console.log(chalk.dim('Cleaned up Auggie CLI configurations'));
333
322
  }
334
323
  }
335
324
 
@@ -81,6 +81,20 @@ class ClaudeCodeSetup extends BaseIdeSetup {
81
81
  return config;
82
82
  }
83
83
 
84
+ /**
85
+ * Cleanup old BMAD installation before reinstalling
86
+ * @param {string} projectDir - Project directory
87
+ */
88
+ async cleanup(projectDir) {
89
+ const fs = require('fs-extra');
90
+ const bmadCommandsDir = path.join(projectDir, this.configDir, this.commandsDir, 'bmad');
91
+
92
+ if (await fs.pathExists(bmadCommandsDir)) {
93
+ await fs.remove(bmadCommandsDir);
94
+ console.log(chalk.dim(` Removed old BMAD commands from ${this.name}`));
95
+ }
96
+ }
97
+
84
98
  /**
85
99
  * Setup Claude Code IDE configuration
86
100
  * @param {string} projectDir - Project directory
@@ -93,6 +107,9 @@ class ClaudeCodeSetup extends BaseIdeSetup {
93
107
 
94
108
  console.log(chalk.cyan(`Setting up ${this.name}...`));
95
109
 
110
+ // Clean up old BMAD installation first
111
+ await this.cleanup(projectDir);
112
+
96
113
  // Create .claude/commands directory structure
97
114
  const claudeDir = path.join(projectDir, this.configDir);
98
115
  const commandsDir = path.join(claudeDir, this.commandsDir);
@@ -145,7 +162,20 @@ class ClaudeCodeSetup extends BaseIdeSetup {
145
162
 
146
163
  // Generate workflow commands from manifest (if it exists)
147
164
  const workflowGen = new WorkflowCommandGenerator();
148
- const workflowResult = await workflowGen.generateWorkflowCommands(projectDir, bmadDir);
165
+ const { artifacts: workflowArtifacts } = await workflowGen.collectWorkflowArtifacts(bmadDir);
166
+
167
+ // Write only workflow-command artifacts, skip workflow-launcher READMEs
168
+ let workflowCommandCount = 0;
169
+ for (const artifact of workflowArtifacts) {
170
+ if (artifact.type === 'workflow-command') {
171
+ const moduleWorkflowsDir = path.join(bmadCommandsDir, artifact.module, 'workflows');
172
+ await this.ensureDir(moduleWorkflowsDir);
173
+ const commandPath = path.join(moduleWorkflowsDir, path.basename(artifact.relativePath));
174
+ await this.writeFile(commandPath, artifact.content);
175
+ workflowCommandCount++;
176
+ }
177
+ // Skip workflow-launcher READMEs as they would be treated as slash commands
178
+ }
149
179
 
150
180
  // Generate task and tool commands from manifests (if they exist)
151
181
  const taskToolGen = new TaskToolCommandGenerator();
@@ -153,8 +183,8 @@ class ClaudeCodeSetup extends BaseIdeSetup {
153
183
 
154
184
  console.log(chalk.green(`✓ ${this.name} configured:`));
155
185
  console.log(chalk.dim(` - ${agentCount} agents installed`));
156
- if (workflowResult.generated > 0) {
157
- console.log(chalk.dim(` - ${workflowResult.generated} workflow commands generated`));
186
+ if (workflowCommandCount > 0) {
187
+ console.log(chalk.dim(` - ${workflowCommandCount} workflow commands generated`));
158
188
  }
159
189
  if (taskToolResult.generated > 0) {
160
190
  console.log(
@@ -12,6 +12,20 @@ class CursorSetup extends BaseIdeSetup {
12
12
  this.rulesDir = 'rules';
13
13
  }
14
14
 
15
+ /**
16
+ * Cleanup old BMAD installation before reinstalling
17
+ * @param {string} projectDir - Project directory
18
+ */
19
+ async cleanup(projectDir) {
20
+ const fs = require('fs-extra');
21
+ const bmadRulesDir = path.join(projectDir, this.configDir, this.rulesDir, 'bmad');
22
+
23
+ if (await fs.pathExists(bmadRulesDir)) {
24
+ await fs.remove(bmadRulesDir);
25
+ console.log(chalk.dim(` Removed old BMAD rules from ${this.name}`));
26
+ }
27
+ }
28
+
15
29
  /**
16
30
  * Setup Cursor IDE configuration
17
31
  * @param {string} projectDir - Project directory
@@ -21,6 +35,9 @@ class CursorSetup extends BaseIdeSetup {
21
35
  async setup(projectDir, bmadDir, options = {}) {
22
36
  console.log(chalk.cyan(`Setting up ${this.name}...`));
23
37
 
38
+ // Clean up old BMAD installation first
39
+ await this.cleanup(projectDir);
40
+
24
41
  // Create .cursor/rules directory structure
25
42
  const cursorDir = path.join(projectDir, this.configDir);
26
43
  const rulesDir = path.join(cursorDir, this.rulesDir);