bmad-method 5.1.3 → 6.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (948) 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/FUNDING.yaml +2 -2
  46. package/.github/ISSUE_TEMPLATE/config.yaml +5 -0
  47. package/.github/ISSUE_TEMPLATE/idea_submission.md +109 -0
  48. package/.github/workflows/discord.yaml +1 -10
  49. package/.github/workflows/{format-check.yaml → lint.yaml} +22 -3
  50. package/.github/workflows/manual-release.yaml +2 -2
  51. package/.nvmrc +1 -0
  52. package/.prettierignore +2 -0
  53. package/.vscode/settings.json +34 -9
  54. package/CHANGELOG.md +214 -574
  55. package/CONTRIBUTING.md +131 -60
  56. package/LICENSE +6 -1
  57. package/README.md +188 -148
  58. package/bmad/_cfg/agent-manifest.csv +7 -0
  59. package/bmad/_cfg/agents/bmb-bmad-builder.customize.yaml +42 -0
  60. package/bmad/_cfg/agents/bmd-cli-chief.customize.yaml +32 -0
  61. package/bmad/_cfg/agents/bmd-doc-keeper.customize.yaml +42 -0
  62. package/bmad/_cfg/agents/bmd-release-chief.customize.yaml +42 -0
  63. package/bmad/_cfg/agents/core-bmad-master.customize.yaml +42 -0
  64. package/bmad/_cfg/files-manifest.csv +83 -0
  65. package/bmad/_cfg/manifest.yaml +12 -0
  66. package/bmad/_cfg/task-manifest.csv +5 -0
  67. package/bmad/_cfg/tool-manifest.csv +2 -0
  68. package/bmad/_cfg/workflow-manifest.csv +15 -0
  69. package/bmad/bmb/README.md +132 -0
  70. package/bmad/bmb/agents/bmad-builder.md +70 -0
  71. package/bmad/bmb/config.yaml +14 -0
  72. package/bmad/bmb/workflows/audit-workflow/checklist.md +143 -0
  73. package/bmad/bmb/workflows/audit-workflow/instructions.md +341 -0
  74. package/bmad/bmb/workflows/audit-workflow/template.md +118 -0
  75. package/bmad/bmb/workflows/audit-workflow/workflow.yaml +23 -0
  76. package/bmad/bmb/workflows/audit-workflow/workflow.yaml.bak +21 -0
  77. package/bmad/bmb/workflows/convert-legacy/README.md +262 -0
  78. package/bmad/bmb/workflows/convert-legacy/checklist.md +205 -0
  79. package/bmad/bmb/workflows/convert-legacy/instructions.md +377 -0
  80. package/bmad/bmb/workflows/convert-legacy/workflow.yaml +32 -0
  81. package/bmad/bmb/workflows/create-agent/README.md +320 -0
  82. package/bmad/bmb/workflows/create-agent/agent-architecture.md +419 -0
  83. package/bmad/bmb/workflows/create-agent/agent-architecture.md.bak +412 -0
  84. package/bmad/bmb/workflows/create-agent/agent-command-patterns.md +759 -0
  85. package/bmad/bmb/workflows/create-agent/agent-command-patterns.md.bak +759 -0
  86. package/bmad/bmb/workflows/create-agent/agent-types.md +292 -0
  87. package/bmad/bmb/workflows/create-agent/brainstorm-context.md +174 -0
  88. package/bmad/bmb/workflows/create-agent/checklist.md +62 -0
  89. package/bmad/bmb/workflows/create-agent/communication-styles.md +202 -0
  90. package/bmad/bmb/workflows/create-agent/instructions.md +430 -0
  91. package/bmad/bmb/workflows/create-agent/workflow.yaml +37 -0
  92. package/bmad/bmb/workflows/create-module/README.md +220 -0
  93. package/bmad/bmb/workflows/create-module/README.md.bak +218 -0
  94. package/bmad/bmb/workflows/create-module/brainstorm-context.md +137 -0
  95. package/bmad/bmb/workflows/create-module/checklist.md +244 -0
  96. package/bmad/bmb/workflows/create-module/checklist.md.bak +245 -0
  97. package/bmad/bmb/workflows/create-module/installer-templates/install-config.yaml +92 -0
  98. package/bmad/bmb/workflows/create-module/installer-templates/installer.js +231 -0
  99. package/bmad/bmb/workflows/create-module/installer-templates/installer.js.bak +231 -0
  100. package/bmad/bmb/workflows/create-module/instructions.md +581 -0
  101. package/bmad/bmb/workflows/create-module/instructions.md.bak +521 -0
  102. package/bmad/bmb/workflows/create-module/module-structure.md +366 -0
  103. package/bmad/bmb/workflows/create-module/module-structure.md.bak +310 -0
  104. package/bmad/bmb/workflows/create-module/workflow.yaml +42 -0
  105. package/bmad/bmb/workflows/create-module/workflow.yaml.bak +40 -0
  106. package/bmad/bmb/workflows/create-workflow/README.md +277 -0
  107. package/bmad/bmb/workflows/create-workflow/brainstorm-context.md +197 -0
  108. package/bmad/bmb/workflows/create-workflow/checklist.md +94 -0
  109. package/bmad/bmb/workflows/create-workflow/instructions.md +716 -0
  110. package/bmad/bmb/workflows/create-workflow/workflow-creation-guide.md +1150 -0
  111. package/bmad/bmb/workflows/create-workflow/workflow-template/checklist.md +24 -0
  112. package/bmad/bmb/workflows/create-workflow/workflow-template/instructions.md +13 -0
  113. package/bmad/bmb/workflows/create-workflow/workflow-template/template.md +9 -0
  114. package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml +39 -0
  115. package/bmad/bmb/workflows/create-workflow/workflow-template/workflow.yaml.bak +39 -0
  116. package/bmad/bmb/workflows/create-workflow/workflow.yaml +40 -0
  117. package/bmad/bmb/workflows/create-workflow/workflow.yaml.bak +38 -0
  118. package/bmad/bmb/workflows/edit-agent/README.md +112 -0
  119. package/bmad/bmb/workflows/edit-agent/checklist.md +112 -0
  120. package/bmad/bmb/workflows/edit-agent/instructions.md +290 -0
  121. package/bmad/bmb/workflows/edit-agent/workflow.yaml +33 -0
  122. package/bmad/bmb/workflows/edit-module/README.md +187 -0
  123. package/bmad/bmb/workflows/edit-module/checklist.md +165 -0
  124. package/bmad/bmb/workflows/edit-module/instructions.md +339 -0
  125. package/bmad/bmb/workflows/edit-module/workflow.yaml +34 -0
  126. package/bmad/bmb/workflows/edit-workflow/README.md +119 -0
  127. package/bmad/bmb/workflows/edit-workflow/checklist.md +70 -0
  128. package/bmad/bmb/workflows/edit-workflow/instructions.md +342 -0
  129. package/bmad/bmb/workflows/edit-workflow/workflow.yaml +27 -0
  130. package/bmad/bmb/workflows/edit-workflow/workflow.yaml.bak +25 -0
  131. package/bmad/bmb/workflows/module-brief/README.md +264 -0
  132. package/bmad/bmb/workflows/module-brief/checklist.md +116 -0
  133. package/bmad/bmb/workflows/module-brief/instructions.md +267 -0
  134. package/bmad/bmb/workflows/module-brief/template.md +275 -0
  135. package/bmad/bmb/workflows/module-brief/workflow.yaml +29 -0
  136. package/bmad/bmb/workflows/module-brief/workflow.yaml.bak +27 -0
  137. package/bmad/bmb/workflows/redoc/README.md +87 -0
  138. package/bmad/bmb/workflows/redoc/checklist.md +99 -0
  139. package/bmad/bmb/workflows/redoc/instructions.md +265 -0
  140. package/bmad/bmb/workflows/redoc/workflow.yaml +32 -0
  141. package/bmad/bmb/workflows/redoc/workflow.yaml.bak +31 -0
  142. package/bmad/bmd/README.md +193 -0
  143. package/bmad/bmd/README.md.bak +193 -0
  144. package/bmad/bmd/agents/cli-chief-sidecar/instructions.md +102 -0
  145. package/bmad/bmd/agents/cli-chief-sidecar/instructions.md.bak +102 -0
  146. package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md +68 -0
  147. package/bmad/bmd/agents/cli-chief-sidecar/knowledge/README.md.bak +68 -0
  148. package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +123 -0
  149. package/bmad/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md.bak +123 -0
  150. package/bmad/bmd/agents/cli-chief-sidecar/memories.md +53 -0
  151. package/bmad/bmd/agents/cli-chief-sidecar/memories.md.bak +53 -0
  152. package/bmad/bmd/agents/cli-chief.md +108 -0
  153. package/bmad/bmd/agents/cli-chief.md.bak +108 -0
  154. package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md +177 -0
  155. package/bmad/bmd/agents/doc-keeper-sidecar/instructions.md.bak +177 -0
  156. package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md +81 -0
  157. package/bmad/bmd/agents/doc-keeper-sidecar/knowledge/README.md.bak +81 -0
  158. package/bmad/bmd/agents/doc-keeper-sidecar/memories.md +88 -0
  159. package/bmad/bmd/agents/doc-keeper-sidecar/memories.md.bak +88 -0
  160. package/bmad/bmd/agents/doc-keeper.md +115 -0
  161. package/bmad/bmd/agents/doc-keeper.md.bak +115 -0
  162. package/bmad/bmd/agents/release-chief-sidecar/instructions.md +164 -0
  163. package/bmad/bmd/agents/release-chief-sidecar/instructions.md.bak +164 -0
  164. package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md +82 -0
  165. package/bmad/bmd/agents/release-chief-sidecar/knowledge/README.md.bak +82 -0
  166. package/bmad/bmd/agents/release-chief-sidecar/memories.md +73 -0
  167. package/bmad/bmd/agents/release-chief-sidecar/memories.md.bak +73 -0
  168. package/bmad/bmd/agents/release-chief.md +109 -0
  169. package/bmad/bmd/agents/release-chief.md.bak +109 -0
  170. package/bmad/bmd/config.yaml +10 -0
  171. package/bmad/core/agents/bmad-master.md +71 -0
  172. package/bmad/core/agents/bmad-web-orchestrator.agent.xml +122 -0
  173. package/bmad/core/config.yaml +9 -0
  174. package/bmad/core/tasks/adv-elicit-methods.csv +39 -0
  175. package/bmad/core/tasks/adv-elicit.xml +104 -0
  176. package/bmad/core/tasks/index-docs.xml +65 -0
  177. package/bmad/core/tasks/validate-workflow.xml +89 -0
  178. package/bmad/core/tasks/workflow.xml +174 -0
  179. package/bmad/core/tools/shard-doc.xml +100 -0
  180. package/bmad/core/workflows/brainstorming/README.md +271 -0
  181. package/bmad/core/workflows/brainstorming/brain-methods.csv +36 -0
  182. package/bmad/core/workflows/brainstorming/instructions.md +314 -0
  183. package/bmad/core/workflows/brainstorming/template.md +102 -0
  184. package/bmad/core/workflows/brainstorming/workflow.yaml +43 -0
  185. package/bmad/core/workflows/party-mode/instructions.md +188 -0
  186. package/bmad/core/workflows/party-mode/workflow.yaml +23 -0
  187. package/bmad/docs/claude-code-instructions.md +25 -0
  188. package/bmad/docs/codex-instructions.md +21 -0
  189. package/bmd/README.md +193 -0
  190. package/bmd/agents/cli-chief-sidecar/instructions.md +102 -0
  191. package/bmd/agents/cli-chief-sidecar/knowledge/README.md +68 -0
  192. package/bmd/agents/cli-chief-sidecar/knowledge/cli-reference.md +123 -0
  193. package/bmd/agents/cli-chief-sidecar/memories.md +53 -0
  194. package/bmd/agents/cli-chief.agent.yaml +126 -0
  195. package/bmd/agents/doc-keeper-sidecar/instructions.md +177 -0
  196. package/bmd/agents/doc-keeper-sidecar/knowledge/README.md +81 -0
  197. package/bmd/agents/doc-keeper-sidecar/memories.md +88 -0
  198. package/bmd/agents/doc-keeper.agent.yaml +137 -0
  199. package/bmd/agents/release-chief-sidecar/instructions.md +164 -0
  200. package/bmd/agents/release-chief-sidecar/knowledge/README.md +82 -0
  201. package/bmd/agents/release-chief-sidecar/memories.md +73 -0
  202. package/bmd/agents/release-chief.agent.yaml +127 -0
  203. package/bmd/bmad-custom-module-installer-plan.md +1176 -0
  204. package/bmd/config.yaml +12 -0
  205. package/docs/bmad-brownfield-guide.md +1260 -0
  206. package/docs/conversion-report-shard-doc-2025-10-26.md +188 -0
  207. package/docs/ide-info/auggie.md +31 -0
  208. package/docs/ide-info/claude-code.md +25 -0
  209. package/docs/ide-info/cline.md +31 -0
  210. package/docs/ide-info/codex.md +21 -0
  211. package/docs/ide-info/crush.md +30 -0
  212. package/docs/ide-info/cursor.md +25 -0
  213. package/docs/ide-info/gemini.md +25 -0
  214. package/docs/ide-info/github-copilot.md +26 -0
  215. package/docs/ide-info/iflow.md +33 -0
  216. package/docs/ide-info/kilo.md +24 -0
  217. package/docs/ide-info/opencode.md +24 -0
  218. package/docs/ide-info/qwen.md +25 -0
  219. package/docs/ide-info/roo.md +27 -0
  220. package/docs/ide-info/trae.md +25 -0
  221. package/docs/ide-info/windsurf.md +22 -0
  222. package/docs/installers-bundlers/ide-injections.md +186 -0
  223. package/docs/installers-bundlers/installers-modules-platforms-reference.md +327 -0
  224. package/docs/installers-bundlers/web-bundler-usage.md +54 -0
  225. package/docs/v4-to-v6-upgrade.md +225 -0
  226. package/eslint.config.mjs +21 -9
  227. package/package.json +32 -36
  228. package/prettier.config.mjs +1 -1
  229. package/src/core/_module-installer/install-config.yaml +28 -0
  230. package/src/core/_module-installer/installer.js +68 -0
  231. package/src/core/agents/bmad-master.agent.yaml +39 -0
  232. package/src/core/agents/bmad-web-orchestrator.agent.xml +122 -0
  233. package/src/core/tasks/adv-elicit-methods.csv +39 -0
  234. package/src/core/tasks/adv-elicit.xml +104 -0
  235. package/src/core/tasks/index-docs.xml +65 -0
  236. package/src/core/tasks/validate-workflow.xml +89 -0
  237. package/src/core/tasks/workflow.xml +166 -0
  238. package/src/core/tools/shard-doc.xml +100 -0
  239. package/src/core/workflows/brainstorming/README.md +271 -0
  240. package/src/core/workflows/brainstorming/brain-methods.csv +36 -0
  241. package/src/core/workflows/brainstorming/instructions.md +314 -0
  242. package/src/core/workflows/brainstorming/template.md +102 -0
  243. package/src/core/workflows/brainstorming/workflow.yaml +43 -0
  244. package/src/core/workflows/party-mode/instructions.md +188 -0
  245. package/src/core/workflows/party-mode/workflow.yaml +23 -0
  246. package/src/modules/bmb/README.md +132 -0
  247. package/src/modules/bmb/_module-installer/install-config.yaml +26 -0
  248. package/src/modules/bmb/agents/bmad-builder.agent.yaml +58 -0
  249. package/src/modules/bmb/workflows/audit-workflow/checklist.md +143 -0
  250. package/src/modules/bmb/workflows/audit-workflow/instructions.md +341 -0
  251. package/src/modules/bmb/workflows/audit-workflow/template.md +118 -0
  252. package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +25 -0
  253. package/src/modules/bmb/workflows/convert-legacy/README.md +262 -0
  254. package/src/modules/bmb/workflows/convert-legacy/checklist.md +205 -0
  255. package/src/modules/bmb/workflows/convert-legacy/instructions.md +377 -0
  256. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +34 -0
  257. package/src/modules/bmb/workflows/create-agent/README.md +320 -0
  258. package/src/modules/bmb/workflows/create-agent/agent-architecture.md +419 -0
  259. package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +759 -0
  260. package/src/modules/bmb/workflows/create-agent/agent-types.md +292 -0
  261. package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +174 -0
  262. package/src/modules/bmb/workflows/create-agent/checklist.md +62 -0
  263. package/src/modules/bmb/workflows/create-agent/communication-styles.md +202 -0
  264. package/src/modules/bmb/workflows/create-agent/instructions.md +430 -0
  265. package/src/modules/bmb/workflows/create-agent/workflow.yaml +49 -0
  266. package/src/modules/bmb/workflows/create-module/README.md +220 -0
  267. package/src/modules/bmb/workflows/create-module/brainstorm-context.md +137 -0
  268. package/src/modules/bmb/workflows/create-module/checklist.md +244 -0
  269. package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +92 -0
  270. package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +231 -0
  271. package/src/modules/bmb/workflows/create-module/instructions.md +581 -0
  272. package/src/modules/bmb/workflows/create-module/module-structure.md +366 -0
  273. package/src/modules/bmb/workflows/create-module/workflow.yaml +44 -0
  274. package/src/modules/bmb/workflows/create-workflow/README.md +277 -0
  275. package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +197 -0
  276. package/src/modules/bmb/workflows/create-workflow/checklist.md +94 -0
  277. package/src/modules/bmb/workflows/create-workflow/instructions.md +716 -0
  278. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +1150 -0
  279. package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +24 -0
  280. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +13 -0
  281. package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +9 -0
  282. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +65 -0
  283. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +42 -0
  284. package/src/modules/bmb/workflows/edit-agent/README.md +112 -0
  285. package/src/modules/bmb/workflows/edit-agent/checklist.md +112 -0
  286. package/src/modules/bmb/workflows/edit-agent/instructions.md +290 -0
  287. package/src/modules/bmb/workflows/edit-agent/workflow.yaml +35 -0
  288. package/src/modules/bmb/workflows/edit-module/README.md +187 -0
  289. package/src/modules/bmb/workflows/edit-module/checklist.md +165 -0
  290. package/src/modules/bmb/workflows/edit-module/instructions.md +339 -0
  291. package/src/modules/bmb/workflows/edit-module/workflow.yaml +36 -0
  292. package/src/modules/bmb/workflows/edit-workflow/README.md +119 -0
  293. package/src/modules/bmb/workflows/edit-workflow/checklist.md +70 -0
  294. package/src/modules/bmb/workflows/edit-workflow/instructions.md +342 -0
  295. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +29 -0
  296. package/src/modules/bmb/workflows/module-brief/README.md +264 -0
  297. package/src/modules/bmb/workflows/module-brief/checklist.md +116 -0
  298. package/src/modules/bmb/workflows/module-brief/instructions.md +267 -0
  299. package/src/modules/bmb/workflows/module-brief/template.md +275 -0
  300. package/src/modules/bmb/workflows/module-brief/workflow.yaml +31 -0
  301. package/src/modules/bmb/workflows/redoc/README.md +87 -0
  302. package/src/modules/bmb/workflows/redoc/checklist.md +99 -0
  303. package/src/modules/bmb/workflows/redoc/instructions.md +265 -0
  304. package/src/modules/bmb/workflows/redoc/workflow.yaml +34 -0
  305. package/src/modules/bmm/README.md +141 -0
  306. package/src/modules/bmm/_module-installer/assets/bmm-kb.md +1 -0
  307. package/src/modules/bmm/_module-installer/assets/technical-decisions.md +30 -0
  308. package/src/modules/bmm/_module-installer/install-config.yaml +74 -0
  309. package/src/modules/bmm/_module-installer/installer.js +131 -0
  310. package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +35 -0
  311. package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +32 -0
  312. package/src/modules/bmm/agents/analyst.agent.yaml +43 -0
  313. package/src/modules/bmm/agents/architect.agent.yaml +41 -0
  314. package/src/modules/bmm/agents/dev.agent.yaml +43 -0
  315. package/src/modules/bmm/agents/game-architect.agent.yaml +35 -0
  316. package/src/modules/bmm/agents/game-designer.agent.yaml +47 -0
  317. package/src/modules/bmm/agents/game-dev.agent.yaml +39 -0
  318. package/src/modules/bmm/agents/pm.agent.yaml +50 -0
  319. package/src/modules/bmm/agents/sm.agent.yaml +67 -0
  320. package/src/modules/bmm/agents/tea.agent.yaml +59 -0
  321. package/src/modules/bmm/agents/ux-designer.agent.yaml +33 -0
  322. package/src/modules/bmm/sub-modules/claude-code/config.yaml +5 -0
  323. package/src/modules/bmm/sub-modules/claude-code/injections.yaml +242 -0
  324. package/src/modules/bmm/sub-modules/claude-code/readme.md +87 -0
  325. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/api-documenter.md +102 -0
  326. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/codebase-analyzer.md +82 -0
  327. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/data-analyst.md +101 -0
  328. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-analysis/pattern-detector.md +84 -0
  329. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/dependency-mapper.md +83 -0
  330. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/epic-optimizer.md +81 -0
  331. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/requirements-analyst.md +61 -0
  332. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/technical-decisions-curator.md +168 -0
  333. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/trend-spotter.md +115 -0
  334. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-journey-mapper.md +123 -0
  335. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-planning/user-researcher.md +72 -0
  336. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/market-researcher.md +51 -0
  337. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-research/tech-debt-auditor.md +106 -0
  338. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/document-reviewer.md +102 -0
  339. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/technical-evaluator.md +68 -0
  340. package/src/modules/bmm/sub-modules/claude-code/sub-agents/bmad-review/test-coverage-analyzer.md +108 -0
  341. package/src/modules/bmm/tasks/daily-standup.xml +85 -0
  342. package/src/modules/bmm/tasks/retrospective.xml +104 -0
  343. package/src/modules/bmm/teams/team-fullstack.yaml +11 -0
  344. package/src/modules/bmm/teams/team-gamedev.yaml +14 -0
  345. package/src/modules/bmm/testarch/README.md +311 -0
  346. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  347. package/src/modules/bmm/testarch/knowledge/component-tdd.md +486 -0
  348. package/src/modules/bmm/testarch/knowledge/contract-testing.md +957 -0
  349. package/src/modules/bmm/testarch/knowledge/data-factories.md +500 -0
  350. package/src/modules/bmm/testarch/knowledge/email-auth.md +721 -0
  351. package/src/modules/bmm/testarch/knowledge/error-handling.md +725 -0
  352. package/src/modules/bmm/testarch/knowledge/feature-flags.md +750 -0
  353. package/src/modules/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  354. package/src/modules/bmm/testarch/knowledge/network-first.md +486 -0
  355. package/src/modules/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  356. package/src/modules/bmm/testarch/knowledge/playwright-config.md +730 -0
  357. package/src/modules/bmm/testarch/knowledge/probability-impact.md +601 -0
  358. package/src/modules/bmm/testarch/knowledge/risk-governance.md +615 -0
  359. package/src/modules/bmm/testarch/knowledge/selective-testing.md +732 -0
  360. package/src/modules/bmm/testarch/knowledge/selector-resilience.md +527 -0
  361. package/src/modules/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  362. package/src/modules/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  363. package/src/modules/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  364. package/src/modules/bmm/testarch/knowledge/test-quality.md +664 -0
  365. package/src/modules/bmm/testarch/knowledge/timing-debugging.md +372 -0
  366. package/src/modules/bmm/testarch/knowledge/visual-debugging.md +524 -0
  367. package/src/modules/bmm/testarch/tea-index.csv +22 -0
  368. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/README.md +38 -0
  369. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/game-brain-methods.csv +26 -0
  370. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/game-context.md +115 -0
  371. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/instructions.md +109 -0
  372. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/workflow.yaml +41 -0
  373. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/README.md +29 -0
  374. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +91 -0
  375. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +25 -0
  376. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +39 -0
  377. package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +221 -0
  378. package/src/modules/bmm/workflows/1-analysis/game-brief/checklist.md +128 -0
  379. package/src/modules/bmm/workflows/1-analysis/game-brief/instructions.md +357 -0
  380. package/src/modules/bmm/workflows/1-analysis/game-brief/template.md +205 -0
  381. package/src/modules/bmm/workflows/1-analysis/game-brief/workflow.yaml +44 -0
  382. package/src/modules/bmm/workflows/1-analysis/product-brief/README.md +180 -0
  383. package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +115 -0
  384. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +321 -0
  385. package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +165 -0
  386. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +43 -0
  387. package/src/modules/bmm/workflows/1-analysis/research/README.md +454 -0
  388. package/src/modules/bmm/workflows/1-analysis/research/checklist.md +202 -0
  389. package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +114 -0
  390. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-competitor-analyzer.md +259 -0
  391. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-data-analyst.md +190 -0
  392. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-market-researcher.md +337 -0
  393. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-trend-spotter.md +107 -0
  394. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-user-researcher.md +329 -0
  395. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +433 -0
  396. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +613 -0
  397. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +125 -0
  398. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +501 -0
  399. package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +94 -0
  400. package/src/modules/bmm/workflows/1-analysis/research/template-market.md +311 -0
  401. package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +210 -0
  402. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +49 -0
  403. package/src/modules/bmm/workflows/2-plan-workflows/README.md +258 -0
  404. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +310 -0
  405. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +1283 -0
  406. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +145 -0
  407. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +42 -0
  408. package/src/modules/bmm/workflows/2-plan-workflows/gdd/README.md +222 -0
  409. package/src/modules/bmm/workflows/2-plan-workflows/gdd/checklist.md +148 -0
  410. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/action-platformer.md +45 -0
  411. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/adventure.md +84 -0
  412. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/card-game.md +76 -0
  413. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/fighting.md +89 -0
  414. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/horror.md +86 -0
  415. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/idle-incremental.md +78 -0
  416. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/metroidvania.md +87 -0
  417. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/moba.md +74 -0
  418. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/party-game.md +79 -0
  419. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/puzzle.md +58 -0
  420. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/racing.md +88 -0
  421. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/rhythm.md +79 -0
  422. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/roguelike.md +69 -0
  423. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/rpg.md +70 -0
  424. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/sandbox.md +79 -0
  425. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/shooter.md +62 -0
  426. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/simulation.md +73 -0
  427. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/sports.md +75 -0
  428. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/strategy.md +71 -0
  429. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/survival.md +79 -0
  430. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/text-based.md +91 -0
  431. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/tower-defense.md +79 -0
  432. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/turn-based-tactics.md +88 -0
  433. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types/visual-novel.md +89 -0
  434. package/src/modules/bmm/workflows/2-plan-workflows/gdd/game-types.csv +25 -0
  435. package/src/modules/bmm/workflows/2-plan-workflows/gdd/gdd-template.md +153 -0
  436. package/src/modules/bmm/workflows/2-plan-workflows/gdd/instructions-gdd.md +475 -0
  437. package/src/modules/bmm/workflows/2-plan-workflows/gdd/workflow.yaml +67 -0
  438. package/src/modules/bmm/workflows/2-plan-workflows/narrative/checklist.md +139 -0
  439. package/src/modules/bmm/workflows/2-plan-workflows/narrative/instructions-narrative.md +557 -0
  440. package/src/modules/bmm/workflows/2-plan-workflows/narrative/narrative-template.md +195 -0
  441. package/src/modules/bmm/workflows/2-plan-workflows/narrative/workflow.yaml +38 -0
  442. package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +117 -0
  443. package/src/modules/bmm/workflows/2-plan-workflows/prd/epics-template.md +63 -0
  444. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +449 -0
  445. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +62 -0
  446. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +46 -0
  447. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +107 -0
  448. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +11 -0
  449. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level0-story.md +167 -0
  450. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-level1-stories.md +278 -0
  451. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +269 -0
  452. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +55 -0
  453. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +56 -0
  454. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +52 -0
  455. package/src/modules/bmm/workflows/3-solutioning/README.md +1 -0
  456. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +347 -0
  457. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +103 -0
  458. package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +244 -0
  459. package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +222 -0
  460. package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +703 -0
  461. package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +13 -0
  462. package/src/modules/bmm/workflows/3-solutioning/architecture/readme.md +318 -0
  463. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +54 -0
  464. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/README.md +177 -0
  465. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +175 -0
  466. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +273 -0
  467. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +146 -0
  468. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/validation-criteria.yaml +189 -0
  469. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +40 -0
  470. package/src/modules/bmm/workflows/4-implementation/README.md +221 -0
  471. package/src/modules/bmm/workflows/4-implementation/code-review/README.md +69 -0
  472. package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +12 -0
  473. package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +22 -0
  474. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +391 -0
  475. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +56 -0
  476. package/src/modules/bmm/workflows/4-implementation/correct-course/README.md +73 -0
  477. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +279 -0
  478. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +201 -0
  479. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +45 -0
  480. package/src/modules/bmm/workflows/4-implementation/create-story/README.md +129 -0
  481. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +240 -0
  482. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +252 -0
  483. package/src/modules/bmm/workflows/4-implementation/create-story/template.md +51 -0
  484. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +49 -0
  485. package/src/modules/bmm/workflows/4-implementation/dev-story/AUDIT-REPORT.md +367 -0
  486. package/src/modules/bmm/workflows/4-implementation/dev-story/README.md +206 -0
  487. package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +38 -0
  488. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +262 -0
  489. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +28 -0
  490. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/README.md +195 -0
  491. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +17 -0
  492. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +160 -0
  493. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +76 -0
  494. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +34 -0
  495. package/src/modules/bmm/workflows/4-implementation/retrospective/README.md +77 -0
  496. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +479 -0
  497. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +45 -0
  498. package/src/modules/bmm/workflows/4-implementation/sprint-planning/README.md +156 -0
  499. package/src/modules/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  500. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +221 -0
  501. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  502. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +41 -0
  503. package/src/modules/bmm/workflows/4-implementation/story-context/README.md +234 -0
  504. package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +16 -0
  505. package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +34 -0
  506. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +201 -0
  507. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +32 -0
  508. package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +111 -0
  509. package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +27 -0
  510. package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +117 -0
  511. package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +27 -0
  512. package/src/modules/bmm/workflows/README.md +577 -0
  513. package/src/modules/bmm/workflows/document-project/README.md +444 -0
  514. package/src/modules/bmm/workflows/document-project/checklist.md +245 -0
  515. package/src/modules/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  516. package/src/modules/bmm/workflows/document-project/instructions.md +222 -0
  517. package/src/modules/bmm/workflows/document-project/templates/README.md +38 -0
  518. package/src/modules/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  519. package/src/modules/bmm/workflows/document-project/templates/index-template.md +169 -0
  520. package/src/modules/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  521. package/src/modules/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  522. package/src/modules/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  523. package/src/modules/bmm/workflows/document-project/workflow.yaml +36 -0
  524. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  525. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  526. package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  527. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  528. package/src/modules/bmm/workflows/testarch/README.md +26 -0
  529. package/src/modules/bmm/workflows/testarch/atdd/README.md +672 -0
  530. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
  531. package/src/modules/bmm/workflows/testarch/atdd/checklist.md +373 -0
  532. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +785 -0
  533. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +54 -0
  534. package/src/modules/bmm/workflows/testarch/automate/README.md +869 -0
  535. package/src/modules/bmm/workflows/testarch/automate/checklist.md +580 -0
  536. package/src/modules/bmm/workflows/testarch/automate/instructions.md +1303 -0
  537. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +63 -0
  538. package/src/modules/bmm/workflows/testarch/ci/README.md +493 -0
  539. package/src/modules/bmm/workflows/testarch/ci/checklist.md +246 -0
  540. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +165 -0
  541. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +128 -0
  542. package/src/modules/bmm/workflows/testarch/ci/instructions.md +517 -0
  543. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +55 -0
  544. package/src/modules/bmm/workflows/testarch/framework/README.md +340 -0
  545. package/src/modules/bmm/workflows/testarch/framework/checklist.md +321 -0
  546. package/src/modules/bmm/workflows/testarch/framework/instructions.md +455 -0
  547. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +55 -0
  548. package/src/modules/bmm/workflows/testarch/nfr-assess/README.md +469 -0
  549. package/src/modules/bmm/workflows/testarch/nfr-assess/checklist.md +405 -0
  550. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
  551. package/src/modules/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +443 -0
  552. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +58 -0
  553. package/src/modules/bmm/workflows/testarch/test-design/README.md +493 -0
  554. package/src/modules/bmm/workflows/testarch/test-design/checklist.md +234 -0
  555. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +621 -0
  556. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +285 -0
  557. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +54 -0
  558. package/src/modules/bmm/workflows/testarch/test-review/README.md +775 -0
  559. package/src/modules/bmm/workflows/testarch/test-review/checklist.md +470 -0
  560. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +608 -0
  561. package/src/modules/bmm/workflows/testarch/test-review/test-review-template.md +388 -0
  562. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +55 -0
  563. package/src/modules/bmm/workflows/testarch/trace/README.md +802 -0
  564. package/src/modules/bmm/workflows/testarch/trace/checklist.md +654 -0
  565. package/src/modules/bmm/workflows/testarch/trace/instructions.md +1045 -0
  566. package/src/modules/bmm/workflows/testarch/trace/trace-template.md +673 -0
  567. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +68 -0
  568. package/src/modules/bmm/workflows/workflow-status/README.md +241 -0
  569. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +297 -0
  570. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +28 -0
  571. package/src/modules/bmm/workflows/workflow-status/instructions.md +324 -0
  572. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-0.yaml +54 -0
  573. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-1.yaml +58 -0
  574. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-2.yaml +76 -0
  575. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-3.yaml +95 -0
  576. package/src/modules/bmm/workflows/workflow-status/paths/brownfield-level-4.yaml +88 -0
  577. package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +75 -0
  578. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-0.yaml +45 -0
  579. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-1.yaml +49 -0
  580. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-2.yaml +78 -0
  581. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-3.yaml +73 -0
  582. package/src/modules/bmm/workflows/workflow-status/paths/greenfield-level-4.yaml +75 -0
  583. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +59 -0
  584. package/src/modules/bmm/workflows/workflow-status/workflow-status-template.md +30 -0
  585. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +30 -0
  586. package/src/modules/cis/_module-installer/install-config.yaml +14 -0
  587. package/src/modules/cis/_module-installer/installer.js +92 -0
  588. package/src/modules/cis/agents/README.md +104 -0
  589. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +23 -0
  590. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +23 -0
  591. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +23 -0
  592. package/src/modules/cis/agents/innovation-strategist.agent.yaml +23 -0
  593. package/src/modules/cis/agents/storyteller.agent.yaml +23 -0
  594. package/src/modules/cis/readme.md +86 -0
  595. package/src/modules/cis/teams/creative-squad.yaml +6 -0
  596. package/src/modules/cis/workflows/README.md +67 -0
  597. package/src/modules/cis/workflows/design-thinking/README.md +56 -0
  598. package/src/modules/cis/workflows/design-thinking/design-methods.csv +31 -0
  599. package/src/modules/cis/workflows/design-thinking/instructions.md +200 -0
  600. package/src/modules/cis/workflows/design-thinking/template.md +111 -0
  601. package/src/modules/cis/workflows/design-thinking/workflow.yaml +43 -0
  602. package/src/modules/cis/workflows/innovation-strategy/README.md +56 -0
  603. package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +31 -0
  604. package/src/modules/cis/workflows/innovation-strategy/instructions.md +274 -0
  605. package/src/modules/cis/workflows/innovation-strategy/template.md +189 -0
  606. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +43 -0
  607. package/src/modules/cis/workflows/problem-solving/README.md +56 -0
  608. package/src/modules/cis/workflows/problem-solving/instructions.md +250 -0
  609. package/src/modules/cis/workflows/problem-solving/solving-methods.csv +31 -0
  610. package/src/modules/cis/workflows/problem-solving/template.md +165 -0
  611. package/src/modules/cis/workflows/problem-solving/workflow.yaml +43 -0
  612. package/src/modules/cis/workflows/storytelling/README.md +58 -0
  613. package/src/modules/cis/workflows/storytelling/instructions.md +283 -0
  614. package/src/modules/cis/workflows/storytelling/story-types.csv +26 -0
  615. package/src/modules/cis/workflows/storytelling/template.md +113 -0
  616. package/src/modules/cis/workflows/storytelling/workflow.yaml +43 -0
  617. package/src/utility/models/agent-activation-ide.xml +51 -0
  618. package/src/utility/models/agent-activation-web.xml +60 -0
  619. package/src/utility/models/agent-config-template.md +23 -0
  620. package/src/utility/models/agent-in-team-activation.xml +3 -0
  621. package/src/utility/models/fragments/activation-rules.xml +8 -0
  622. package/src/utility/models/fragments/activation-steps.xml +15 -0
  623. package/src/utility/models/fragments/handler-action.xml +4 -0
  624. package/src/utility/models/fragments/handler-data.xml +5 -0
  625. package/src/utility/models/fragments/handler-exec.xml +5 -0
  626. package/src/utility/models/fragments/handler-tmpl.xml +5 -0
  627. package/src/utility/models/fragments/handler-validate-workflow.xml +7 -0
  628. package/src/utility/models/fragments/handler-workflow.xml +9 -0
  629. package/src/utility/models/fragments/menu-handlers.xml +6 -0
  630. package/src/utility/models/fragments/web-bundle-activation-steps.xml +32 -0
  631. package/src/utility/templates/agent.customize.template.yaml +42 -0
  632. package/test/README.md +295 -0
  633. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +26 -0
  634. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +29 -0
  635. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +21 -0
  636. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +19 -0
  637. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +24 -0
  638. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +23 -0
  639. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +24 -0
  640. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +30 -0
  641. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +24 -0
  642. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +24 -0
  643. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +24 -0
  644. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +24 -0
  645. package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +26 -0
  646. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
  647. package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
  648. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +26 -0
  649. package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
  650. package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +25 -0
  651. package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +26 -0
  652. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +23 -0
  653. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +26 -0
  654. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +26 -0
  655. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +23 -0
  656. package/test/fixtures/agent-schema/invalid/persona/principles-as-string.agent.yaml +23 -0
  657. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +28 -0
  658. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +30 -0
  659. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +27 -0
  660. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +27 -0
  661. package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
  662. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +27 -0
  663. package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
  664. package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
  665. package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
  666. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +23 -0
  667. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +21 -0
  668. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +26 -0
  669. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +30 -0
  670. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +21 -0
  671. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +39 -0
  672. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +23 -0
  673. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +33 -0
  674. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +23 -0
  675. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +23 -0
  676. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +23 -0
  677. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +23 -0
  678. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +23 -0
  679. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +21 -0
  680. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +27 -0
  681. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +29 -0
  682. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +23 -0
  683. package/test/test-agent-schema.js +387 -0
  684. package/test/test-cli-integration.sh +159 -0
  685. package/test/unit-test-schema.js +133 -0
  686. package/tools/bmad-npx-wrapper.js +100 -13
  687. package/tools/cli/README.md +590 -0
  688. package/tools/cli/bmad-cli.js +40 -0
  689. package/tools/cli/bundlers/bundle-web.js +179 -0
  690. package/tools/cli/bundlers/test-analyst.js +28 -0
  691. package/tools/cli/bundlers/test-bundler.js +118 -0
  692. package/tools/cli/bundlers/web-bundler.js +1479 -0
  693. package/tools/cli/commands/build.js +458 -0
  694. package/tools/cli/commands/install.js +82 -0
  695. package/tools/cli/commands/list.js +28 -0
  696. package/tools/cli/commands/status.js +47 -0
  697. package/tools/cli/commands/uninstall.js +44 -0
  698. package/tools/cli/commands/update.js +28 -0
  699. package/tools/cli/installers/lib/core/config-collector.js +590 -0
  700. package/tools/cli/installers/lib/core/dependency-resolver.js +725 -0
  701. package/tools/cli/installers/lib/core/detector.js +274 -0
  702. package/tools/cli/installers/lib/core/ide-config-manager.js +152 -0
  703. package/tools/cli/installers/lib/core/installer.js +2095 -0
  704. package/tools/cli/installers/lib/core/manifest-generator.js +776 -0
  705. package/tools/cli/installers/lib/core/manifest.js +536 -0
  706. package/tools/cli/installers/lib/ide/_base-ide.js +572 -0
  707. package/tools/cli/installers/lib/ide/auggie.js +336 -0
  708. package/tools/cli/installers/lib/ide/claude-code.js +449 -0
  709. package/tools/cli/installers/lib/ide/cline.js +223 -0
  710. package/tools/cli/installers/lib/ide/codex.js +234 -0
  711. package/tools/cli/installers/lib/ide/crush.js +276 -0
  712. package/tools/cli/installers/lib/ide/cursor.js +292 -0
  713. package/tools/cli/installers/lib/ide/gemini.js +156 -0
  714. package/tools/cli/installers/lib/ide/github-copilot.js +290 -0
  715. package/tools/cli/installers/lib/ide/iflow.js +142 -0
  716. package/tools/cli/installers/lib/ide/kilo.js +171 -0
  717. package/tools/cli/installers/lib/ide/manager.js +194 -0
  718. package/tools/cli/installers/lib/ide/opencode.js +213 -0
  719. package/tools/cli/installers/lib/ide/qwen.js +290 -0
  720. package/tools/cli/installers/lib/ide/roo.js +288 -0
  721. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +143 -0
  722. package/tools/cli/installers/lib/ide/shared/module-injections.js +133 -0
  723. package/tools/cli/installers/lib/ide/task-tool-command-generator.js +119 -0
  724. package/tools/cli/installers/lib/ide/trae.js +278 -0
  725. package/tools/cli/installers/lib/ide/windsurf.js +201 -0
  726. package/tools/cli/installers/lib/ide/workflow-command-generator.js +235 -0
  727. package/tools/cli/installers/lib/ide/workflow-command-template.md +15 -0
  728. package/tools/cli/installers/lib/modules/manager.js +568 -0
  729. package/tools/cli/lib/activation-builder.js +168 -0
  730. package/tools/cli/lib/agent-analyzer.js +81 -0
  731. package/tools/cli/lib/agent-party-generator.js +206 -0
  732. package/tools/cli/lib/cli-utils.js +208 -0
  733. package/tools/cli/lib/config.js +210 -0
  734. package/tools/cli/lib/file-ops.js +204 -0
  735. package/tools/cli/lib/platform-codes.js +116 -0
  736. package/tools/cli/lib/project-root.js +71 -0
  737. package/tools/cli/lib/replace-project-root.js +239 -0
  738. package/tools/cli/lib/ui.js +591 -0
  739. package/tools/cli/lib/xml-handler.js +228 -0
  740. package/tools/cli/lib/xml-to-markdown.js +82 -0
  741. package/tools/{yaml-format.js → cli/lib/yaml-format.js} +3 -10
  742. package/tools/cli/lib/yaml-xml-builder.js +439 -0
  743. package/tools/cli/regenerate-manifests.js +28 -0
  744. package/tools/cli/test-yaml-builder.js +43 -0
  745. package/tools/flattener/ignoreRules.js +2 -6
  746. package/tools/flattener/main.js +31 -121
  747. package/tools/flattener/projectRoot.js +3 -8
  748. package/tools/flattener/stats.helpers.js +8 -35
  749. package/tools/flattener/stats.js +1 -6
  750. package/tools/flattener/test-matrix.js +1 -5
  751. package/tools/format-workflow-md.js +263 -0
  752. package/tools/platform-codes.yaml +133 -0
  753. package/tools/schema/agent.js +231 -0
  754. package/tools/validate-agent-schema.js +110 -0
  755. package/tools/validate-bundles.js +87 -0
  756. package/v6-open-items.md +23 -0
  757. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -22
  758. package/bmad-core/agent-teams/team-all.yaml +0 -14
  759. package/bmad-core/agent-teams/team-fullstack.yaml +0 -18
  760. package/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
  761. package/bmad-core/agent-teams/team-no-ui.yaml +0 -13
  762. package/bmad-core/agents/analyst.md +0 -81
  763. package/bmad-core/agents/architect.md +0 -83
  764. package/bmad-core/agents/bmad-master.md +0 -107
  765. package/bmad-core/agents/bmad-orchestrator.md +0 -149
  766. package/bmad-core/agents/dev.md +0 -75
  767. package/bmad-core/agents/pm.md +0 -81
  768. package/bmad-core/agents/po.md +0 -76
  769. package/bmad-core/agents/qa.md +0 -88
  770. package/bmad-core/agents/sm.md +0 -62
  771. package/bmad-core/agents/ux-expert.md +0 -66
  772. package/bmad-core/checklists/architect-checklist.md +0 -438
  773. package/bmad-core/checklists/change-checklist.md +0 -182
  774. package/bmad-core/checklists/pm-checklist.md +0 -370
  775. package/bmad-core/checklists/po-master-checklist.md +0 -432
  776. package/bmad-core/checklists/story-dod-checklist.md +0 -94
  777. package/bmad-core/checklists/story-draft-checklist.md +0 -153
  778. package/bmad-core/core-config.yaml +0 -20
  779. package/bmad-core/data/bmad-kb.md +0 -806
  780. package/bmad-core/data/brainstorming-techniques.md +0 -36
  781. package/bmad-core/data/elicitation-methods.md +0 -154
  782. package/bmad-core/data/technical-preferences.md +0 -3
  783. package/bmad-core/data/test-levels-framework.md +0 -146
  784. package/bmad-core/data/test-priorities-matrix.md +0 -172
  785. package/bmad-core/tasks/advanced-elicitation.md +0 -117
  786. package/bmad-core/tasks/brownfield-create-epic.md +0 -160
  787. package/bmad-core/tasks/brownfield-create-story.md +0 -147
  788. package/bmad-core/tasks/correct-course.md +0 -70
  789. package/bmad-core/tasks/create-brownfield-story.md +0 -312
  790. package/bmad-core/tasks/create-deep-research-prompt.md +0 -278
  791. package/bmad-core/tasks/create-next-story.md +0 -112
  792. package/bmad-core/tasks/document-project.md +0 -343
  793. package/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
  794. package/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
  795. package/bmad-core/tasks/index-docs.md +0 -173
  796. package/bmad-core/tasks/kb-mode-interaction.md +0 -75
  797. package/bmad-core/tasks/nfr-assess.md +0 -343
  798. package/bmad-core/tasks/qa-gate.md +0 -159
  799. package/bmad-core/tasks/review-story.md +0 -314
  800. package/bmad-core/tasks/risk-profile.md +0 -353
  801. package/bmad-core/tasks/shard-doc.md +0 -185
  802. package/bmad-core/tasks/test-design.md +0 -174
  803. package/bmad-core/tasks/trace-requirements.md +0 -264
  804. package/bmad-core/tasks/validate-next-story.md +0 -134
  805. package/bmad-core/templates/architecture-tmpl.yaml +0 -650
  806. package/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
  807. package/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
  808. package/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
  809. package/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -306
  810. package/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -218
  811. package/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
  812. package/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -823
  813. package/bmad-core/templates/market-research-tmpl.yaml +0 -252
  814. package/bmad-core/templates/prd-tmpl.yaml +0 -202
  815. package/bmad-core/templates/project-brief-tmpl.yaml +0 -221
  816. package/bmad-core/templates/qa-gate-tmpl.yaml +0 -102
  817. package/bmad-core/templates/story-tmpl.yaml +0 -137
  818. package/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
  819. package/bmad-core/workflows/brownfield-service.yaml +0 -187
  820. package/bmad-core/workflows/brownfield-ui.yaml +0 -197
  821. package/bmad-core/workflows/greenfield-fullstack.yaml +0 -240
  822. package/bmad-core/workflows/greenfield-service.yaml +0 -206
  823. package/bmad-core/workflows/greenfield-ui.yaml +0 -235
  824. package/common/tasks/create-doc.md +0 -101
  825. package/common/tasks/execute-checklist.md +0 -86
  826. package/common/utils/bmad-doc-template.md +0 -325
  827. package/common/utils/workflow-management.md +0 -69
  828. package/dist/agents/analyst.txt +0 -2889
  829. package/dist/agents/architect.txt +0 -3552
  830. package/dist/agents/bmad-master.txt +0 -8769
  831. package/dist/agents/bmad-orchestrator.txt +0 -1513
  832. package/dist/agents/dev.txt +0 -414
  833. package/dist/agents/pm.txt +0 -2204
  834. package/dist/agents/po.txt +0 -1346
  835. package/dist/agents/qa.txt +0 -1987
  836. package/dist/agents/sm.txt +0 -658
  837. package/dist/agents/ux-expert.txt +0 -694
  838. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2371
  839. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1620
  840. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -815
  841. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -10952
  842. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +0 -4012
  843. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +0 -3698
  844. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +0 -450
  845. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +0 -973
  846. package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -15376
  847. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2075
  848. package/dist/teams/team-all.txt +0 -12682
  849. package/dist/teams/team-fullstack.txt +0 -10421
  850. package/dist/teams/team-ide-minimal.txt +0 -5103
  851. package/dist/teams/team-no-ui.txt +0 -8980
  852. package/docs/GUIDING-PRINCIPLES.md +0 -91
  853. package/docs/core-architecture.md +0 -219
  854. package/docs/enhanced-ide-development-workflow.md +0 -248
  855. package/docs/expansion-packs.md +0 -280
  856. package/docs/how-to-contribute-with-pull-requests.md +0 -158
  857. package/docs/user-guide.md +0 -504
  858. package/docs/versioning-and-releases.md +0 -147
  859. package/docs/versions.md +0 -48
  860. package/docs/working-in-the-brownfield.md +0 -597
  861. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/Complete AI Agent System - Flowchart.svg +0 -102
  862. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash copy.txt +0 -13
  863. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.1 Google Cloud Project Setup/1.1.1 - Initial Project Configuration - bash.txt +0 -13
  864. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.2 Agent Development Kit Installation/1.2.2 - Basic Project Structure - txt.txt +0 -25
  865. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.1 - settings.py +0 -34
  866. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.3 Core Configuration Files/1.3.2 - main.py - Base Application.py +0 -70
  867. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/PART 1 - Google Cloud Vertex AI Setup Documentation/1.4 Deployment Configuration/1.4.2 - cloudbuild.yaml +0 -26
  868. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/README.md +0 -109
  869. package/expansion-packs/README.md +0 -3
  870. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
  871. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -71
  872. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -78
  873. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -64
  874. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
  875. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
  876. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -8
  877. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -250
  878. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -647
  879. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -110
  880. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
  881. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -290
  882. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
  883. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
  884. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
  885. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
  886. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  887. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  888. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
  889. package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +0 -14
  890. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +0 -80
  891. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +0 -77
  892. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +0 -78
  893. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +0 -65
  894. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +0 -391
  895. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +0 -203
  896. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +0 -201
  897. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +0 -124
  898. package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +0 -6
  899. package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +0 -769
  900. package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +0 -586
  901. package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +0 -110
  902. package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +0 -141
  903. package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +0 -184
  904. package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +0 -290
  905. package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +0 -200
  906. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +0 -1030
  907. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +0 -356
  908. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +0 -705
  909. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +0 -256
  910. package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  911. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  912. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +0 -175
  913. package/expansion-packs/bmad-infrastructure-devops/README.md +0 -147
  914. package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +0 -71
  915. package/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +0 -484
  916. package/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -9
  917. package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -305
  918. package/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +0 -159
  919. package/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +0 -153
  920. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
  921. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
  922. package/release_notes.md +0 -33
  923. package/tools/builders/web-builder.js +0 -675
  924. package/tools/bump-all-versions.js +0 -115
  925. package/tools/bump-expansion-version.js +0 -90
  926. package/tools/cli.js +0 -152
  927. package/tools/installer/README.md +0 -8
  928. package/tools/installer/bin/bmad.js +0 -585
  929. package/tools/installer/config/ide-agent-config.yaml +0 -58
  930. package/tools/installer/config/install.config.yaml +0 -123
  931. package/tools/installer/lib/config-loader.js +0 -257
  932. package/tools/installer/lib/file-manager.js +0 -389
  933. package/tools/installer/lib/ide-base-setup.js +0 -228
  934. package/tools/installer/lib/ide-setup.js +0 -1441
  935. package/tools/installer/lib/installer.js +0 -1995
  936. package/tools/installer/lib/memory-profiler.js +0 -225
  937. package/tools/installer/lib/module-manager.js +0 -114
  938. package/tools/installer/lib/resource-locator.js +0 -308
  939. package/tools/installer/package.json +0 -44
  940. package/tools/lib/dependency-resolver.js +0 -175
  941. package/tools/lib/yaml-utils.js +0 -29
  942. package/tools/md-assets/web-agent-startup-instructions.md +0 -39
  943. package/tools/preview-release-notes.js +0 -66
  944. package/tools/shared/bannerArt.js +0 -105
  945. package/tools/sync-installer-version.js +0 -32
  946. package/tools/update-expansion-version.js +0 -53
  947. package/tools/upgraders/v3-to-v4-upgrader.js +0 -672
  948. package/tools/version-bump.js +0 -94
