bmad-method 6.0.0-alpha.0 → 6.0.0-alpha.1

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 (788) hide show
  1. package/.claude/commands/bmad/bmb/agents/bmad-builder.md +70 -0
  2. package/.claude/commands/bmad/bmb/workflows/README.md +67 -0
  3. package/.claude/commands/bmad/bmb/workflows/audit-workflow.md +15 -0
  4. package/.claude/commands/bmad/bmb/workflows/convert-legacy.md +15 -0
  5. package/.claude/commands/bmad/bmb/workflows/create-agent.md +15 -0
  6. package/.claude/commands/bmad/bmb/workflows/create-module.md +15 -0
  7. package/.claude/commands/bmad/bmb/workflows/create-workflow.md +15 -0
  8. package/.claude/commands/bmad/bmb/workflows/edit-agent.md +15 -0
  9. package/.claude/commands/bmad/bmb/workflows/edit-module.md +15 -0
  10. package/.claude/commands/bmad/bmb/workflows/edit-workflow.md +15 -0
  11. package/.claude/commands/bmad/bmb/workflows/module-brief.md +15 -0
  12. package/.claude/commands/bmad/bmb/workflows/redoc.md +15 -0
  13. package/.claude/commands/bmad/bmd/agents/cli-chief.md +108 -0
  14. package/.claude/commands/bmad/bmd/agents/doc-keeper.md +115 -0
  15. package/.claude/commands/bmad/bmd/agents/release-chief.md +109 -0
  16. package/.claude/commands/bmad/core/agents/bmad-master.md +71 -0
  17. package/.claude/commands/bmad/core/tasks/index-docs.md +9 -0
  18. package/.claude/commands/bmad/core/tools/shard-doc.md +9 -0
  19. package/.claude/commands/bmad/core/workflows/README.md +27 -0
  20. package/.claude/commands/bmad/core/workflows/brainstorming.md +15 -0
  21. package/.claude/commands/bmad/core/workflows/party-mode.md +15 -0
  22. package/.claude/hooks/bmad-tts-injector.sh +415 -0
  23. package/.claude/hooks/bmad-voice-manager.sh +511 -0
  24. package/.claude/hooks/check-output-style.sh +112 -0
  25. package/.claude/hooks/download-extra-voices.sh +244 -0
  26. package/.claude/hooks/github-star-reminder.sh +154 -0
  27. package/.claude/hooks/language-manager.sh +392 -0
  28. package/.claude/hooks/learn-manager.sh +475 -0
  29. package/.claude/hooks/personality-manager.sh +438 -0
  30. package/.claude/hooks/piper-download-voices.sh +165 -0
  31. package/.claude/hooks/piper-installer.sh +178 -0
  32. package/.claude/hooks/piper-multispeaker-registry.sh +165 -0
  33. package/.claude/hooks/piper-voice-manager.sh +293 -0
  34. package/.claude/hooks/play-tts-elevenlabs.sh +404 -0
  35. package/.claude/hooks/play-tts-piper.sh +338 -0
  36. package/.claude/hooks/play-tts.sh +100 -0
  37. package/.claude/hooks/provider-commands.sh +540 -0
  38. package/.claude/hooks/provider-manager.sh +298 -0
  39. package/.claude/hooks/replay-target-audio.sh +95 -0
  40. package/.claude/hooks/sentiment-manager.sh +201 -0
  41. package/.claude/hooks/speed-manager.sh +291 -0
  42. package/.claude/hooks/voice-manager.sh +594 -0
  43. package/.claude/hooks/voices-config.sh +70 -0
  44. package/.claude/settings.local.json +41 -0
  45. package/.github/ISSUE_TEMPLATE/config.yaml +4 -0
  46. package/.github/ISSUE_TEMPLATE/idea_submission.md +2 -2
  47. package/.github/workflows/{format-check.yaml → lint.yaml} +19 -1
  48. package/.prettierignore +2 -0
  49. package/CHANGELOG.md +8 -2
  50. package/CONTRIBUTING.md +1 -0
  51. package/README.md +261 -0
  52. package/bmad/_cfg/agent-manifest.csv +7 -0
  53. package/bmad/_cfg/agents/bmb-bmad-builder.customize.yaml +42 -0
  54. package/bmad/_cfg/agents/bmd-cli-chief.customize.yaml +32 -0
  55. package/bmad/_cfg/agents/bmd-doc-keeper.customize.yaml +42 -0
  56. package/bmad/_cfg/agents/bmd-release-chief.customize.yaml +42 -0
  57. package/bmad/_cfg/agents/core-bmad-master.customize.yaml +42 -0
  58. package/bmad/_cfg/files-manifest.csv +83 -0
  59. package/bmad/_cfg/manifest.yaml +12 -0
  60. package/bmad/_cfg/task-manifest.csv +5 -0
  61. package/bmad/_cfg/tool-manifest.csv +2 -0
  62. package/bmad/_cfg/workflow-manifest.csv +15 -0
  63. package/bmad/bmb/README.md +132 -0
  64. package/bmad/bmb/agents/bmad-builder.md +70 -0
  65. package/bmad/bmb/config.yaml +14 -0
  66. package/bmad/bmb/workflows/audit-workflow/checklist.md +143 -0
  67. package/bmad/bmb/workflows/audit-workflow/instructions.md +341 -0
  68. package/bmad/bmb/workflows/audit-workflow/template.md +118 -0
  69. package/bmad/bmb/workflows/audit-workflow/workflow.yaml +23 -0
  70. package/bmad/bmb/workflows/audit-workflow/workflow.yaml.bak +21 -0
  71. package/bmad/bmb/workflows/convert-legacy/README.md +262 -0
  72. package/bmad/bmb/workflows/convert-legacy/checklist.md +205 -0
  73. package/bmad/bmb/workflows/convert-legacy/instructions.md +377 -0
  74. package/bmad/bmb/workflows/convert-legacy/workflow.yaml +32 -0
  75. package/bmad/bmb/workflows/create-agent/README.md +320 -0
  76. package/bmad/bmb/workflows/create-agent/agent-architecture.md +419 -0
  77. package/bmad/bmb/workflows/create-agent/agent-architecture.md.bak +412 -0
  78. package/bmad/bmb/workflows/create-agent/agent-command-patterns.md +759 -0
  79. package/bmad/bmb/workflows/create-agent/agent-command-patterns.md.bak +759 -0
  80. package/bmad/bmb/workflows/create-agent/agent-types.md +292 -0
  81. package/bmad/bmb/workflows/create-agent/brainstorm-context.md +174 -0
  82. package/bmad/bmb/workflows/create-agent/checklist.md +62 -0
  83. package/bmad/bmb/workflows/create-agent/communication-styles.md +202 -0
  84. package/bmad/bmb/workflows/create-agent/instructions.md +430 -0
  85. package/bmad/bmb/workflows/create-agent/workflow.yaml +37 -0
  86. package/bmad/bmb/workflows/create-module/README.md +220 -0
  87. package/bmad/bmb/workflows/create-module/README.md.bak +218 -0
  88. package/bmad/bmb/workflows/create-module/brainstorm-context.md +137 -0
  89. package/bmad/bmb/workflows/create-module/checklist.md +244 -0
  90. package/bmad/bmb/workflows/create-module/checklist.md.bak +245 -0
  91. package/bmad/bmb/workflows/create-module/installer-templates/install-config.yaml +92 -0
  92. package/bmad/bmb/workflows/create-module/installer-templates/installer.js +231 -0
  93. package/bmad/bmb/workflows/create-module/installer-templates/installer.js.bak +231 -0
  94. package/bmad/bmb/workflows/create-module/instructions.md +581 -0
  95. package/bmad/bmb/workflows/create-module/instructions.md.bak +521 -0
  96. package/bmad/bmb/workflows/create-module/module-structure.md +366 -0
  97. package/bmad/bmb/workflows/create-module/module-structure.md.bak +310 -0
  98. package/bmad/bmb/workflows/create-module/workflow.yaml +42 -0
  99. package/bmad/bmb/workflows/create-module/workflow.yaml.bak +40 -0
  100. package/bmad/bmb/workflows/create-workflow/README.md +277 -0
  101. package/bmad/bmb/workflows/create-workflow/brainstorm-context.md +197 -0
  102. package/bmad/bmb/workflows/create-workflow/checklist.md +94 -0
  103. package/bmad/bmb/workflows/create-workflow/instructions.md +716 -0
  104. package/bmad/bmb/workflows/create-workflow/workflow-creation-guide.md +1150 -0
  105. package/bmad/bmb/workflows/create-workflow/workflow-template/checklist.md +24 -0
  106. package/bmad/bmb/workflows/create-workflow/workflow-template/instructions.md +13 -0
  107. package/bmad/bmb/workflows/create-workflow/workflow-template/template.md +9 -0
  108. package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml +39 -0
  109. package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml.bak +39 -0
  110. package/bmad/bmb/workflows/create-workflow/workflow.yaml +40 -0
  111. package/bmad/bmb/workflows/create-workflow/workflow.yaml.bak +38 -0
  112. package/bmad/bmb/workflows/edit-agent/README.md +112 -0
  113. package/bmad/bmb/workflows/edit-agent/checklist.md +112 -0
  114. package/bmad/bmb/workflows/edit-agent/instructions.md +290 -0
  115. package/bmad/bmb/workflows/edit-agent/workflow.yaml +33 -0
  116. package/bmad/bmb/workflows/edit-module/README.md +187 -0
  117. package/bmad/bmb/workflows/edit-module/checklist.md +165 -0
  118. package/bmad/bmb/workflows/edit-module/instructions.md +339 -0
  119. package/bmad/bmb/workflows/edit-module/workflow.yaml +34 -0
  120. package/bmad/bmb/workflows/edit-workflow/README.md +119 -0
  121. package/bmad/bmb/workflows/edit-workflow/checklist.md +70 -0
  122. package/bmad/bmb/workflows/edit-workflow/instructions.md +342 -0
  123. package/bmad/bmb/workflows/edit-workflow/workflow.yaml +27 -0
  124. package/bmad/bmb/workflows/edit-workflow/workflow.yaml.bak +25 -0
  125. package/bmad/bmb/workflows/module-brief/README.md +264 -0
  126. package/bmad/bmb/workflows/module-brief/checklist.md +116 -0
  127. package/bmad/bmb/workflows/module-brief/instructions.md +267 -0
  128. package/bmad/bmb/workflows/module-brief/template.md +275 -0
  129. package/bmad/bmb/workflows/module-brief/workflow.yaml +29 -0
  130. package/bmad/bmb/workflows/module-brief/workflow.yaml.bak +27 -0
  131. package/bmad/bmb/workflows/redoc/README.md +87 -0
  132. package/bmad/bmb/workflows/redoc/checklist.md +99 -0
  133. package/bmad/bmb/workflows/redoc/instructions.md +265 -0
  134. package/bmad/bmb/workflows/redoc/workflow.yaml +32 -0
  135. package/bmad/bmb/workflows/redoc/workflow.yaml.bak +31 -0
  136. package/bmad/bmd/README.md +193 -0
  137. package/bmad/bmd/README.md.bak +193 -0
  138. package/bmad/bmd/agents/cli-chief-sidecar/instructions.md +102 -0
  139. package/bmad/bmd/agents/cli-chief-sidecar/instructions.md.bak +102 -0
  140. package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md +68 -0
  141. package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md.bak +68 -0
  142. package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +123 -0
  143. package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md.bak +123 -0
  144. package/bmad/bmd/agents/cli-chief-sidecar/memories.md +53 -0
  145. package/bmad/bmd/agents/cli-chief-sidecar/memories.md.bak +53 -0
  146. package/bmad/bmd/agents/cli-chief.md +108 -0
  147. package/bmad/bmd/agents/cli-chief.md.bak +108 -0
  148. package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md +177 -0
  149. package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md.bak +177 -0
  150. package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md +81 -0
  151. package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md.bak +81 -0
  152. package/bmad/bmd/agents/doc-keeper-sidecar/memories.md +88 -0
  153. package/bmad/bmd/agents/doc-keeper-sidecar/memories.md.bak +88 -0
  154. package/bmad/bmd/agents/doc-keeper.md +115 -0
  155. package/bmad/bmd/agents/doc-keeper.md.bak +115 -0
  156. package/bmad/bmd/agents/release-chief-sidecar/instructions.md +164 -0
  157. package/bmad/bmd/agents/release-chief-sidecar/instructions.md.bak +164 -0
  158. package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md +82 -0
  159. package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md.bak +82 -0
  160. package/bmad/bmd/agents/release-chief-sidecar/memories.md +73 -0
  161. package/bmad/bmd/agents/release-chief-sidecar/memories.md.bak +73 -0
  162. package/bmad/bmd/agents/release-chief.md +109 -0
  163. package/bmad/bmd/agents/release-chief.md.bak +109 -0
  164. package/bmad/bmd/config.yaml +10 -0
  165. package/bmad/core/agents/bmad-master.md +71 -0
  166. package/bmad/core/agents/bmad-web-orchestrator.agent.xml +122 -0
  167. package/bmad/core/config.yaml +9 -0
  168. package/bmad/core/tasks/adv-elicit-methods.csv +39 -0
  169. package/{src/core/tasks/adv-elicit.md → bmad/core/tasks/adv-elicit.xml} +6 -11
  170. package/{src/core/tasks/index-docs.md → bmad/core/tasks/index-docs.xml} +6 -10
  171. package/{src/core/tasks/validate-workflow.md → bmad/core/tasks/validate-workflow.xml} +4 -7
  172. package/bmad/core/tasks/workflow.xml +174 -0
  173. package/bmad/core/tools/shard-doc.xml +100 -0
  174. package/{src/modules/cis → bmad/core}/workflows/brainstorming/README.md +2 -2
  175. package/{src/modules/cis → bmad/core}/workflows/brainstorming/instructions.md +26 -22
  176. package/{src/modules/cis → bmad/core}/workflows/brainstorming/template.md +2 -2
  177. package/{src/modules/cis → bmad/core}/workflows/brainstorming/workflow.yaml +16 -3
  178. package/bmad/core/workflows/party-mode/instructions.md +188 -0
  179. package/bmad/core/workflows/party-mode/workflow.yaml +23 -0
  180. package/bmad/docs/claude-code-instructions.md +25 -0
  181. package/bmad/docs/codex-instructions.md +21 -0
  182. package/bmd/README.md +193 -0
  183. package/bmd/agents/cli-chief-sidecar/instructions.md +102 -0
  184. package/bmd/agents/cli-chief-sidecar/knowledge/README.md +68 -0
  185. package/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +123 -0
  186. package/bmd/agents/cli-chief-sidecar/memories.md +53 -0
  187. package/bmd/agents/cli-chief.agent.yaml +126 -0
  188. package/bmd/agents/doc-keeper-sidecar/instructions.md +177 -0
  189. package/bmd/agents/doc-keeper-sidecar/knowledge/README.md +81 -0
  190. package/bmd/agents/doc-keeper-sidecar/memories.md +88 -0
  191. package/bmd/agents/doc-keeper.agent.yaml +137 -0
  192. package/bmd/agents/release-chief-sidecar/instructions.md +164 -0
  193. package/bmd/agents/release-chief-sidecar/knowledge/README.md +82 -0
  194. package/bmd/agents/release-chief-sidecar/memories.md +73 -0
  195. package/bmd/agents/release-chief.agent.yaml +127 -0
  196. package/bmd/bmad-custom-module-installer-plan.md +1176 -0
  197. package/bmd/config.yaml +12 -0
  198. package/docs/bmad-brownfield-guide.md +1260 -0
  199. package/docs/conversion-report-shard-doc-2025-10-26.md +188 -0
  200. package/docs/ide-info/auggie.md +2 -2
  201. package/docs/ide-info/claude-code.md +4 -4
  202. package/docs/ide-info/codex.md +9 -20
  203. package/docs/ide-info/opencode.md +24 -0
  204. package/docs/installers-bundlers/ide-injections.md +0 -10
  205. package/docs/installers-bundlers/installers-modules-platforms-reference.md +22 -50
  206. package/docs/v4-to-v6-upgrade.md +225 -0
  207. package/eslint.config.mjs +4 -2
  208. package/package.json +11 -6
  209. package/src/core/_module-installer/{install-menu-config.yaml → install-config.yaml} +8 -4
  210. package/src/core/_module-installer/installer.js +1 -1
  211. package/src/core/agents/bmad-master.agent.yaml +39 -0
  212. package/src/core/agents/bmad-web-orchestrator.agent.xml +122 -0
  213. package/src/core/tasks/adv-elicit.xml +104 -0
  214. package/src/core/tasks/index-docs.xml +65 -0
  215. package/src/core/tasks/validate-workflow.xml +89 -0
  216. package/src/core/tasks/{workflow.md → workflow.xml} +42 -17
  217. package/src/core/tools/shard-doc.xml +100 -0
  218. package/src/core/workflows/brainstorming/README.md +271 -0
  219. package/src/core/workflows/brainstorming/brain-methods.csv +36 -0
  220. package/src/core/workflows/brainstorming/instructions.md +314 -0
  221. package/src/core/workflows/brainstorming/template.md +102 -0
  222. package/src/core/workflows/brainstorming/workflow.yaml +43 -0
  223. package/src/core/workflows/party-mode/instructions.md +30 -23
  224. package/src/core/workflows/party-mode/workflow.yaml +7 -8
  225. package/src/modules/bmb/README.md +132 -0
  226. package/src/modules/bmb/_module-installer/install-config.yaml +26 -0
  227. package/src/modules/bmb/agents/bmad-builder.agent.yaml +58 -0
  228. package/src/modules/bmb/workflows/audit-workflow/checklist.md +143 -0
  229. package/src/modules/bmb/workflows/audit-workflow/instructions.md +341 -0
  230. package/src/modules/bmb/workflows/audit-workflow/template.md +118 -0
  231. package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +25 -0
  232. package/src/modules/bmb/workflows/convert-legacy/README.md +32 -32
  233. package/src/modules/bmb/workflows/convert-legacy/checklist.md +21 -20
  234. package/src/modules/bmb/workflows/convert-legacy/instructions.md +130 -81
  235. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +7 -8
  236. package/src/modules/bmb/workflows/create-agent/README.md +96 -44
  237. package/src/modules/bmb/workflows/create-agent/agent-architecture.md +58 -51
  238. package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +153 -151
  239. package/src/modules/bmb/workflows/create-agent/agent-types.md +137 -22
  240. package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +4 -4
  241. package/src/modules/bmb/workflows/create-agent/checklist.md +30 -102
  242. package/src/modules/bmb/workflows/create-agent/communication-styles.md +22 -60
  243. package/src/modules/bmb/workflows/create-agent/instructions.md +309 -219
  244. package/src/modules/bmb/workflows/create-agent/workflow.yaml +24 -14
  245. package/src/modules/bmb/workflows/create-module/README.md +23 -21
  246. package/src/modules/bmb/workflows/create-module/brainstorm-context.md +1 -1
  247. package/src/modules/bmb/workflows/create-module/checklist.md +20 -21
  248. package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +92 -0
  249. package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +1 -1
  250. package/src/modules/bmb/workflows/create-module/instructions.md +309 -237
  251. package/src/modules/bmb/workflows/create-module/module-structure.md +104 -48
  252. package/src/modules/bmb/workflows/create-module/workflow.yaml +14 -17
  253. package/src/modules/bmb/workflows/create-workflow/README.md +68 -7
  254. package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +4 -4
  255. package/src/modules/bmb/workflows/create-workflow/checklist.md +22 -0
  256. package/src/modules/bmb/workflows/create-workflow/instructions.md +496 -47
  257. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +753 -59
  258. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +4 -3
  259. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +30 -0
  260. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +11 -11
  261. package/src/modules/bmb/workflows/edit-agent/README.md +112 -0
  262. package/src/modules/bmb/workflows/edit-agent/checklist.md +112 -0
  263. package/src/modules/bmb/workflows/edit-agent/instructions.md +290 -0
  264. package/src/modules/bmb/workflows/edit-agent/workflow.yaml +35 -0
  265. package/src/modules/bmb/workflows/edit-module/README.md +187 -0
  266. package/src/modules/bmb/workflows/edit-module/checklist.md +165 -0
  267. package/src/modules/bmb/workflows/edit-module/instructions.md +339 -0
  268. package/src/modules/bmb/workflows/edit-module/workflow.yaml +36 -0
  269. package/src/modules/bmb/workflows/edit-workflow/README.md +58 -2
  270. package/src/modules/bmb/workflows/edit-workflow/instructions.md +289 -117
  271. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +5 -10
  272. package/src/modules/bmb/workflows/module-brief/README.md +16 -16
  273. package/src/modules/bmb/workflows/module-brief/checklist.md +4 -4
  274. package/src/modules/bmb/workflows/module-brief/instructions.md +9 -7
  275. package/src/modules/bmb/workflows/module-brief/template.md +9 -9
  276. package/src/modules/bmb/workflows/module-brief/workflow.yaml +5 -4
  277. package/src/modules/bmb/workflows/redoc/checklist.md +2 -2
  278. package/src/modules/bmb/workflows/redoc/instructions.md +20 -10
  279. package/src/modules/bmb/workflows/redoc/workflow.yaml +5 -4
  280. package/src/modules/bmm/README.md +141 -0
  281. package/src/modules/bmm/_module-installer/install-config.yaml +74 -0
  282. package/src/modules/bmm/_module-installer/installer.js +1 -1
  283. package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +1 -1
  284. package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +1 -1
  285. package/src/modules/bmm/agents/analyst.agent.yaml +43 -0
  286. package/src/modules/bmm/agents/architect.agent.yaml +41 -0
  287. package/src/modules/bmm/agents/dev.agent.yaml +43 -0
  288. package/src/modules/bmm/agents/game-architect.agent.yaml +35 -0
  289. package/src/modules/bmm/agents/game-designer.agent.yaml +47 -0
  290. package/src/modules/bmm/agents/game-dev.agent.yaml +39 -0
  291. package/src/modules/bmm/agents/pm.agent.yaml +50 -0
  292. package/src/modules/bmm/agents/sm.agent.yaml +67 -0
  293. package/src/modules/bmm/agents/tea.agent.yaml +59 -0
  294. package/src/modules/bmm/agents/ux-designer.agent.yaml +33 -0
  295. package/src/modules/bmm/sub-modules/claude-code/injections.yaml +1 -1
  296. package/src/modules/bmm/sub-modules/claude-code/readme.md +1 -1
  297. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{api-documenter.md → bmad-analysis/api-documenter.md} +17 -0
  298. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{codebase-analyzer.md → bmad-analysis/codebase-analyzer.md} +19 -1
  299. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{data-analyst.md → bmad-analysis/data-analyst.md} +17 -0
  300. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{pattern-detector.md → bmad-analysis/pattern-detector.md} +17 -0
  301. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{dependency-mapper.md → bmad-planning/dependency-mapper.md} +16 -0
  302. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{epic-optimizer.md → bmad-planning/epic-optimizer.md} +15 -0
  303. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{technical-decisions-curator.md → bmad-planning/technical-decisions-curator.md} +24 -2
  304. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{trend-spotter.md → bmad-planning/trend-spotter.md} +16 -0
  305. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{user-journey-mapper.md → bmad-planning/user-journey-mapper.md} +22 -0
  306. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{user-researcher.md → bmad-planning/user-researcher.md} +16 -0
  307. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{market-researcher.md → bmad-research/market-researcher.md} +17 -0
  308. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{tech-debt-auditor.md → bmad-research/tech-debt-auditor.md} +17 -0
  309. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{document-reviewer.md → bmad-review/document-reviewer.md} +17 -0
  310. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{technical-evaluator.md → bmad-review/technical-evaluator.md} +17 -0
  311. package/src/modules/bmm/sub-modules/claude-code/sub-agents/{test-coverage-analyzer.md → bmad-review/test-coverage-analyzer.md} +17 -0
  312. package/src/modules/bmm/tasks/{daily-standup.md → daily-standup.xml} +21 -27
  313. package/src/modules/bmm/tasks/{retrospective.md → retrospective.xml} +22 -28
  314. package/src/modules/bmm/teams/team-fullstack.yaml +11 -0
  315. package/src/modules/bmm/teams/team-gamedev.yaml +5 -0
  316. package/src/modules/bmm/testarch/README.md +311 -0
  317. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  318. package/src/modules/bmm/testarch/knowledge/component-tdd.md +486 -0
  319. package/src/modules/bmm/testarch/knowledge/contract-testing.md +957 -0
  320. package/src/modules/bmm/testarch/knowledge/data-factories.md +500 -0
  321. package/src/modules/bmm/testarch/knowledge/email-auth.md +721 -0
  322. package/src/modules/bmm/testarch/knowledge/error-handling.md +725 -0
  323. package/src/modules/bmm/testarch/knowledge/feature-flags.md +750 -0
  324. package/src/modules/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  325. package/src/modules/bmm/testarch/knowledge/network-first.md +486 -0
  326. package/src/modules/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  327. package/src/modules/bmm/testarch/knowledge/playwright-config.md +730 -0
  328. package/src/modules/bmm/testarch/knowledge/probability-impact.md +601 -0
  329. package/src/modules/bmm/testarch/knowledge/risk-governance.md +615 -0
  330. package/src/modules/bmm/testarch/knowledge/selective-testing.md +732 -0
  331. package/src/modules/bmm/testarch/knowledge/selector-resilience.md +527 -0
  332. package/src/modules/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  333. package/src/modules/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  334. package/src/modules/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  335. package/src/modules/bmm/testarch/knowledge/test-quality.md +664 -0
  336. package/src/modules/bmm/testarch/knowledge/timing-debugging.md +372 -0
  337. package/src/modules/bmm/testarch/knowledge/visual-debugging.md +524 -0
  338. package/src/modules/bmm/testarch/tea-index.csv +22 -0
  339. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/README.md +38 -0
  340. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/game-context.md +3 -3
  341. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/instructions.md +74 -12
  342. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/workflow.yaml +22 -3
  343. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/README.md +29 -0
  344. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +61 -8
  345. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +4 -4
  346. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +21 -3
  347. package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +5 -5
  348. package/src/modules/bmm/workflows/1-analysis/game-brief/checklist.md +2 -2
  349. package/src/modules/bmm/workflows/1-analysis/game-brief/instructions.md +151 -311
  350. package/src/modules/bmm/workflows/1-analysis/game-brief/template.md +2 -2
  351. package/src/modules/bmm/workflows/1-analysis/game-brief/workflow.yaml +16 -6
  352. package/src/modules/bmm/workflows/1-analysis/product-brief/README.md +4 -4
  353. package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +2 -2
  354. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +147 -179
  355. package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +4 -4
  356. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +16 -6
  357. package/src/modules/bmm/workflows/1-analysis/research/README.md +3 -3
  358. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-competitor-analyzer.md +1 -1
  359. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-market-researcher.md +2 -2
  360. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-trend-spotter.md +2 -2
  361. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +80 -17
  362. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +71 -11
  363. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +72 -38
  364. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +73 -14
  365. package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +1 -1
  366. package/src/modules/bmm/workflows/1-analysis/research/template-market.md +1 -1
  367. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +21 -121
  368. package/src/modules/bmm/workflows/2-plan-workflows/README.md +258 -0
  369. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +310 -0
  370. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +1283 -0
  371. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +145 -0
  372. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +42 -0
  373. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/README.md +16 -16
  374. package/src/modules/bmm/workflows/2-plan-workflows/gdd/checklist.md +148 -0
  375. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/action-platformer.md +1 -1
  376. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/adventure.md +1 -1
  377. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/card-game.md +2 -2
  378. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/fighting.md +1 -1
  379. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/horror.md +2 -2
  380. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/idle-incremental.md +1 -1
  381. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/moba.md +4 -4
  382. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/party-game.md +1 -1
  383. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/racing.md +3 -3
  384. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/rhythm.md +1 -1
  385. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/roguelike.md +2 -2
  386. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/rpg.md +3 -3
  387. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/sandbox.md +4 -4
  388. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/shooter.md +3 -3
  389. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/simulation.md +3 -3
  390. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/sports.md +3 -3
  391. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/strategy.md +3 -3
  392. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/survival.md +2 -2
  393. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/text-based.md +3 -3
  394. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/tower-defense.md +5 -5
  395. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/turn-based-tactics.md +4 -4
  396. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/visual-novel.md +1 -1
  397. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/gdd-template.md +6 -12
  398. package/src/modules/bmm/workflows/2-plan-workflows/gdd/instructions-gdd.md +475 -0
  399. package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +67 -0
  400. package/src/modules/bmm/workflows/2-plan-workflows/narrative/checklist.md +139 -0
  401. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/narrative/instructions-narrative.md +52 -12
  402. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/narrative/narrative-template.md +8 -8
  403. package/src/modules/bmm/workflows/2-plan-workflows/narrative/workflow.yaml +38 -0
  404. package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +117 -0
  405. package/src/modules/bmm/workflows/2-plan-workflows/prd/epics-template.md +63 -0
  406. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +449 -0
  407. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +62 -0
  408. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +46 -0
  409. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +107 -0
  410. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +11 -0
  411. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +167 -0
  412. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +278 -0
  413. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +269 -0
  414. package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/tech-spec/tech-spec-template.md +0 -4
  415. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +56 -0
  416. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +52 -0
  417. package/src/modules/bmm/workflows/3-solutioning/README.md +1 -565
  418. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +347 -0
  419. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +103 -0
  420. package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +244 -0
  421. package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +222 -0
  422. package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +703 -0
  423. package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +13 -0
  424. package/src/modules/bmm/workflows/3-solutioning/architecture/readme.md +318 -0
  425. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +54 -0
  426. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/README.md +177 -0
  427. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +175 -0
  428. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +273 -0
  429. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +146 -0
  430. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +189 -0
  431. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +40 -0
  432. package/src/modules/bmm/workflows/4-implementation/README.md +221 -0
  433. package/src/modules/bmm/workflows/4-implementation/{review-story → code-review}/README.md +4 -7
  434. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +391 -0
  435. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +56 -0
  436. package/src/modules/bmm/workflows/4-implementation/correct-course/README.md +73 -0
  437. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +5 -5
  438. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +64 -53
  439. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +10 -0
  440. package/src/modules/bmm/workflows/4-implementation/create-story/README.md +117 -30
  441. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +240 -39
  442. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +193 -22
  443. package/src/modules/bmm/workflows/4-implementation/create-story/template.md +2 -8
  444. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +11 -34
  445. package/src/modules/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +367 -0
  446. package/src/modules/bmm/workflows/4-implementation/dev-story/README.md +189 -67
  447. package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +1 -1
  448. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +215 -40
  449. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +12 -37
  450. package/src/modules/bmm/workflows/{3-solutioning/tech-spec → 4-implementation/epic-tech-context}/README.md +6 -6
  451. package/src/modules/bmm/workflows/{3-solutioning/tech-spec → 4-implementation/epic-tech-context}/checklist.md +1 -1
  452. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +160 -0
  453. package/src/modules/bmm/workflows/{3-solutioning/tech-spec → 4-implementation/epic-tech-context}/template.md +1 -1
  454. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +34 -0
  455. package/src/modules/bmm/workflows/4-implementation/retrospective/README.md +77 -0
  456. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +236 -148
  457. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +8 -4
  458. package/src/modules/bmm/workflows/4-implementation/sprint-planning/README.md +156 -0
  459. package/src/modules/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  460. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +221 -0
  461. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  462. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +41 -0
  463. package/src/modules/bmm/workflows/4-implementation/story-context/README.md +1 -1
  464. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +146 -21
  465. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +8 -32
  466. package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +111 -0
  467. package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +27 -0
  468. package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +117 -0
  469. package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +27 -0
  470. package/src/modules/bmm/workflows/README.md +577 -0
  471. package/src/modules/bmm/workflows/document-project/README.md +444 -0
  472. package/src/modules/bmm/workflows/document-project/checklist.md +245 -0
  473. package/src/modules/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  474. package/src/modules/bmm/workflows/document-project/instructions.md +222 -0
  475. package/src/modules/bmm/workflows/document-project/templates/README.md +38 -0
  476. package/src/modules/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  477. package/src/modules/bmm/workflows/document-project/templates/index-template.md +169 -0
  478. package/src/modules/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  479. package/src/modules/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  480. package/src/modules/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  481. package/src/modules/bmm/workflows/document-project/workflow.yaml +36 -0
  482. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  483. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  484. package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  485. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  486. package/src/modules/bmm/workflows/testarch/README.md +26 -0
  487. package/src/modules/bmm/workflows/testarch/atdd/README.md +672 -0
  488. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
  489. package/src/modules/bmm/workflows/testarch/atdd/checklist.md +373 -0
  490. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +785 -0
  491. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +54 -0
  492. package/src/modules/bmm/workflows/testarch/automate/README.md +869 -0
  493. package/src/modules/bmm/workflows/testarch/automate/checklist.md +580 -0
  494. package/src/modules/bmm/workflows/testarch/automate/instructions.md +1303 -0
  495. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +63 -0
  496. package/src/modules/bmm/workflows/testarch/ci/README.md +493 -0
  497. package/src/modules/bmm/workflows/testarch/ci/checklist.md +246 -0
  498. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +165 -0
  499. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +128 -0
  500. package/src/modules/bmm/workflows/testarch/ci/instructions.md +517 -0
  501. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +55 -0
  502. package/src/modules/bmm/workflows/testarch/framework/README.md +340 -0
  503. package/src/modules/bmm/workflows/testarch/framework/checklist.md +321 -0
  504. package/src/modules/bmm/workflows/testarch/framework/instructions.md +455 -0
  505. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +55 -0
  506. package/src/modules/bmm/workflows/testarch/nfr-assess/README.md +469 -0
  507. package/src/modules/bmm/workflows/testarch/nfr-assess/checklist.md +405 -0
  508. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
  509. package/src/modules/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +443 -0
  510. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +58 -0
  511. package/src/modules/bmm/workflows/testarch/test-design/README.md +493 -0
  512. package/src/modules/bmm/workflows/testarch/test-design/checklist.md +234 -0
  513. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +621 -0
  514. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +285 -0
  515. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +54 -0
  516. package/src/modules/bmm/workflows/testarch/test-review/README.md +775 -0
  517. package/src/modules/bmm/workflows/testarch/test-review/checklist.md +470 -0
  518. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +608 -0
  519. package/src/modules/bmm/workflows/testarch/test-review/test-review-template.md +388 -0
  520. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +55 -0
  521. package/src/modules/bmm/workflows/testarch/trace/README.md +802 -0
  522. package/src/modules/bmm/workflows/testarch/trace/checklist.md +654 -0
  523. package/src/modules/bmm/workflows/testarch/trace/instructions.md +1045 -0
  524. package/src/modules/bmm/workflows/testarch/trace/trace-template.md +673 -0
  525. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +68 -0
  526. package/src/modules/bmm/workflows/workflow-status/README.md +241 -0
  527. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +297 -0
  528. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +28 -0
  529. package/src/modules/bmm/workflows/workflow-status/instructions.md +324 -0
  530. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-0.yaml +54 -0
  531. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-1.yaml +58 -0
  532. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-2.yaml +76 -0
  533. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-3.yaml +95 -0
  534. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-4.yaml +88 -0
  535. package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +75 -0
  536. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-0.yaml +45 -0
  537. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-1.yaml +49 -0
  538. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-2.yaml +78 -0
  539. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-3.yaml +73 -0
  540. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-4.yaml +75 -0
  541. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +59 -0
  542. package/src/modules/bmm/workflows/workflow-status/workflow-status-template.md +30 -0
  543. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +30 -0
  544. package/src/modules/cis/_module-installer/installer.js +1 -1
  545. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +23 -0
  546. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +23 -0
  547. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +23 -0
  548. package/src/modules/cis/agents/innovation-strategist.agent.yaml +23 -0
  549. package/src/modules/cis/agents/storyteller.agent.yaml +23 -0
  550. package/src/modules/cis/workflows/design-thinking/design-methods.csv +1 -1
  551. package/src/modules/cis/workflows/design-thinking/instructions.md +1 -1
  552. package/src/modules/cis/workflows/design-thinking/workflow.yaml +14 -0
  553. package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +2 -2
  554. package/src/modules/cis/workflows/innovation-strategy/instructions.md +1 -1
  555. package/src/modules/cis/workflows/innovation-strategy/template.md +4 -4
  556. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +14 -0
  557. package/src/modules/cis/workflows/problem-solving/instructions.md +1 -1
  558. package/src/modules/cis/workflows/problem-solving/solving-methods.csv +6 -6
  559. package/src/modules/cis/workflows/problem-solving/template.md +3 -3
  560. package/src/modules/cis/workflows/problem-solving/workflow.yaml +14 -0
  561. package/src/modules/cis/workflows/storytelling/instructions.md +35 -27
  562. package/src/modules/cis/workflows/storytelling/template.md +2 -2
  563. package/src/modules/cis/workflows/storytelling/workflow.yaml +14 -0
  564. package/src/utility/models/agent-activation-ide.xml +3 -3
  565. package/src/utility/models/agent-activation-web.xml +60 -0
  566. package/src/utility/models/agent-in-team-activation.xml +3 -0
  567. package/src/utility/models/fragments/activation-rules.xml +8 -0
  568. package/src/utility/models/fragments/activation-steps.xml +15 -0
  569. package/src/utility/models/fragments/handler-action.xml +4 -0
  570. package/src/utility/models/fragments/handler-data.xml +5 -0
  571. package/src/utility/models/fragments/handler-exec.xml +5 -0
  572. package/src/utility/models/fragments/handler-tmpl.xml +5 -0
  573. package/src/utility/models/fragments/handler-validate-workflow.xml +7 -0
  574. package/src/utility/models/fragments/handler-workflow.xml +9 -0
  575. package/src/utility/models/fragments/menu-handlers.xml +6 -0
  576. package/src/utility/models/fragments/web-bundle-activation-steps.xml +32 -0
  577. package/src/utility/templates/agent.customize.template.yaml +42 -0
  578. package/test/README.md +295 -0
  579. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +26 -0
  580. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +29 -0
  581. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +21 -0
  582. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +19 -0
  583. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +24 -0
  584. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +23 -0
  585. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +24 -0
  586. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +30 -0
  587. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +24 -0
  588. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +24 -0
  589. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +24 -0
  590. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +24 -0
  591. package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +26 -0
  592. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
  593. package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
  594. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +26 -0
  595. package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
  596. package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +25 -0
  597. package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +26 -0
  598. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +23 -0
  599. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +26 -0
  600. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +26 -0
  601. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +23 -0
  602. package/test/fixtures/agent-schema/invalid/persona/principles-as-string.agent.yaml +23 -0
  603. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +28 -0
  604. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +30 -0
  605. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +27 -0
  606. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +27 -0
  607. package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
  608. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +27 -0
  609. package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
  610. package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
  611. package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
  612. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +23 -0
  613. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +21 -0
  614. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +26 -0
  615. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +30 -0
  616. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +21 -0
  617. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +39 -0
  618. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +23 -0
  619. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +33 -0
  620. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +23 -0
  621. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +23 -0
  622. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +23 -0
  623. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +23 -0
  624. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +23 -0
  625. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +21 -0
  626. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +27 -0
  627. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +29 -0
  628. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +23 -0
  629. package/test/test-agent-schema.js +387 -0
  630. package/test/test-cli-integration.sh +159 -0
  631. package/test/unit-test-schema.js +133 -0
  632. package/tools/bmad-npx-wrapper.js +126 -0
  633. package/tools/cli/README.md +590 -0
  634. package/tools/cli/bmad-cli.js +0 -2
  635. package/tools/cli/bundlers/bundle-web.js +24 -2
  636. package/tools/cli/bundlers/test-bundler.js +1 -1
  637. package/tools/cli/bundlers/web-bundler.js +639 -40
  638. package/tools/cli/commands/build.js +458 -0
  639. package/tools/cli/commands/install.js +49 -8
  640. package/tools/cli/installers/lib/core/config-collector.js +222 -15
  641. package/tools/cli/installers/lib/core/dependency-resolver.js +5 -1
  642. package/tools/cli/installers/lib/core/detector.js +80 -14
  643. package/tools/cli/installers/lib/core/ide-config-manager.js +152 -0
  644. package/tools/cli/installers/lib/core/installer.js +1175 -150
  645. package/tools/cli/installers/lib/core/manifest-generator.js +454 -63
  646. package/tools/cli/installers/lib/core/manifest.js +95 -43
  647. package/tools/cli/installers/lib/ide/_base-ide.js +311 -20
  648. package/tools/cli/installers/lib/ide/auggie.js +92 -27
  649. package/tools/cli/installers/lib/ide/claude-code.js +132 -308
  650. package/tools/cli/installers/lib/ide/cline.js +149 -227
  651. package/tools/cli/installers/lib/ide/codex.js +141 -174
  652. package/tools/cli/installers/lib/ide/crush.js +109 -37
  653. package/tools/cli/installers/lib/ide/cursor.js +81 -13
  654. package/tools/cli/installers/lib/ide/gemini.js +24 -28
  655. package/tools/cli/installers/lib/ide/github-copilot.js +15 -14
  656. package/tools/cli/installers/lib/ide/manager.js +26 -35
  657. package/tools/cli/installers/lib/ide/opencode.js +213 -0
  658. package/tools/cli/installers/lib/ide/qwen.js +172 -70
  659. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +143 -0
  660. package/tools/cli/installers/lib/ide/shared/module-injections.js +133 -0
  661. package/tools/cli/installers/lib/ide/task-tool-command-generator.js +119 -0
  662. package/tools/cli/installers/lib/ide/trae.js +120 -24
  663. package/tools/cli/installers/lib/ide/windsurf.js +88 -36
  664. package/tools/cli/installers/lib/ide/workflow-command-generator.js +119 -46
  665. package/tools/cli/installers/lib/ide/workflow-command-template.md +7 -3
  666. package/tools/cli/installers/lib/modules/manager.js +123 -7
  667. package/tools/cli/lib/activation-builder.js +168 -0
  668. package/tools/cli/lib/agent-analyzer.js +81 -0
  669. package/tools/cli/lib/agent-party-generator.js +3 -3
  670. package/tools/cli/lib/ui.js +78 -3
  671. package/tools/cli/lib/xml-handler.js +46 -1
  672. package/tools/cli/lib/yaml-xml-builder.js +439 -0
  673. package/tools/cli/regenerate-manifests.js +1 -1
  674. package/tools/cli/test-yaml-builder.js +43 -0
  675. package/tools/format-workflow-md.js +263 -0
  676. package/tools/platform-codes.yaml +6 -0
  677. package/tools/schema/agent.js +231 -0
  678. package/tools/validate-agent-schema.js +110 -0
  679. package/v6-open-items.md +23 -0
  680. package/docs/codebase-flattener.md +0 -19
  681. package/readme.md +0 -216
  682. package/src/core/agents/bmad-master.md +0 -27
  683. package/src/core/agents/bmad-web-orchestrator.md +0 -71
  684. package/src/core/tasks/shard-doc.md +0 -57
  685. package/src/core/workflows/bmad-init/instructions.md +0 -79
  686. package/src/core/workflows/bmad-init/workflow.yaml +0 -24
  687. package/src/modules/bmb/_module-installer/install-menu-config.yaml +0 -16
  688. package/src/modules/bmb/agents/bmad-builder.md +0 -30
  689. package/src/modules/bmb/workflows/create-module/installer-templates/install-module-config.yaml +0 -132
  690. package/src/modules/bmm/_module-installer/install-menu-config.yaml +0 -49
  691. package/src/modules/bmm/agents/analyst.md +0 -26
  692. package/src/modules/bmm/agents/architect.md +0 -29
  693. package/src/modules/bmm/agents/dev.md +0 -61
  694. package/src/modules/bmm/agents/game-architect.md +0 -26
  695. package/src/modules/bmm/agents/game-designer.md +0 -27
  696. package/src/modules/bmm/agents/game-dev.md +0 -28
  697. package/src/modules/bmm/agents/pm.md +0 -26
  698. package/src/modules/bmm/agents/po.md +0 -25
  699. package/src/modules/bmm/agents/sm.md +0 -29
  700. package/src/modules/bmm/agents/tea.md +0 -32
  701. package/src/modules/bmm/agents/ux-expert.md +0 -24
  702. package/src/modules/bmm/teams/team-all.yaml +0 -7
  703. package/src/modules/bmm/teams/team-dev.yaml +0 -14
  704. package/src/modules/bmm/testarch/atdd.md +0 -40
  705. package/src/modules/bmm/testarch/automate.md +0 -38
  706. package/src/modules/bmm/testarch/ci.md +0 -39
  707. package/src/modules/bmm/testarch/framework.md +0 -41
  708. package/src/modules/bmm/testarch/nfr-assess.md +0 -38
  709. package/src/modules/bmm/testarch/risk-profile.md +0 -38
  710. package/src/modules/bmm/testarch/tea-commands.csv +0 -11
  711. package/src/modules/bmm/testarch/tea-gate.md +0 -38
  712. package/src/modules/bmm/testarch/tea-knowledge.md +0 -275
  713. package/src/modules/bmm/testarch/test-design.md +0 -39
  714. package/src/modules/bmm/testarch/test-levels-framework.md +0 -148
  715. package/src/modules/bmm/testarch/test-priorities-matrix.md +0 -174
  716. package/src/modules/bmm/testarch/trace-requirements.md +0 -38
  717. package/src/modules/bmm/workflows/2-plan/README.md +0 -203
  718. package/src/modules/bmm/workflows/2-plan/checklist.md +0 -369
  719. package/src/modules/bmm/workflows/2-plan/gdd/instructions-gdd.md +0 -480
  720. package/src/modules/bmm/workflows/2-plan/instructions-router.md +0 -222
  721. package/src/modules/bmm/workflows/2-plan/prd/analysis-template.md +0 -53
  722. package/src/modules/bmm/workflows/2-plan/prd/epics-template.md +0 -18
  723. package/src/modules/bmm/workflows/2-plan/prd/instructions-lg.md +0 -267
  724. package/src/modules/bmm/workflows/2-plan/prd/instructions-med.md +0 -251
  725. package/src/modules/bmm/workflows/2-plan/prd/prd-template.md +0 -73
  726. package/src/modules/bmm/workflows/2-plan/tech-spec/instructions-sm.md +0 -137
  727. package/src/modules/bmm/workflows/2-plan/ux/instructions-ux.md +0 -360
  728. package/src/modules/bmm/workflows/2-plan/ux/ux-spec-template.md +0 -162
  729. package/src/modules/bmm/workflows/2-plan/workflow.yaml +0 -60
  730. package/src/modules/bmm/workflows/3-solutioning/ADR-template.md +0 -74
  731. package/src/modules/bmm/workflows/3-solutioning/checklist.md +0 -170
  732. package/src/modules/bmm/workflows/3-solutioning/instructions.md +0 -661
  733. package/src/modules/bmm/workflows/3-solutioning/project-types/backend-questions.md +0 -490
  734. package/src/modules/bmm/workflows/3-solutioning/project-types/cli-questions.md +0 -337
  735. package/src/modules/bmm/workflows/3-solutioning/project-types/data-questions.md +0 -472
  736. package/src/modules/bmm/workflows/3-solutioning/project-types/desktop-questions.md +0 -299
  737. package/src/modules/bmm/workflows/3-solutioning/project-types/embedded-questions.md +0 -118
  738. package/src/modules/bmm/workflows/3-solutioning/project-types/extension-questions.md +0 -374
  739. package/src/modules/bmm/workflows/3-solutioning/project-types/game-questions.md +0 -133
  740. package/src/modules/bmm/workflows/3-solutioning/project-types/infra-questions.md +0 -484
  741. package/src/modules/bmm/workflows/3-solutioning/project-types/library-questions.md +0 -146
  742. package/src/modules/bmm/workflows/3-solutioning/project-types/mobile-questions.md +0 -110
  743. package/src/modules/bmm/workflows/3-solutioning/project-types/project-types.csv +0 -12
  744. package/src/modules/bmm/workflows/3-solutioning/project-types/web-questions.md +0 -136
  745. package/src/modules/bmm/workflows/3-solutioning/tech-spec/instructions.md +0 -73
  746. package/src/modules/bmm/workflows/3-solutioning/tech-spec/workflow.yaml +0 -51
  747. package/src/modules/bmm/workflows/3-solutioning/templates/backend-service-architecture.md +0 -66
  748. package/src/modules/bmm/workflows/3-solutioning/templates/cli-tool-architecture.md +0 -66
  749. package/src/modules/bmm/workflows/3-solutioning/templates/data-pipeline-architecture.md +0 -66
  750. package/src/modules/bmm/workflows/3-solutioning/templates/desktop-app-architecture.md +0 -66
  751. package/src/modules/bmm/workflows/3-solutioning/templates/embedded-firmware-architecture.md +0 -66
  752. package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-architecture.md +0 -244
  753. package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-godot-guide.md +0 -428
  754. package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-unity-guide.md +0 -333
  755. package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-web-guide.md +0 -528
  756. package/src/modules/bmm/workflows/3-solutioning/templates/infrastructure-architecture.md +0 -66
  757. package/src/modules/bmm/workflows/3-solutioning/templates/library-package-architecture.md +0 -66
  758. package/src/modules/bmm/workflows/3-solutioning/templates/mobile-app-architecture.md +0 -66
  759. package/src/modules/bmm/workflows/3-solutioning/templates/registry.csv +0 -172
  760. package/src/modules/bmm/workflows/3-solutioning/templates/web-api-architecture.md +0 -66
  761. package/src/modules/bmm/workflows/3-solutioning/templates/web-fullstack-architecture.md +0 -277
  762. package/src/modules/bmm/workflows/3-solutioning/workflow.yaml +0 -65
  763. package/src/modules/bmm/workflows/4-implementation/review-story/instructions.md +0 -176
  764. package/src/modules/bmm/workflows/4-implementation/review-story/workflow.yaml +0 -99
  765. package/src/modules/cis/agents/brainstorming-coach.md +0 -24
  766. package/src/modules/cis/agents/creative-problem-solver.md +0 -24
  767. package/src/modules/cis/agents/design-thinking-coach.md +0 -24
  768. package/src/modules/cis/agents/innovation-strategist.md +0 -24
  769. package/src/modules/cis/agents/storyteller.md +0 -24
  770. package/tools/test-agents/captain-kirk-commander.md +0 -110
  771. package/tools/test-agents/data-operations-android.md +0 -123
  772. package/tools/test-agents/geordi-chief-engineer.md +0 -135
  773. package/tools/test-agents/isabella-martinez-ethicist.md +0 -109
  774. package/tools/test-agents/marcus-thompson-security.md +0 -109
  775. package/tools/test-agents/maya-patel-pragmatist.md +0 -82
  776. package/tools/test-agents/picard-diplomat-captain.md +0 -134
  777. package/tools/test-agents/spock-science-officer.md +0 -124
  778. package/tools/test-agents/william-smithers-technocrat.md +0 -71
  779. package/tools/test-agents/zara-chen-designer.md +0 -94
  780. /package/{src/modules/cis → bmad/core}/workflows/brainstorming/brain-methods.csv +0 -0
  781. /package/src/modules/bmm/_module-installer/assets/{technical-decisions-template.md → technical-decisions.md} +0 -0
  782. /package/src/modules/bmm/sub-modules/claude-code/sub-agents/{requirements-analyst.md → bmad-planning/requirements-analyst.md} +0 -0
  783. /package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/metroidvania.md +0 -0
  784. /package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types/puzzle.md +0 -0
  785. /package/src/modules/bmm/workflows/{2-plan → 2-plan-workflows}/gdd/game-types.csv +0 -0
  786. /package/src/modules/bmm/workflows/4-implementation/{review-story → code-review}/backlog_template.md +0 -0
  787. /package/src/modules/bmm/workflows/4-implementation/{review-story → code-review}/checklist.md +0 -0
  788. /package/src/modules/cis/_module-installer/{install-menu-config.yaml → install-config.yaml} +0 -0
