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

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 +263 -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 +38 -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,8 +1,10 @@
1
1
  const path = require('node:path');
2
2
  const fs = require('fs-extra');
3
3
  const chalk = require('chalk');
4
+ const yaml = require('js-yaml');
4
5
  const { DependencyResolver } = require('../installers/lib/core/dependency-resolver');
5
6
  const { XmlHandler } = require('../lib/xml-handler');
7
+ const { YamlXmlBuilder } = require('../lib/yaml-xml-builder');
6
8
  const { AgentPartyGenerator } = require('../lib/agent-party-generator');
7
9
  const xml2js = require('xml2js');
8
10
  const { getProjectRoot, getSourcePath, getModulePath } = require('../lib/project-root');
@@ -16,6 +18,7 @@ class WebBundler {
16
18
 
17
19
  this.dependencyResolver = new DependencyResolver();
18
20
  this.xmlHandler = new XmlHandler();
21
+ this.yamlBuilder = new YamlXmlBuilder();
19
22
 
20
23
  // Cache for resolved dependencies to avoid duplicates
21
24
  this.dependencyCache = new Map();
@@ -108,16 +111,16 @@ class WebBundler {
108
111
  }
109
112
  }
110
113
 
111
- // Process teams (Phase 4 - to be implemented)
112
- // const teams = await this.discoverTeams(modulePath);
113
- // for (const team of teams) {
114
- // try {
115
- // await this.bundleTeam(moduleName, team);
116
- // results.teams.push(team);
117
- // } catch (error) {
118
- // console.error(` Failed to bundle team ${team}:`, error.message);
119
- // }
120
- // }
114
+ // Process teams
115
+ const teams = await this.discoverTeams(modulePath);
116
+ for (const team of teams) {
117
+ try {
118
+ await this.bundleTeam(moduleName, team);
119
+ results.teams.push(team);
120
+ } catch (error) {
121
+ console.error(` Failed to bundle team ${team}:`, error.message);
122
+ }
123
+ }
121
124
 
122
125
  return results;
123
126
  }