@@ -1,1441 +0,0 @@
1
- const path = require('node:path');
2
- const fs = require('fs-extra');
3
- const yaml = require('js-yaml');
4
- const chalk = require('chalk');
5
- const inquirer = require('inquirer');
6
- const fileManager = require('./file-manager');
7
- const configLoader = require('./config-loader');
8
- const { extractYamlFromAgent } = require('../../lib/yaml-utils');
9
- const BaseIdeSetup = require('./ide-base-setup');
10
- const resourceLocator = require('./resource-locator');
11
-
12
- class IdeSetup extends BaseIdeSetup {
13
- constructor() {
14
- super();
15
- this.ideAgentConfig = null;
16
- }
17
-
18
- async loadIdeAgentConfig() {
19
- if (this.ideAgentConfig) return this.ideAgentConfig;
20
-
21
- try {
22
- const configPath = path.join(__dirname, '..', 'config', 'ide-agent-config.yaml');
23
- const configContent = await fs.readFile(configPath, 'utf8');
24
- this.ideAgentConfig = yaml.load(configContent);
25
- return this.ideAgentConfig;
26
- } catch {
27
- console.warn('Failed to load IDE agent configuration, using defaults');
28
- return {
29
- 'roo-permissions': {},
30
- 'cline-order': {},
31
- };
32
- }
33
- }
34
-
35
- async setup(ide, installDir, selectedAgent = null, spinner = null, preConfiguredSettings = null) {
36
- const ideConfig = await configLoader.getIdeConfiguration(ide);
37
-
38
- if (!ideConfig) {
39
- console.log(chalk.yellow(`\nNo configuration available for ${ide}`));
40
- return false;
41
- }
42
-
43
- switch (ide) {
44
- case 'cursor': {
45
- return this.setupCursor(installDir, selectedAgent);
46
- }
47
- case 'claude-code': {
48
- return this.setupClaudeCode(installDir, selectedAgent);
49
- }
50
- case 'crush': {
51
- return this.setupCrush(installDir, selectedAgent);
52
- }
53
- case 'windsurf': {
54
- return this.setupWindsurf(installDir, selectedAgent);
55
- }
56
- case 'trae': {
57
- return this.setupTrae(installDir, selectedAgent);
58
- }
59
- case 'roo': {
60
- return this.setupRoo(installDir, selectedAgent);
61
- }
62
- case 'cline': {
63
- return this.setupCline(installDir, selectedAgent);
64
- }
65
- case 'kilo': {
66
- return this.setupKilocode(installDir, selectedAgent);
67
- }
68
- case 'gemini': {
69
- return this.setupGeminiCli(installDir, selectedAgent);
70
- }
71
- case 'github-copilot': {
72
- return this.setupGitHubCopilot(installDir, selectedAgent, spinner, preConfiguredSettings);
73
- }
74
- case 'qwen-code': {
75
- return this.setupQwenCode(installDir, selectedAgent);
76
- }
77
- default: {
78
- console.log(chalk.yellow(`\nIDE ${ide} not yet supported`));
79
- return false;
80
- }
81
- }
82
- }
83
-
84
- async setupCursor(installDir, selectedAgent) {
85
- const cursorRulesDir = path.join(installDir, '.cursor', 'rules', 'bmad');
86
- const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
87
-
88
- await fileManager.ensureDirectory(cursorRulesDir);
89
-
90
- for (const agentId of agents) {
91
- const agentPath = await this.findAgentPath(agentId, installDir);
92
-
93
- if (agentPath) {
94
- const mdcContent = await this.createAgentRuleContent(agentId, agentPath, installDir, 'mdc');
95
- const mdcPath = path.join(cursorRulesDir, `${agentId}.mdc`);
96
- await fileManager.writeFile(mdcPath, mdcContent);
97
- console.log(chalk.green(`āœ“ Created rule: ${agentId}.mdc`));
98
- }
99
- }
100
-
101
- console.log(chalk.green(`\nāœ“ Created Cursor rules in ${cursorRulesDir}`));
102
- return true;
103
- }
104
-
105
- async setupCrush(installDir, selectedAgent) {
106
- // Setup bmad-core commands
107
- const coreSlashPrefix = await this.getCoreSlashPrefix(installDir);
108
- const coreAgents = selectedAgent ? [selectedAgent] : await this.getCoreAgentIds(installDir);
109
- const coreTasks = await this.getCoreTaskIds(installDir);
110
- await this.setupCrushForPackage(
111
- installDir,
112
- 'core',
113
- coreSlashPrefix,
114
- coreAgents,
115
- coreTasks,
116
- '.bmad-core',
117
- );
118
-
119
- // Setup expansion pack commands
120
- const expansionPacks = await this.getInstalledExpansionPacks(installDir);
121
- for (const packInfo of expansionPacks) {
122
- const packSlashPrefix = await this.getExpansionPackSlashPrefix(packInfo.path);
123
- const packAgents = await this.getExpansionPackAgents(packInfo.path);
124
- const packTasks = await this.getExpansionPackTasks(packInfo.path);
125
-
126
- if (packAgents.length > 0 || packTasks.length > 0) {
127
- // Use the actual directory name where the expansion pack is installed
128
- const rootPath = path.relative(installDir, packInfo.path);
129
- await this.setupCrushForPackage(
130
- installDir,
131
- packInfo.name,
132
- packSlashPrefix,
133
- packAgents,
134
- packTasks,
135
- rootPath,
136
- );
137
- }
138
- }
139
-
140
- return true;
141
- }
142
-
143
- async setupClaudeCode(installDir, selectedAgent) {
144
- // Setup bmad-core commands
145
- const coreSlashPrefix = await this.getCoreSlashPrefix(installDir);
146
- const coreAgents = selectedAgent ? [selectedAgent] : await this.getCoreAgentIds(installDir);
147
- const coreTasks = await this.getCoreTaskIds(installDir);
148
- await this.setupClaudeCodeForPackage(
149
- installDir,
150
- 'core',
151
- coreSlashPrefix,
152
- coreAgents,
153
- coreTasks,
154
- '.bmad-core',
155
- );
156
-
157
- // Setup expansion pack commands
158
- const expansionPacks = await this.getInstalledExpansionPacks(installDir);
159
- for (const packInfo of expansionPacks) {
160
- const packSlashPrefix = await this.getExpansionPackSlashPrefix(packInfo.path);
161
- const packAgents = await this.getExpansionPackAgents(packInfo.path);
162
- const packTasks = await this.getExpansionPackTasks(packInfo.path);
163
-
164
- if (packAgents.length > 0 || packTasks.length > 0) {
165
- // Use the actual directory name where the expansion pack is installed
166
- const rootPath = path.relative(installDir, packInfo.path);
167
- await this.setupClaudeCodeForPackage(
168
- installDir,
169
- packInfo.name,
170
- packSlashPrefix,
171
- packAgents,
172
- packTasks,
173
- rootPath,
174
- );
175
- }
176
- }
177
-
178
- return true;
179
- }
180
-
181
- async setupClaudeCodeForPackage(
182
- installDir,
183
- packageName,
184
- slashPrefix,
185
- agentIds,
186
- taskIds,
187
- rootPath,
188
- ) {
189
- const commandsBaseDir = path.join(installDir, '.claude', 'commands', slashPrefix);
190
- const agentsDir = path.join(commandsBaseDir, 'agents');
191
- const tasksDir = path.join(commandsBaseDir, 'tasks');
192
-
193
- // Ensure directories exist
194
- await fileManager.ensureDirectory(agentsDir);
195
- await fileManager.ensureDirectory(tasksDir);
196
-
197
- // Setup agents
198
- for (const agentId of agentIds) {
199
- // Find the agent file - for expansion packs, prefer the expansion pack version
200
- let agentPath;
201
- if (packageName === 'core') {
202
- // For core, use the normal search
203
- agentPath = await this.findAgentPath(agentId, installDir);
204
- } else {
205
- // For expansion packs, first try to find the agent in the expansion pack directory
206
- const expansionPackPath = path.join(installDir, rootPath, 'agents', `${agentId}.md`);
207
- if (await fileManager.pathExists(expansionPackPath)) {
208
- agentPath = expansionPackPath;
209
- } else {
210
- // Fall back to core if not found in expansion pack
211
- agentPath = await this.findAgentPath(agentId, installDir);
212
- }
213
- }
214
-
215
- const commandPath = path.join(agentsDir, `${agentId}.md`);
216
-
217
- if (agentPath) {
218
- // Create command file with agent content
219
- let agentContent = await fileManager.readFile(agentPath);
220
-
221
- // Replace {root} placeholder with the appropriate root path for this context
222
- agentContent = agentContent.replaceAll('{root}', rootPath);
223
-
224
- // Add command header
225
- let commandContent = `# /${agentId} Command\n\n`;
226
- commandContent += `When this command is used, adopt the following agent persona:\n\n`;
227
- commandContent += agentContent;
228
-
229
- await fileManager.writeFile(commandPath, commandContent);
230
- console.log(chalk.green(`āœ“ Created agent command: /${agentId}`));
231
- }
232
- }
233
-
234
- // Setup tasks
235
- for (const taskId of taskIds) {
236
- // Find the task file - for expansion packs, prefer the expansion pack version
237
- let taskPath;
238
- if (packageName === 'core') {
239
- // For core, use the normal search
240
- taskPath = await this.findTaskPath(taskId, installDir);
241
- } else {
242
- // For expansion packs, first try to find the task in the expansion pack directory
243
- const expansionPackPath = path.join(installDir, rootPath, 'tasks', `${taskId}.md`);
244
- if (await fileManager.pathExists(expansionPackPath)) {
245
- taskPath = expansionPackPath;
246
- } else {
247
- // Fall back to core if not found in expansion pack
248
- taskPath = await this.findTaskPath(taskId, installDir);
249
- }
250
- }
251
-
252
- const commandPath = path.join(tasksDir, `${taskId}.md`);
253
-
254
- if (taskPath) {
255
- // Create command file with task content
256
- let taskContent = await fileManager.readFile(taskPath);
257
-
258
- // Replace {root} placeholder with the appropriate root path for this context
259
- taskContent = taskContent.replaceAll('{root}', rootPath);
260
-
261
- // Add command header
262
- let commandContent = `# /${taskId} Task\n\n`;
263
- commandContent += `When this command is used, execute the following task:\n\n`;
264
- commandContent += taskContent;
265
-
266
- await fileManager.writeFile(commandPath, commandContent);
267
- console.log(chalk.green(`āœ“ Created task command: /${taskId}`));
268
- }
269
- }
270
-
271
- console.log(
272
- chalk.green(`\nāœ“ Created Claude Code commands for ${packageName} in ${commandsBaseDir}`),
273
- );
274
- console.log(chalk.dim(` - Agents in: ${agentsDir}`));
275
- console.log(chalk.dim(` - Tasks in: ${tasksDir}`));
276
- }
277
-
278
- async setupCrushForPackage(installDir, packageName, slashPrefix, agentIds, taskIds, rootPath) {
279
- const commandsBaseDir = path.join(installDir, '.crush', 'commands', slashPrefix);
280
- const agentsDir = path.join(commandsBaseDir, 'agents');
281
- const tasksDir = path.join(commandsBaseDir, 'tasks');
282
-
283
- // Ensure directories exist
284
- await fileManager.ensureDirectory(agentsDir);
285
- await fileManager.ensureDirectory(tasksDir);
286
-
287
- // Setup agents
288
- for (const agentId of agentIds) {
289
- // Find the agent file - for expansion packs, prefer the expansion pack version
290
- let agentPath;
291
- if (packageName === 'core') {
292
- // For core, use the normal search
293
- agentPath = await this.findAgentPath(agentId, installDir);
294
- } else {
295
- // For expansion packs, first try to find the agent in the expansion pack directory
296
- const expansionPackPath = path.join(installDir, rootPath, 'agents', `${agentId}.md`);
297
- if (await fileManager.pathExists(expansionPackPath)) {
298
- agentPath = expansionPackPath;
299
- } else {
300
- // Fall back to core if not found in expansion pack
301
- agentPath = await this.findAgentPath(agentId, installDir);
302
- }
303
- }
304
-
305
- const commandPath = path.join(agentsDir, `${agentId}.md`);
306
-
307
- if (agentPath) {
308
- // Create command file with agent content
309
- let agentContent = await fileManager.readFile(agentPath);
310
-
311
- // Replace {root} placeholder with the appropriate root path for this context
312
- agentContent = agentContent.replaceAll('{root}', rootPath);
313
-
314
- // Add command header
315
- let commandContent = `# /${agentId} Command\n\n`;
316
- commandContent += `When this command is used, adopt the following agent persona:\n\n`;
317
- commandContent += agentContent;
318
-
319
- await fileManager.writeFile(commandPath, commandContent);
320
- console.log(chalk.green(`āœ“ Created agent command: /${agentId}`));
321
- }
322
- }
323
-
324
- // Setup tasks
325
- for (const taskId of taskIds) {
326
- // Find the task file - for expansion packs, prefer the expansion pack version
327
- let taskPath;
328
- if (packageName === 'core') {
329
- // For core, use the normal search
330
- taskPath = await this.findTaskPath(taskId, installDir);
331
- } else {
332
- // For expansion packs, first try to find the task in the expansion pack directory
333
- const expansionPackPath = path.join(installDir, rootPath, 'tasks', `${taskId}.md`);
334
- if (await fileManager.pathExists(expansionPackPath)) {
335
- taskPath = expansionPackPath;
336
- } else {
337
- // Fall back to core if not found in expansion pack
338
- taskPath = await this.findTaskPath(taskId, installDir);
339
- }
340
- }
341
-
342
- const commandPath = path.join(tasksDir, `${taskId}.md`);
343
-
344
- if (taskPath) {
345
- // Create command file with task content
346
- let taskContent = await fileManager.readFile(taskPath);
347
-
348
- // Replace {root} placeholder with the appropriate root path for this context
349
- taskContent = taskContent.replaceAll('{root}', rootPath);
350
-
351
- // Add command header
352
- let commandContent = `# /${taskId} Task\n\n`;
353
- commandContent += `When this command is used, execute the following task:\n\n`;
354
- commandContent += taskContent;
355
-
356
- await fileManager.writeFile(commandPath, commandContent);
357
- console.log(chalk.green(`āœ“ Created task command: /${taskId}`));
358
- }
359
- }
360
-
361
- console.log(chalk.green(`\nāœ“ Created Crush commands for ${packageName} in ${commandsBaseDir}`));
362
- console.log(chalk.dim(` - Agents in: ${agentsDir}`));
363
- console.log(chalk.dim(` - Tasks in: ${tasksDir}`));
364
- }
365
-
366
- async setupWindsurf(installDir, selectedAgent) {
367
- const windsurfWorkflowDir = path.join(installDir, '.windsurf', 'workflows');
368
- const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
369
-
370
- await fileManager.ensureDirectory(windsurfWorkflowDir);
371
-
372
- for (const agentId of agents) {
373
- // Find the agent file
374
- const agentPath = await this.findAgentPath(agentId, installDir);
375
-
376
- if (agentPath) {
377
- const agentContent = await fileManager.readFile(agentPath);
378
- const mdPath = path.join(windsurfWorkflowDir, `${agentId}.md`);
379
-
380
- // Write the agent file contents prefixed with Windsurf frontmatter
381
- let mdContent = `---\n`;
382
- mdContent += `description: ${agentId}\n`;
383
- mdContent += `auto_execution_mode: 3\n`;
384
- mdContent += `---\n\n`;
385
- mdContent += agentContent;
386
-
387
- await fileManager.writeFile(mdPath, mdContent);
388
- console.log(chalk.green(`āœ“ Created workflow: ${agentId}.md`));
389
- }
390
- }
391
-
392
- console.log(chalk.green(`\nāœ“ Created Windsurf workflows in ${windsurfWorkflowDir}`));
393
-
394
- return true;
395
- }
396
-
397
- async setupTrae(installDir, selectedAgent) {
398
- const traeRulesDir = path.join(installDir, '.trae', 'rules');
399
- const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
400
-
401
- await fileManager.ensureDirectory(traeRulesDir);
402
-
403
- for (const agentId of agents) {
404
- // Find the agent file
405
- const agentPath = await this.findAgentPath(agentId, installDir);
406
-
407
- if (agentPath) {
408
- const agentContent = await fileManager.readFile(agentPath);
409
- const mdPath = path.join(traeRulesDir, `${agentId}.md`);
410
-
411
- // Create MD content (similar to Cursor but without frontmatter)
412
- let mdContent = `# ${agentId.toUpperCase()} Agent Rule\n\n`;
413
- mdContent += `This rule is triggered when the user types \`@${agentId}\` and activates the ${await this.getAgentTitle(
414
- agentId,
415
- installDir,
416
- )} agent persona.\n\n`;
417
- mdContent += '## Agent Activation\n\n';
418
- mdContent +=
419
- 'CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n';
420
- mdContent += '```yaml\n';
421
- // Extract just the YAML content from the agent file
422
- const yamlContent = extractYamlFromAgent(agentContent);
423
- if (yamlContent) {
424
- mdContent += yamlContent;
425
- } else {
426
- // If no YAML found, include the whole content minus the header
427
- mdContent += agentContent.replace(/^#.*$/m, '').trim();
428
- }
429
- mdContent += '\n```\n\n';
430
- mdContent += '## File Reference\n\n';
431
- const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
432
- mdContent += `The complete agent definition is available in [${relativePath}](${relativePath}).\n\n`;
433
- mdContent += '## Usage\n\n';
434
- mdContent += `When the user types \`@${agentId}\`, activate this ${await this.getAgentTitle(
435
- agentId,
436
- installDir,
437
- )} persona and follow all instructions defined in the YAML configuration above.\n`;
438
-
439
- await fileManager.writeFile(mdPath, mdContent);
440
- console.log(chalk.green(`āœ“ Created rule: ${agentId}.md`));
441
- }
442
- }
443
- }
444
-
445
- async findAgentPath(agentId, installDir) {
446
- // Try to find the agent file in various locations
447
- const possiblePaths = [
448
- path.join(installDir, '.bmad-core', 'agents', `${agentId}.md`),
449
- path.join(installDir, 'agents', `${agentId}.md`),
450
- ];
451
-
452
- // Also check expansion pack directories
453
- const glob = require('glob');
454
- const expansionDirectories = glob.sync('.*/agents', { cwd: installDir });
455
- for (const expDir of expansionDirectories) {
456
- possiblePaths.push(path.join(installDir, expDir, `${agentId}.md`));
457
- }
458
-
459
- for (const agentPath of possiblePaths) {
460
- if (await fileManager.pathExists(agentPath)) {
461
- return agentPath;
462
- }
463
- }
464
-
465
- return null;
466
- }
467
-
468
- async getAllAgentIds(installDir) {
469
- const glob = require('glob');
470
- const allAgentIds = [];
471
-
472
- // Check core agents in .bmad-core or root
473
- let agentsDir = path.join(installDir, '.bmad-core', 'agents');
474
- if (!(await fileManager.pathExists(agentsDir))) {
475
- agentsDir = path.join(installDir, 'agents');
476
- }
477
-
478
- if (await fileManager.pathExists(agentsDir)) {
479
- const agentFiles = glob.sync('*.md', { cwd: agentsDir });
480
- allAgentIds.push(...agentFiles.map((file) => path.basename(file, '.md')));
481
- }
482
-
483
- // Also check for expansion pack agents in dot folders
484
- const expansionDirectories = glob.sync('.*/agents', { cwd: installDir });
485
- for (const expDir of expansionDirectories) {
486
- const fullExpDir = path.join(installDir, expDir);
487
- const expAgentFiles = glob.sync('*.md', { cwd: fullExpDir });
488
- allAgentIds.push(...expAgentFiles.map((file) => path.basename(file, '.md')));
489
- }
490
-
491
- // Remove duplicates
492
- return [...new Set(allAgentIds)];
493
- }
494
-
495
- async getCoreAgentIds(installDir) {
496
- const allAgentIds = [];
497
-
498
- // Check core agents in .bmad-core or root only
499
- let agentsDir = path.join(installDir, '.bmad-core', 'agents');
500
- if (!(await fileManager.pathExists(agentsDir))) {
501
- agentsDir = path.join(installDir, 'bmad-core', 'agents');
502
- }
503
-
504
- if (await fileManager.pathExists(agentsDir)) {
505
- const glob = require('glob');
506
- const agentFiles = glob.sync('*.md', { cwd: agentsDir });
507
- allAgentIds.push(...agentFiles.map((file) => path.basename(file, '.md')));
508
- }
509
-
510
- return [...new Set(allAgentIds)];
511
- }
512
-
513
- async getCoreTaskIds(installDir) {
514
- const allTaskIds = [];
515
-
516
- // Check core tasks in .bmad-core or root only
517
- let tasksDir = path.join(installDir, '.bmad-core', 'tasks');
518
- if (!(await fileManager.pathExists(tasksDir))) {
519
- tasksDir = path.join(installDir, 'bmad-core', 'tasks');
520
- }
521
-
522
- if (await fileManager.pathExists(tasksDir)) {
523
- const glob = require('glob');
524
- const taskFiles = glob.sync('*.md', { cwd: tasksDir });
525
- allTaskIds.push(...taskFiles.map((file) => path.basename(file, '.md')));
526
- }
527
-
528
- // Check common tasks
529
- const commonTasksDir = path.join(installDir, 'common', 'tasks');
530
- if (await fileManager.pathExists(commonTasksDir)) {
531
- const commonTaskFiles = glob.sync('*.md', { cwd: commonTasksDir });
532
- allTaskIds.push(...commonTaskFiles.map((file) => path.basename(file, '.md')));
533
- }
534
-
535
- return [...new Set(allTaskIds)];
536
- }
537
-
538
- async getAgentTitle(agentId, installDir) {
539
- // Try to find the agent file in various locations
540
- const possiblePaths = [
541
- path.join(installDir, '.bmad-core', 'agents', `${agentId}.md`),
542
- path.join(installDir, 'agents', `${agentId}.md`),
543
- ];
544
-
545
- // Also check expansion pack directories
546
- const glob = require('glob');
547
- const expansionDirectories = glob.sync('.*/agents', { cwd: installDir });
548
- for (const expDir of expansionDirectories) {
549
- possiblePaths.push(path.join(installDir, expDir, `${agentId}.md`));
550
- }
551
-
552
- for (const agentPath of possiblePaths) {
553
- if (await fileManager.pathExists(agentPath)) {
554
- try {
555
- const agentContent = await fileManager.readFile(agentPath);
556
- const yamlMatch = agentContent.match(/```ya?ml\r?\n([\s\S]*?)```/);
557
-
558
- if (yamlMatch) {
559
- const yaml = yamlMatch[1];
560
- const titleMatch = yaml.match(/title:\s*(.+)/);
561
- if (titleMatch) {
562
- return titleMatch[1].trim();
563
- }
564
- }
565
- } catch (error) {
566
- console.warn(`Failed to read agent title for ${agentId}: ${error.message}`);
567
- }
568
- }
569
- }
570
-
571
- // Fallback to formatted agent ID
572
- return agentId
573
- .split('-')
574
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
575
- .join(' ');
576
- }
577
-
578
- async getAllTaskIds(installDir) {
579
- const glob = require('glob');
580
- const allTaskIds = [];
581
-
582
- // Check core tasks in .bmad-core or root
583
- let tasksDir = path.join(installDir, '.bmad-core', 'tasks');
584
- if (!(await fileManager.pathExists(tasksDir))) {
585
- tasksDir = path.join(installDir, 'bmad-core', 'tasks');
586
- }
587
-
588
- if (await fileManager.pathExists(tasksDir)) {
589
- const taskFiles = glob.sync('*.md', { cwd: tasksDir });
590
- allTaskIds.push(...taskFiles.map((file) => path.basename(file, '.md')));
591
- }
592
-
593
- // Check common tasks
594
- const commonTasksDir = path.join(installDir, 'common', 'tasks');
595
- if (await fileManager.pathExists(commonTasksDir)) {
596
- const commonTaskFiles = glob.sync('*.md', { cwd: commonTasksDir });
597
- allTaskIds.push(...commonTaskFiles.map((file) => path.basename(file, '.md')));
598
- }
599
-
600
- // Also check for expansion pack tasks in dot folders
601
- const expansionDirectories = glob.sync('.*/tasks', { cwd: installDir });
602
- for (const expDir of expansionDirectories) {
603
- const fullExpDir = path.join(installDir, expDir);
604
- const expTaskFiles = glob.sync('*.md', { cwd: fullExpDir });
605
- allTaskIds.push(...expTaskFiles.map((file) => path.basename(file, '.md')));
606
- }
607
-
608
- // Check expansion-packs folder tasks
609
- const expansionPacksDir = path.join(installDir, 'expansion-packs');
610
- if (await fileManager.pathExists(expansionPacksDir)) {
611
- const expPackDirectories = glob.sync('*/tasks', { cwd: expansionPacksDir });
612
- for (const expDir of expPackDirectories) {
613
- const fullExpDir = path.join(expansionPacksDir, expDir);
614
- const expTaskFiles = glob.sync('*.md', { cwd: fullExpDir });
615
- allTaskIds.push(...expTaskFiles.map((file) => path.basename(file, '.md')));
616
- }
617
- }
618
-
619
- // Remove duplicates
620
- return [...new Set(allTaskIds)];
621
- }
622
-
623
- async findTaskPath(taskId, installDir) {
624
- // Try to find the task file in various locations
625
- const possiblePaths = [
626
- path.join(installDir, '.bmad-core', 'tasks', `${taskId}.md`),
627
- path.join(installDir, 'bmad-core', 'tasks', `${taskId}.md`),
628
- path.join(installDir, 'common', 'tasks', `${taskId}.md`),
629
- ];
630
-
631
- // Also check expansion pack directories
632
- const glob = require('glob');
633
-
634
- // Check dot folder expansion packs
635
- const expansionDirectories = glob.sync('.*/tasks', { cwd: installDir });
636
- for (const expDir of expansionDirectories) {
637
- possiblePaths.push(path.join(installDir, expDir, `${taskId}.md`));
638
- }
639
-
640
- // Check expansion-packs folder
641
- const expansionPacksDir = path.join(installDir, 'expansion-packs');
642
- if (await fileManager.pathExists(expansionPacksDir)) {
643
- const expPackDirectories = glob.sync('*/tasks', { cwd: expansionPacksDir });
644
- for (const expDir of expPackDirectories) {
645
- possiblePaths.push(path.join(expansionPacksDir, expDir, `${taskId}.md`));
646
- }
647
- }
648
-
649
- for (const taskPath of possiblePaths) {
650
- if (await fileManager.pathExists(taskPath)) {
651
- return taskPath;
652
- }
653
- }
654
-
655
- return null;
656
- }
657
-
658
- async getCoreSlashPrefix(installDir) {
659
- try {
660
- const coreConfigPath = path.join(installDir, '.bmad-core', 'core-config.yaml');
661
- if (!(await fileManager.pathExists(coreConfigPath))) {
662
- // Try bmad-core directory
663
- const altConfigPath = path.join(installDir, 'bmad-core', 'core-config.yaml');
664
- if (await fileManager.pathExists(altConfigPath)) {
665
- const configContent = await fileManager.readFile(altConfigPath);
666
- const config = yaml.load(configContent);
667
- return config.slashPrefix || 'BMad';
668
- }
669
- return 'BMad'; // fallback
670
- }
671
-
672
- const configContent = await fileManager.readFile(coreConfigPath);
673
- const config = yaml.load(configContent);
674
- return config.slashPrefix || 'BMad';
675
- } catch (error) {
676
- console.warn(`Failed to read core slashPrefix, using default 'BMad': ${error.message}`);
677
- return 'BMad';
678
- }
679
- }
680
-
681
- async getInstalledExpansionPacks(installDir) {
682
- const expansionPacks = [];
683
-
684
- // Check for dot-prefixed expansion packs in install directory
685
- const glob = require('glob');
686
- const dotExpansions = glob.sync('.bmad-*', { cwd: installDir });
687
-
688
- for (const dotExpansion of dotExpansions) {
689
- if (dotExpansion !== '.bmad-core') {
690
- const packPath = path.join(installDir, dotExpansion);
691
- const packName = dotExpansion.slice(1); // remove the dot
692
- expansionPacks.push({
693
- name: packName,
694
- path: packPath,
695
- });
696
- }
697
- }
698
-
699
- // Check for expansion-packs directory style
700
- const expansionPacksDir = path.join(installDir, 'expansion-packs');
701
- if (await fileManager.pathExists(expansionPacksDir)) {
702
- const packDirectories = glob.sync('*', { cwd: expansionPacksDir });
703
-
704
- for (const packDir of packDirectories) {
705
- const packPath = path.join(expansionPacksDir, packDir);
706
- if (
707
- (await fileManager.pathExists(packPath)) &&
708
- (await fileManager.pathExists(path.join(packPath, 'config.yaml')))
709
- ) {
710
- expansionPacks.push({
711
- name: packDir,
712
- path: packPath,
713
- });
714
- }
715
- }
716
- }
717
-
718
- return expansionPacks;
719
- }
720
-
721
- async getExpansionPackSlashPrefix(packPath) {
722
- try {
723
- const configPath = path.join(packPath, 'config.yaml');
724
- if (await fileManager.pathExists(configPath)) {
725
- const configContent = await fileManager.readFile(configPath);
726
- const config = yaml.load(configContent);
727
- return config.slashPrefix || path.basename(packPath);
728
- }
729
- } catch (error) {
730
- console.warn(`Failed to read expansion pack slashPrefix from ${packPath}: ${error.message}`);
731
- }
732
-
733
- return path.basename(packPath); // fallback to directory name
734
- }
735
-
736
- async getExpansionPackAgents(packPath) {
737
- const agentsDir = path.join(packPath, 'agents');
738
- if (!(await fileManager.pathExists(agentsDir))) {
739
- return [];
740
- }
741
-
742
- try {
743
- const glob = require('glob');
744
- const agentFiles = glob.sync('*.md', { cwd: agentsDir });
745
- return agentFiles.map((file) => path.basename(file, '.md'));
746
- } catch (error) {
747
- console.warn(`Failed to read expansion pack agents from ${packPath}: ${error.message}`);
748
- return [];
749
- }
750
- }
751
-
752
- async getExpansionPackTasks(packPath) {
753
- const tasksDir = path.join(packPath, 'tasks');
754
- if (!(await fileManager.pathExists(tasksDir))) {
755
- return [];
756
- }
757
-
758
- try {
759
- const glob = require('glob');
760
- const taskFiles = glob.sync('*.md', { cwd: tasksDir });
761
- return taskFiles.map((file) => path.basename(file, '.md'));
762
- } catch (error) {
763
- console.warn(`Failed to read expansion pack tasks from ${packPath}: ${error.message}`);
764
- return [];
765
- }
766
- }
767
-
768
- async setupRoo(installDir, selectedAgent) {
769
- const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
770
-
771
- // Check for existing .roomodes file in project root
772
- const roomodesPath = path.join(installDir, '.roomodes');
773
- let existingModes = [];
774
- let existingContent = '';
775
-
776
- if (await fileManager.pathExists(roomodesPath)) {
777
- existingContent = await fileManager.readFile(roomodesPath);
778
- // Parse existing modes to avoid duplicates
779
- const modeMatches = existingContent.matchAll(/- slug: ([\w-]+)/g);
780
- for (const match of modeMatches) {
781
- existingModes.push(match[1]);
782
- }
783
- console.log(chalk.yellow(`Found existing .roomodes file with ${existingModes.length} modes`));
784
- }
785
-
786
- // Create new modes content
787
- let newModesContent = '';
788
-
789
- // Load dynamic agent permissions from configuration
790
- const config = await this.loadIdeAgentConfig();
791
- const agentPermissions = config['roo-permissions'] || {};
792
-
793
- for (const agentId of agents) {
794
- // Skip if already exists
795
- // Check both with and without bmad- prefix to handle both cases
796
- const checkSlug = agentId.startsWith('bmad-') ? agentId : `bmad-${agentId}`;
797
- if (existingModes.includes(checkSlug)) {
798
- console.log(chalk.dim(`Skipping ${agentId} - already exists in .roomodes`));
799
- continue;
800
- }
801
-
802
- // Read agent file to extract all information
803
- const agentPath = await this.findAgentPath(agentId, installDir);
804
-
805
- if (agentPath) {
806
- const agentContent = await fileManager.readFile(agentPath);
807
-
808
- // Extract YAML content
809
- const yamlMatch = agentContent.match(/```ya?ml\r?\n([\s\S]*?)```/);
810
- if (yamlMatch) {
811
- const yaml = yamlMatch[1];
812
-
813
- // Extract agent info from YAML
814
- const titleMatch = yaml.match(/title:\s*(.+)/);
815
- const iconMatch = yaml.match(/icon:\s*(.+)/);
816
- const whenToUseMatch = yaml.match(/whenToUse:\s*"(.+)"/);
817
- const roleDefinitionMatch = yaml.match(/roleDefinition:\s*"(.+)"/);
818
-
819
- const title = titleMatch
820
- ? titleMatch[1].trim()
821
- : await this.getAgentTitle(agentId, installDir);
822
- const icon = iconMatch ? iconMatch[1].trim() : 'šŸ¤–';
823
- const whenToUse = whenToUseMatch ? whenToUseMatch[1].trim() : `Use for ${title} tasks`;
824
- const roleDefinition = roleDefinitionMatch
825
- ? roleDefinitionMatch[1].trim()
826
- : `You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
827
-
828
- // Add permissions based on agent type
829
- const permissions = agentPermissions[agentId];
830
- // Build mode entry with proper formatting (matching exact indentation)
831
- // Avoid double "bmad-" prefix for agents that already have it
832
- const slug = agentId.startsWith('bmad-') ? agentId : `bmad-${agentId}`;
833
- newModesContent += ` - slug: ${slug}\n`;
834
- newModesContent += ` name: '${icon} ${title}'\n`;
835
- if (permissions) {
836
- newModesContent += ` description: '${permissions.description}'\n`;
837
- }
838
- newModesContent += ` roleDefinition: ${roleDefinition}\n`;
839
- newModesContent += ` whenToUse: ${whenToUse}\n`;
840
- // Get relative path from installDir to agent file
841
- const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
842
- newModesContent += ` customInstructions: CRITICAL Read the full YAML from ${relativePath} start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode\n`;
843
- newModesContent += ` groups:\n`;
844
- newModesContent += ` - read\n`;
845
-
846
- if (permissions) {
847
- newModesContent += ` - - edit\n`;
848
- newModesContent += ` - fileRegex: ${permissions.fileRegex}\n`;
849
- newModesContent += ` description: ${permissions.description}\n`;
850
- } else {
851
- newModesContent += ` - edit\n`;
852
- }
853
-
854
- console.log(chalk.green(`āœ“ Added mode: bmad-${agentId} (${icon} ${title})`));
855
- }
856
- }
857
- }
858
-
859
- // Build final roomodes content
860
- let roomodesContent = '';
861
- if (existingContent) {
862
- // If there's existing content, append new modes to it
863
- roomodesContent = existingContent.trim() + '\n' + newModesContent;
864
- } else {
865
- // Create new .roomodes file with proper YAML structure
866
- roomodesContent = 'customModes:\n' + newModesContent;
867
- }
868
-
869
- // Write .roomodes file
870
- await fileManager.writeFile(roomodesPath, roomodesContent);
871
- console.log(chalk.green('āœ“ Created .roomodes file in project root'));
872
-
873
- console.log(chalk.green(`\nāœ“ Roo Code setup complete!`));
874
- console.log(chalk.dim('Custom modes will be available when you open this project in Roo Code'));
875
-
876
- return true;
877
- }
878
-
879
- async setupKilocode(installDir, selectedAgent) {
880
- const filePath = path.join(installDir, '.kilocodemodes');
881
- const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
882
-
883
- let existingModes = [],
884
- existingContent = '';
885
- if (await fileManager.pathExists(filePath)) {
886
- existingContent = await fileManager.readFile(filePath);
887
- for (const match of existingContent.matchAll(/- slug: ([\w-]+)/g)) {
888
- existingModes.push(match[1]);
889
- }
890
- console.log(
891
- chalk.yellow(`Found existing .kilocodemodes file with ${existingModes.length} modes`),
892
- );
893
- }
894
-
895
- const config = await this.loadIdeAgentConfig();
896
- const permissions = config['roo-permissions'] || {}; // reuse same roo permissions block (Kilo Code understands same mode schema)
897
-
898
- let newContent = '';
899
-
900
- for (const agentId of agents) {
901
- const slug = agentId.startsWith('bmad-') ? agentId : `bmad-${agentId}`;
902
- if (existingModes.includes(slug)) {
903
- console.log(chalk.dim(`Skipping ${agentId} - already exists in .kilocodemodes`));
904
- continue;
905
- }
906
-
907
- const agentPath = await this.findAgentPath(agentId, installDir);
908
- if (!agentPath) {
909
- console.log(chalk.red(`āœ— Could not find agent file for ${agentId}`));
910
- continue;
911
- }
912
-
913
- const agentContent = await fileManager.readFile(agentPath);
914
- const yamlMatch = agentContent.match(/```ya?ml\r?\n([\s\S]*?)```/);
915
- if (!yamlMatch) {
916
- console.log(chalk.red(`āœ— Could not extract YAML block for ${agentId}`));
917
- continue;
918
- }
919
-
920
- const yaml = yamlMatch[1];
921
-
922
- // Robust fallback for title and icon
923
- const title =
924
- yaml.match(/title:\s*(.+)/)?.[1]?.trim() || (await this.getAgentTitle(agentId, installDir));
925
- const icon = yaml.match(/icon:\s*(.+)/)?.[1]?.trim() || 'šŸ¤–';
926
- const whenToUse = yaml.match(/whenToUse:\s*"(.+)"/)?.[1]?.trim() || `Use for ${title} tasks`;
927
- const roleDefinition =
928
- yaml.match(/roleDefinition:\s*"(.+)"/)?.[1]?.trim() ||
929
- `You are a ${title} specializing in ${title.toLowerCase()} tasks and responsibilities.`;
930
-
931
- const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
932
- const customInstructions = `CRITICAL Read the full YAML from ${relativePath} start activation to alter your state of being follow startup section instructions stay in this being until told to exit this mode`;
933
-
934
- // Add permissions from config if they exist
935
- const agentPermission = permissions[agentId];
936
-
937
- // Begin .kilocodemodes block
938
- newContent += ` - slug: ${slug}\n`;
939
- newContent += ` name: '${icon} ${title}'\n`;
940
- if (agentPermission) {
941
- newContent += ` description: '${agentPermission.description}'\n`;
942
- }
943
-
944
- newContent += ` roleDefinition: ${roleDefinition}\n`;
945
- newContent += ` whenToUse: ${whenToUse}\n`;
946
- newContent += ` customInstructions: ${customInstructions}\n`;
947
- newContent += ` groups:\n`;
948
- newContent += ` - read\n`;
949
-
950
- if (agentPermission) {
951
- newContent += ` - - edit\n`;
952
- newContent += ` - fileRegex: ${agentPermission.fileRegex}\n`;
953
- newContent += ` description: ${agentPermission.description}\n`;
954
- } else {
955
- // Fallback to generic edit
956
- newContent += ` - edit\n`;
957
- }
958
-
959
- console.log(chalk.green(`āœ“ Added Kilo mode: ${slug} (${icon} ${title})`));
960
- }
961
-
962
- const finalContent = existingContent
963
- ? existingContent.trim() + '\n' + newContent
964
- : 'customModes:\n' + newContent;
965
-
966
- await fileManager.writeFile(filePath, finalContent);
967
- console.log(chalk.green('āœ“ Created .kilocodemodes file in project root'));
968
- console.log(chalk.green(`āœ“ KiloCode setup complete!`));
969
- console.log(chalk.dim('Custom modes will be available when you open this project in KiloCode'));
970
-
971
- return true;
972
- }
973
-
974
- async setupCline(installDir, selectedAgent) {
975
- const clineRulesDir = path.join(installDir, '.clinerules');
976
- const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
977
-
978
- await fileManager.ensureDirectory(clineRulesDir);
979
-
980
- // Load dynamic agent ordering from configuration
981
- const config = await this.loadIdeAgentConfig();
982
- const agentOrder = config['cline-order'] || {};
983
-
984
- for (const agentId of agents) {
985
- // Find the agent file
986
- const agentPath = await this.findAgentPath(agentId, installDir);
987
-
988
- if (agentPath) {
989
- const agentContent = await fileManager.readFile(agentPath);
990
-
991
- // Get numeric prefix for ordering
992
- const order = agentOrder[agentId] || 99;
993
- const prefix = order.toString().padStart(2, '0');
994
- const mdPath = path.join(clineRulesDir, `${prefix}-${agentId}.md`);
995
-
996
- // Create MD content for Cline (focused on project standards and role)
997
- let mdContent = `# ${await this.getAgentTitle(agentId, installDir)} Agent\n\n`;
998
- mdContent += `This rule defines the ${await this.getAgentTitle(agentId, installDir)} persona and project standards.\n\n`;
999
- mdContent += '## Role Definition\n\n';
1000
- mdContent +=
1001
- 'When the user types `@' +
1002
- agentId +
1003
- '`, adopt this persona and follow these guidelines:\n\n';
1004
- mdContent += '```yaml\n';
1005
- // Extract just the YAML content from the agent file
1006
- const yamlContent = extractYamlFromAgent(agentContent);
1007
- if (yamlContent) {
1008
- mdContent += yamlContent;
1009
- } else {
1010
- // If no YAML found, include the whole content minus the header
1011
- mdContent += agentContent.replace(/^#.*$/m, '').trim();
1012
- }
1013
- mdContent += '\n```\n\n';
1014
- mdContent += '## Project Standards\n\n';
1015
- mdContent += `- Always maintain consistency with project documentation in .bmad-core/\n`;
1016
- mdContent += `- Follow the agent's specific guidelines and constraints\n`;
1017
- mdContent += `- Update relevant project files when making changes\n`;
1018
- const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
1019
- mdContent += `- Reference the complete agent definition in [${relativePath}](${relativePath})\n\n`;
1020
- mdContent += '## Usage\n\n';
1021
- mdContent += `Type \`@${agentId}\` to activate this ${await this.getAgentTitle(agentId, installDir)} persona.\n`;
1022
-
1023
- await fileManager.writeFile(mdPath, mdContent);
1024
- console.log(chalk.green(`āœ“ Created rule: ${prefix}-${agentId}.md`));
1025
- }
1026
- }
1027
-
1028
- console.log(chalk.green(`\nāœ“ Created Cline rules in ${clineRulesDir}`));
1029
-
1030
- return true;
1031
- }
1032
-
1033
- async setupGeminiCli(installDir) {
1034
- const geminiDir = path.join(installDir, '.gemini');
1035
- const bmadMethodDir = path.join(geminiDir, 'bmad-method');
1036
- await fileManager.ensureDirectory(bmadMethodDir);
1037
-
1038
- // Update logic for existing settings.json
1039
- const settingsPath = path.join(geminiDir, 'settings.json');
1040
- if (await fileManager.pathExists(settingsPath)) {
1041
- try {
1042
- const settingsContent = await fileManager.readFile(settingsPath);
1043
- const settings = JSON.parse(settingsContent);
1044
- let updated = false;
1045
-
1046
- // Handle contextFileName property
1047
- if (settings.contextFileName && Array.isArray(settings.contextFileName)) {
1048
- const originalLength = settings.contextFileName.length;
1049
- settings.contextFileName = settings.contextFileName.filter(
1050
- (fileName) => !fileName.startsWith('agents/'),
1051
- );
1052
- if (settings.contextFileName.length !== originalLength) {
1053
- updated = true;
1054
- }
1055
- }
1056
-
1057
- if (updated) {
1058
- await fileManager.writeFile(settingsPath, JSON.stringify(settings, null, 2));
1059
- console.log(
1060
- chalk.green('āœ“ Updated .gemini/settings.json - removed agent file references'),
1061
- );
1062
- }
1063
- } catch (error) {
1064
- console.warn(chalk.yellow('Could not update .gemini/settings.json'), error);
1065
- }
1066
- }
1067
-
1068
- // Remove old agents directory
1069
- const agentsDir = path.join(geminiDir, 'agents');
1070
- if (await fileManager.pathExists(agentsDir)) {
1071
- await fileManager.removeDirectory(agentsDir);
1072
- console.log(chalk.green('āœ“ Removed old .gemini/agents directory'));
1073
- }
1074
-
1075
- // Get all available agents
1076
- const agents = await this.getAllAgentIds(installDir);
1077
- let concatenatedContent = '';
1078
-
1079
- for (const agentId of agents) {
1080
- // Find the source agent file
1081
- const agentPath = await this.findAgentPath(agentId, installDir);
1082
-
1083
- if (agentPath) {
1084
- const agentContent = await fileManager.readFile(agentPath);
1085
-
1086
- // Create properly formatted agent rule content (similar to trae)
1087
- let agentRuleContent = `# ${agentId.toUpperCase()} Agent Rule\n\n`;
1088
- agentRuleContent += `This rule is triggered when the user types \`*${agentId}\` and activates the ${await this.getAgentTitle(
1089
- agentId,
1090
- installDir,
1091
- )} agent persona.\n\n`;
1092
- agentRuleContent += '## Agent Activation\n\n';
1093
- agentRuleContent +=
1094
- 'CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n';
1095
- agentRuleContent += '```yaml\n';
1096
- // Extract just the YAML content from the agent file
1097
- const yamlContent = extractYamlFromAgent(agentContent);
1098
- if (yamlContent) {
1099
- agentRuleContent += yamlContent;
1100
- } else {
1101
- // If no YAML found, include the whole content minus the header
1102
- agentRuleContent += agentContent.replace(/^#.*$/m, '').trim();
1103
- }
1104
- agentRuleContent += '\n```\n\n';
1105
- agentRuleContent += '## File Reference\n\n';
1106
- const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
1107
- agentRuleContent += `The complete agent definition is available in [${relativePath}](${relativePath}).\n\n`;
1108
- agentRuleContent += '## Usage\n\n';
1109
- agentRuleContent += `When the user types \`*${agentId}\`, activate this ${await this.getAgentTitle(
1110
- agentId,
1111
- installDir,
1112
- )} persona and follow all instructions defined in the YAML configuration above.\n`;
1113
-
1114
- // Add to concatenated content with separator
1115
- concatenatedContent += agentRuleContent + '\n\n---\n\n';
1116
- console.log(chalk.green(`āœ“ Added context for @${agentId}`));
1117
- }
1118
- }
1119
-
1120
- // Write the concatenated content to GEMINI.md
1121
- const geminiMdPath = path.join(bmadMethodDir, 'GEMINI.md');
1122
- await fileManager.writeFile(geminiMdPath, concatenatedContent);
1123
- console.log(chalk.green(`\nāœ“ Created GEMINI.md in ${bmadMethodDir}`));
1124
-
1125
- return true;
1126
- }
1127
-
1128
- async setupQwenCode(installDir, selectedAgent) {
1129
- const qwenDir = path.join(installDir, '.qwen');
1130
- const bmadMethodDir = path.join(qwenDir, 'bmad-method');
1131
- await fileManager.ensureDirectory(bmadMethodDir);
1132
-
1133
- // Update logic for existing settings.json
1134
- const settingsPath = path.join(qwenDir, 'settings.json');
1135
- if (await fileManager.pathExists(settingsPath)) {
1136
- try {
1137
- const settingsContent = await fileManager.readFile(settingsPath);
1138
- const settings = JSON.parse(settingsContent);
1139
- let updated = false;
1140
-
1141
- // Handle contextFileName property
1142
- if (settings.contextFileName && Array.isArray(settings.contextFileName)) {
1143
- const originalLength = settings.contextFileName.length;
1144
- settings.contextFileName = settings.contextFileName.filter(
1145
- (fileName) => !fileName.startsWith('agents/'),
1146
- );
1147
- if (settings.contextFileName.length !== originalLength) {
1148
- updated = true;
1149
- }
1150
- }
1151
-
1152
- if (updated) {
1153
- await fileManager.writeFile(settingsPath, JSON.stringify(settings, null, 2));
1154
- console.log(chalk.green('āœ“ Updated .qwen/settings.json - removed agent file references'));
1155
- }
1156
- } catch (error) {
1157
- console.warn(chalk.yellow('Could not update .qwen/settings.json'), error);
1158
- }
1159
- }
1160
-
1161
- // Remove old agents directory
1162
- const agentsDir = path.join(qwenDir, 'agents');
1163
- if (await fileManager.pathExists(agentsDir)) {
1164
- await fileManager.removeDirectory(agentsDir);
1165
- console.log(chalk.green('āœ“ Removed old .qwen/agents directory'));
1166
- }
1167
-
1168
- // Get all available agents
1169
- const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
1170
- let concatenatedContent = '';
1171
-
1172
- for (const agentId of agents) {
1173
- // Find the source agent file
1174
- const agentPath = await this.findAgentPath(agentId, installDir);
1175
-
1176
- if (agentPath) {
1177
- const agentContent = await fileManager.readFile(agentPath);
1178
-
1179
- // Create properly formatted agent rule content (similar to gemini)
1180
- let agentRuleContent = `# ${agentId.toUpperCase()} Agent Rule\n\n`;
1181
- agentRuleContent += `This rule is triggered when the user types \`*${agentId}\` and activates the ${await this.getAgentTitle(
1182
- agentId,
1183
- installDir,
1184
- )} agent persona.\n\n`;
1185
- agentRuleContent += '## Agent Activation\n\n';
1186
- agentRuleContent +=
1187
- 'CRITICAL: Read the full YAML, start activation to alter your state of being, follow startup section instructions, stay in this being until told to exit this mode:\n\n';
1188
- agentRuleContent += '```yaml\n';
1189
- // Extract just the YAML content from the agent file
1190
- const yamlContent = extractYamlFromAgent(agentContent);
1191
- if (yamlContent) {
1192
- agentRuleContent += yamlContent;
1193
- } else {
1194
- // If no YAML found, include the whole content minus the header
1195
- agentRuleContent += agentContent.replace(/^#.*$/m, '').trim();
1196
- }
1197
- agentRuleContent += '\n```\n\n';
1198
- agentRuleContent += '## File Reference\n\n';
1199
- const relativePath = path.relative(installDir, agentPath).replaceAll('\\', '/');
1200
- agentRuleContent += `The complete agent definition is available in [${relativePath}](${relativePath}).\n\n`;
1201
- agentRuleContent += '## Usage\n\n';
1202
- agentRuleContent += `When the user types \`*${agentId}\`, activate this ${await this.getAgentTitle(
1203
- agentId,
1204
- installDir,
1205
- )} persona and follow all instructions defined in the YAML configuration above.\n`;
1206
-
1207
- // Add to concatenated content with separator
1208
- concatenatedContent += agentRuleContent + '\n\n---\n\n';
1209
- console.log(chalk.green(`āœ“ Added context for *${agentId}`));
1210
- }
1211
- }
1212
-
1213
- // Write the concatenated content to QWEN.md
1214
- const qwenMdPath = path.join(bmadMethodDir, 'QWEN.md');
1215
- await fileManager.writeFile(qwenMdPath, concatenatedContent);
1216
- console.log(chalk.green(`\nāœ“ Created QWEN.md in ${bmadMethodDir}`));
1217
-
1218
- return true;
1219
- }
1220
-
1221
- async setupGitHubCopilot(
1222
- installDir,
1223
- selectedAgent,
1224
- spinner = null,
1225
- preConfiguredSettings = null,
1226
- ) {
1227
- // Configure VS Code workspace settings first to avoid UI conflicts with loading spinners
1228
- await this.configureVsCodeSettings(installDir, spinner, preConfiguredSettings);
1229
-
1230
- const chatmodesDir = path.join(installDir, '.github', 'chatmodes');
1231
- const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
1232
-
1233
- await fileManager.ensureDirectory(chatmodesDir);
1234
-
1235
- for (const agentId of agents) {
1236
- // Find the agent file
1237
- const agentPath = await this.findAgentPath(agentId, installDir);
1238
- const chatmodePath = path.join(chatmodesDir, `${agentId}.chatmode.md`);
1239
-
1240
- if (agentPath) {
1241
- // Create chat mode file with agent content
1242
- const agentContent = await fileManager.readFile(agentPath);
1243
- const agentTitle = await this.getAgentTitle(agentId, installDir);
1244
-
1245
- // Extract whenToUse for the description
1246
- const yamlMatch = agentContent.match(/```ya?ml\r?\n([\s\S]*?)```/);
1247
- let description = `Activates the ${agentTitle} agent persona.`;
1248
- if (yamlMatch) {
1249
- const whenToUseMatch = yamlMatch[1].match(/whenToUse:\s*"(.*?)"/);
1250
- if (whenToUseMatch && whenToUseMatch[1]) {
1251
- description = whenToUseMatch[1];
1252
- }
1253
- }
1254
-
1255
- let chatmodeContent = `---
1256
- description: "${description.replaceAll('"', String.raw`\"`)}"
1257
- tools: ['changes', 'codebase', 'fetch', 'findTestFiles', 'githubRepo', 'problems', 'usages', 'editFiles', 'runCommands', 'runTasks', 'runTests', 'search', 'searchResults', 'terminalLastCommand', 'terminalSelection', 'testFailure']
1258
- ---
1259
-
1260
- `;
1261
- chatmodeContent += agentContent;
1262
-
1263
- await fileManager.writeFile(chatmodePath, chatmodeContent);
1264
- console.log(chalk.green(`āœ“ Created chat mode: ${agentId}.chatmode.md`));
1265
- }
1266
- }
1267
-
1268
- console.log(chalk.green(`\nāœ“ Github Copilot setup complete!`));
1269
- console.log(chalk.dim(`You can now find the BMad agents in the Chat view's mode selector.`));
1270
-
1271
- return true;
1272
- }
1273
-
1274
- async configureVsCodeSettings(installDir, spinner, preConfiguredSettings = null) {
1275
- const vscodeDir = path.join(installDir, '.vscode');
1276
- const settingsPath = path.join(vscodeDir, 'settings.json');
1277
-
1278
- await fileManager.ensureDirectory(vscodeDir);
1279
-
1280
- // Read existing settings if they exist
1281
- let existingSettings = {};
1282
- if (await fileManager.pathExists(settingsPath)) {
1283
- try {
1284
- const existingContent = await fileManager.readFile(settingsPath);
1285
- existingSettings = JSON.parse(existingContent);
1286
- console.log(chalk.yellow('Found existing .vscode/settings.json. Merging BMad settings...'));
1287
- } catch {
1288
- console.warn(chalk.yellow('Could not parse existing settings.json. Creating new one.'));
1289
- existingSettings = {};
1290
- }
1291
- }
1292
-
1293
- // Use pre-configured settings if provided, otherwise prompt
1294
- let configChoice;
1295
- if (preConfiguredSettings && preConfiguredSettings.configChoice) {
1296
- configChoice = preConfiguredSettings.configChoice;
1297
- console.log(chalk.dim(`Using pre-configured GitHub Copilot settings: ${configChoice}`));
1298
- } else {
1299
- // Clear any previous output and add spacing to avoid conflicts with loaders
1300
- console.log('\n'.repeat(2));
1301
- console.log(chalk.blue('šŸ”§ Github Copilot Agent Settings Configuration'));
1302
- console.log(
1303
- chalk.dim('BMad works best with specific VS Code settings for optimal agent experience.'),
1304
- );
1305
- console.log(''); // Add extra spacing
1306
-
1307
- const response = await inquirer.prompt([
1308
- {
1309
- type: 'list',
1310
- name: 'configChoice',
1311
- message: chalk.yellow('How would you like to configure GitHub Copilot settings?'),
1312
- choices: [
1313
- {
1314
- name: 'Use recommended defaults (fastest setup)',
1315
- value: 'defaults',
1316
- },
1317
- {
1318
- name: 'Configure each setting manually (customize to your preferences)',
1319
- value: 'manual',
1320
- },
1321
- {
1322
- name: "Skip settings configuration (I'll configure manually later)",
1323
- value: 'skip',
1324
- },
1325
- ],
1326
- default: 'defaults',
1327
- },
1328
- ]);
1329
- configChoice = response.configChoice;
1330
- }
1331
-
1332
- let bmadSettings = {};
1333
-
1334
- if (configChoice === 'skip') {
1335
- console.log(chalk.yellow('āš ļø Skipping VS Code settings configuration.'));
1336
- console.log(chalk.dim('You can manually configure these settings in .vscode/settings.json:'));
1337
- console.log(chalk.dim(' • chat.agent.enabled: true'));
1338
- console.log(chalk.dim(' • chat.agent.maxRequests: 15'));
1339
- console.log(chalk.dim(' • github.copilot.chat.agent.runTasks: true'));
1340
- console.log(chalk.dim(' • chat.mcp.discovery.enabled: true'));
1341
- console.log(chalk.dim(' • github.copilot.chat.agent.autoFix: true'));
1342
- console.log(chalk.dim(' • chat.tools.autoApprove: false'));
1343
- return true;
1344
- }
1345
-
1346
- if (configChoice === 'defaults') {
1347
- // Use recommended defaults
1348
- bmadSettings = {
1349
- 'chat.agent.enabled': true,
1350
- 'chat.agent.maxRequests': 15,
1351
- 'github.copilot.chat.agent.runTasks': true,
1352
- 'chat.mcp.discovery.enabled': true,
1353
- 'github.copilot.chat.agent.autoFix': true,
1354
- 'chat.tools.autoApprove': false,
1355
- };
1356
- console.log(chalk.green('āœ“ Using recommended BMad defaults for Github Copilot settings'));
1357
- } else {
1358
- // Manual configuration
1359
- console.log(chalk.blue("\nšŸ“‹ Let's configure each setting for your preferences:"));
1360
-
1361
- // Pause spinner during manual configuration prompts
1362
- let spinnerWasActive = false;
1363
- if (spinner && spinner.isSpinning) {
1364
- spinner.stop();
1365
- spinnerWasActive = true;
1366
- }
1367
-
1368
- const manualSettings = await inquirer.prompt([
1369
- {
1370
- type: 'input',
1371
- name: 'maxRequests',
1372
- message: 'Maximum requests per agent session (recommended: 15)?',
1373
- default: '15',
1374
- validate: (input) => {
1375
- const number_ = Number.parseInt(input);
1376
- if (isNaN(number_) || number_ < 1 || number_ > 50) {
1377
- return 'Please enter a number between 1 and 50';
1378
- }
1379
- return true;
1380
- },
1381
- },
1382
- {
1383
- type: 'confirm',
1384
- name: 'runTasks',
1385
- message: 'Allow agents to run workspace tasks (package.json scripts, etc.)?',
1386
- default: true,
1387
- },
1388
- {
1389
- type: 'confirm',
1390
- name: 'mcpDiscovery',
1391
- message: 'Enable MCP (Model Context Protocol) server discovery?',
1392
- default: true,
1393
- },
1394
- {
1395
- type: 'confirm',
1396
- name: 'autoFix',
1397
- message: 'Enable automatic error detection and fixing in generated code?',
1398
- default: true,
1399
- },
1400
- {
1401
- type: 'confirm',
1402
- name: 'autoApprove',
1403
- message: 'Auto-approve ALL tools without confirmation? (āš ļø EXPERIMENTAL - less secure)',
1404
- default: false,
1405
- },
1406
- ]);
1407
-
1408
- // Restart spinner if it was active before prompts
1409
- if (spinner && spinnerWasActive) {
1410
- spinner.start();
1411
- }
1412
-
1413
- bmadSettings = {
1414
- 'chat.agent.enabled': true, // Always enabled - required for BMad agents
1415
- 'chat.agent.maxRequests': Number.parseInt(manualSettings.maxRequests),
1416
- 'github.copilot.chat.agent.runTasks': manualSettings.runTasks,
1417
- 'chat.mcp.discovery.enabled': manualSettings.mcpDiscovery,
1418
- 'github.copilot.chat.agent.autoFix': manualSettings.autoFix,
1419
- 'chat.tools.autoApprove': manualSettings.autoApprove,
1420
- };
1421
-
1422
- console.log(chalk.green('āœ“ Custom settings configured'));
1423
- }
1424
-
1425
- // Merge settings (existing settings take precedence to avoid overriding user preferences)
1426
- const mergedSettings = { ...bmadSettings, ...existingSettings };
1427
-
1428
- // Write the updated settings
1429
- await fileManager.writeFile(settingsPath, JSON.stringify(mergedSettings, null, 2));
1430
-
1431
- console.log(chalk.green('āœ“ VS Code workspace settings configured successfully'));
1432
- console.log(chalk.dim(' Settings written to .vscode/settings.json:'));
1433
- for (const [key, value] of Object.entries(bmadSettings)) {
1434
- console.log(chalk.dim(` • ${key}: ${value}`));
1435
- }
1436
- console.log(chalk.dim(''));
1437
- console.log(chalk.dim('You can modify these settings anytime in .vscode/settings.json'));
1438
- }
1439
- }
1440
-
1441
- module.exports = new IdeSetup();