@@ -1,6 +1,7 @@
1
1
  const path = require('node:path');
2
2
  const fs = require('fs-extra');
3
3
  const yaml = require('js-yaml');
4
+ const crypto = require('node:crypto');
4
5
  const { getSourcePath, getModulePath } = require('../../../lib/project-root');
5
6
 
6
7
  /**
@@ -11,22 +12,42 @@ class ManifestGenerator {
11
12
  this.workflows = [];
12
13
  this.agents = [];
13
14
  this.tasks = [];
15
+ this.tools = [];
14
16
  this.modules = [];
15
17
  this.files = [];
18
+ this.selectedIdes = [];
16
19
  }
17
20
 
18
21
  /**
19
22
  * Generate all manifests for the installation
20
23
  * @param {string} bmadDir - BMAD installation directory
21
24
  * @param {Array} selectedModules - Selected modules for installation
25
+ * @param {Array} installedFiles - All installed files (optional, for hash tracking)
22
26
  */
23
- async generateManifests(bmadDir, selectedModules) {
27
+ async generateManifests(bmadDir, selectedModules, installedFiles = [], options = {}) {
24
28
  // Create _cfg directory if it doesn't exist
25
29
  const cfgDir = path.join(bmadDir, '_cfg');
26
30
  await fs.ensureDir(cfgDir);
27
31
 
28
- // Store modules list
29
- this.modules = ['core', ...selectedModules];
32
+ // Store modules list (all modules including preserved ones)
33
+ const preservedModules = options.preservedModules || [];
34
+ this.modules = ['core', ...selectedModules, ...preservedModules];
35
+ this.updatedModules = ['core', ...selectedModules]; // Only these get rescanned
36
+ this.preservedModules = preservedModules; // These stay as-is in CSVs
37
+ this.bmadDir = bmadDir;
38
+ this.allInstalledFiles = installedFiles;
39
+
40
+ if (!Object.prototype.hasOwnProperty.call(options, 'ides')) {
41
+ throw new Error('ManifestGenerator requires `options.ides` to be provided – installer should supply the selected IDEs array.');
42
+ }
43
+
44
+ const resolvedIdes = options.ides ?? [];
45
+ if (!Array.isArray(resolvedIdes)) {
46
+ throw new TypeError('ManifestGenerator expected `options.ides` to be an array.');
47
+ }
48
+
49
+ // Filter out any undefined/null values from IDE list
50
+ this.selectedIdes = resolvedIdes.filter((ide) => ide && typeof ide === 'string');
30
51
 
31
52
  // Collect workflow data
32
53
  await this.collectWorkflows(selectedModules);
@@ -37,37 +58,51 @@ class ManifestGenerator {
37
58
  // Collect task data
38
59
  await this.collectTasks(selectedModules);
39
60
 
40
- // Write manifest files
41
- await this.writeMainManifest(cfgDir);
42
- await this.writeWorkflowManifest(cfgDir);
43
- await this.writeAgentManifest(cfgDir);
44
- await this.writeTaskManifest(cfgDir);
45
- await this.writeFilesManifest(cfgDir);
61
+ // Collect tool data
62
+ await this.collectTools(selectedModules);
63
+
64
+ // Write manifest files and collect their paths
65
+ const manifestFiles = [
66
+ await this.writeMainManifest(cfgDir),
67
+ await this.writeWorkflowManifest(cfgDir),
68
+ await this.writeAgentManifest(cfgDir),
69
+ await this.writeTaskManifest(cfgDir),
70
+ await this.writeToolManifest(cfgDir),
71
+ await this.writeFilesManifest(cfgDir),
72
+ ];
46
73
 
47
74
  return {
48
75
  workflows: this.workflows.length,
49
76
  agents: this.agents.length,
50
77
  tasks: this.tasks.length,
78
+ tools: this.tools.length,
51
79
  files: this.files.length,
80
+ manifestFiles: manifestFiles,
52
81
  };
53
82
  }
54
83
 
55
84
  /**
56
85
  * Collect all workflows from core and selected modules
86
+ * Scans the INSTALLED bmad directory, not the source
57
87
  */
58
88
  async collectWorkflows(selectedModules) {
59
89
  this.workflows = [];
60
90
 
61
- // Get core workflows
62
- const corePath = getModulePath('core');
63
- const coreWorkflows = await this.getWorkflowsFromPath(corePath, 'core');
64
- this.workflows.push(...coreWorkflows);
91
+ // Get core workflows from installed bmad directory
92
+ const corePath = path.join(this.bmadDir, 'core');
93
+ if (await fs.pathExists(corePath)) {
94
+ const coreWorkflows = await this.getWorkflowsFromPath(corePath, 'core');
95
+ this.workflows.push(...coreWorkflows);
96
+ }
65
97
 
66
- // Get module workflows
98
+ // Get module workflows from installed bmad directory
67
99
  for (const moduleName of selectedModules) {
68
- const modulePath = getSourcePath(`modules/${moduleName}`);
69
- const moduleWorkflows = await this.getWorkflowsFromPath(modulePath, moduleName);
70
- this.workflows.push(...moduleWorkflows);
100
+ const modulePath = path.join(this.bmadDir, moduleName);
101
+
102
+ if (await fs.pathExists(modulePath)) {
103
+ const moduleWorkflows = await this.getWorkflowsFromPath(modulePath, moduleName);
104
+ this.workflows.push(...moduleWorkflows);
105
+ }
71
106
  }
72
107
  }
73
108
 
@@ -111,11 +146,15 @@ class ManifestGenerator {
111
146
  ? `bmad/core/workflows/${relativePath}/workflow.yaml`
112
147
  : `bmad/${moduleName}/workflows/${relativePath}/workflow.yaml`;
113
148
 
149
+ // Check for standalone property (default: false)
150
+ const standalone = workflow.standalone === true;
151
+
114
152
  workflows.push({
115
153
  name: workflow.name,
116
154
  description: workflow.description.replaceAll('"', '""'), // Escape quotes for CSV
117
155
  module: moduleName,
118
156
  path: installPath,
157
+ standalone: standalone,
119
158
  });
120
159
 
121
160
  // Add to files list
@@ -139,59 +178,101 @@ class ManifestGenerator {
139
178
 
140
179
  /**
141
180
  * Collect all agents from core and selected modules
181
+ * Scans the INSTALLED bmad directory, not the source
142
182
  */
143
183
  async collectAgents(selectedModules) {
144
184
  this.agents = [];
145
185
 
146
- // Get core agents
147
- const corePath = getModulePath('core');
148
- const coreAgentsPath = path.join(corePath, 'agents');
186
+ // Get core agents from installed bmad directory
187
+ const coreAgentsPath = path.join(this.bmadDir, 'core', 'agents');
149
188
  if (await fs.pathExists(coreAgentsPath)) {
150
189
  const coreAgents = await this.getAgentsFromDir(coreAgentsPath, 'core');
151
190
  this.agents.push(...coreAgents);
152
191
  }
153
192
 
154
- // Get module agents
193
+ // Get module agents from installed bmad directory
155
194
  for (const moduleName of selectedModules) {
156
- const modulePath = getSourcePath(`modules/${moduleName}`);
157
- const agentsPath = path.join(modulePath, 'agents');
195
+ const agentsPath = path.join(this.bmadDir, moduleName, 'agents');
158
196
 
159
197
  if (await fs.pathExists(agentsPath)) {
160
198
  const moduleAgents = await this.getAgentsFromDir(agentsPath, moduleName);
161
199
  this.agents.push(...moduleAgents);
162
200
  }
163
201
  }
202
+
203
+ // Get standalone agents from bmad/agents/ directory
204
+ const standaloneAgentsDir = path.join(this.bmadDir, 'agents');
205
+ if (await fs.pathExists(standaloneAgentsDir)) {
206
+ const agentDirs = await fs.readdir(standaloneAgentsDir, { withFileTypes: true });
207
+
208
+ for (const agentDir of agentDirs) {
209
+ if (!agentDir.isDirectory()) continue;
210
+
211
+ const agentDirPath = path.join(standaloneAgentsDir, agentDir.name);
212
+ const standaloneAgents = await this.getAgentsFromDir(agentDirPath, 'standalone');
213
+ this.agents.push(...standaloneAgents);
214
+ }
215
+ }
164
216
  }
165
217
 
166
218
  /**
167
219
  * Get agents from a directory
220
+ * Only includes compiled .md files (not .agent.yaml source files)
168
221
  */
169
222
  async getAgentsFromDir(dirPath, moduleName) {
170
223
  const agents = [];
171
224
  const files = await fs.readdir(dirPath);
172
225
 
173
226
  for (const file of files) {
174
- if (file.endsWith('.md')) {
227
+ // Only include .md files, skip .agent.yaml source files and README.md
228
+ if (file.endsWith('.md') && !file.endsWith('.agent.yaml') && file.toLowerCase() !== 'readme.md') {
175
229
  const filePath = path.join(dirPath, file);
176
230
  const content = await fs.readFile(filePath, 'utf8');
177
231
 
232
+ // Skip files that don't contain <agent> tag (e.g., README files)
233
+ if (!content.includes('<agent')) {
234
+ continue;
235
+ }
236
+
178
237
  // Skip web-only agents
179
238
  if (content.includes('localskip="true"')) {
180
239
  continue;
181
240
  }
182
241
 
183
- // Extract agent metadata from content if possible
242
+ // Extract agent metadata from the XML structure
184
243
  const nameMatch = content.match(/name="([^"]+)"/);
185
- const descMatch = content.match(/<objective>([^<]+)<\/objective>/);
244
+ const titleMatch = content.match(/title="([^"]+)"/);
245
+ const iconMatch = content.match(/icon="([^"]+)"/);
246
+
247
+ // Extract persona fields
248
+ const roleMatch = content.match(/<role>([^<]+)<\/role>/);
249
+ const identityMatch = content.match(/<identity>([\s\S]*?)<\/identity>/);
250
+ const styleMatch = content.match(/<communication_style>([\s\S]*?)<\/communication_style>/);
251
+ const principlesMatch = content.match(/<principles>([\s\S]*?)<\/principles>/);
186
252
 
187
253
  // Build relative path for installation
188
254
  const installPath = moduleName === 'core' ? `bmad/core/agents/${file}` : `bmad/${moduleName}/agents/${file}`;
189
255
 
190
256
  const agentName = file.replace('.md', '');
257
+
258
+ // Helper function to clean and escape CSV content
259
+ const cleanForCSV = (text) => {
260
+ if (!text) return '';
261
+ return text
262
+ .trim()
263
+ .replaceAll(/\s+/g, ' ') // Normalize whitespace
264
+ .replaceAll('"', '""'); // Escape quotes for CSV
265
+ };
266
+
191
267
  agents.push({
192
268
  name: agentName,
193
269
  displayName: nameMatch ? nameMatch[1] : agentName,
194
- description: descMatch ? descMatch[1].trim().replaceAll('"', '""') : '',
270
+ title: titleMatch ? titleMatch[1] : '',
271
+ icon: iconMatch ? iconMatch[1] : '',
272
+ role: roleMatch ? cleanForCSV(roleMatch[1]) : '',
273
+ identity: identityMatch ? cleanForCSV(identityMatch[1]) : '',
274
+ communicationStyle: styleMatch ? cleanForCSV(styleMatch[1]) : '',
275
+ principles: principlesMatch ? cleanForCSV(principlesMatch[1]) : '',
195
276
  module: moduleName,
196
277
  path: installPath,
197
278
  });
@@ -211,22 +292,21 @@ class ManifestGenerator {
211
292
 
212
293
  /**
213
294
  * Collect all tasks from core and selected modules
295
+ * Scans the INSTALLED bmad directory, not the source
214
296
  */
215
297
  async collectTasks(selectedModules) {
216
298
  this.tasks = [];
217
299
 
218
- // Get core tasks
219
- const corePath = getModulePath('core');
220
- const coreTasksPath = path.join(corePath, 'tasks');
300
+ // Get core tasks from installed bmad directory
301
+ const coreTasksPath = path.join(this.bmadDir, 'core', 'tasks');
221
302
  if (await fs.pathExists(coreTasksPath)) {
222
303
  const coreTasks = await this.getTasksFromDir(coreTasksPath, 'core');
223
304
  this.tasks.push(...coreTasks);
224
305
  }
225
306
 
226
- // Get module tasks
307
+ // Get module tasks from installed bmad directory
227
308
  for (const moduleName of selectedModules) {
228
- const modulePath = getSourcePath(`modules/${moduleName}`);
229
- const tasksPath = path.join(modulePath, 'tasks');
309
+ const tasksPath = path.join(this.bmadDir, moduleName, 'tasks');
230
310
 
231
311
  if (await fs.pathExists(tasksPath)) {
232
312
  const moduleTasks = await this.getTasksFromDir(tasksPath, moduleName);
@@ -243,24 +323,34 @@ class ManifestGenerator {
243
323
  const files = await fs.readdir(dirPath);
244
324
 
245
325
  for (const file of files) {
246
- if (file.endsWith('.md')) {
326
+ // Check for both .xml and .md files
327
+ if (file.endsWith('.xml') || file.endsWith('.md')) {
247
328
  const filePath = path.join(dirPath, file);
248
329
  const content = await fs.readFile(filePath, 'utf8');
249
330
 
250
331
  // Extract task metadata from content if possible
251
332
  const nameMatch = content.match(/name="([^"]+)"/);
333
+
334
+ // Try description attribute first, fall back to <objective> element
335
+ const descMatch = content.match(/description="([^"]+)"/);
252
336
  const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
337
+ const description = descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '';
338
+
339
+ // Check for standalone attribute in <task> tag (default: false)
340
+ const standaloneMatch = content.match(/<task[^>]+standalone="true"/);
341
+ const standalone = !!standaloneMatch;
253
342
 
254
343
  // Build relative path for installation
255
344
  const installPath = moduleName === 'core' ? `bmad/core/tasks/${file}` : `bmad/${moduleName}/tasks/${file}`;
256
345
 
257
- const taskName = file.replace('.md', '');
346
+ const taskName = file.replace(/\.(xml|md)$/, '');
258
347
  tasks.push({
259
348
  name: taskName,
260
349
  displayName: nameMatch ? nameMatch[1] : taskName,
261
- description: objMatch ? objMatch[1].trim().replaceAll('"', '""') : '',
350
+ description: description.replaceAll('"', '""'),
262
351
  module: moduleName,
263
352
  path: installPath,
353
+ standalone: standalone,
264
354
  });
265
355
 
266
356
  // Add to files list
@@ -276,8 +366,85 @@ class ManifestGenerator {
276
366
  return tasks;
277
367
  }
278
368
 
369
+ /**
370
+ * Collect all tools from core and selected modules
371
+ * Scans the INSTALLED bmad directory, not the source
372
+ */
373
+ async collectTools(selectedModules) {
374
+ this.tools = [];
375
+
376
+ // Get core tools from installed bmad directory
377
+ const coreToolsPath = path.join(this.bmadDir, 'core', 'tools');
378
+ if (await fs.pathExists(coreToolsPath)) {
379
+ const coreTools = await this.getToolsFromDir(coreToolsPath, 'core');
380
+ this.tools.push(...coreTools);
381
+ }
382
+
383
+ // Get module tools from installed bmad directory
384
+ for (const moduleName of selectedModules) {
385
+ const toolsPath = path.join(this.bmadDir, moduleName, 'tools');
386
+
387
+ if (await fs.pathExists(toolsPath)) {
388
+ const moduleTools = await this.getToolsFromDir(toolsPath, moduleName);
389
+ this.tools.push(...moduleTools);
390
+ }
391
+ }
392
+ }
393
+
394
+ /**
395
+ * Get tools from a directory
396
+ */
397
+ async getToolsFromDir(dirPath, moduleName) {
398
+ const tools = [];
399
+ const files = await fs.readdir(dirPath);
400
+
401
+ for (const file of files) {
402
+ // Check for both .xml and .md files
403
+ if (file.endsWith('.xml') || file.endsWith('.md')) {
404
+ const filePath = path.join(dirPath, file);
405
+ const content = await fs.readFile(filePath, 'utf8');
406
+
407
+ // Extract tool metadata from content if possible
408
+ const nameMatch = content.match(/name="([^"]+)"/);
409
+
410
+ // Try description attribute first, fall back to <objective> element
411
+ const descMatch = content.match(/description="([^"]+)"/);
412
+ const objMatch = content.match(/<objective>([^<]+)<\/objective>/);
413
+ const description = descMatch ? descMatch[1] : objMatch ? objMatch[1].trim() : '';
414
+
415
+ // Check for standalone attribute in <tool> tag (default: false)
416
+ const standaloneMatch = content.match(/<tool[^>]+standalone="true"/);
417
+ const standalone = !!standaloneMatch;
418
+
419
+ // Build relative path for installation
420
+ const installPath = moduleName === 'core' ? `bmad/core/tools/${file}` : `bmad/${moduleName}/tools/${file}`;
421
+
422
+ const toolName = file.replace(/\.(xml|md)$/, '');
423
+ tools.push({
424
+ name: toolName,
425
+ displayName: nameMatch ? nameMatch[1] : toolName,
426
+ description: description.replaceAll('"', '""'),
427
+ module: moduleName,
428
+ path: installPath,
429
+ standalone: standalone,
430
+ });
431
+
432
+ // Add to files list
433
+ this.files.push({
434
+ type: 'tool',
435
+ name: toolName,
436
+ module: moduleName,
437
+ path: installPath,
438
+ });
439
+ }
440
+ }
441
+
442
+ return tools;
443
+ }
444
+
279
445
  /**
280
446
  * Write main manifest as YAML with installation info only
447
+ * @returns {string} Path to the manifest file
281
448
  */
282
449
  async writeMainManifest(cfgDir) {
283
450
  const manifestPath = path.join(cfgDir, 'manifest.yaml');
@@ -288,12 +455,8 @@ class ManifestGenerator {
288
455
  installDate: new Date().toISOString(),
289
456
  lastUpdated: new Date().toISOString(),
290
457
  },
291
- modules: this.modules.map((name) => ({
292
- name,
293
- version: '',
294
- shortTitle: '',
295
- })),
296
- ides: ['claude-code'],
458
+ modules: this.modules,
459
+ ides: this.selectedIdes,
297
460
  };
298
461
 
299
462
  const yamlStr = yaml.dump(manifest, {
@@ -304,81 +467,309 @@ class ManifestGenerator {
304
467
  });
305
468
 
306
469
  await fs.writeFile(manifestPath, yamlStr);
470
+ return manifestPath;
471
+ }
472
+
473
+ /**
474
+ * Read existing CSV and preserve rows for modules NOT being updated
475
+ * @param {string} csvPath - Path to existing CSV file
476
+ * @param {number} moduleColumnIndex - Which column contains the module name (0-indexed)
477
+ * @param {Array<string>} expectedColumns - Expected column names in order
478
+ * @param {Object} defaultValues - Default values for missing columns
479
+ * @returns {Array} Preserved CSV rows (without header), upgraded to match expected columns
480
+ */
481
+ async getPreservedCsvRows(csvPath, moduleColumnIndex, expectedColumns, defaultValues = {}) {
482
+ if (!(await fs.pathExists(csvPath)) || this.preservedModules.length === 0) {
483
+ return [];
484
+ }
485
+
486
+ try {
487
+ const content = await fs.readFile(csvPath, 'utf8');
488
+ const lines = content.trim().split('\n');
489
+
490
+ if (lines.length < 2) {
491
+ return []; // No data rows
492
+ }
493
+
494
+ // Parse header to understand old schema
495
+ const header = lines[0];
496
+ const headerColumns = header.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
497
+ const oldColumns = headerColumns.map((c) => c.replaceAll(/^"|"$/g, ''));
498
+
499
+ // Skip header row for data
500
+ const dataRows = lines.slice(1);
501
+ const preservedRows = [];
502
+
503
+ for (const row of dataRows) {
504
+ // Simple CSV parsing (handles quoted values)
505
+ const columns = row.match(/(".*?"|[^",\s]+)(?=\s*,|\s*$)/g) || [];
506
+ const cleanColumns = columns.map((c) => c.replaceAll(/^"|"$/g, ''));
507
+
508
+ const moduleValue = cleanColumns[moduleColumnIndex];
509
+
510
+ // Keep this row if it belongs to a preserved module
511
+ if (this.preservedModules.includes(moduleValue)) {
512
+ // Upgrade row to match expected schema
513
+ const upgradedRow = this.upgradeRowToSchema(cleanColumns, oldColumns, expectedColumns, defaultValues);
514
+ preservedRows.push(upgradedRow);
515
+ }
516
+ }
517
+
518
+ return preservedRows;
519
+ } catch (error) {
520
+ console.warn(`Warning: Failed to read existing CSV ${csvPath}:`, error.message);
521
+ return [];
522
+ }
523
+ }
524
+
525
+ /**
526
+ * Upgrade a CSV row from old schema to new schema
527
+ * @param {Array<string>} rowValues - Values from old row
528
+ * @param {Array<string>} oldColumns - Old column names
529
+ * @param {Array<string>} newColumns - New column names
530
+ * @param {Object} defaultValues - Default values for missing columns
531
+ * @returns {string} Upgraded CSV row
532
+ */
533
+ upgradeRowToSchema(rowValues, oldColumns, newColumns, defaultValues) {
534
+ const upgradedValues = [];
535
+
536
+ for (const newCol of newColumns) {
537
+ const oldIndex = oldColumns.indexOf(newCol);
538
+
539
+ if (oldIndex !== -1 && oldIndex < rowValues.length) {
540
+ // Column exists in old schema, use its value
541
+ upgradedValues.push(rowValues[oldIndex]);
542
+ } else if (defaultValues[newCol] === undefined) {
543
+ // Column missing, no default provided
544
+ upgradedValues.push('');
545
+ } else {
546
+ // Column missing, use default value
547
+ upgradedValues.push(defaultValues[newCol]);
548
+ }
549
+ }
550
+
551
+ // Properly quote values and join
552
+ return upgradedValues.map((v) => `"${v}"`).join(',');
307
553
  }
308
554
 
309
555
  /**
310
556
  * Write workflow manifest CSV
557
+ * @returns {string} Path to the manifest file
311
558
  */
312
559
  async writeWorkflowManifest(cfgDir) {
313
560
  const csvPath = path.join(cfgDir, 'workflow-manifest.csv');
314
561
 
315
- // Create CSV header
316
- let csv = 'name,description,module,path\n';
562
+ // Define expected columns and defaults for schema upgrade
563
+ const expectedColumns = ['name', 'description', 'module', 'path', 'standalone'];
564
+ const defaultValues = { standalone: 'false' };
565
+
566
+ // Get preserved rows from existing CSV (module is column 2, 0-indexed)
567
+ const preservedRows = await this.getPreservedCsvRows(csvPath, 2, expectedColumns, defaultValues);
317
568
 
318
- // Add rows
569
+ // Create CSV header with standalone column
570
+ let csv = 'name,description,module,path,standalone\n';
571
+
572
+ // Add new rows for updated modules
319
573
  for (const workflow of this.workflows) {
320
- csv += `"${workflow.name}","${workflow.description}","${workflow.module}","${workflow.path}"\n`;
574
+ csv += `"${workflow.name}","${workflow.description}","${workflow.module}","${workflow.path}","${workflow.standalone}"\n`;
575
+ }
576
+
577
+ // Add preserved rows for modules we didn't update
578
+ for (const row of preservedRows) {
579
+ csv += row + '\n';
321
580
  }
322
581
 
323
582
  await fs.writeFile(csvPath, csv);
583
+ return csvPath;
324
584
  }
325
585
 
326
586
  /**
327
587
  * Write agent manifest CSV
588
+ * @returns {string} Path to the manifest file
328
589
  */
329
590
  async writeAgentManifest(cfgDir) {
330
591
  const csvPath = path.join(cfgDir, 'agent-manifest.csv');
331
592
 
332
- // Create CSV header
333
- let csv = 'name,displayName,description,module,path\n';
334
-
335
- // Add rows
593
+ // Define expected columns (no schema changes for agents currently)
594
+ const expectedColumns = [
595
+ 'name',
596
+ 'displayName',
597
+ 'title',
598
+ 'icon',
599
+ 'role',
600
+ 'identity',
601
+ 'communicationStyle',
602
+ 'principles',
603
+ 'module',
604
+ 'path',
605
+ ];
606
+
607
+ // Get preserved rows from existing CSV (module is column 8, 0-indexed)
608
+ const preservedRows = await this.getPreservedCsvRows(csvPath, 8, expectedColumns);
609
+
610
+ // Create CSV header with persona fields
611
+ let csv = 'name,displayName,title,icon,role,identity,communicationStyle,principles,module,path\n';
612
+
613
+ // Add new rows for updated modules
336
614
  for (const agent of this.agents) {
337
- csv += `"${agent.name}","${agent.displayName}","${agent.description}","${agent.module}","${agent.path}"\n`;
615
+ csv += `"${agent.name}","${agent.displayName}","${agent.title}","${agent.icon}","${agent.role}","${agent.identity}","${agent.communicationStyle}","${agent.principles}","${agent.module}","${agent.path}"\n`;
616
+ }
617
+
618
+ // Add preserved rows for modules we didn't update
619
+ for (const row of preservedRows) {
620
+ csv += row + '\n';
338
621
  }
339
622
 
340
623
  await fs.writeFile(csvPath, csv);
624
+ return csvPath;
341
625
  }
342
626
 
343
627
  /**
344
628
  * Write task manifest CSV
629
+ * @returns {string} Path to the manifest file
345
630
  */
346
631
  async writeTaskManifest(cfgDir) {
347
632
  const csvPath = path.join(cfgDir, 'task-manifest.csv');
348
633
 
349
- // Create CSV header
350
- let csv = 'name,displayName,description,module,path\n';
634
+ // Define expected columns and defaults for schema upgrade
635
+ const expectedColumns = ['name', 'displayName', 'description', 'module', 'path', 'standalone'];
636
+ const defaultValues = { standalone: 'false' };
637
+
638
+ // Get preserved rows from existing CSV (module is column 3, 0-indexed)
639
+ const preservedRows = await this.getPreservedCsvRows(csvPath, 3, expectedColumns, defaultValues);
640
+
641
+ // Create CSV header with standalone column
642
+ let csv = 'name,displayName,description,module,path,standalone\n';
351
643
 
352
- // Add rows
644
+ // Add new rows for updated modules
353
645
  for (const task of this.tasks) {
354
- csv += `"${task.name}","${task.displayName}","${task.description}","${task.module}","${task.path}"\n`;
646
+ csv += `"${task.name}","${task.displayName}","${task.description}","${task.module}","${task.path}","${task.standalone}"\n`;
647
+ }
648
+
649
+ // Add preserved rows for modules we didn't update
650
+ for (const row of preservedRows) {
651
+ csv += row + '\n';
652
+ }
653
+
654
+ await fs.writeFile(csvPath, csv);
655
+ return csvPath;
656
+ }
657
+
658
+ /**
659
+ * Write tool manifest CSV
660
+ * @returns {string} Path to the manifest file
661
+ */
662
+ async writeToolManifest(cfgDir) {
663
+ const csvPath = path.join(cfgDir, 'tool-manifest.csv');
664
+
665
+ // Define expected columns and defaults for schema upgrade
666
+ const expectedColumns = ['name', 'displayName', 'description', 'module', 'path', 'standalone'];
667
+ const defaultValues = { standalone: 'false' };
668
+
669
+ // Get preserved rows from existing CSV (module is column 3, 0-indexed)
670
+ const preservedRows = await this.getPreservedCsvRows(csvPath, 3, expectedColumns, defaultValues);
671
+
672
+ // Create CSV header with standalone column
673
+ let csv = 'name,displayName,description,module,path,standalone\n';
674
+
675
+ // Add new rows for updated modules
676
+ for (const tool of this.tools) {
677
+ csv += `"${tool.name}","${tool.displayName}","${tool.description}","${tool.module}","${tool.path}","${tool.standalone}"\n`;
678
+ }
679
+
680
+ // Add preserved rows for modules we didn't update
681
+ for (const row of preservedRows) {
682
+ csv += row + '\n';
355
683
  }
356
684
 
357
685
  await fs.writeFile(csvPath, csv);
686
+ return csvPath;
358
687
  }
359
688
 
360
689
  /**
361
690
  * Write files manifest CSV
362
691
  */
692
+ /**
693
+ * Calculate SHA256 hash of a file
694
+ * @param {string} filePath - Path to file
695
+ * @returns {string} SHA256 hash
696
+ */
697
+ async calculateFileHash(filePath) {
698
+ try {
699
+ const content = await fs.readFile(filePath);
700
+ return crypto.createHash('sha256').update(content).digest('hex');
701
+ } catch {
702
+ return '';
703
+ }
704
+ }
705
+
706
+ /**
707
+ * @returns {string} Path to the manifest file
708
+ */
363
709
  async writeFilesManifest(cfgDir) {
364
710
  const csvPath = path.join(cfgDir, 'files-manifest.csv');
365
711
 
366
- // Create CSV header
367
- let csv = 'type,name,module,path\n';
712
+ // Get preserved rows from existing CSV (module is column 2, 0-indexed)
713
+ const preservedRows = await this.getPreservedCsvRows(csvPath, 2);
714
+
715
+ // Create CSV header with hash column
716
+ let csv = 'type,name,module,path,hash\n';
717
+
718
+ // If we have ALL installed files, use those instead of just workflows/agents/tasks
719
+ const allFiles = [];
720
+ if (this.allInstalledFiles && this.allInstalledFiles.length > 0) {
721
+ // Process all installed files
722
+ for (const filePath of this.allInstalledFiles) {
723
+ const relativePath = 'bmad' + filePath.replace(this.bmadDir, '').replaceAll('\\', '/');
724
+ const ext = path.extname(filePath).toLowerCase();
725
+ const fileName = path.basename(filePath, ext);
726
+
727
+ // Determine module from path
728
+ const pathParts = relativePath.split('/');
729
+ const module = pathParts.length > 1 ? pathParts[1] : 'unknown';
730
+
731
+ // Calculate hash
732
+ const hash = await this.calculateFileHash(filePath);
733
+
734
+ allFiles.push({
735
+ type: ext.slice(1) || 'file',
736
+ name: fileName,
737
+ module: module,
738
+ path: relativePath,
739
+ hash: hash,
740
+ });
741
+ }
742
+ } else {
743
+ // Fallback: use the collected workflows/agents/tasks
744
+ for (const file of this.files) {
745
+ const filePath = path.join(this.bmadDir, file.path.replace('bmad/', ''));
746
+ const hash = await this.calculateFileHash(filePath);
747
+ allFiles.push({
748
+ ...file,
749
+ hash: hash,
750
+ });
751
+ }
752
+ }
368
753
 
369
- // Sort files by type, then module, then name
370
- this.files.sort((a, b) => {
371
- if (a.type !== b.type) return a.type.localeCompare(b.type);
754
+ // Sort files by module, then type, then name
755
+ allFiles.sort((a, b) => {
372
756
  if (a.module !== b.module) return a.module.localeCompare(b.module);
757
+ if (a.type !== b.type) return a.type.localeCompare(b.type);
373
758
  return a.name.localeCompare(b.name);
374
759
  });
375
760
 
376
- // Add rows
377
- for (const file of this.files) {
378
- csv += `"${file.type}","${file.name}","${file.module}","${file.path}"\n`;
761
+ // Add rows for updated modules
762
+ for (const file of allFiles) {
763
+ csv += `"${file.type}","${file.name}","${file.module}","${file.path}","${file.hash}"\n`;
764
+ }
765
+
766
+ // Add preserved rows for modules we didn't update
767
+ for (const row of preservedRows) {
768
+ csv += row + '\n';
379
769
  }
380
770
 
381
771
  await fs.writeFile(csvPath, csv);
772
+ return csvPath;
382
773
  }
383
774
  }
384
775