bmad-method 5.1.3 → 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 -33
  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,452 @@
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 { XmlHandler } = require('../../../lib/xml-handler');
6
+ const { getProjectRoot, getSourcePath, getModulePath } = require('../../../lib/project-root');
7
+
8
+ /**
9
+ * Manages the installation, updating, and removal of BMAD modules.
10
+ * Handles module discovery, dependency resolution, configuration processing,
11
+ * and agent file management including XML activation block injection.
12
+ *
13
+ * @class ModuleManager
14
+ * @requires fs-extra
15
+ * @requires js-yaml
16
+ * @requires chalk
17
+ * @requires XmlHandler
18
+ *
19
+ * @example
20
+ * const manager = new ModuleManager();
21
+ * const modules = await manager.listAvailable();
22
+ * await manager.install('core-module', '/path/to/bmad');
23
+ */
24
+ class ModuleManager {
25
+ constructor() {
26
+ // Path to source modules directory
27
+ this.modulesSourcePath = getSourcePath('modules');
28
+ this.xmlHandler = new XmlHandler();
29
+ }
30
+
31
+ /**
32
+ * List all available modules
33
+ * @returns {Array} List of available modules with metadata
34
+ */
35
+ async listAvailable() {
36
+ const modules = [];
37
+
38
+ if (!(await fs.pathExists(this.modulesSourcePath))) {
39
+ console.warn(chalk.yellow('Warning: src/modules directory not found'));
40
+ return modules;
41
+ }
42
+
43
+ const entries = await fs.readdir(this.modulesSourcePath, { withFileTypes: true });
44
+
45
+ for (const entry of entries) {
46
+ if (entry.isDirectory()) {
47
+ const modulePath = path.join(this.modulesSourcePath, entry.name);
48
+ // Check for new structure first
49
+ const installerConfigPath = path.join(modulePath, '_module-installer', 'install-menu-config.yaml');
50
+ // Fallback to old structure
51
+ const configPath = path.join(modulePath, 'config.yaml');
52
+
53
+ const moduleInfo = {
54
+ id: entry.name,
55
+ path: modulePath,
56
+ name: entry.name.toUpperCase(),
57
+ description: 'BMAD Module',
58
+ version: '5.0.0',
59
+ };
60
+
61
+ // Try to read module config for metadata (prefer new location)
62
+ const configToRead = (await fs.pathExists(installerConfigPath)) ? installerConfigPath : configPath;
63
+ if (await fs.pathExists(configToRead)) {
64
+ try {
65
+ const configContent = await fs.readFile(configToRead, 'utf8');
66
+ const config = yaml.load(configContent);
67
+
68
+ // Use the code property as the id if available
69
+ if (config.code) {
70
+ moduleInfo.id = config.code;
71
+ }
72
+
73
+ moduleInfo.name = config.name || moduleInfo.name;
74
+ moduleInfo.description = config.description || moduleInfo.description;
75
+ moduleInfo.version = config.version || moduleInfo.version;
76
+ moduleInfo.dependencies = config.dependencies || [];
77
+ moduleInfo.defaultSelected = config.default_selected === undefined ? false : config.default_selected;
78
+ } catch (error) {
79
+ console.warn(`Failed to read config for ${entry.name}:`, error.message);
80
+ }
81
+ }
82
+
83
+ modules.push(moduleInfo);
84
+ }
85
+ }
86
+
87
+ return modules;
88
+ }
89
+
90
+ /**
91
+ * Install a module
92
+ * @param {string} moduleName - Name of the module to install
93
+ * @param {string} bmadDir - Target bmad directory
94
+ * @param {Function} fileTrackingCallback - Optional callback to track installed files
95
+ * @param {Object} options - Additional installation options
96
+ * @param {Array<string>} options.installedIDEs - Array of IDE codes that were installed
97
+ * @param {Object} options.moduleConfig - Module configuration from config collector
98
+ * @param {Object} options.logger - Logger instance for output
99
+ */
100
+ async install(moduleName, bmadDir, fileTrackingCallback = null, options = {}) {
101
+ const sourcePath = path.join(this.modulesSourcePath, moduleName);
102
+ const targetPath = path.join(bmadDir, moduleName);
103
+
104
+ // Check if source module exists
105
+ if (!(await fs.pathExists(sourcePath))) {
106
+ throw new Error(`Module '${moduleName}' not found in ${this.modulesSourcePath}`);
107
+ }
108
+
109
+ // Check if already installed
110
+ if (await fs.pathExists(targetPath)) {
111
+ console.log(chalk.yellow(`Module '${moduleName}' already installed, updating...`));
112
+ await fs.remove(targetPath);
113
+ }
114
+
115
+ // Copy module files with filtering
116
+ await this.copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback);
117
+
118
+ // Process agent files to inject activation block
119
+ await this.processAgentFiles(targetPath, moduleName);
120
+
121
+ // Call module-specific installer if it exists (unless explicitly skipped)
122
+ if (!options.skipModuleInstaller) {
123
+ await this.runModuleInstaller(moduleName, bmadDir, options);
124
+ }
125
+
126
+ return {
127
+ success: true,
128
+ module: moduleName,
129
+ path: targetPath,
130
+ };
131
+ }
132
+
133
+ /**
134
+ * Update an existing module
135
+ * @param {string} moduleName - Name of the module to update
136
+ * @param {string} bmadDir - Target bmad directory
137
+ * @param {boolean} force - Force update (overwrite modifications)
138
+ */
139
+ async update(moduleName, bmadDir, force = false) {
140
+ const sourcePath = path.join(this.modulesSourcePath, moduleName);
141
+ const targetPath = path.join(bmadDir, moduleName);
142
+
143
+ // Check if source module exists
144
+ if (!(await fs.pathExists(sourcePath))) {
145
+ throw new Error(`Module '${moduleName}' not found in source`);
146
+ }
147
+
148
+ // Check if module is installed
149
+ if (!(await fs.pathExists(targetPath))) {
150
+ throw new Error(`Module '${moduleName}' is not installed`);
151
+ }
152
+
153
+ if (force) {
154
+ // Force update - remove and reinstall
155
+ await fs.remove(targetPath);
156
+ return await this.install(moduleName, bmadDir);
157
+ } else {
158
+ // Selective update - preserve user modifications
159
+ await this.syncModule(sourcePath, targetPath);
160
+ }
161
+
162
+ return {
163
+ success: true,
164
+ module: moduleName,
165
+ path: targetPath,
166
+ };
167
+ }
168
+
169
+ /**
170
+ * Remove a module
171
+ * @param {string} moduleName - Name of the module to remove
172
+ * @param {string} bmadDir - Target bmad directory
173
+ */
174
+ async remove(moduleName, bmadDir) {
175
+ const targetPath = path.join(bmadDir, moduleName);
176
+
177
+ if (!(await fs.pathExists(targetPath))) {
178
+ throw new Error(`Module '${moduleName}' is not installed`);
179
+ }
180
+
181
+ await fs.remove(targetPath);
182
+
183
+ return {
184
+ success: true,
185
+ module: moduleName,
186
+ };
187
+ }
188
+
189
+ /**
190
+ * Check if a module is installed
191
+ * @param {string} moduleName - Name of the module
192
+ * @param {string} bmadDir - Target bmad directory
193
+ * @returns {boolean} True if module is installed
194
+ */
195
+ async isInstalled(moduleName, bmadDir) {
196
+ const targetPath = path.join(bmadDir, moduleName);
197
+ return await fs.pathExists(targetPath);
198
+ }
199
+
200
+ /**
201
+ * Get installed module info
202
+ * @param {string} moduleName - Name of the module
203
+ * @param {string} bmadDir - Target bmad directory
204
+ * @returns {Object|null} Module info or null if not installed
205
+ */
206
+ async getInstalledInfo(moduleName, bmadDir) {
207
+ const targetPath = path.join(bmadDir, moduleName);
208
+
209
+ if (!(await fs.pathExists(targetPath))) {
210
+ return null;
211
+ }
212
+
213
+ const configPath = path.join(targetPath, 'config.yaml');
214
+ const moduleInfo = {
215
+ id: moduleName,
216
+ path: targetPath,
217
+ installed: true,
218
+ };
219
+
220
+ if (await fs.pathExists(configPath)) {
221
+ try {
222
+ const configContent = await fs.readFile(configPath, 'utf8');
223
+ const config = yaml.load(configContent);
224
+ Object.assign(moduleInfo, config);
225
+ } catch (error) {
226
+ console.warn(`Failed to read installed module config:`, error.message);
227
+ }
228
+ }
229
+
230
+ return moduleInfo;
231
+ }
232
+
233
+ /**
234
+ * Copy module with filtering for localskip agents
235
+ * @param {string} sourcePath - Source module path
236
+ * @param {string} targetPath - Target module path
237
+ */
238
+ async copyModuleWithFiltering(sourcePath, targetPath, fileTrackingCallback = null) {
239
+ // Get all files in source
240
+ const sourceFiles = await this.getFileList(sourcePath);
241
+
242
+ for (const file of sourceFiles) {
243
+ // Skip sub-modules directory - these are IDE-specific and handled separately
244
+ if (file.startsWith('sub-modules/')) {
245
+ continue;
246
+ }
247
+
248
+ // Skip _module-installer directory - it's only needed at install time
249
+ if (file.startsWith('_module-installer/')) {
250
+ continue;
251
+ }
252
+
253
+ // Skip config.yaml templates - we'll generate clean ones with actual values
254
+ if (file === 'config.yaml' || file.endsWith('/config.yaml')) {
255
+ continue;
256
+ }
257
+
258
+ const sourceFile = path.join(sourcePath, file);
259
+ const targetFile = path.join(targetPath, file);
260
+
261
+ // Check if this is an agent file
262
+ if (file.startsWith('agents/') && file.endsWith('.md')) {
263
+ // Read the file to check for localskip
264
+ const content = await fs.readFile(sourceFile, 'utf8');
265
+
266
+ // Check for localskip="true" in the agent tag
267
+ const agentMatch = content.match(/<agent[^>]*\slocalskip="true"[^>]*>/);
268
+ if (agentMatch) {
269
+ console.log(chalk.dim(` Skipping web-only agent: ${path.basename(file)}`));
270
+ continue; // Skip this agent
271
+ }
272
+ }
273
+
274
+ // Copy the file
275
+ await fs.ensureDir(path.dirname(targetFile));
276
+ await fs.copy(sourceFile, targetFile, { overwrite: true });
277
+
278
+ // Track the file if callback provided
279
+ if (fileTrackingCallback) {
280
+ fileTrackingCallback(targetFile);
281
+ }
282
+ }
283
+ }
284
+
285
+ /**
286
+ * Process agent files to inject activation block
287
+ * @param {string} modulePath - Path to installed module
288
+ * @param {string} moduleName - Module name
289
+ */
290
+ async processAgentFiles(modulePath, moduleName) {
291
+ const agentsPath = path.join(modulePath, 'agents');
292
+
293
+ // Check if agents directory exists
294
+ if (!(await fs.pathExists(agentsPath))) {
295
+ return; // No agents to process
296
+ }
297
+
298
+ // Get all agent files
299
+ const agentFiles = await fs.readdir(agentsPath);
300
+
301
+ for (const agentFile of agentFiles) {
302
+ if (!agentFile.endsWith('.md')) continue;
303
+
304
+ const agentPath = path.join(agentsPath, agentFile);
305
+ let content = await fs.readFile(agentPath, 'utf8');
306
+
307
+ // Check if content has agent XML and no activation block
308
+ if (content.includes('<agent') && !content.includes('<activation')) {
309
+ // Inject the activation block using XML handler
310
+ content = this.xmlHandler.injectActivationSimple(content);
311
+ await fs.writeFile(agentPath, content, 'utf8');
312
+ }
313
+ }
314
+ }
315
+
316
+ /**
317
+ * Run module-specific installer if it exists
318
+ * @param {string} moduleName - Name of the module
319
+ * @param {string} bmadDir - Target bmad directory
320
+ * @param {Object} options - Installation options
321
+ */
322
+ async runModuleInstaller(moduleName, bmadDir, options = {}) {
323
+ // Special handling for core module - it's in src/core not src/modules
324
+ let sourcePath;
325
+ if (moduleName === 'core') {
326
+ sourcePath = getSourcePath('core');
327
+ } else {
328
+ sourcePath = path.join(this.modulesSourcePath, moduleName);
329
+ }
330
+
331
+ const installerPath = path.join(sourcePath, '_module-installer', 'installer.js');
332
+
333
+ // Check if module has a custom installer
334
+ if (!(await fs.pathExists(installerPath))) {
335
+ return; // No custom installer
336
+ }
337
+
338
+ try {
339
+ // Load the module installer
340
+ const moduleInstaller = require(installerPath);
341
+
342
+ if (typeof moduleInstaller.install === 'function') {
343
+ // Get project root (parent of bmad directory)
344
+ const projectRoot = path.dirname(bmadDir);
345
+
346
+ // Prepare logger (use console if not provided)
347
+ const logger = options.logger || {
348
+ log: console.log,
349
+ error: console.error,
350
+ warn: console.warn,
351
+ };
352
+
353
+ // Call the module installer
354
+ const result = await moduleInstaller.install({
355
+ projectRoot,
356
+ config: options.moduleConfig || {},
357
+ installedIDEs: options.installedIDEs || [],
358
+ logger,
359
+ });
360
+
361
+ if (!result) {
362
+ console.warn(chalk.yellow(`Module installer for ${moduleName} returned false`));
363
+ }
364
+ }
365
+ } catch (error) {
366
+ console.error(chalk.red(`Error running module installer for ${moduleName}: ${error.message}`));
367
+ }
368
+ }
369
+
370
+ /**
371
+ * Private: Process module configuration
372
+ * @param {string} modulePath - Path to installed module
373
+ * @param {string} moduleName - Module name
374
+ */
375
+ async processModuleConfig(modulePath, moduleName) {
376
+ const configPath = path.join(modulePath, 'config.yaml');
377
+
378
+ if (await fs.pathExists(configPath)) {
379
+ try {
380
+ let configContent = await fs.readFile(configPath, 'utf8');
381
+
382
+ // Replace path placeholders
383
+ configContent = configContent.replaceAll('{project-root}', `bmad/${moduleName}`);
384
+ configContent = configContent.replaceAll('{module}', moduleName);
385
+
386
+ await fs.writeFile(configPath, configContent, 'utf8');
387
+ } catch (error) {
388
+ console.warn(`Failed to process module config:`, error.message);
389
+ }
390
+ }
391
+ }
392
+
393
+ /**
394
+ * Private: Sync module files (preserving user modifications)
395
+ * @param {string} sourcePath - Source module path
396
+ * @param {string} targetPath - Target module path
397
+ */
398
+ async syncModule(sourcePath, targetPath) {
399
+ // Get list of all source files
400
+ const sourceFiles = await this.getFileList(sourcePath);
401
+
402
+ for (const file of sourceFiles) {
403
+ const sourceFile = path.join(sourcePath, file);
404
+ const targetFile = path.join(targetPath, file);
405
+
406
+ // Check if target file exists and has been modified
407
+ if (await fs.pathExists(targetFile)) {
408
+ const sourceStats = await fs.stat(sourceFile);
409
+ const targetStats = await fs.stat(targetFile);
410
+
411
+ // Skip if target is newer (user modified)
412
+ if (targetStats.mtime > sourceStats.mtime) {
413
+ continue;
414
+ }
415
+ }
416
+
417
+ // Copy file
418
+ await fs.ensureDir(path.dirname(targetFile));
419
+ await fs.copy(sourceFile, targetFile, { overwrite: true });
420
+ }
421
+ }
422
+
423
+ /**
424
+ * Private: Get list of all files in a directory
425
+ * @param {string} dir - Directory path
426
+ * @param {string} baseDir - Base directory for relative paths
427
+ * @returns {Array} List of relative file paths
428
+ */
429
+ async getFileList(dir, baseDir = dir) {
430
+ const files = [];
431
+ const entries = await fs.readdir(dir, { withFileTypes: true });
432
+
433
+ for (const entry of entries) {
434
+ const fullPath = path.join(dir, entry.name);
435
+
436
+ if (entry.isDirectory()) {
437
+ // Skip _module-installer directories
438
+ if (entry.name === '_module-installer') {
439
+ continue;
440
+ }
441
+ const subFiles = await this.getFileList(fullPath, baseDir);
442
+ files.push(...subFiles);
443
+ } else {
444
+ files.push(path.relative(baseDir, fullPath));
445
+ }
446
+ }
447
+
448
+ return files;
449
+ }
450
+ }
451
+
452
+ module.exports = { ModuleManager };
@@ -0,0 +1,206 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+
4
+ const AgentPartyGenerator = {
5
+ /**
6
+ * Generate agent-party.xml content
7
+ * @param {Array} agentDetails - Array of agent details
8
+ * @param {Object} options - Generation options
9
+ * @returns {string} XML content
10
+ */
11
+ generateAgentParty(agentDetails, options = {}) {
12
+ const { forWeb = false } = options;
13
+
14
+ // Group agents by module
15
+ const agentsByModule = {
16
+ bmm: [],
17
+ cis: [],
18
+ core: [],
19
+ custom: [],
20
+ };
21
+
22
+ for (const agent of agentDetails) {
23
+ const moduleKey = agentsByModule[agent.module] ? agent.module : 'custom';
24
+ agentsByModule[moduleKey].push(agent);
25
+ }
26
+
27
+ // Build XML content
28
+ let xmlContent = `<!-- Powered by BMAD-CORE™ -->
29
+ <!-- Agent Manifest - Generated during BMAD ${forWeb ? 'bundling' : 'installation'} -->
30
+ <!-- This file contains a summary of all ${forWeb ? 'bundled' : 'installed'} agents for quick reference -->
31
+ <manifest id="bmad/_cfg/agent-party.xml" version="1.0" generated="${new Date().toISOString()}">
32
+ <description>
33
+ Complete roster of ${forWeb ? 'bundled' : 'installed'} BMAD agents with summarized personas for efficient multi-agent orchestration.
34
+ Used by party-mode and other multi-agent coordination features.
35
+ </description>
36
+ `;
37
+
38
+ // Add agents by module
39
+ for (const [module, agents] of Object.entries(agentsByModule)) {
40
+ if (agents.length === 0) continue;
41
+
42
+ const moduleTitle =
43
+ module === 'bmm' ? 'BMM Module' : module === 'cis' ? 'CIS Module' : module === 'core' ? 'Core Module' : 'Custom Module';
44
+
45
+ xmlContent += `\n <!-- ${moduleTitle} Agents -->\n`;
46
+
47
+ for (const agent of agents) {
48
+ xmlContent += ` <agent id="${agent.id}" name="${agent.name}" title="${agent.title || ''}" icon="${agent.icon || ''}">
49
+ <persona>
50
+ <role>${this.escapeXml(agent.role || '')}</role>
51
+ <identity>${this.escapeXml(agent.identity || '')}</identity>
52
+ <communication_style>${this.escapeXml(agent.communicationStyle || '')}</communication_style>
53
+ <principles>${agent.principles || ''}</principles>
54
+ </persona>
55
+ </agent>\n`;
56
+ }
57
+ }
58
+
59
+ // Add statistics
60
+ const totalAgents = agentDetails.length;
61
+ const moduleList = Object.keys(agentsByModule)
62
+ .filter((m) => agentsByModule[m].length > 0)
63
+ .join(', ');
64
+
65
+ xmlContent += `\n <statistics>
66
+ <total_agents>${totalAgents}</total_agents>
67
+ <modules>${moduleList}</modules>
68
+ <last_updated>${new Date().toISOString()}</last_updated>
69
+ </statistics>
70
+ </manifest>`;
71
+
72
+ return xmlContent;
73
+ },
74
+
75
+ /**
76
+ * Extract agent details from XML content
77
+ * @param {string} content - Full agent file content (markdown with XML)
78
+ * @param {string} moduleName - Module name
79
+ * @param {string} agentName - Agent name
80
+ * @returns {Object} Agent details
81
+ */
82
+ extractAgentDetails(content, moduleName, agentName) {
83
+ try {
84
+ // Extract agent XML block
85
+ const agentMatch = content.match(/<agent[^>]*>([\s\S]*?)<\/agent>/);
86
+ if (!agentMatch) return null;
87
+
88
+ const agentXml = agentMatch[0];
89
+
90
+ // Extract attributes from opening tag
91
+ const nameMatch = agentXml.match(/name="([^"]*)"/);
92
+ const titleMatch = agentXml.match(/title="([^"]*)"/);
93
+ const iconMatch = agentXml.match(/icon="([^"]*)"/);
94
+
95
+ // Extract persona elements - now we just copy them as-is
96
+ const roleMatch = agentXml.match(/<role>([\s\S]*?)<\/role>/);
97
+ const identityMatch = agentXml.match(/<identity>([\s\S]*?)<\/identity>/);
98
+ const styleMatch = agentXml.match(/<communication_style>([\s\S]*?)<\/communication_style>/);
99
+ const principlesMatch = agentXml.match(/<principles>([\s\S]*?)<\/principles>/);
100
+
101
+ return {
102
+ id: `bmad/${moduleName}/agents/${agentName}.md`,
103
+ name: nameMatch ? nameMatch[1] : agentName,
104
+ title: titleMatch ? titleMatch[1] : 'Agent',
105
+ icon: iconMatch ? iconMatch[1] : '🤖',
106
+ module: moduleName,
107
+ role: roleMatch ? roleMatch[1].trim() : '',
108
+ identity: identityMatch ? identityMatch[1].trim() : '',
109
+ communicationStyle: styleMatch ? styleMatch[1].trim() : '',
110
+ principles: principlesMatch ? principlesMatch[1].trim() : '',
111
+ };
112
+ } catch (error) {
113
+ console.error(`Error extracting details for agent ${agentName}:`, error);
114
+ return null;
115
+ }
116
+ },
117
+
118
+ /**
119
+ * Extract attribute from XML tag
120
+ */
121
+ extractAttribute(xml, tagName, attrName) {
122
+ const regex = new RegExp(`<${tagName}[^>]*\\s${attrName}="([^"]*)"`, 'i');
123
+ const match = xml.match(regex);
124
+ return match ? match[1] : '';
125
+ },
126
+
127
+ /**
128
+ * Escape XML special characters
129
+ */
130
+ escapeXml(text) {
131
+ if (!text) return '';
132
+ return text
133
+ .replaceAll('&', '&amp;')
134
+ .replaceAll('<', '&lt;')
135
+ .replaceAll('>', '&gt;')
136
+ .replaceAll('"', '&quot;')
137
+ .replaceAll("'", '&apos;');
138
+ },
139
+
140
+ /**
141
+ * Apply config overrides to agent details
142
+ * @param {Object} details - Original agent details
143
+ * @param {string} configContent - Config file content
144
+ * @returns {Object} Agent details with overrides applied
145
+ */
146
+ applyConfigOverrides(details, configContent) {
147
+ try {
148
+ // Extract agent-config XML block
149
+ const configMatch = configContent.match(/<agent-config>([\s\S]*?)<\/agent-config>/);
150
+ if (!configMatch) return details;
151
+
152
+ const configXml = configMatch[0];
153
+
154
+ // Extract override values
155
+ const nameMatch = configXml.match(/<name>([\s\S]*?)<\/name>/);
156
+ const titleMatch = configXml.match(/<title>([\s\S]*?)<\/title>/);
157
+ const roleMatch = configXml.match(/<role>([\s\S]*?)<\/role>/);
158
+ const identityMatch = configXml.match(/<identity>([\s\S]*?)<\/identity>/);
159
+ const styleMatch = configXml.match(/<communication_style>([\s\S]*?)<\/communication_style>/);
160
+ const principlesMatch = configXml.match(/<principles>([\s\S]*?)<\/principles>/);
161
+
162
+ // Apply overrides only if values are non-empty
163
+ if (nameMatch && nameMatch[1].trim()) {
164
+ details.name = nameMatch[1].trim();
165
+ }
166
+
167
+ if (titleMatch && titleMatch[1].trim()) {
168
+ details.title = titleMatch[1].trim();
169
+ }
170
+
171
+ if (roleMatch && roleMatch[1].trim()) {
172
+ details.role = roleMatch[1].trim();
173
+ }
174
+
175
+ if (identityMatch && identityMatch[1].trim()) {
176
+ details.identity = identityMatch[1].trim();
177
+ }
178
+
179
+ if (styleMatch && styleMatch[1].trim()) {
180
+ details.communicationStyle = styleMatch[1].trim();
181
+ }
182
+
183
+ if (principlesMatch && principlesMatch[1].trim()) {
184
+ // Principles are now just copied as-is (narrative paragraph)
185
+ details.principles = principlesMatch[1].trim();
186
+ }
187
+
188
+ return details;
189
+ } catch (error) {
190
+ console.error(`Error applying config overrides:`, error);
191
+ return details;
192
+ }
193
+ },
194
+
195
+ /**
196
+ * Write agent-party.xml to file
197
+ */
198
+ async writeAgentParty(filePath, agentDetails, options = {}) {
199
+ const content = this.generateAgentParty(agentDetails, options);
200
+ await fs.ensureDir(path.dirname(filePath));
201
+ await fs.writeFile(filePath, content, 'utf8');
202
+ return content;
203
+ },
204
+ };
205
+
206
+ module.exports = { AgentPartyGenerator };