@@ -126,7 +129,7 @@ class WebBundler {
126
129
  * Bundle a single agent
127
130
  */
128
131
  async bundleAgent(moduleName, agentFile, shouldTrack = true) {
129
- const agentName = path.basename(agentFile, '.md');
132
+ const agentName = agentFile.endsWith('.agent.yaml') ? path.basename(agentFile, '.agent.yaml') : path.basename(agentFile, '.md');
130
133
  this.stats.totalAgents++;
131
134
 
132
135
  console.log(chalk.dim(` → Processing: ${agentName}`));
@@ -140,11 +143,24 @@ class WebBundler {
140
143
  throw new Error(`Agent file not found: ${agentPath}`);
141
144
  }
142
145
 
143
- // Read agent file
144
- const content = await fs.readFile(agentPath, 'utf8');
146
+ let content;
147
+ let agentXml;
145
148
 
146
- // Extract agent XML from markdown
147
- let agentXml = this.extractAgentXml(content);
149
+ // Handle YAML agents - build in-memory to XML
150
+ if (agentFile.endsWith('.agent.yaml')) {
151
+ // Build agent from YAML (no customize file for web bundles)
152
+ const xmlContent = await this.yamlBuilder.buildFromYaml(agentPath, null, {
153
+ includeMetadata: false, // Don't include build metadata in web bundles
154
+ forWebBundle: true, // Use web-specific activation fragments
155
+ });
156
+
157
+ content = xmlContent;
158
+ agentXml = this.extractAgentXml(xmlContent);
159
+ } else {
160
+ // Legacy MD format - read and extract XML
161
+ content = await fs.readFile(agentPath, 'utf8');
162
+ agentXml = this.extractAgentXml(content);
163
+ }
148
164
 
149
165
  if (!agentXml) {
150
166
  this.stats.failedAgents++;
@@ -172,12 +188,17 @@ class WebBundler {
172
188
 
173
189
  // Resolve dependencies with warning tracking
174
190
  const dependencyWarnings = [];
175
- const dependencies = await this.resolveAgentDependencies(agentXml, moduleName, dependencyWarnings);
191
+ const { dependencies, skippedWorkflows } = await this.resolveAgentDependencies(agentXml, moduleName, dependencyWarnings);
176
192
 
177
193
  if (dependencyWarnings.length > 0) {
178
194
  this.stats.warnings.push({ agent: agentName, warnings: dependencyWarnings });
179
195
  }
180
196
 
197
+ // Remove commands for skipped workflows from agent XML
198
+ if (skippedWorkflows.length > 0) {
199
+ agentXml = this.removeSkippedWorkflowCommands(agentXml, skippedWorkflows);
200
+ }
201
+
181
202
  // Build the bundle (no manifests for individual agents)
182
203
  const bundle = this.buildAgentBundle(agentXml, dependencies);
183
204
 
@@ -198,6 +219,220 @@ class WebBundler {
198
219
  console.log(` ${statusIcon} Bundled: ${agentName}.xml${isValid ? '' : chalk.yellow(' (invalid XML)')}`);
199
220
  }
200
221
 
222
+ /**
223
+ * Bundle a team - includes orchestrator and all agents with their dependencies
224
+ */
225
+ async bundleTeam(moduleName, teamFile) {
226
+ const teamName = path.basename(teamFile, path.extname(teamFile));
227
+ console.log(chalk.dim(` → Processing team: ${teamName}`));
228
+
229
+ const teamPath = path.join(this.modulesPath, moduleName, 'teams', teamFile);
230
+
231
+ // Check if team file exists
232
+ if (!(await fs.pathExists(teamPath))) {
233
+ console.log(chalk.red(` ✗ Team file not found`));
234
+ throw new Error(`Team file not found: ${teamPath}`);
235
+ }
236
+
237
+ // Read and parse team YAML
238
+ const teamContent = await fs.readFile(teamPath, 'utf8');
239
+ const teamConfig = yaml.load(teamContent);
240
+
241
+ if (!teamConfig || !teamConfig.bundle) {
242
+ console.log(chalk.red(` ✗ Invalid team configuration`));
243
+ return;
244
+ }
245
+
246
+ // Start building the team bundle
247
+ const dependencies = new Map();
248
+ const processed = new Set();
249
+ const allAgentXmls = [];
250
+ const warnings = [];
251
+
252
+ // 1. First, always add the bmad-web-orchestrator (XML file only, no transformation needed)
253
+ const orchestratorXmlPath = path.join(this.sourceDir, 'core', 'agents', 'bmad-web-orchestrator.agent.xml');
254
+
255
+ if (await fs.pathExists(orchestratorXmlPath)) {
256
+ // Read the XML file directly - no transformation needed
257
+ const xmlContent = await fs.readFile(orchestratorXmlPath, 'utf8');
258
+ let orchestratorXml = xmlContent.trim();
259
+
260
+ // Process {project-root} references
261
+ orchestratorXml = this.processProjectRootReferences(orchestratorXml);
262
+
263
+ // Inject help/exit menu items only (orchestrator has its own activation)
264
+ orchestratorXml = this.injectHelpExitMenuItems(orchestratorXml);
265
+
266
+ // Resolve orchestrator dependencies
267
+ const { dependencies: orchDeps } = await this.resolveAgentDependencies(orchestratorXml, 'core', warnings);
268
+
269
+ // Merge orchestrator dependencies
270
+ for (const [id, content] of orchDeps) {
271
+ if (!dependencies.has(id)) {
272
+ dependencies.set(id, content);
273
+ }
274
+ }
275
+
276
+ // Add orchestrator XML first
277
+ allAgentXmls.push(orchestratorXml);
278
+ console.log(chalk.gray(` + Added orchestrator: bmad-web-orchestrator`));
279
+ } else {
280
+ console.log(chalk.yellow(` ⚠ Orchestrator not found at: ${orchestratorXmlPath}`));
281
+ }
282
+
283
+ // 2. Determine which agents to include
284
+ let agentsToBundle = [];
285
+
286
+ if (teamConfig.agents === '*' || (Array.isArray(teamConfig.agents) && teamConfig.agents.includes('*'))) {
287
+ // Include all agents from the module
288
+ const agentsPath = path.join(this.modulesPath, moduleName, 'agents');
289
+ if (await fs.pathExists(agentsPath)) {
290
+ const agentFiles = await fs.readdir(agentsPath);
291
+ agentsToBundle = agentFiles
292
+ .filter((file) => file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme')))
293
+ .map((file) => file.replace(/\.(agent\.yaml|md)$/, ''));
294
+ }
295
+ } else if (Array.isArray(teamConfig.agents)) {
296
+ // Include specific agents listed
297
+ agentsToBundle = teamConfig.agents;
298
+ } else {
299
+ console.log(chalk.yellow(` ⚠ No agents specified in team configuration`));
300
+ }
301
+
302
+ // 3. Process each agent and their dependencies
303
+ for (const agentName of agentsToBundle) {
304
+ // Try YAML first, then MD
305
+ let agentPath = path.join(this.modulesPath, moduleName, 'agents', `${agentName}.agent.yaml`);
306
+ let isYaml = await fs.pathExists(agentPath);
307
+
308
+ if (!isYaml) {
309
+ agentPath = path.join(this.modulesPath, moduleName, 'agents', `${agentName}.md`);
310
+ if (!(await fs.pathExists(agentPath))) {
311
+ console.log(chalk.yellow(` ⚠ Agent not found: ${agentName}`));
312
+ continue;
313
+ }
314
+ }
315
+
316
+ let agentXml;
317
+
318
+ if (isYaml) {
319
+ // Build YAML agent in-memory - skip activation for team agents (orchestrator handles it)
320
+ const xmlContent = await this.yamlBuilder.buildFromYaml(agentPath, null, {
321
+ includeMetadata: false,
322
+ skipActivation: true, // Skip activation for team agents
323
+ });
324
+ agentXml = this.extractAgentXml(xmlContent);
325
+ } else {
326
+ // Read legacy MD agent
327
+ const agentContent = await fs.readFile(agentPath, 'utf8');
328
+ agentXml = this.extractAgentXml(agentContent);
329
+ }
330
+
331
+ if (!agentXml) {
332
+ console.log(chalk.yellow(` ⚠ No XML found in agent: ${agentName}`));
333
+ continue;
334
+ }
335
+
336
+ // Skip agents with bundle="false"
337
+ if (this.shouldSkipBundling(agentXml)) {
338
+ console.log(chalk.gray(` ⊘ Skipped agent (bundle="false"): ${agentName}`));
339
+ continue;
340
+ }
341
+
342
+ // Process {project-root} references
343
+ agentXml = this.processProjectRootReferences(agentXml);
344
+
345
+ // Resolve agent dependencies
346
+ const agentWarnings = [];
347
+ const { dependencies: agentDeps, skippedWorkflows } = await this.resolveAgentDependencies(agentXml, moduleName, agentWarnings);
348
+
349
+ if (agentWarnings.length > 0) {
350
+ warnings.push({ agent: agentName, warnings: agentWarnings });
351
+ }
352
+
353
+ // Remove commands for skipped workflows from agent XML
354
+ if (skippedWorkflows.length > 0) {
355
+ agentXml = this.removeSkippedWorkflowCommands(agentXml, skippedWorkflows);
356
+ }
357
+
358
+ // Merge agent dependencies (deduplicate)
359
+ for (const [id, content] of agentDeps) {
360
+ if (!dependencies.has(id)) {
361
+ dependencies.set(id, content);
362
+ }
363
+ }
364
+
365
+ // Skip web activation injection for team agents - orchestrator handles everything
366
+ // Only inject help/exit menu items if missing
367
+ agentXml = this.injectHelpExitMenuItems(agentXml);
368
+
369
+ // Add agent XML to the collection
370
+ allAgentXmls.push(agentXml);
371
+ console.log(chalk.gray(` + Added agent: ${agentName}`));
372
+ }
373
+
374
+ // 4. Build the team bundle XML
375
+ const bundle = this.buildTeamBundle(teamConfig.bundle, allAgentXmls, dependencies);
376
+
377
+ // 5. Validate XML
378
+ const isValid = await this.validateXml(bundle);
379
+ if (!isValid) {
380
+ console.log(chalk.red(` ⚠ Invalid XML generated for team!`));
381
+ }
382
+
383
+ // 6. Write bundle to output
384
+ const outputPath = path.join(this.outputDir, moduleName, 'teams', `${teamName}.xml`);
385
+ await fs.ensureDir(path.dirname(outputPath));
386
+ await fs.writeFile(outputPath, bundle, 'utf8');
387
+
388
+ const statusIcon = isValid ? chalk.green('✓') : chalk.yellow('⚠');
389
+ console.log(` ${statusIcon} Bundled team: ${teamName}.xml${isValid ? '' : chalk.yellow(' (invalid XML)')}`);
390
+
391
+ // Track warnings
392
+ if (warnings.length > 0) {
393
+ this.stats.warnings.push(...warnings);
394
+ }
395
+ }
396
+
397
+ /**
398
+ * Build the final team bundle XML
399
+ */
400
+ buildTeamBundle(teamMetadata, agentXmls, dependencies) {
401
+ const parts = ['<?xml version="1.0" encoding="UTF-8"?>', '<team-bundle>', ' <!-- Agent Definitions -->', ' <agents>'];
402
+
403
+ for (const agentXml of agentXmls) {
404
+ // Indent each agent XML properly (add 4 spaces to each line)
405
+ const indentedAgent = agentXml
406
+ .split('\n')
407
+ .map((line) => ' ' + line)
408
+ .join('\n');
409
+ parts.push(indentedAgent);
410
+ }
411
+
412
+ parts.push(' </agents>');
413
+
414
+ // Add all dependencies
415
+ if (dependencies && dependencies.size > 0) {
416
+ parts.push('', ' <!-- Shared Dependencies -->', ' <dependencies>');
417
+
418
+ for (const [id, content] of dependencies) {
419
+ // All dependencies are now consistently wrapped in <file> elements
420
+ // Indent properly (add 4 spaces to each line)
421
+ const indentedContent = content
422
+ .split('\n')
423
+ .map((line) => ' ' + line)
424
+ .join('\n');
425
+ parts.push(indentedContent);
426
+ }
427
+
428
+ parts.push(' </dependencies>');
429
+ }
430
+
431
+ parts.push('</team-bundle>');
432
+
433
+ return parts.join('\n');
434
+ }
435
+
201
436
  /**
202
437
  * Pre-discover all agents and teams in a module for manifest generation
203
438
  */
@@ -212,9 +447,20 @@ class WebBundler {
212
447
  if (await fs.pathExists(agentsPath)) {
213
448
  const files = await fs.readdir(agentsPath);
214
449
  for (const file of files) {
215
- if (file.endsWith('.md')) {
450
+ if (file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme'))) {
216
451
  const agentPath = path.join(agentsPath, file);
217
- const content = await fs.readFile(agentPath, 'utf8');
452
+ let content;
453
+
454
+ if (file.endsWith('.agent.yaml')) {
455
+ // Build YAML agent in-memory
456
+ content = await this.yamlBuilder.buildFromYaml(agentPath, null, {
457
+ includeMetadata: false,
458
+ });
459
+ } else {
460
+ // Read legacy MD agent
461
+ content = await fs.readFile(agentPath, 'utf8');
462
+ }
463
+
218
464
  const agentXml = this.extractAgentXml(content);
219
465
 
220
466
  if (agentXml) {
@@ -223,7 +469,7 @@ class WebBundler {
223
469
  continue;
224
470
  }
225
471
 
226
- const agentName = path.basename(file, '.md');
472
+ const agentName = file.endsWith('.agent.yaml') ? path.basename(file, '.agent.yaml') : path.basename(file, '.md');
227
473
  // Use the shared generator to extract agent details (pass full content)
228
474
  const agentDetails = AgentPartyGenerator.extractAgentDetails(content, moduleName, agentName);
229
475
  if (agentDetails) {
@@ -265,16 +511,25 @@ class WebBundler {
265
511
  async resolveAgentDependencies(agentXml, moduleName, warnings = []) {
266
512
  const dependencies = new Map();
267
513
  const processed = new Set();
514
+ const skippedWorkflows = [];
268
515
 
269
516
  // Extract file references from agent XML
270
- const fileRefs = this.extractFileReferences(agentXml);
517
+ const { refs, workflowRefs } = this.extractFileReferences(agentXml);
271
518
 
272
- // Process each file reference
273
- for (const ref of fileRefs) {
519
+ // Process regular file references
520
+ for (const ref of refs) {
274
521
  await this.processFileDependency(ref, dependencies, processed, moduleName, warnings);
275
522
  }
276
523
 
277
- return dependencies;
524
+ // Process workflow references with special handling
525
+ for (const workflowRef of workflowRefs) {
526
+ const result = await this.processWorkflowDependency(workflowRef, dependencies, processed, moduleName, warnings);
527
+ if (result && result.skipped) {
528
+ skippedWorkflows.push(workflowRef);
529
+ }
530
+ }
531
+
532
+ return { dependencies, skippedWorkflows };
278
533
  }
279
534
 
280
535
  /**
@@ -282,6 +537,7 @@ class WebBundler {
282
537
  */
283
538
  extractFileReferences(xml) {
284
539
  const refs = new Set();
540
+ const workflowRefs = new Set();
285
541
 
286
542
  // Match various file reference patterns
287
543
  const patterns = [
@@ -292,7 +548,6 @@ class WebBundler {
292
548
  /src="([^"]+)"/g, // Source paths
293
549
  /system-prompts="([^"]+)"/g,
294
550
  /tools="([^"]+)"/g,
295
- /workflows="([^"]+)"/g,
296
551
  /knowledge="([^"]+)"/g,
297
552
  /{project-root}\/([^"'\s<>]+)/g,
298
553
  ];
@@ -303,13 +558,56 @@ class WebBundler {
303
558
  let filePath = match[1];
304
559
  // Remove {project-root} prefix if present
305
560
  filePath = filePath.replace(/^{project-root}\//, '');
306
- if (filePath) {
561
+
562
+ // Skip obvious placeholder/example paths
563
+ if (filePath && !filePath.includes('path/to/') && !filePath.includes('example')) {
307
564
  refs.add(filePath);
308
565
  }
309
566
  }
310
567
  }
311
568
 
312
- return [...refs];
569
+ // Extract workflow references - both 'workflow' and 'run-workflow' attributes
570
+ const workflowPatterns = [
571
+ /workflow="([^"]+)"/g, // Menu items with workflow attribute
572
+ /run-workflow="([^"]+)"/g, // Commands with run-workflow attribute
573
+ /validate-workflow="([^"]+)"/g, // Validation workflow references
574
+ ];
575
+
576
+ for (const pattern of workflowPatterns) {
577
+ let match;
578
+ while ((match = pattern.exec(xml)) !== null) {
579
+ let workflowPath = match[1];
580
+ workflowPath = workflowPath.replace(/^{project-root}\//, '');
581
+
582
+ // Skip obvious placeholder/example paths
583
+ if (workflowPath && workflowPath.endsWith('.yaml') && !workflowPath.includes('path/to/') && !workflowPath.includes('example')) {
584
+ workflowRefs.add(workflowPath);
585
+ }
586
+ }
587
+ }
588
+
589
+ return { refs: [...refs], workflowRefs: [...workflowRefs] };
590
+ }
591
+
592
+ /**
593
+ * Remove commands from agent XML that reference skipped workflows
594
+ */
595
+ removeSkippedWorkflowCommands(agentXml, skippedWorkflows) {
596
+ let modifiedXml = agentXml;
597
+
598
+ // For each skipped workflow, find and remove the corresponding <c> command
599
+ for (const workflowPath of skippedWorkflows) {
600
+ // Match: <c cmd="..." run-workflow="workflowPath">...</c>
601
+ // Need to escape special regex characters in the path
602
+ const escapedPath = workflowPath.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`);
603
+
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');
606
+
607
+ modifiedXml = modifiedXml.replace(pattern, '');
608
+ }
609
+
610
+ return modifiedXml;
313
611
  }
314
612
 
315
613
  /**
@@ -322,6 +620,11 @@ class WebBundler {
322
620
  }
323
621
  processed.add(filePath);
324
622
 
623
+ // Skip agent-manifest.csv manifest for web bundles (agents are already bundled)
624
+ if (filePath === 'bmad/_cfg/agent-manifest.csv' || filePath.endsWith('/agent-manifest.csv')) {
625
+ return;
626
+ }
627
+
325
628
  // Handle wildcard patterns
326
629
  if (filePath.includes('*')) {
327
630
  await this.processWildcardDependency(filePath, dependencies, processed, moduleName, warnings);
@@ -447,8 +750,10 @@ class WebBundler {
447
750
 
448
751
  indexParts.push(' </items>', '</file-index>');
449
752
 
450
- // Store the XML version
451
- dependencies.set(filePath, indexParts.join('\n'));
753
+ // Store the XML version wrapped in a file element
754
+ const csvXml = indexParts.join('\n');
755
+ const wrappedCsv = `<file id="${filePath}" type="xml">\n${csvXml}\n</file>`;
756
+ dependencies.set(filePath, wrappedCsv);
452
757
 
453
758
  // Process referenced files from CSV
454
759
  for (const refId of referencedFiles) {
@@ -470,16 +775,207 @@ class WebBundler {
470
775
  }
471
776
  }
472
777
 
473
- // Store the processed content
474
- dependencies.set(filePath, processedContent);
778
+ // Determine file type for wrapping
779
+ let fileType = 'text';
780
+ if (ext === '.xml' || (ext === '.md' && processedContent.trim().startsWith('<'))) {
781
+ fileType = 'xml';
782
+ } else
783
+ switch (ext) {
784
+ case '.yaml':
785
+ case '.yml': {
786
+ fileType = 'yaml';
787
+
788
+ break;
789
+ }
790
+ case '.json': {
791
+ fileType = 'json';
792
+
793
+ break;
794
+ }
795
+ case '.md': {
796
+ fileType = 'md';
797
+
798
+ break;
799
+ }
800
+ // No default
801
+ }
802
+
803
+ // Wrap content in file element and store
804
+ const wrappedContent = this.wrapContentInXml(processedContent, filePath, fileType);
805
+ dependencies.set(filePath, wrappedContent);
475
806
 
476
807
  // Recursively scan for more dependencies
477
- const nestedRefs = this.extractFileReferences(processedContent);
808
+ const { refs: nestedRefs } = this.extractFileReferences(processedContent);
478
809
  for (const ref of nestedRefs) {
479
810
  await this.processFileDependency(ref, dependencies, processed, moduleName, warnings);
480
811
  }
481
812
  }
482
813
 
814
+ /**
815
+ * Process a workflow YAML file and its bundle files
816
+ */
817
+ async processWorkflowDependency(workflowPath, dependencies, processed, moduleName, warnings = []) {
818
+ // Skip if already processed
819
+ if (processed.has(workflowPath)) {
820
+ return { skipped: false };
821
+ }
822
+ processed.add(workflowPath);
823
+
824
+ // Resolve actual file path
825
+ const actualPath = this.resolveFilePath(workflowPath, moduleName);
826
+
827
+ if (!actualPath || !(await fs.pathExists(actualPath))) {
828
+ warnings.push(workflowPath);
829
+ return { skipped: true };
830
+ }
831
+
832
+ // Read and parse YAML file
833
+ const yamlContent = await fs.readFile(actualPath, 'utf8');
834
+ let workflowConfig;
835
+
836
+ try {
837
+ workflowConfig = yaml.load(yamlContent);
838
+ } catch (error) {
839
+ warnings.push(`${workflowPath} (invalid YAML: ${error.message})`);
840
+ return { skipped: true };
841
+ }
842
+
843
+ // Check if web_bundle is explicitly set to false
844
+ if (workflowConfig.web_bundle === false) {
845
+ // Mark this workflow as skipped so we can remove the command from agent
846
+ return { skipped: true, workflowPath };
847
+ }
848
+
849
+ // Create YAML content with only web_bundle section (flattened)
850
+ let bundleYamlContent;
851
+ if (workflowConfig.web_bundle && typeof workflowConfig.web_bundle === 'object') {
852
+ // Only include the web_bundle content, flattened to root level
853
+ bundleYamlContent = yaml.dump(workflowConfig.web_bundle);
854
+ } else {
855
+ // If no web_bundle section, include full YAML
856
+ bundleYamlContent = yamlContent;
857
+ }
858
+
859
+ // Include the YAML file with only web_bundle content, wrapped in XML
860
+ const yamlId = workflowPath.replace(/^{project-root}\//, '');
861
+ const wrappedYaml = this.wrapContentInXml(bundleYamlContent, yamlId, 'yaml');
862
+ dependencies.set(yamlId, wrappedYaml);
863
+
864
+ // Always include core workflow task when processing workflows
865
+ await this.includeCoreWorkflowFiles(dependencies, processed, moduleName, warnings);
866
+
867
+ // Check if advanced elicitation is enabled
868
+ if (workflowConfig.web_bundle && workflowConfig.web_bundle.use_advanced_elicitation) {
869
+ await this.includeAdvancedElicitationFiles(dependencies, processed, moduleName, warnings);
870
+ }
871
+
872
+ // Process web_bundle_files if they exist
873
+ if (workflowConfig.web_bundle && workflowConfig.web_bundle.web_bundle_files) {
874
+ const bundleFiles = workflowConfig.web_bundle.web_bundle_files;
875
+
876
+ for (const bundleFilePath of bundleFiles) {
877
+ if (processed.has(bundleFilePath)) {
878
+ continue;
879
+ }
880
+
881
+ const bundleActualPath = this.resolveFilePath(bundleFilePath, moduleName);
882
+
883
+ if (!bundleActualPath || !(await fs.pathExists(bundleActualPath))) {
884
+ warnings.push(bundleFilePath);
885
+ continue;
886
+ }
887
+
888
+ // Check if this is another workflow.yaml file - if so, recursively process it
889
+ if (bundleFilePath.endsWith('workflow.yaml')) {
890
+ // Recursively process this workflow and its dependencies
891
+ await this.processWorkflowDependency(bundleFilePath, dependencies, processed, moduleName, warnings);
892
+ } else {
893
+ // Regular file - process normally
894
+ processed.add(bundleFilePath);
895
+
896
+ // Read the file content
897
+ const fileContent = await fs.readFile(bundleActualPath, 'utf8');
898
+ const fileExt = path.extname(bundleActualPath).toLowerCase().replace('.', '');
899
+
900
+ // Wrap in XML with proper escaping
901
+ const wrappedContent = this.wrapContentInXml(fileContent, bundleFilePath, fileExt);
902
+ dependencies.set(bundleFilePath, wrappedContent);
903
+ }
904
+ }
905
+ }
906
+
907
+ return { skipped: false };
908
+ }
909
+
910
+ /**
911
+ * Include core workflow task files
912
+ */
913
+ async includeCoreWorkflowFiles(dependencies, processed, moduleName, warnings = []) {
914
+ const coreWorkflowPath = 'bmad/core/tasks/workflow.xml';
915
+
916
+ if (processed.has(coreWorkflowPath)) {
917
+ return;
918
+ }
919
+ processed.add(coreWorkflowPath);
920
+
921
+ const actualPath = this.resolveFilePath(coreWorkflowPath, moduleName);
922
+
923
+ if (!actualPath || !(await fs.pathExists(actualPath))) {
924
+ warnings.push(coreWorkflowPath);
925
+ return;
926
+ }
927
+
928
+ const fileContent = await fs.readFile(actualPath, 'utf8');
929
+ const wrappedContent = this.wrapContentInXml(fileContent, coreWorkflowPath, 'xml');
930
+ dependencies.set(coreWorkflowPath, wrappedContent);
931
+ }
932
+
933
+ /**
934
+ * Include advanced elicitation files
935
+ */
936
+ async includeAdvancedElicitationFiles(dependencies, processed, moduleName, warnings = []) {
937
+ const elicitationFiles = ['bmad/core/tasks/adv-elicit.xml', 'bmad/core/tasks/adv-elicit-methods.csv'];
938
+
939
+ for (const filePath of elicitationFiles) {
940
+ if (processed.has(filePath)) {
941
+ continue;
942
+ }
943
+ processed.add(filePath);
944
+
945
+ const actualPath = this.resolveFilePath(filePath, moduleName);
946
+
947
+ if (!actualPath || !(await fs.pathExists(actualPath))) {
948
+ warnings.push(filePath);
949
+ continue;
950
+ }
951
+
952
+ const fileContent = await fs.readFile(actualPath, 'utf8');
953
+ const fileExt = path.extname(actualPath).toLowerCase().replace('.', '');
954
+ const wrappedContent = this.wrapContentInXml(fileContent, filePath, fileExt);
955
+ dependencies.set(filePath, wrappedContent);
956
+ }
957
+ }
958
+
959
+ /**
960
+ * Wrap file content in XML with proper escaping
961
+ */
962
+ wrapContentInXml(content, id, type = 'text') {
963
+ // For XML files, include directly without CDATA (they're already valid XML)
964
+ if (type === 'xml') {
965
+ // XML files can be included directly as they're already well-formed
966
+ // Just wrap in a file element
967
+ return `<file id="${id}" type="${type}">\n${content}\n</file>`;
968
+ }
969
+
970
+ // For all other file types, use CDATA to preserve content exactly
971
+ // Escape any ]]> sequences in the content by splitting CDATA sections
972
+ // Replace ]]> with ]]]]><![CDATA[> to properly escape it within CDATA
973
+ const escapedContent = content.replaceAll(']]>', ']]]]><![CDATA[>');
974
+
975
+ // Use CDATA to preserve content exactly as-is, including special characters
976
+ return `<file id="${id}" type="${type}"><![CDATA[${escapedContent}]]></file>`;
977
+ }
978
+
483
979
  /**
484
980
  * Process wildcard dependency patterns
485
981
  */
@@ -665,10 +1161,113 @@ class WebBundler {
665
1161
  return parts.join('');
666
1162
  }
667
1163
 
1164
+ /**
1165
+ * Inject help and exit menu items into agent XML
1166
+ */
1167
+ injectHelpExitMenuItems(agentXml) {
1168
+ // Check if menu already has help and exit
1169
+ const hasHelp = agentXml.includes('cmd="*help"') || agentXml.includes('trigger="*help"');
1170
+ const hasExit = agentXml.includes('cmd="*exit"') || agentXml.includes('trigger="*exit"');
1171
+
1172
+ if (hasHelp && hasExit) {
1173
+ return agentXml; // Already has both, skip injection
1174
+ }
1175
+
1176
+ // Find the menu section
1177
+ const menuMatch = agentXml.match(/(<menu>[\s\S]*?<\/menu>)/);
1178
+ if (!menuMatch) {
1179
+ return agentXml; // No menu found, skip injection
1180
+ }
1181
+
1182
+ const menuContent = menuMatch[1];
1183
+ const menuClosingMatch = menuContent.match(/(\s*)<\/menu>/);
1184
+ if (!menuClosingMatch) {
1185
+ return agentXml;
1186
+ }
1187
+
1188
+ const indent = menuClosingMatch[1];
1189
+ const menuItems = [];
1190
+
1191
+ if (!hasHelp) {
1192
+ menuItems.push(`${indent}<item cmd="*help">Show numbered menu</item>`);
1193
+ }
1194
+
1195
+ if (!hasExit) {
1196
+ menuItems.push(`${indent}<item cmd="*exit">Exit with confirmation</item>`);
1197
+ }
1198
+
1199
+ if (menuItems.length === 0) {
1200
+ return agentXml;
1201
+ }
1202
+
1203
+ // Inject menu items before closing </menu> tag
1204
+ const newMenuContent = menuContent.replace(/(\s*)<\/menu>/, `\n${menuItems.join('\n')}\n${indent}</menu>`);
1205
+ return agentXml.replace(menuContent, newMenuContent);
1206
+ }
1207
+
1208
+ /**
1209
+ * Inject web activation instructions into agent XML
1210
+ */
1211
+ injectWebActivation(agentXml) {
1212
+ // First, always inject help/exit menu items
1213
+ agentXml = this.injectHelpExitMenuItems(agentXml);
1214
+
1215
+ // Load the web activation template
1216
+ const activationPath = path.join(this.sourceDir, 'utility', 'models', 'agent-activation-web.xml');
1217
+
1218
+ if (!fs.existsSync(activationPath)) {
1219
+ console.warn(chalk.yellow('Warning: agent-activation-web.xml not found, skipping activation injection'));
1220
+ return agentXml;
1221
+ }
1222
+
1223
+ const activationXml = fs.readFileSync(activationPath, 'utf8');
1224
+
1225
+ // For web bundles, ALWAYS replace existing activation with web activation
1226
+ // This is because fragment-based activation assumes filesystem access which won't work in web bundles
1227
+ const hasActivation = agentXml.includes('<activation');
1228
+
1229
+ if (hasActivation) {
1230
+ // Replace existing activation block with web activation
1231
+ const injectedXml = agentXml.replace(/<activation[^>]*>[\s\S]*?<\/activation>/, activationXml);
1232
+ return injectedXml;
1233
+ }
1234
+
1235
+ // Check for critical-actions block (legacy)
1236
+ const hasCriticalActions = agentXml.includes('<critical-actions');
1237
+
1238
+ if (hasCriticalActions) {
1239
+ // Replace critical-actions block with activation
1240
+ const injectedXml = agentXml.replace(/<critical-actions>[\s\S]*?<\/critical-actions>/, activationXml);
1241
+ return injectedXml;
1242
+ }
1243
+
1244
+ // If no critical-actions, inject before closing </agent> tag
1245
+ const closingTagMatch = agentXml.match(/(\s*)<\/agent>/);
1246
+ if (!closingTagMatch) {
1247
+ console.warn(chalk.yellow('Warning: Could not find </agent> tag for activation injection'));
1248
+ return agentXml;
1249
+ }
1250
+
1251
+ // Inject the activation block before the closing </agent> tag
1252
+ // Properly indent each line of the activation XML
1253
+ const indent = closingTagMatch[1];
1254
+ const indentedActivation = activationXml
1255
+ .split('\n')
1256
+ .map((line) => (line.trim() ? indent + line : ''))
1257
+ .join('\n');
1258
+
1259
+ const injectedXml = agentXml.replace(/(\s*)<\/agent>/, `\n${indentedActivation}\n${indent}</agent>`);
1260
+
1261
+ return injectedXml;
1262
+ }
1263
+
668
1264
  /**
669
1265
  * Build the final agent bundle XML
670
1266
  */
671
1267
  buildAgentBundle(agentXml, dependencies) {
1268
+ // Web activation is now handled by fragments during YAML building
1269
+ // agentXml = this.injectWebActivation(agentXml);
1270
+
672
1271
  const parts = [
673
1272
  '<?xml version="1.0" encoding="UTF-8"?>',
674
1273
  '<agent-bundle>',
@@ -676,14 +1275,13 @@ class WebBundler {
676
1275
  ' ' + agentXml.replaceAll('\n', '\n '),
677
1276
  ];
678
1277
 
679
- // Add dependencies without wrapper tags
1278
+ // Add dependencies (all are now consistently wrapped in <file> elements)
680
1279
  if (dependencies && dependencies.size > 0) {
681
1280
  parts.push('\n <!-- Dependencies -->');
682
1281
  for (const [id, content] of dependencies) {
683
- // Escape XML content while preserving tags
684
- const escapedContent = this.escapeXmlContent(content);
1282
+ // All dependencies are now wrapped in <file> elements
685
1283
  // Indent properly
686
- const indentedContent = escapedContent
1284
+ const indentedContent = content
687
1285
  .split('\n')
688
1286
  .map((line) => ' ' + line)
689
1287
  .join('\n');
@@ -732,7 +1330,8 @@ class WebBundler {
732
1330
  const files = await fs.readdir(agentsPath);
733
1331
 
734
1332
  for (const file of files) {
735
- if (file.endsWith('.md')) {
1333
+ // Look for .agent.yaml files (new format) or .md files (legacy format)
1334
+ if (file.endsWith('.agent.yaml') || (file.endsWith('.md') && !file.toLowerCase().includes('readme'))) {
736
1335
  agents.push(file);
737
1336
  }
738
1337
  }
@@ -754,7 +1353,7 @@ class WebBundler {
754
1353
  const files = await fs.readdir(teamsPath);
755
1354
 
756
1355
  for (const file of files) {
757
- if (file.endsWith('.md')) {
1356
+ if (file.endsWith('.yaml') || file.endsWith('.yml')) {
758
1357
  teams.push(file);
759
1358
  }
760
1359
  }
@@ -794,8 +1393,8 @@ class WebBundler {
794
1393
  // Ensure temp directory exists
795
1394
  await fs.ensureDir(this.tempManifestDir);
796
1395
 
797
- // Generate agent-party.xml using shared generator
798
- const agentPartyPath = path.join(this.tempManifestDir, 'agent-party.xml');
1396
+ // Generate agent-manifest.csv using shared generator
1397
+ const agentPartyPath = path.join(this.tempManifestDir, 'agent-manifest.csv');
799
1398
  await AgentPartyGenerator.writeAgentParty(agentPartyPath, this.discoveredAgents, { forWeb: true });
800
1399
 
801
1400
  console.log(chalk.dim(' ✓ Created temporary manifest files'));
@@ -853,7 +1452,7 @@ class WebBundler {
853
1452
 
854
1453
  // Group and display warnings by agent
855
1454
  for (const agentWarning of this.stats.warnings) {
856
- if (agentWarning.warnings.length > 0) {
1455
+ if (agentWarning && agentWarning.warnings && agentWarning.warnings.length > 0) {
857
1456
  console.log(chalk.bold(`\n ${agentWarning.agent}:`));
858
1457
  // Display unique warnings for this agent
859
1458
  const uniqueWarnings = [...new Set(agentWarning.warnings)];