bmad-method 5.1.2 → 6.0.0-alpha.0

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 (579) hide show
  1. package/.github/FUNDING.yaml +2 -2
  2. package/.github/ISSUE_TEMPLATE/config.yaml +1 -0
  3. package/.github/ISSUE_TEMPLATE/idea_submission.md +109 -0
  4. package/.github/workflows/discord.yaml +1 -10
  5. package/.github/workflows/format-check.yaml +3 -2
  6. package/.github/workflows/manual-release.yaml +2 -2
  7. package/.nvmrc +1 -0
  8. package/.vscode/settings.json +34 -9
  9. package/CHANGELOG.md +211 -577
  10. package/CONTRIBUTING.md +130 -60
  11. package/LICENSE +6 -1
  12. package/docs/codebase-flattener.md +19 -0
  13. package/docs/ide-info/auggie.md +31 -0
  14. package/docs/ide-info/claude-code.md +25 -0
  15. package/docs/ide-info/cline.md +31 -0
  16. package/docs/ide-info/codex.md +32 -0
  17. package/docs/ide-info/crush.md +30 -0
  18. package/docs/ide-info/cursor.md +25 -0
  19. package/docs/ide-info/gemini.md +25 -0
  20. package/docs/ide-info/github-copilot.md +26 -0
  21. package/docs/ide-info/iflow.md +33 -0
  22. package/docs/ide-info/kilo.md +24 -0
  23. package/docs/ide-info/qwen.md +25 -0
  24. package/docs/ide-info/roo.md +27 -0
  25. package/docs/ide-info/trae.md +25 -0
  26. package/docs/ide-info/windsurf.md +22 -0
  27. package/docs/installers-bundlers/ide-injections.md +196 -0
  28. package/docs/installers-bundlers/installers-modules-platforms-reference.md +355 -0
  29. package/docs/installers-bundlers/web-bundler-usage.md +54 -0
  30. package/eslint.config.mjs +17 -7
  31. package/package.json +26 -35
  32. package/prettier.config.mjs +1 -1
  33. package/readme.md +216 -0
  34. package/src/core/_module-installer/install-menu-config.yaml +24 -0
  35. package/src/core/_module-installer/installer.js +68 -0
  36. package/src/core/agents/bmad-master.md +27 -0
  37. package/src/core/agents/bmad-web-orchestrator.md +71 -0
  38. package/src/core/tasks/adv-elicit-methods.csv +39 -0
  39. package/src/core/tasks/adv-elicit.md +109 -0
  40. package/src/core/tasks/index-docs.md +69 -0
  41. package/src/core/tasks/shard-doc.md +57 -0
  42. package/src/core/tasks/validate-workflow.md +92 -0
  43. package/src/core/tasks/workflow.md +141 -0
  44. package/src/core/workflows/bmad-init/instructions.md +79 -0
  45. package/src/core/workflows/bmad-init/workflow.yaml +24 -0
  46. package/src/core/workflows/party-mode/instructions.md +181 -0
  47. package/src/core/workflows/party-mode/workflow.yaml +24 -0
  48. package/src/modules/bmb/_module-installer/install-menu-config.yaml +16 -0
  49. package/src/modules/bmb/agents/bmad-builder.md +30 -0
  50. package/src/modules/bmb/workflows/convert-legacy/README.md +262 -0
  51. package/src/modules/bmb/workflows/convert-legacy/checklist.md +204 -0
  52. package/src/modules/bmb/workflows/convert-legacy/instructions.md +328 -0
  53. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +35 -0
  54. package/src/modules/bmb/workflows/create-agent/README.md +268 -0
  55. package/src/modules/bmb/workflows/create-agent/agent-architecture.md +412 -0
  56. package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +757 -0
  57. package/src/modules/bmb/workflows/create-agent/agent-types.md +177 -0
  58. package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +174 -0
  59. package/src/modules/bmb/workflows/create-agent/checklist.md +134 -0
  60. package/src/modules/bmb/workflows/create-agent/communication-styles.md +240 -0
  61. package/src/modules/bmb/workflows/create-agent/instructions.md +340 -0
  62. package/src/modules/bmb/workflows/create-agent/workflow.yaml +39 -0
  63. package/src/modules/bmb/workflows/create-module/README.md +218 -0
  64. package/src/modules/bmb/workflows/create-module/brainstorm-context.md +137 -0
  65. package/src/modules/bmb/workflows/create-module/checklist.md +245 -0
  66. package/src/modules/bmb/workflows/create-module/installer-templates/install-module-config.yaml +132 -0
  67. package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +231 -0
  68. package/src/modules/bmb/workflows/create-module/instructions.md +509 -0
  69. package/src/modules/bmb/workflows/create-module/module-structure.md +310 -0
  70. package/src/modules/bmb/workflows/create-module/workflow.yaml +47 -0
  71. package/src/modules/bmb/workflows/create-workflow/README.md +216 -0
  72. package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +197 -0
  73. package/src/modules/bmb/workflows/create-workflow/checklist.md +72 -0
  74. package/src/modules/bmb/workflows/create-workflow/instructions.md +267 -0
  75. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +456 -0
  76. package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +24 -0
  77. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +12 -0
  78. package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +9 -0
  79. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +35 -0
  80. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +42 -0
  81. package/src/modules/bmb/workflows/edit-workflow/README.md +63 -0
  82. package/src/modules/bmb/workflows/edit-workflow/checklist.md +70 -0
  83. package/src/modules/bmb/workflows/edit-workflow/instructions.md +170 -0
  84. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +34 -0
  85. package/src/modules/bmb/workflows/module-brief/README.md +264 -0
  86. package/src/modules/bmb/workflows/module-brief/checklist.md +116 -0
  87. package/src/modules/bmb/workflows/module-brief/instructions.md +265 -0
  88. package/src/modules/bmb/workflows/module-brief/template.md +275 -0
  89. package/src/modules/bmb/workflows/module-brief/workflow.yaml +30 -0
  90. package/src/modules/bmb/workflows/redoc/README.md +87 -0
  91. package/src/modules/bmb/workflows/redoc/checklist.md +99 -0
  92. package/src/modules/bmb/workflows/redoc/instructions.md +255 -0
  93. package/src/modules/bmb/workflows/redoc/workflow.yaml +33 -0
  94. package/src/modules/bmm/_module-installer/assets/bmm-kb.md +1 -0
  95. package/src/modules/bmm/_module-installer/assets/technical-decisions-template.md +30 -0
  96. package/src/modules/bmm/_module-installer/install-menu-config.yaml +49 -0
  97. package/src/modules/bmm/_module-installer/installer.js +131 -0
  98. package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +35 -0
  99. package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +32 -0
  100. package/src/modules/bmm/agents/analyst.md +26 -0
  101. package/src/modules/bmm/agents/architect.md +29 -0
  102. package/src/modules/bmm/agents/dev.md +61 -0
  103. package/src/modules/bmm/agents/game-architect.md +26 -0
  104. package/src/modules/bmm/agents/game-designer.md +27 -0
  105. package/src/modules/bmm/agents/game-dev.md +28 -0
  106. package/src/modules/bmm/agents/pm.md +26 -0
  107. package/src/modules/bmm/agents/po.md +25 -0
  108. package/src/modules/bmm/agents/sm.md +29 -0
  109. package/src/modules/bmm/agents/tea.md +32 -0
  110. package/src/modules/bmm/agents/ux-expert.md +24 -0
  111. package/src/modules/bmm/sub-modules/claude-code/config.yaml +5 -0
  112. package/src/modules/bmm/sub-modules/claude-code/injections.yaml +242 -0
  113. package/src/modules/bmm/sub-modules/claude-code/readme.md +87 -0
  114. package/src/modules/bmm/sub-modules/claude-code/sub-agents/api-documenter.md +85 -0
  115. package/src/modules/bmm/sub-modules/claude-code/sub-agents/codebase-analyzer.md +64 -0
  116. package/src/modules/bmm/sub-modules/claude-code/sub-agents/data-analyst.md +84 -0
  117. package/src/modules/bmm/sub-modules/claude-code/sub-agents/dependency-mapper.md +67 -0
  118. package/src/modules/bmm/sub-modules/claude-code/sub-agents/document-reviewer.md +85 -0
  119. package/src/modules/bmm/sub-modules/claude-code/sub-agents/epic-optimizer.md +66 -0
  120. package/src/modules/bmm/sub-modules/claude-code/sub-agents/market-researcher.md +34 -0
  121. package/src/modules/bmm/sub-modules/claude-code/sub-agents/pattern-detector.md +67 -0
  122. package/src/modules/bmm/sub-modules/claude-code/sub-agents/requirements-analyst.md +61 -0
  123. package/src/modules/bmm/sub-modules/claude-code/sub-agents/tech-debt-auditor.md +89 -0
  124. package/src/modules/bmm/sub-modules/claude-code/sub-agents/technical-decisions-curator.md +146 -0
  125. package/src/modules/bmm/sub-modules/claude-code/sub-agents/technical-evaluator.md +51 -0
  126. package/src/modules/bmm/sub-modules/claude-code/sub-agents/test-coverage-analyzer.md +91 -0
  127. package/src/modules/bmm/sub-modules/claude-code/sub-agents/trend-spotter.md +99 -0
  128. package/src/modules/bmm/sub-modules/claude-code/sub-agents/user-journey-mapper.md +101 -0
  129. package/src/modules/bmm/sub-modules/claude-code/sub-agents/user-researcher.md +56 -0
  130. package/src/modules/bmm/tasks/daily-standup.md +91 -0
  131. package/src/modules/bmm/tasks/retrospective.md +110 -0
  132. package/src/modules/bmm/teams/team-all.yaml +7 -0
  133. package/src/modules/bmm/teams/team-dev.yaml +14 -0
  134. package/src/modules/bmm/teams/team-gamedev.yaml +9 -0
  135. package/src/modules/bmm/testarch/atdd.md +40 -0
  136. package/src/modules/bmm/testarch/automate.md +38 -0
  137. package/src/modules/bmm/testarch/ci.md +39 -0
  138. package/src/modules/bmm/testarch/framework.md +41 -0
  139. package/src/modules/bmm/testarch/nfr-assess.md +38 -0
  140. package/src/modules/bmm/testarch/risk-profile.md +38 -0
  141. package/src/modules/bmm/testarch/tea-commands.csv +11 -0
  142. package/src/modules/bmm/testarch/tea-gate.md +38 -0
  143. package/src/modules/bmm/testarch/tea-knowledge.md +275 -0
  144. package/src/modules/bmm/testarch/test-design.md +39 -0
  145. package/{bmad-core/data → src/modules/bmm/testarch}/test-levels-framework.md +2 -0
  146. package/{bmad-core/data → src/modules/bmm/testarch}/test-priorities-matrix.md +2 -0
  147. package/src/modules/bmm/testarch/trace-requirements.md +38 -0
  148. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/game-brain-methods.csv +26 -0
  149. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/game-context.md +115 -0
  150. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/instructions.md +47 -0
  151. package/src/modules/bmm/workflows/1-analysis/brainstorm-game/workflow.yaml +22 -0
  152. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +38 -0
  153. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +25 -0
  154. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +21 -0
  155. package/src/modules/bmm/workflows/1-analysis/game-brief/README.md +221 -0
  156. package/src/modules/bmm/workflows/1-analysis/game-brief/checklist.md +128 -0
  157. package/src/modules/bmm/workflows/1-analysis/game-brief/instructions.md +517 -0
  158. package/src/modules/bmm/workflows/1-analysis/game-brief/template.md +205 -0
  159. package/src/modules/bmm/workflows/1-analysis/game-brief/workflow.yaml +34 -0
  160. package/src/modules/bmm/workflows/1-analysis/product-brief/README.md +180 -0
  161. package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +115 -0
  162. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +353 -0
  163. package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +165 -0
  164. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +33 -0
  165. package/src/modules/bmm/workflows/1-analysis/research/README.md +454 -0
  166. package/src/modules/bmm/workflows/1-analysis/research/checklist.md +202 -0
  167. package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +114 -0
  168. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-competitor-analyzer.md +259 -0
  169. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-data-analyst.md +190 -0
  170. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-market-researcher.md +337 -0
  171. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-trend-spotter.md +107 -0
  172. package/src/modules/bmm/workflows/1-analysis/research/claude-code/sub-agents/bmm-user-researcher.md +329 -0
  173. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +370 -0
  174. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +553 -0
  175. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +91 -0
  176. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +442 -0
  177. package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +94 -0
  178. package/src/modules/bmm/workflows/1-analysis/research/template-market.md +311 -0
  179. package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +210 -0
  180. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +149 -0
  181. package/src/modules/bmm/workflows/2-plan/README.md +203 -0
  182. package/src/modules/bmm/workflows/2-plan/checklist.md +369 -0
  183. package/src/modules/bmm/workflows/2-plan/gdd/README.md +222 -0
  184. package/src/modules/bmm/workflows/2-plan/gdd/game-types/action-platformer.md +45 -0
  185. package/src/modules/bmm/workflows/2-plan/gdd/game-types/adventure.md +84 -0
  186. package/src/modules/bmm/workflows/2-plan/gdd/game-types/card-game.md +76 -0
  187. package/src/modules/bmm/workflows/2-plan/gdd/game-types/fighting.md +89 -0
  188. package/src/modules/bmm/workflows/2-plan/gdd/game-types/horror.md +86 -0
  189. package/src/modules/bmm/workflows/2-plan/gdd/game-types/idle-incremental.md +78 -0
  190. package/src/modules/bmm/workflows/2-plan/gdd/game-types/metroidvania.md +87 -0
  191. package/src/modules/bmm/workflows/2-plan/gdd/game-types/moba.md +74 -0
  192. package/src/modules/bmm/workflows/2-plan/gdd/game-types/party-game.md +79 -0
  193. package/src/modules/bmm/workflows/2-plan/gdd/game-types/puzzle.md +58 -0
  194. package/src/modules/bmm/workflows/2-plan/gdd/game-types/racing.md +88 -0
  195. package/src/modules/bmm/workflows/2-plan/gdd/game-types/rhythm.md +79 -0
  196. package/src/modules/bmm/workflows/2-plan/gdd/game-types/roguelike.md +69 -0
  197. package/src/modules/bmm/workflows/2-plan/gdd/game-types/rpg.md +70 -0
  198. package/src/modules/bmm/workflows/2-plan/gdd/game-types/sandbox.md +79 -0
  199. package/src/modules/bmm/workflows/2-plan/gdd/game-types/shooter.md +62 -0
  200. package/src/modules/bmm/workflows/2-plan/gdd/game-types/simulation.md +73 -0
  201. package/src/modules/bmm/workflows/2-plan/gdd/game-types/sports.md +75 -0
  202. package/src/modules/bmm/workflows/2-plan/gdd/game-types/strategy.md +71 -0
  203. package/src/modules/bmm/workflows/2-plan/gdd/game-types/survival.md +79 -0
  204. package/src/modules/bmm/workflows/2-plan/gdd/game-types/text-based.md +91 -0
  205. package/src/modules/bmm/workflows/2-plan/gdd/game-types/tower-defense.md +79 -0
  206. package/src/modules/bmm/workflows/2-plan/gdd/game-types/turn-based-tactics.md +88 -0
  207. package/src/modules/bmm/workflows/2-plan/gdd/game-types/visual-novel.md +89 -0
  208. package/src/modules/bmm/workflows/2-plan/gdd/game-types.csv +25 -0
  209. package/src/modules/bmm/workflows/2-plan/gdd/gdd-template.md +159 -0
  210. package/src/modules/bmm/workflows/2-plan/gdd/instructions-gdd.md +480 -0
  211. package/src/modules/bmm/workflows/2-plan/instructions-router.md +222 -0
  212. package/src/modules/bmm/workflows/2-plan/narrative/instructions-narrative.md +517 -0
  213. package/src/modules/bmm/workflows/2-plan/narrative/narrative-template.md +195 -0
  214. package/src/modules/bmm/workflows/2-plan/prd/analysis-template.md +53 -0
  215. package/src/modules/bmm/workflows/2-plan/prd/epics-template.md +18 -0
  216. package/src/modules/bmm/workflows/2-plan/prd/instructions-lg.md +267 -0
  217. package/src/modules/bmm/workflows/2-plan/prd/instructions-med.md +251 -0
  218. package/src/modules/bmm/workflows/2-plan/prd/prd-template.md +73 -0
  219. package/src/modules/bmm/workflows/2-plan/tech-spec/instructions-sm.md +137 -0
  220. package/src/modules/bmm/workflows/2-plan/tech-spec/tech-spec-template.md +59 -0
  221. package/src/modules/bmm/workflows/2-plan/ux/instructions-ux.md +360 -0
  222. package/src/modules/bmm/workflows/2-plan/ux/ux-spec-template.md +162 -0
  223. package/src/modules/bmm/workflows/2-plan/workflow.yaml +60 -0
  224. package/src/modules/bmm/workflows/3-solutioning/ADR-template.md +74 -0
  225. package/src/modules/bmm/workflows/3-solutioning/README.md +565 -0
  226. package/src/modules/bmm/workflows/3-solutioning/checklist.md +170 -0
  227. package/src/modules/bmm/workflows/3-solutioning/instructions.md +661 -0
  228. package/src/modules/bmm/workflows/3-solutioning/project-types/backend-questions.md +490 -0
  229. package/src/modules/bmm/workflows/3-solutioning/project-types/cli-questions.md +337 -0
  230. package/src/modules/bmm/workflows/3-solutioning/project-types/data-questions.md +472 -0
  231. package/src/modules/bmm/workflows/3-solutioning/project-types/desktop-questions.md +299 -0
  232. package/src/modules/bmm/workflows/3-solutioning/project-types/embedded-questions.md +118 -0
  233. package/src/modules/bmm/workflows/3-solutioning/project-types/extension-questions.md +374 -0
  234. package/src/modules/bmm/workflows/3-solutioning/project-types/game-questions.md +133 -0
  235. package/src/modules/bmm/workflows/3-solutioning/project-types/infra-questions.md +484 -0
  236. package/src/modules/bmm/workflows/3-solutioning/project-types/library-questions.md +146 -0
  237. package/src/modules/bmm/workflows/3-solutioning/project-types/mobile-questions.md +110 -0
  238. package/src/modules/bmm/workflows/3-solutioning/project-types/project-types.csv +12 -0
  239. package/src/modules/bmm/workflows/3-solutioning/project-types/web-questions.md +136 -0
  240. package/src/modules/bmm/workflows/3-solutioning/tech-spec/README.md +195 -0
  241. package/src/modules/bmm/workflows/3-solutioning/tech-spec/checklist.md +17 -0
  242. package/src/modules/bmm/workflows/3-solutioning/tech-spec/instructions.md +73 -0
  243. package/src/modules/bmm/workflows/3-solutioning/tech-spec/template.md +76 -0
  244. package/src/modules/bmm/workflows/3-solutioning/tech-spec/workflow.yaml +51 -0
  245. package/src/modules/bmm/workflows/3-solutioning/templates/backend-service-architecture.md +66 -0
  246. package/src/modules/bmm/workflows/3-solutioning/templates/cli-tool-architecture.md +66 -0
  247. package/src/modules/bmm/workflows/3-solutioning/templates/data-pipeline-architecture.md +66 -0
  248. package/src/modules/bmm/workflows/3-solutioning/templates/desktop-app-architecture.md +66 -0
  249. package/src/modules/bmm/workflows/3-solutioning/templates/embedded-firmware-architecture.md +66 -0
  250. package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-architecture.md +244 -0
  251. package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-godot-guide.md +428 -0
  252. package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-unity-guide.md +333 -0
  253. package/src/modules/bmm/workflows/3-solutioning/templates/game-engine-web-guide.md +528 -0
  254. package/src/modules/bmm/workflows/3-solutioning/templates/infrastructure-architecture.md +66 -0
  255. package/src/modules/bmm/workflows/3-solutioning/templates/library-package-architecture.md +66 -0
  256. package/src/modules/bmm/workflows/3-solutioning/templates/mobile-app-architecture.md +66 -0
  257. package/src/modules/bmm/workflows/3-solutioning/templates/registry.csv +172 -0
  258. package/src/modules/bmm/workflows/3-solutioning/templates/web-api-architecture.md +66 -0
  259. package/src/modules/bmm/workflows/3-solutioning/templates/web-fullstack-architecture.md +277 -0
  260. package/src/modules/bmm/workflows/3-solutioning/workflow.yaml +65 -0
  261. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +279 -0
  262. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +190 -0
  263. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +35 -0
  264. package/src/modules/bmm/workflows/4-implementation/create-story/README.md +42 -0
  265. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +39 -0
  266. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +81 -0
  267. package/src/modules/bmm/workflows/4-implementation/create-story/template.md +57 -0
  268. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +72 -0
  269. package/src/modules/bmm/workflows/4-implementation/dev-story/README.md +84 -0
  270. package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +38 -0
  271. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +87 -0
  272. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +53 -0
  273. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +391 -0
  274. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +41 -0
  275. package/src/modules/bmm/workflows/4-implementation/review-story/README.md +72 -0
  276. package/src/modules/bmm/workflows/4-implementation/review-story/backlog_template.md +12 -0
  277. package/src/modules/bmm/workflows/4-implementation/review-story/checklist.md +22 -0
  278. package/src/modules/bmm/workflows/4-implementation/review-story/instructions.md +176 -0
  279. package/src/modules/bmm/workflows/4-implementation/review-story/workflow.yaml +99 -0
  280. package/src/modules/bmm/workflows/4-implementation/story-context/README.md +234 -0
  281. package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +16 -0
  282. package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +34 -0
  283. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +76 -0
  284. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +56 -0
  285. package/src/modules/cis/_module-installer/install-menu-config.yaml +14 -0
  286. package/src/modules/cis/_module-installer/installer.js +92 -0
  287. package/src/modules/cis/agents/README.md +104 -0
  288. package/src/modules/cis/agents/brainstorming-coach.md +24 -0
  289. package/src/modules/cis/agents/creative-problem-solver.md +24 -0
  290. package/src/modules/cis/agents/design-thinking-coach.md +24 -0
  291. package/src/modules/cis/agents/innovation-strategist.md +24 -0
  292. package/src/modules/cis/agents/storyteller.md +24 -0
  293. package/src/modules/cis/readme.md +86 -0
  294. package/src/modules/cis/teams/creative-squad.yaml +6 -0
  295. package/src/modules/cis/workflows/README.md +67 -0
  296. package/src/modules/cis/workflows/brainstorming/README.md +271 -0
  297. package/src/modules/cis/workflows/brainstorming/brain-methods.csv +36 -0
  298. package/src/modules/cis/workflows/brainstorming/instructions.md +310 -0
  299. package/src/modules/cis/workflows/brainstorming/template.md +102 -0
  300. package/src/modules/cis/workflows/brainstorming/workflow.yaml +30 -0
  301. package/src/modules/cis/workflows/design-thinking/README.md +56 -0
  302. package/src/modules/cis/workflows/design-thinking/design-methods.csv +31 -0
  303. package/src/modules/cis/workflows/design-thinking/instructions.md +200 -0
  304. package/src/modules/cis/workflows/design-thinking/template.md +111 -0
  305. package/src/modules/cis/workflows/design-thinking/workflow.yaml +29 -0
  306. package/src/modules/cis/workflows/innovation-strategy/README.md +56 -0
  307. package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +31 -0
  308. package/src/modules/cis/workflows/innovation-strategy/instructions.md +274 -0
  309. package/src/modules/cis/workflows/innovation-strategy/template.md +189 -0
  310. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +29 -0
  311. package/src/modules/cis/workflows/problem-solving/README.md +56 -0
  312. package/src/modules/cis/workflows/problem-solving/instructions.md +250 -0
  313. package/src/modules/cis/workflows/problem-solving/solving-methods.csv +31 -0
  314. package/src/modules/cis/workflows/problem-solving/template.md +165 -0
  315. package/src/modules/cis/workflows/problem-solving/workflow.yaml +29 -0
  316. package/src/modules/cis/workflows/storytelling/README.md +58 -0
  317. package/src/modules/cis/workflows/storytelling/instructions.md +275 -0
  318. package/src/modules/cis/workflows/storytelling/story-types.csv +26 -0
  319. package/src/modules/cis/workflows/storytelling/template.md +113 -0
  320. package/src/modules/cis/workflows/storytelling/workflow.yaml +29 -0
  321. package/src/utility/models/agent-activation-ide.xml +51 -0
  322. package/src/utility/models/agent-config-template.md +23 -0
  323. package/tools/cli/bmad-cli.js +42 -0
  324. package/tools/cli/bundlers/bundle-web.js +157 -0
  325. package/tools/cli/bundlers/test-analyst.js +28 -0
  326. package/tools/cli/bundlers/test-bundler.js +118 -0
  327. package/tools/cli/bundlers/web-bundler.js +880 -0
  328. package/tools/cli/commands/install.js +41 -0
  329. package/tools/cli/commands/list.js +28 -0
  330. package/tools/cli/commands/status.js +47 -0
  331. package/tools/cli/commands/uninstall.js +44 -0
  332. package/tools/cli/commands/update.js +28 -0
  333. package/tools/cli/installers/lib/core/config-collector.js +383 -0
  334. package/tools/cli/installers/lib/core/dependency-resolver.js +721 -0
  335. package/tools/cli/installers/lib/core/detector.js +208 -0
  336. package/tools/cli/installers/lib/core/installer.js +1070 -0
  337. package/tools/cli/installers/lib/core/manifest-generator.js +385 -0
  338. package/tools/cli/installers/lib/core/manifest.js +484 -0
  339. package/tools/cli/installers/lib/ide/_base-ide.js +281 -0
  340. package/tools/cli/installers/lib/ide/auggie.js +271 -0
  341. package/tools/cli/installers/lib/ide/claude-code.js +625 -0
  342. package/tools/cli/installers/lib/ide/cline.js +301 -0
  343. package/tools/cli/installers/lib/ide/codex.js +267 -0
  344. package/tools/cli/installers/lib/ide/crush.js +204 -0
  345. package/tools/cli/installers/lib/ide/cursor.js +224 -0
  346. package/tools/cli/installers/lib/ide/gemini.js +160 -0
  347. package/tools/cli/installers/lib/ide/github-copilot.js +289 -0
  348. package/tools/cli/installers/lib/ide/iflow.js +142 -0
  349. package/tools/cli/installers/lib/ide/kilo.js +171 -0
  350. package/tools/cli/installers/lib/ide/manager.js +203 -0
  351. package/tools/cli/installers/lib/ide/qwen.js +188 -0
  352. package/tools/cli/installers/lib/ide/roo.js +288 -0
  353. package/tools/cli/installers/lib/ide/trae.js +182 -0
  354. package/tools/cli/installers/lib/ide/windsurf.js +149 -0
  355. package/tools/cli/installers/lib/ide/workflow-command-generator.js +162 -0
  356. package/tools/cli/installers/lib/ide/workflow-command-template.md +11 -0
  357. package/tools/cli/installers/lib/modules/manager.js +452 -0
  358. package/tools/cli/lib/agent-party-generator.js +206 -0
  359. package/tools/cli/lib/cli-utils.js +208 -0
  360. package/tools/cli/lib/config.js +210 -0
  361. package/tools/cli/lib/file-ops.js +204 -0
  362. package/tools/cli/lib/platform-codes.js +116 -0
  363. package/tools/cli/lib/project-root.js +71 -0
  364. package/tools/cli/lib/replace-project-root.js +239 -0
  365. package/tools/cli/lib/ui.js +516 -0
  366. package/tools/cli/lib/xml-handler.js +183 -0
  367. package/tools/cli/lib/xml-to-markdown.js +82 -0
  368. package/tools/{yaml-format.js → cli/lib/yaml-format.js} +3 -10
  369. package/tools/cli/regenerate-manifests.js +28 -0
  370. package/tools/flattener/ignoreRules.js +2 -6
  371. package/tools/flattener/main.js +31 -121
  372. package/tools/flattener/projectRoot.js +3 -8
  373. package/tools/flattener/stats.helpers.js +8 -35
  374. package/tools/flattener/stats.js +1 -6
  375. package/tools/flattener/test-matrix.js +1 -5
  376. package/tools/platform-codes.yaml +127 -0
  377. package/tools/test-agents/captain-kirk-commander.md +110 -0
  378. package/tools/test-agents/data-operations-android.md +123 -0
  379. package/tools/test-agents/geordi-chief-engineer.md +135 -0
  380. package/tools/test-agents/isabella-martinez-ethicist.md +109 -0
  381. package/tools/test-agents/marcus-thompson-security.md +109 -0
  382. package/tools/test-agents/maya-patel-pragmatist.md +82 -0
  383. package/tools/test-agents/picard-diplomat-captain.md +134 -0
  384. package/tools/test-agents/spock-science-officer.md +124 -0
  385. package/tools/test-agents/william-smithers-technocrat.md +71 -0
  386. package/tools/test-agents/zara-chen-designer.md +94 -0
  387. package/tools/validate-bundles.js +87 -0
  388. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -22
  389. package/README.md +0 -221
  390. package/bmad-core/agent-teams/team-all.yaml +0 -14
  391. package/bmad-core/agent-teams/team-fullstack.yaml +0 -18
  392. package/bmad-core/agent-teams/team-ide-minimal.yaml +0 -10
  393. package/bmad-core/agent-teams/team-no-ui.yaml +0 -13
  394. package/bmad-core/agents/analyst.md +0 -81
  395. package/bmad-core/agents/architect.md +0 -83
  396. package/bmad-core/agents/bmad-master.md +0 -107
  397. package/bmad-core/agents/bmad-orchestrator.md +0 -149
  398. package/bmad-core/agents/dev.md +0 -75
  399. package/bmad-core/agents/pm.md +0 -81
  400. package/bmad-core/agents/po.md +0 -76
  401. package/bmad-core/agents/qa.md +0 -88
  402. package/bmad-core/agents/sm.md +0 -62
  403. package/bmad-core/agents/ux-expert.md +0 -66
  404. package/bmad-core/checklists/architect-checklist.md +0 -438
  405. package/bmad-core/checklists/change-checklist.md +0 -182
  406. package/bmad-core/checklists/pm-checklist.md +0 -370
  407. package/bmad-core/checklists/po-master-checklist.md +0 -432
  408. package/bmad-core/checklists/story-dod-checklist.md +0 -94
  409. package/bmad-core/checklists/story-draft-checklist.md +0 -153
  410. package/bmad-core/core-config.yaml +0 -20
  411. package/bmad-core/data/bmad-kb.md +0 -806
  412. package/bmad-core/data/brainstorming-techniques.md +0 -36
  413. package/bmad-core/data/elicitation-methods.md +0 -154
  414. package/bmad-core/data/technical-preferences.md +0 -3
  415. package/bmad-core/tasks/advanced-elicitation.md +0 -117
  416. package/bmad-core/tasks/brownfield-create-epic.md +0 -160
  417. package/bmad-core/tasks/brownfield-create-story.md +0 -147
  418. package/bmad-core/tasks/correct-course.md +0 -70
  419. package/bmad-core/tasks/create-brownfield-story.md +0 -312
  420. package/bmad-core/tasks/create-deep-research-prompt.md +0 -278
  421. package/bmad-core/tasks/create-next-story.md +0 -112
  422. package/bmad-core/tasks/document-project.md +0 -343
  423. package/bmad-core/tasks/facilitate-brainstorming-session.md +0 -136
  424. package/bmad-core/tasks/generate-ai-frontend-prompt.md +0 -51
  425. package/bmad-core/tasks/index-docs.md +0 -173
  426. package/bmad-core/tasks/kb-mode-interaction.md +0 -75
  427. package/bmad-core/tasks/nfr-assess.md +0 -343
  428. package/bmad-core/tasks/qa-gate.md +0 -159
  429. package/bmad-core/tasks/review-story.md +0 -314
  430. package/bmad-core/tasks/risk-profile.md +0 -353
  431. package/bmad-core/tasks/shard-doc.md +0 -185
  432. package/bmad-core/tasks/test-design.md +0 -174
  433. package/bmad-core/tasks/trace-requirements.md +0 -264
  434. package/bmad-core/tasks/validate-next-story.md +0 -134
  435. package/bmad-core/templates/architecture-tmpl.yaml +0 -650
  436. package/bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
  437. package/bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -476
  438. package/bmad-core/templates/brownfield-prd-tmpl.yaml +0 -280
  439. package/bmad-core/templates/competitor-analysis-tmpl.yaml +0 -306
  440. package/bmad-core/templates/front-end-architecture-tmpl.yaml +0 -218
  441. package/bmad-core/templates/front-end-spec-tmpl.yaml +0 -349
  442. package/bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -823
  443. package/bmad-core/templates/market-research-tmpl.yaml +0 -252
  444. package/bmad-core/templates/prd-tmpl.yaml +0 -202
  445. package/bmad-core/templates/project-brief-tmpl.yaml +0 -221
  446. package/bmad-core/templates/qa-gate-tmpl.yaml +0 -102
  447. package/bmad-core/templates/story-tmpl.yaml +0 -137
  448. package/bmad-core/workflows/brownfield-fullstack.yaml +0 -297
  449. package/bmad-core/workflows/brownfield-service.yaml +0 -187
  450. package/bmad-core/workflows/brownfield-ui.yaml +0 -197
  451. package/bmad-core/workflows/greenfield-fullstack.yaml +0 -240
  452. package/bmad-core/workflows/greenfield-service.yaml +0 -206
  453. package/bmad-core/workflows/greenfield-ui.yaml +0 -235
  454. package/common/tasks/create-doc.md +0 -101
  455. package/common/tasks/execute-checklist.md +0 -86
  456. package/common/utils/bmad-doc-template.md +0 -325
  457. package/common/utils/workflow-management.md +0 -69
  458. package/dist/agents/analyst.txt +0 -2889
  459. package/dist/agents/architect.txt +0 -3552
  460. package/dist/agents/bmad-master.txt +0 -8769
  461. package/dist/agents/bmad-orchestrator.txt +0 -1513
  462. package/dist/agents/dev.txt +0 -414
  463. package/dist/agents/pm.txt +0 -2204
  464. package/dist/agents/po.txt +0 -1346
  465. package/dist/agents/qa.txt +0 -1987
  466. package/dist/agents/sm.txt +0 -658
  467. package/dist/agents/ux-expert.txt +0 -694
  468. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.txt +0 -2371
  469. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.txt +0 -1620
  470. package/dist/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.txt +0 -815
  471. package/dist/expansion-packs/bmad-2d-phaser-game-dev/teams/phaser-2d-nodejs-game-team.txt +0 -10952
  472. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.txt +0 -4012
  473. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.txt +0 -3698
  474. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.txt +0 -450
  475. package/dist/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.txt +0 -973
  476. package/dist/expansion-packs/bmad-2d-unity-game-dev/teams/unity-2d-game-team.txt +0 -15376
  477. package/dist/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.txt +0 -2075
  478. package/dist/teams/team-all.txt +0 -12682
  479. package/dist/teams/team-fullstack.txt +0 -10421
  480. package/dist/teams/team-ide-minimal.txt +0 -5103
  481. package/dist/teams/team-no-ui.txt +0 -8980
  482. package/docs/GUIDING-PRINCIPLES.md +0 -91
  483. package/docs/core-architecture.md +0 -219
  484. package/docs/enhanced-ide-development-workflow.md +0 -248
  485. package/docs/expansion-packs.md +0 -280
  486. package/docs/how-to-contribute-with-pull-requests.md +0 -158
  487. package/docs/user-guide.md +0 -504
  488. package/docs/versioning-and-releases.md +0 -147
  489. package/docs/versions.md +0 -48
  490. package/docs/working-in-the-brownfield.md +0 -597
  491. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/Complete AI Agent System - Flowchart.svg +0 -102
  492. 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
  493. 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
  494. 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
  495. 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
  496. 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
  497. 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
  498. package/expansion-packs/Complete AI Agent System - Blank Templates & Google Cloud Setup/README.md +0 -109
  499. package/expansion-packs/README.md +0 -3
  500. package/expansion-packs/bmad-2d-phaser-game-dev/agent-teams/phaser-2d-nodejs-game-team.yaml +0 -13
  501. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-designer.md +0 -71
  502. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-developer.md +0 -78
  503. package/expansion-packs/bmad-2d-phaser-game-dev/agents/game-sm.md +0 -64
  504. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-design-checklist.md +0 -201
  505. package/expansion-packs/bmad-2d-phaser-game-dev/checklists/game-story-dod-checklist.md +0 -160
  506. package/expansion-packs/bmad-2d-phaser-game-dev/config.yaml +0 -8
  507. package/expansion-packs/bmad-2d-phaser-game-dev/data/bmad-kb.md +0 -250
  508. package/expansion-packs/bmad-2d-phaser-game-dev/data/development-guidelines.md +0 -647
  509. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/advanced-elicitation.md +0 -110
  510. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/create-game-story.md +0 -216
  511. package/expansion-packs/bmad-2d-phaser-game-dev/tasks/game-design-brainstorming.md +0 -290
  512. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-architecture-tmpl.yaml +0 -613
  513. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-brief-tmpl.yaml +0 -356
  514. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-design-doc-tmpl.yaml +0 -343
  515. package/expansion-packs/bmad-2d-phaser-game-dev/templates/game-story-tmpl.yaml +0 -253
  516. package/expansion-packs/bmad-2d-phaser-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  517. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  518. package/expansion-packs/bmad-2d-phaser-game-dev/workflows/game-prototype.yaml +0 -175
  519. package/expansion-packs/bmad-2d-unity-game-dev/agent-teams/unity-2d-game-team.yaml +0 -14
  520. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-architect.md +0 -80
  521. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-designer.md +0 -77
  522. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-developer.md +0 -78
  523. package/expansion-packs/bmad-2d-unity-game-dev/agents/game-sm.md +0 -65
  524. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-architect-checklist.md +0 -391
  525. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-change-checklist.md +0 -203
  526. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-design-checklist.md +0 -201
  527. package/expansion-packs/bmad-2d-unity-game-dev/checklists/game-story-dod-checklist.md +0 -124
  528. package/expansion-packs/bmad-2d-unity-game-dev/config.yaml +0 -6
  529. package/expansion-packs/bmad-2d-unity-game-dev/data/bmad-kb.md +0 -769
  530. package/expansion-packs/bmad-2d-unity-game-dev/data/development-guidelines.md +0 -586
  531. package/expansion-packs/bmad-2d-unity-game-dev/tasks/advanced-elicitation.md +0 -110
  532. package/expansion-packs/bmad-2d-unity-game-dev/tasks/correct-course-game.md +0 -141
  533. package/expansion-packs/bmad-2d-unity-game-dev/tasks/create-game-story.md +0 -184
  534. package/expansion-packs/bmad-2d-unity-game-dev/tasks/game-design-brainstorming.md +0 -290
  535. package/expansion-packs/bmad-2d-unity-game-dev/tasks/validate-game-story.md +0 -200
  536. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-architecture-tmpl.yaml +0 -1030
  537. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-brief-tmpl.yaml +0 -356
  538. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-design-doc-tmpl.yaml +0 -705
  539. package/expansion-packs/bmad-2d-unity-game-dev/templates/game-story-tmpl.yaml +0 -256
  540. package/expansion-packs/bmad-2d-unity-game-dev/templates/level-design-doc-tmpl.yaml +0 -484
  541. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-dev-greenfield.yaml +0 -183
  542. package/expansion-packs/bmad-2d-unity-game-dev/workflows/game-prototype.yaml +0 -175
  543. package/expansion-packs/bmad-infrastructure-devops/README.md +0 -147
  544. package/expansion-packs/bmad-infrastructure-devops/agents/infra-devops-platform.md +0 -71
  545. package/expansion-packs/bmad-infrastructure-devops/checklists/infrastructure-checklist.md +0 -484
  546. package/expansion-packs/bmad-infrastructure-devops/config.yaml +0 -9
  547. package/expansion-packs/bmad-infrastructure-devops/data/bmad-kb.md +0 -305
  548. package/expansion-packs/bmad-infrastructure-devops/tasks/review-infrastructure.md +0 -159
  549. package/expansion-packs/bmad-infrastructure-devops/tasks/validate-infrastructure.md +0 -153
  550. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-architecture-tmpl.yaml +0 -424
  551. package/expansion-packs/bmad-infrastructure-devops/templates/infrastructure-platform-from-arch-tmpl.yaml +0 -629
  552. package/release_notes.md +0 -32
  553. package/tools/bmad-npx-wrapper.js +0 -39
  554. package/tools/builders/web-builder.js +0 -675
  555. package/tools/bump-all-versions.js +0 -115
  556. package/tools/bump-expansion-version.js +0 -90
  557. package/tools/cli.js +0 -152
  558. package/tools/installer/README.md +0 -8
  559. package/tools/installer/bin/bmad.js +0 -585
  560. package/tools/installer/config/ide-agent-config.yaml +0 -58
  561. package/tools/installer/config/install.config.yaml +0 -123
  562. package/tools/installer/lib/config-loader.js +0 -257
  563. package/tools/installer/lib/file-manager.js +0 -389
  564. package/tools/installer/lib/ide-base-setup.js +0 -228
  565. package/tools/installer/lib/ide-setup.js +0 -1441
  566. package/tools/installer/lib/installer.js +0 -1995
  567. package/tools/installer/lib/memory-profiler.js +0 -225
  568. package/tools/installer/lib/module-manager.js +0 -114
  569. package/tools/installer/lib/resource-locator.js +0 -308
  570. package/tools/installer/package.json +0 -44
  571. package/tools/lib/dependency-resolver.js +0 -175
  572. package/tools/lib/yaml-utils.js +0 -29
  573. package/tools/md-assets/web-agent-startup-instructions.md +0 -39
  574. package/tools/preview-release-notes.js +0 -66
  575. package/tools/shared/bannerArt.js +0 -105
  576. package/tools/sync-installer-version.js +0 -32
  577. package/tools/update-expansion-version.js +0 -53
  578. package/tools/upgraders/v3-to-v4-upgrader.js +0 -672
  579. package/tools/version-bump.js +0 -94
@@ -0,0 +1,516 @@
1
+ const chalk = require('chalk');
2
+ const inquirer = require('inquirer');
3
+ const path = require('node:path');
4
+ const os = require('node:os');
5
+ const fs = require('fs-extra');
6
+ const { CLIUtils } = require('./cli-utils');
7
+
8
+ /**
9
+ * UI utilities for the installer
10
+ */
11
+ class UI {
12
+ constructor() {}
13
+
14
+ /**
15
+ * Prompt for installation configuration
16
+ * @returns {Object} Installation configuration
17
+ */
18
+ async promptInstall() {
19
+ CLIUtils.displayLogo();
20
+ CLIUtils.displaySection('BMAD™ Setup', 'Build More, Architect Dreams');
21
+
22
+ const confirmedDirectory = await this.getConfirmedDirectory();
23
+ const { installedModuleIds } = await this.getExistingInstallation(confirmedDirectory);
24
+ const coreConfig = await this.collectCoreConfig(confirmedDirectory);
25
+ const moduleChoices = await this.getModuleChoices(installedModuleIds);
26
+ const selectedModules = await this.selectModules(moduleChoices);
27
+
28
+ console.clear();
29
+ CLIUtils.displayLogo();
30
+ CLIUtils.displayModuleComplete('core', false); // false = don't clear the screen again
31
+
32
+ return {
33
+ directory: confirmedDirectory,
34
+ installCore: true, // Always install core
35
+ modules: selectedModules,
36
+ // IDE selection moved to after module configuration
37
+ ides: [],
38
+ skipIde: true, // Will be handled later
39
+ coreConfig: coreConfig, // Pass collected core config to installer
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Prompt for tool/IDE selection (called after module configuration)
45
+ * @param {string} projectDir - Project directory to check for existing IDEs
46
+ * @param {Array} selectedModules - Selected modules from configuration
47
+ * @returns {Object} Tool configuration
48
+ */
49
+ async promptToolSelection(projectDir, selectedModules) {
50
+ // Check for existing configured IDEs
51
+ const { Detector } = require('../installers/lib/core/detector');
52
+ const detector = new Detector();
53
+ const bmadDir = path.join(projectDir || process.cwd(), 'bmad');
54
+ const existingInstall = await detector.detect(bmadDir);
55
+ const configuredIdes = existingInstall.ides || [];
56
+
57
+ // Get IDE manager to fetch available IDEs dynamically
58
+ const { IdeManager } = require('../installers/lib/ide/manager');
59
+ const ideManager = new IdeManager();
60
+
61
+ const preferredIdes = ideManager.getPreferredIdes();
62
+ const otherIdes = ideManager.getOtherIdes();
63
+
64
+ // Build IDE choices array with separators
65
+ const ideChoices = [];
66
+ const processedIdes = new Set();
67
+
68
+ // First, add previously configured IDEs at the top, marked with ✅
69
+ if (configuredIdes.length > 0) {
70
+ ideChoices.push(new inquirer.Separator('── Previously Configured ──'));
71
+ for (const ideValue of configuredIdes) {
72
+ // Find the IDE in either preferred or other lists
73
+ const preferredIde = preferredIdes.find((ide) => ide.value === ideValue);
74
+ const otherIde = otherIdes.find((ide) => ide.value === ideValue);
75
+ const ide = preferredIde || otherIde;
76
+
77
+ if (ide) {
78
+ ideChoices.push({
79
+ name: `${ide.name} ✅`,
80
+ value: ide.value,
81
+ checked: true, // Previously configured IDEs are checked by default
82
+ });
83
+ processedIdes.add(ide.value);
84
+ }
85
+ }
86
+ }
87
+
88
+ // Add preferred tools (excluding already processed)
89
+ const remainingPreferred = preferredIdes.filter((ide) => !processedIdes.has(ide.value));
90
+ if (remainingPreferred.length > 0) {
91
+ ideChoices.push(new inquirer.Separator('── Recommended Tools ──'));
92
+ for (const ide of remainingPreferred) {
93
+ ideChoices.push({
94
+ name: `${ide.name} ⭐`,
95
+ value: ide.value,
96
+ checked: false,
97
+ });
98
+ processedIdes.add(ide.value);
99
+ }
100
+ }
101
+
102
+ // Add other tools (excluding already processed)
103
+ const remainingOther = otherIdes.filter((ide) => !processedIdes.has(ide.value));
104
+ if (remainingOther.length > 0) {
105
+ ideChoices.push(new inquirer.Separator('── Additional Tools ──'));
106
+ for (const ide of remainingOther) {
107
+ ideChoices.push({
108
+ name: ide.name,
109
+ value: ide.value,
110
+ checked: false,
111
+ });
112
+ }
113
+ }
114
+
115
+ CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure');
116
+
117
+ const answers = await inquirer.prompt([
118
+ {
119
+ type: 'checkbox',
120
+ name: 'ides',
121
+ message: 'Select tools to configure:',
122
+ choices: ideChoices,
123
+ pageSize: 15,
124
+ },
125
+ ]);
126
+
127
+ return {
128
+ ides: answers.ides || [],
129
+ skipIde: !answers.ides || answers.ides.length === 0,
130
+ };
131
+ }
132
+
133
+ /**
134
+ * Prompt for update configuration
135
+ * @returns {Object} Update configuration
136
+ */
137
+ async promptUpdate() {
138
+ const answers = await inquirer.prompt([
139
+ {
140
+ type: 'confirm',
141
+ name: 'backupFirst',
142
+ message: 'Create backup before updating?',
143
+ default: true,
144
+ },
145
+ {
146
+ type: 'confirm',
147
+ name: 'preserveCustomizations',
148
+ message: 'Preserve local customizations?',
149
+ default: true,
150
+ },
151
+ ]);
152
+
153
+ return answers;
154
+ }
155
+
156
+ /**
157
+ * Prompt for module selection
158
+ * @param {Array} modules - Available modules
159
+ * @returns {Array} Selected modules
160
+ */
161
+ async promptModules(modules) {
162
+ const choices = modules.map((mod) => ({
163
+ name: `${mod.name} - ${mod.description}`,
164
+ value: mod.id,
165
+ checked: false,
166
+ }));
167
+
168
+ const { selectedModules } = await inquirer.prompt([
169
+ {
170
+ type: 'checkbox',
171
+ name: 'selectedModules',
172
+ message: 'Select modules to add:',
173
+ choices,
174
+ validate: (answer) => {
175
+ if (answer.length === 0) {
176
+ return 'You must choose at least one module.';
177
+ }
178
+ return true;
179
+ },
180
+ },
181
+ ]);
182
+
183
+ return selectedModules;
184
+ }
185
+
186
+ /**
187
+ * Confirm action
188
+ * @param {string} message - Confirmation message
189
+ * @param {boolean} defaultValue - Default value
190
+ * @returns {boolean} User confirmation
191
+ */
192
+ async confirm(message, defaultValue = false) {
193
+ const { confirmed } = await inquirer.prompt([
194
+ {
195
+ type: 'confirm',
196
+ name: 'confirmed',
197
+ message,
198
+ default: defaultValue,
199
+ },
200
+ ]);
201
+
202
+ return confirmed;
203
+ }
204
+
205
+ /**
206
+ * Display installation summary
207
+ * @param {Object} result - Installation result
208
+ */
209
+ showInstallSummary(result) {
210
+ CLIUtils.displaySection('Installation Complete', 'BMAD™ has been successfully installed');
211
+
212
+ const summary = [
213
+ `📁 Installation Path: ${result.path}`,
214
+ `📦 Modules Installed: ${result.modules?.length > 0 ? result.modules.join(', ') : 'core only'}`,
215
+ `🔧 Tools Configured: ${result.ides?.length > 0 ? result.ides.join(', ') : 'none'}`,
216
+ ];
217
+
218
+ CLIUtils.displayBox(summary.join('\n\n'), {
219
+ borderColor: 'green',
220
+ borderStyle: 'round',
221
+ });
222
+
223
+ console.log('\n' + chalk.green.bold('✨ BMAD is ready to use!'));
224
+ }
225
+
226
+ /**
227
+ * Get confirmed directory from user
228
+ * @returns {string} Confirmed directory path
229
+ */
230
+ async getConfirmedDirectory() {
231
+ let confirmedDirectory = null;
232
+ while (!confirmedDirectory) {
233
+ const directoryAnswer = await this.promptForDirectory();
234
+ await this.displayDirectoryInfo(directoryAnswer.directory);
235
+
236
+ if (await this.confirmDirectory(directoryAnswer.directory)) {
237
+ confirmedDirectory = directoryAnswer.directory;
238
+ }
239
+ }
240
+ return confirmedDirectory;
241
+ }
242
+
243
+ /**
244
+ * Get existing installation info and installed modules
245
+ * @param {string} directory - Installation directory
246
+ * @returns {Object} Object with existingInstall and installedModuleIds
247
+ */
248
+ async getExistingInstallation(directory) {
249
+ const { Detector } = require('../installers/lib/core/detector');
250
+ const detector = new Detector();
251
+ const bmadDir = path.join(directory, 'bmad');
252
+ const existingInstall = await detector.detect(bmadDir);
253
+ const installedModuleIds = new Set(existingInstall.modules.map((mod) => mod.id));
254
+
255
+ return { existingInstall, installedModuleIds };
256
+ }
257
+
258
+ /**
259
+ * Collect core configuration
260
+ * @param {string} directory - Installation directory
261
+ * @returns {Object} Core configuration
262
+ */
263
+ async collectCoreConfig(directory) {
264
+ const { ConfigCollector } = require('../installers/lib/core/config-collector');
265
+ const configCollector = new ConfigCollector();
266
+ // Load existing configs first if they exist
267
+ await configCollector.loadExistingConfig(directory);
268
+ // Now collect with existing values as defaults (false = don't skip loading, true = skip completion message)
269
+ await configCollector.collectModuleConfig('core', directory, false, true);
270
+
271
+ return configCollector.collectedConfig.core;
272
+ }
273
+
274
+ /**
275
+ * Get module choices for selection
276
+ * @param {Set} installedModuleIds - Currently installed module IDs
277
+ * @returns {Array} Module choices for inquirer
278
+ */
279
+ async getModuleChoices(installedModuleIds) {
280
+ const { ModuleManager } = require('../installers/lib/modules/manager');
281
+ const moduleManager = new ModuleManager();
282
+ const availableModules = await moduleManager.listAvailable();
283
+
284
+ const isNewInstallation = installedModuleIds.size === 0;
285
+ return availableModules.map((mod) => ({
286
+ name: mod.name,
287
+ value: mod.id,
288
+ checked: isNewInstallation ? mod.defaultSelected || false : installedModuleIds.has(mod.id),
289
+ }));
290
+ }
291
+
292
+ /**
293
+ * Prompt for module selection
294
+ * @param {Array} moduleChoices - Available module choices
295
+ * @returns {Array} Selected module IDs
296
+ */
297
+ async selectModules(moduleChoices) {
298
+ CLIUtils.displaySection('Module Selection', 'Choose the BMAD modules to install');
299
+
300
+ const moduleAnswer = await inquirer.prompt([
301
+ {
302
+ type: 'checkbox',
303
+ name: 'modules',
304
+ message: 'Select modules to install:',
305
+ choices: moduleChoices,
306
+ },
307
+ ]);
308
+
309
+ return moduleAnswer.modules || [];
310
+ }
311
+
312
+ /**
313
+ * Prompt for directory selection
314
+ * @returns {Object} Directory answer from inquirer
315
+ */
316
+ async promptForDirectory() {
317
+ return await inquirer.prompt([
318
+ {
319
+ type: 'input',
320
+ name: 'directory',
321
+ message: `Installation directory:`,
322
+ default: process.cwd(),
323
+ validate: async (input) => this.validateDirectory(input),
324
+ filter: (input) => {
325
+ // If empty, use the default
326
+ if (!input || input.trim() === '') {
327
+ return process.cwd();
328
+ }
329
+ return this.expandUserPath(input);
330
+ },
331
+ },
332
+ ]);
333
+ }
334
+
335
+ /**
336
+ * Display directory information
337
+ * @param {string} directory - The directory path
338
+ */
339
+ async displayDirectoryInfo(directory) {
340
+ console.log(chalk.cyan('\nResolved installation path:'), chalk.bold(directory));
341
+
342
+ const dirExists = await fs.pathExists(directory);
343
+ if (dirExists) {
344
+ // Show helpful context about the existing path
345
+ const stats = await fs.stat(directory);
346
+ if (stats.isDirectory()) {
347
+ const files = await fs.readdir(directory);
348
+ if (files.length > 0) {
349
+ console.log(
350
+ chalk.gray(`Directory exists and contains ${files.length} item(s)`) +
351
+ (files.includes('bmad') ? chalk.yellow(' including existing bmad installation') : ''),
352
+ );
353
+ } else {
354
+ console.log(chalk.gray('Directory exists and is empty'));
355
+ }
356
+ }
357
+ } else {
358
+ const existingParent = await this.findExistingParent(directory);
359
+ console.log(chalk.gray(`Will create in: ${existingParent}`));
360
+ }
361
+ }
362
+
363
+ /**
364
+ * Confirm directory selection
365
+ * @param {string} directory - The directory path
366
+ * @returns {boolean} Whether user confirmed
367
+ */
368
+ async confirmDirectory(directory) {
369
+ const dirExists = await fs.pathExists(directory);
370
+
371
+ if (dirExists) {
372
+ const confirmAnswer = await inquirer.prompt([
373
+ {
374
+ type: 'confirm',
375
+ name: 'proceed',
376
+ message: `Install to this directory?`,
377
+ default: true,
378
+ },
379
+ ]);
380
+
381
+ if (!confirmAnswer.proceed) {
382
+ console.log(chalk.yellow("\nLet's try again with a different path.\n"));
383
+ }
384
+
385
+ return confirmAnswer.proceed;
386
+ } else {
387
+ // Ask for confirmation to create the directory
388
+ const createConfirm = await inquirer.prompt([
389
+ {
390
+ type: 'confirm',
391
+ name: 'create',
392
+ message: `The directory '${directory}' doesn't exist. Would you like to create it?`,
393
+ default: false,
394
+ },
395
+ ]);
396
+
397
+ if (!createConfirm.create) {
398
+ console.log(chalk.yellow("\nLet's try again with a different path.\n"));
399
+ }
400
+
401
+ return createConfirm.create;
402
+ }
403
+ }
404
+
405
+ /**
406
+ * Validate directory path for installation
407
+ * @param {string} input - User input path
408
+ * @returns {string|true} Error message or true if valid
409
+ */
410
+ async validateDirectory(input) {
411
+ // Allow empty input to use the default
412
+ if (!input || input.trim() === '') {
413
+ return true; // Empty means use default
414
+ }
415
+
416
+ let expandedPath;
417
+ try {
418
+ expandedPath = this.expandUserPath(input.trim());
419
+ } catch (error) {
420
+ return error.message;
421
+ }
422
+
423
+ // Check if the path exists
424
+ const pathExists = await fs.pathExists(expandedPath);
425
+
426
+ if (!pathExists) {
427
+ // Find the first existing parent directory
428
+ const existingParent = await this.findExistingParent(expandedPath);
429
+
430
+ if (!existingParent) {
431
+ return 'Cannot create directory: no existing parent directory found';
432
+ }
433
+
434
+ // Check if the existing parent is writable
435
+ try {
436
+ await fs.access(existingParent, fs.constants.W_OK);
437
+ // Path doesn't exist but can be created - will prompt for confirmation later
438
+ return true;
439
+ } catch {
440
+ // Provide a detailed error message explaining both issues
441
+ return `Directory '${expandedPath}' does not exist and cannot be created: parent directory '${existingParent}' is not writable`;
442
+ }
443
+ }
444
+
445
+ // If it exists, validate it's a directory and writable
446
+ const stat = await fs.stat(expandedPath);
447
+ if (!stat.isDirectory()) {
448
+ return `Path exists but is not a directory: ${expandedPath}`;
449
+ }
450
+
451
+ // Check write permissions
452
+ try {
453
+ await fs.access(expandedPath, fs.constants.W_OK);
454
+ } catch {
455
+ return `Directory is not writable: ${expandedPath}`;
456
+ }
457
+
458
+ return true;
459
+ }
460
+
461
+ /**
462
+ * Find the first existing parent directory
463
+ * @param {string} targetPath - The path to check
464
+ * @returns {string|null} The first existing parent directory, or null if none found
465
+ */
466
+ async findExistingParent(targetPath) {
467
+ let currentPath = path.resolve(targetPath);
468
+
469
+ // Walk up the directory tree until we find an existing directory
470
+ while (currentPath !== path.dirname(currentPath)) {
471
+ // Stop at root
472
+ const parent = path.dirname(currentPath);
473
+ if (await fs.pathExists(parent)) {
474
+ return parent;
475
+ }
476
+ currentPath = parent;
477
+ }
478
+
479
+ return null; // No existing parent found (shouldn't happen in practice)
480
+ }
481
+
482
+ /**
483
+ * Expands the user-provided path: handles ~ and resolves to absolute.
484
+ * @param {string} inputPath - User input path.
485
+ * @returns {string} Absolute expanded path.
486
+ */
487
+ expandUserPath(inputPath) {
488
+ if (typeof inputPath !== 'string') {
489
+ throw new TypeError('Path must be a string.');
490
+ }
491
+
492
+ let expanded = inputPath.trim();
493
+
494
+ // Handle tilde expansion
495
+ if (expanded.startsWith('~')) {
496
+ if (expanded === '~') {
497
+ expanded = os.homedir();
498
+ } else if (expanded.startsWith('~' + path.sep)) {
499
+ const pathAfterHome = expanded.slice(2); // Remove ~/ or ~\
500
+ expanded = path.join(os.homedir(), pathAfterHome);
501
+ } else {
502
+ const restOfPath = expanded.slice(1);
503
+ const separatorIndex = restOfPath.indexOf(path.sep);
504
+ const username = separatorIndex === -1 ? restOfPath : restOfPath.slice(0, separatorIndex);
505
+ if (username) {
506
+ throw new Error(`Path expansion for ~${username} is not supported. Please use an absolute path or ~${path.sep}`);
507
+ }
508
+ }
509
+ }
510
+
511
+ // Resolve to the absolute path relative to the current working directory
512
+ return path.resolve(expanded);
513
+ }
514
+ }
515
+
516
+ module.exports = { UI };
@@ -0,0 +1,183 @@
1
+ const xml2js = require('xml2js');
2
+ const fs = require('fs-extra');
3
+ const path = require('node:path');
4
+ const { getProjectRoot, getSourcePath } = require('./project-root');
5
+
6
+ /**
7
+ * XML utility functions for BMAD installer
8
+ */
9
+ class XmlHandler {
10
+ constructor() {
11
+ this.parser = new xml2js.Parser({
12
+ preserveChildrenOrder: true,
13
+ explicitChildren: true,
14
+ explicitArray: false,
15
+ trim: false,
16
+ normalizeTags: false,
17
+ attrkey: '$',
18
+ charkey: '_',
19
+ });
20
+
21
+ this.builder = new xml2js.Builder({
22
+ renderOpts: {
23
+ pretty: true,
24
+ indent: ' ',
25
+ newline: '\n',
26
+ },
27
+ xmldec: {
28
+ version: '1.0',
29
+ encoding: 'utf8',
30
+ standalone: false,
31
+ },
32
+ headless: true, // Don't add XML declaration
33
+ attrkey: '$',
34
+ charkey: '_',
35
+ });
36
+ }
37
+
38
+ /**
39
+ * Load and parse the activation template
40
+ * @returns {Object} Parsed activation block
41
+ */
42
+ async loadActivationTemplate() {
43
+ const templatePath = getSourcePath('utility', 'models', 'agent-activation-ide.xml');
44
+
45
+ try {
46
+ const xmlContent = await fs.readFile(templatePath, 'utf8');
47
+
48
+ // Parse the XML directly (file is now pure XML)
49
+ const parsed = await this.parser.parseStringPromise(xmlContent);
50
+ return parsed.activation;
51
+ } catch (error) {
52
+ console.error('Failed to load activation template:', error);
53
+ return null;
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Inject activation block into agent XML content
59
+ * @param {string} agentContent - The agent file content
60
+ * @param {Object} metadata - Metadata containing module and name
61
+ * @returns {string} Modified content with activation block
62
+ */
63
+ async injectActivation(agentContent, metadata = {}) {
64
+ try {
65
+ // Check if already has activation
66
+ if (agentContent.includes('<activation')) {
67
+ return agentContent;
68
+ }
69
+
70
+ // Extract the XML portion from markdown if needed
71
+ let xmlContent = agentContent;
72
+ let beforeXml = '';
73
+ let afterXml = '';
74
+
75
+ const xmlBlockMatch = agentContent.match(/([\s\S]*?)```xml\n([\s\S]*?)\n```([\s\S]*)/);
76
+ if (xmlBlockMatch) {
77
+ beforeXml = xmlBlockMatch[1] + '```xml\n';
78
+ xmlContent = xmlBlockMatch[2];
79
+ afterXml = '\n```' + xmlBlockMatch[3];
80
+ }
81
+
82
+ // Parse the agent XML
83
+ const parsed = await this.parser.parseStringPromise(xmlContent);
84
+
85
+ // Get the activation template
86
+ const activationBlock = await this.loadActivationTemplate();
87
+ if (!activationBlock) {
88
+ console.warn('Could not load activation template');
89
+ return agentContent;
90
+ }
91
+
92
+ // Find the agent node
93
+ if (
94
+ parsed.agent && // Insert activation as the first child
95
+ !parsed.agent.activation
96
+ ) {
97
+ // Ensure proper structure
98
+ if (!parsed.agent.$$) {
99
+ parsed.agent.$$ = [];
100
+ }
101
+
102
+ // Create the activation node with proper structure
103
+ const activationNode = {
104
+ '#name': 'activation',
105
+ $: { critical: '1' },
106
+ $$: activationBlock.$$,
107
+ };
108
+
109
+ // Insert at the beginning
110
+ parsed.agent.$$.unshift(activationNode);
111
+ }
112
+
113
+ // Convert back to XML
114
+ let modifiedXml = this.builder.buildObject(parsed);
115
+
116
+ // Fix indentation - xml2js doesn't maintain our exact formatting
117
+ // Add 2-space base indentation to match our style
118
+ const lines = modifiedXml.split('\n');
119
+ const indentedLines = lines.map((line) => {
120
+ if (line.trim() === '') return line;
121
+ if (line.startsWith('<agent')) return line; // Keep agent at column 0
122
+ return ' ' + line; // Indent everything else
123
+ });
124
+ modifiedXml = indentedLines.join('\n');
125
+
126
+ // Reconstruct the full content
127
+ return beforeXml + modifiedXml + afterXml;
128
+ } catch (error) {
129
+ console.error('Error injecting activation:', error);
130
+ return agentContent;
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Simple string-based injection (fallback method)
136
+ * This preserves formatting better than XML parsing
137
+ */
138
+ injectActivationSimple(agentContent, metadata = {}) {
139
+ // Check if already has activation
140
+ if (agentContent.includes('<activation')) {
141
+ return agentContent;
142
+ }
143
+
144
+ // Load template file
145
+ const templatePath = getSourcePath('utility', 'models', 'agent-activation-ide.xml');
146
+
147
+ try {
148
+ const templateContent = fs.readFileSync(templatePath, 'utf8');
149
+
150
+ // The file is now pure XML, use it directly with proper indentation
151
+ // Add 2 spaces of indentation for insertion into agent
152
+ let activationBlock = templateContent
153
+ .split('\n')
154
+ .map((line) => (line ? ' ' + line : ''))
155
+ .join('\n');
156
+
157
+ // Replace {agent-filename} with actual filename if metadata provided
158
+ if (metadata.module && metadata.name) {
159
+ const agentFilename = `${metadata.module}-${metadata.name}.md`;
160
+ activationBlock = activationBlock.replace('{agent-filename}', agentFilename);
161
+ }
162
+
163
+ // Find where to insert (after <agent> tag)
164
+ const agentMatch = agentContent.match(/(<agent[^>]*>)/);
165
+ if (!agentMatch) {
166
+ return agentContent;
167
+ }
168
+
169
+ const insertPos = agentMatch.index + agentMatch[0].length;
170
+
171
+ // Insert the activation block
172
+ const before = agentContent.slice(0, insertPos);
173
+ const after = agentContent.slice(insertPos);
174
+
175
+ return before + '\n' + activationBlock + after;
176
+ } catch (error) {
177
+ console.error('Error in simple injection:', error);
178
+ return agentContent;
179
+ }
180
+ }
181
+ }
182
+
183
+ module.exports = { XmlHandler };