observer-ggboy-bmad-method 6.0.0-alpha.23

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 (604) hide show
  1. package/.coderabbit.yaml +40 -0
  2. package/.github/CODE_OF_CONDUCT.md +128 -0
  3. package/.github/FUNDING.yaml +15 -0
  4. package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  6. package/.github/ISSUE_TEMPLATE/issue.md +32 -0
  7. package/.github/scripts/discord-helpers.sh +34 -0
  8. package/.github/workflows/bundle-latest.yaml +330 -0
  9. package/.github/workflows/discord.yaml +90 -0
  10. package/.github/workflows/docs.yaml +63 -0
  11. package/.github/workflows/manual-release.yaml +190 -0
  12. package/.github/workflows/quality.yaml +115 -0
  13. package/.health-status.json +7 -0
  14. package/.husky/pre-commit +20 -0
  15. package/.markdownlint-cli2.yaml +41 -0
  16. package/.nvmrc +1 -0
  17. package/.prettierignore +9 -0
  18. package/.vscode/settings.json +97 -0
  19. package/CHANGELOG.md +1394 -0
  20. package/CNAME +1 -0
  21. package/CONTRIBUTING.md +167 -0
  22. package/CONTRIBUTORS.md +32 -0
  23. package/LICENSE +30 -0
  24. package/README.md +100 -0
  25. package/SECURITY.md +85 -0
  26. package/TRADEMARK.md +55 -0
  27. package/Wordmark.png +0 -0
  28. package/banner-bmad-method.png +0 -0
  29. package/bmad-method-6.0.0-alpha.23.tgz +0 -0
  30. package/docs/404.md +9 -0
  31. package/docs/_README_WORKFLOW_DIAGRAMS.md +40 -0
  32. package/docs/_STYLE_GUIDE.md +367 -0
  33. package/docs/_archive/customize-workflows.md +30 -0
  34. package/docs/_archive/getting-started-bmadv4.md +247 -0
  35. package/docs/_archive/vendor-workflows.md +52 -0
  36. package/docs/downloads.md +72 -0
  37. package/docs/explanation/agents/barry-quick-flow.md +328 -0
  38. package/docs/explanation/agents/index.md +19 -0
  39. package/docs/explanation/architecture/four-phases.md +107 -0
  40. package/docs/explanation/architecture/preventing-agent-conflicts.md +111 -0
  41. package/docs/explanation/architecture/why-solutioning-matters.md +75 -0
  42. package/docs/explanation/bmm/index.md +131 -0
  43. package/docs/explanation/core/index.md +18 -0
  44. package/docs/explanation/core-concepts/agent-roles.md +179 -0
  45. package/docs/explanation/core-concepts/index.md +35 -0
  46. package/docs/explanation/core-concepts/what-are-agents.md +97 -0
  47. package/docs/explanation/core-concepts/what-are-modules.md +85 -0
  48. package/docs/explanation/core-concepts/what-are-workflows.md +204 -0
  49. package/docs/explanation/faq/brownfield-faq.md +73 -0
  50. package/docs/explanation/faq/getting-started-faq.md +67 -0
  51. package/docs/explanation/faq/implementation-faq.md +52 -0
  52. package/docs/explanation/faq/index.md +16 -0
  53. package/docs/explanation/faq/levels-and-tracks-faq.md +52 -0
  54. package/docs/explanation/faq/planning-faq.md +41 -0
  55. package/docs/explanation/faq/tools-faq.md +277 -0
  56. package/docs/explanation/faq/workflows-faq.md +61 -0
  57. package/docs/explanation/features/advanced-elicitation.md +95 -0
  58. package/docs/explanation/features/brainstorming-techniques.md +92 -0
  59. package/docs/explanation/features/party-mode.md +95 -0
  60. package/docs/explanation/features/quick-flow.md +149 -0
  61. package/docs/explanation/features/tea-overview.md +410 -0
  62. package/docs/explanation/features/web-bundles.md +34 -0
  63. package/docs/explanation/philosophy/facilitation-over-generation.md +333 -0
  64. package/docs/explanation/philosophy/testing-as-engineering.md +112 -0
  65. package/docs/explanation/tea/engagement-models.md +710 -0
  66. package/docs/explanation/tea/fixture-architecture.md +457 -0
  67. package/docs/explanation/tea/knowledge-base-system.md +554 -0
  68. package/docs/explanation/tea/network-first-patterns.md +853 -0
  69. package/docs/explanation/tea/risk-based-testing.md +586 -0
  70. package/docs/explanation/tea/test-quality-standards.md +907 -0
  71. package/docs/how-to/brownfield/add-feature-to-existing.md +74 -0
  72. package/docs/how-to/brownfield/document-existing-project.md +66 -0
  73. package/docs/how-to/brownfield/index.md +84 -0
  74. package/docs/how-to/brownfield/quick-fix-in-brownfield.md +77 -0
  75. package/docs/how-to/brownfield/use-tea-for-enterprise.md +525 -0
  76. package/docs/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
  77. package/docs/how-to/customization/customize-agents.md +212 -0
  78. package/docs/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
  79. package/docs/how-to/customization/index.md +23 -0
  80. package/docs/how-to/customization/integrate-playwright-utils.md +813 -0
  81. package/docs/how-to/customization/shard-large-documents.md +101 -0
  82. package/docs/how-to/get-answers-about-bmad.md +102 -0
  83. package/docs/how-to/installation/index.md +12 -0
  84. package/docs/how-to/installation/install-bmad.md +111 -0
  85. package/docs/how-to/installation/install-custom-modules.md +118 -0
  86. package/docs/how-to/installation/upgrade-to-v6.md +131 -0
  87. package/docs/how-to/workflows/bmgd-quick-flow.md +156 -0
  88. package/docs/how-to/workflows/conduct-research.md +97 -0
  89. package/docs/how-to/workflows/create-architecture.md +119 -0
  90. package/docs/how-to/workflows/create-epics-and-stories.md +109 -0
  91. package/docs/how-to/workflows/create-prd.md +91 -0
  92. package/docs/how-to/workflows/create-product-brief.md +94 -0
  93. package/docs/how-to/workflows/create-story.md +102 -0
  94. package/docs/how-to/workflows/create-ux-design.md +100 -0
  95. package/docs/how-to/workflows/implement-story.md +97 -0
  96. package/docs/how-to/workflows/quick-spec.md +122 -0
  97. package/docs/how-to/workflows/run-atdd.md +436 -0
  98. package/docs/how-to/workflows/run-automate.md +653 -0
  99. package/docs/how-to/workflows/run-brainstorming-session.md +73 -0
  100. package/docs/how-to/workflows/run-code-review.md +89 -0
  101. package/docs/how-to/workflows/run-implementation-readiness.md +125 -0
  102. package/docs/how-to/workflows/run-nfr-assess.md +679 -0
  103. package/docs/how-to/workflows/run-sprint-planning.md +94 -0
  104. package/docs/how-to/workflows/run-test-design.md +135 -0
  105. package/docs/how-to/workflows/run-test-review.md +605 -0
  106. package/docs/how-to/workflows/run-trace.md +883 -0
  107. package/docs/how-to/workflows/setup-ci.md +712 -0
  108. package/docs/how-to/workflows/setup-party-mode.md +89 -0
  109. package/docs/how-to/workflows/setup-test-framework.md +98 -0
  110. package/docs/index.md +63 -0
  111. package/docs/reference/agents/index.md +109 -0
  112. package/docs/reference/configuration/core-tasks.md +67 -0
  113. package/docs/reference/configuration/global-config.md +28 -0
  114. package/docs/reference/glossary/index.md +159 -0
  115. package/docs/reference/tea/commands.md +276 -0
  116. package/docs/reference/tea/configuration.md +678 -0
  117. package/docs/reference/tea/knowledge-base.md +340 -0
  118. package/docs/reference/workflows/core-workflows.md +32 -0
  119. package/docs/reference/workflows/document-project.md +73 -0
  120. package/docs/reference/workflows/index.md +12 -0
  121. package/docs/tutorials/getting-started/getting-started-bmadv6.md +246 -0
  122. package/docs/tutorials/getting-started/images/workflow-method-greenfield.excalidraw +5034 -0
  123. package/docs/tutorials/getting-started/images/workflow-method-greenfield.svg +4 -0
  124. package/docs/tutorials/getting-started/images/workflow-overview.jpg +0 -0
  125. package/docs/tutorials/getting-started/tea-lite-quickstart.md +444 -0
  126. package/docs/tutorials/getting-started/workflow-overview.jpg +0 -0
  127. package/eslint.config.mjs +152 -0
  128. package/package.json +117 -0
  129. package/prettier.config.mjs +32 -0
  130. package/src/bmm/_module-installer/installer.js +48 -0
  131. package/src/bmm/_module-installer/platform-specifics/claude-code.js +35 -0
  132. package/src/bmm/_module-installer/platform-specifics/windsurf.js +32 -0
  133. package/src/bmm/agents/analyst.agent.yaml +36 -0
  134. package/src/bmm/agents/architect.agent.yaml +28 -0
  135. package/src/bmm/agents/dev.agent.yaml +38 -0
  136. package/src/bmm/agents/pm.agent.yaml +46 -0
  137. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  138. package/src/bmm/agents/sm.agent.yaml +36 -0
  139. package/src/bmm/agents/tea.agent.yaml +63 -0
  140. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  141. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +45 -0
  142. package/src/bmm/agents/ux-designer.agent.yaml +26 -0
  143. package/src/bmm/data/project-context-template.md +26 -0
  144. package/src/bmm/module-help.csv +32 -0
  145. package/src/bmm/module.yaml +44 -0
  146. package/src/bmm/sub-modules/claude-code/config.yaml +4 -0
  147. package/src/bmm/sub-modules/claude-code/injections.yaml +242 -0
  148. package/src/bmm/sub-modules/claude-code/readme.md +87 -0
  149. package/src/bmm/teams/default-party.csv +21 -0
  150. package/src/bmm/teams/team-fullstack.yaml +12 -0
  151. package/src/bmm/testarch/knowledge/adr-quality-readiness-checklist.md +350 -0
  152. package/src/bmm/testarch/knowledge/api-request.md +442 -0
  153. package/src/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
  154. package/src/bmm/testarch/knowledge/auth-session.md +552 -0
  155. package/src/bmm/testarch/knowledge/burn-in.md +273 -0
  156. package/src/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  157. package/src/bmm/testarch/knowledge/component-tdd.md +486 -0
  158. package/src/bmm/testarch/knowledge/contract-testing.md +957 -0
  159. package/src/bmm/testarch/knowledge/data-factories.md +500 -0
  160. package/src/bmm/testarch/knowledge/email-auth.md +721 -0
  161. package/src/bmm/testarch/knowledge/error-handling.md +725 -0
  162. package/src/bmm/testarch/knowledge/feature-flags.md +750 -0
  163. package/src/bmm/testarch/knowledge/file-utils.md +463 -0
  164. package/src/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  165. package/src/bmm/testarch/knowledge/fixtures-composition.md +382 -0
  166. package/src/bmm/testarch/knowledge/intercept-network-call.md +430 -0
  167. package/src/bmm/testarch/knowledge/log.md +429 -0
  168. package/src/bmm/testarch/knowledge/network-error-monitor.md +405 -0
  169. package/src/bmm/testarch/knowledge/network-first.md +486 -0
  170. package/src/bmm/testarch/knowledge/network-recorder.md +527 -0
  171. package/src/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  172. package/src/bmm/testarch/knowledge/overview.md +286 -0
  173. package/src/bmm/testarch/knowledge/playwright-config.md +730 -0
  174. package/src/bmm/testarch/knowledge/probability-impact.md +601 -0
  175. package/src/bmm/testarch/knowledge/recurse.md +421 -0
  176. package/src/bmm/testarch/knowledge/risk-governance.md +615 -0
  177. package/src/bmm/testarch/knowledge/selective-testing.md +732 -0
  178. package/src/bmm/testarch/knowledge/selector-resilience.md +527 -0
  179. package/src/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  180. package/src/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  181. package/src/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  182. package/src/bmm/testarch/knowledge/test-quality.md +664 -0
  183. package/src/bmm/testarch/knowledge/timing-debugging.md +372 -0
  184. package/src/bmm/testarch/knowledge/visual-debugging.md +524 -0
  185. package/src/bmm/testarch/tea-index.csv +35 -0
  186. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  187. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  188. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  189. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  190. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  191. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  192. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  193. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
  194. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
  195. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  196. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  197. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  198. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  199. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  200. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  201. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  202. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  203. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
  204. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  205. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  206. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  207. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  208. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  209. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  210. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  211. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  212. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  213. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
  214. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  215. package/src/bmm/workflows/1-analysis/research/workflow.md +173 -0
  216. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  217. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  218. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  219. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  220. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  221. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  222. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  223. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  224. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  225. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  226. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  227. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  228. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  229. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  230. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
  231. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  232. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
  233. package/src/bmm/workflows/2-plan-workflows/prd/data/domain-complexity.csv +13 -0
  234. package/src/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md +197 -0
  235. package/src/bmm/workflows/2-plan-workflows/prd/data/project-types.csv +11 -0
  236. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01-init.md +191 -0
  237. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01b-continue.md +153 -0
  238. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md +224 -0
  239. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-03-success.md +226 -0
  240. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md +213 -0
  241. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md +207 -0
  242. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-06-innovation.md +226 -0
  243. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-07-project-type.md +237 -0
  244. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-08-scoping.md +228 -0
  245. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-09-functional.md +231 -0
  246. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
  247. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md +217 -0
  248. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md +124 -0
  249. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  250. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  251. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md +249 -0
  252. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md +253 -0
  253. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md +168 -0
  254. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  255. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  256. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  257. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  258. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  259. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  260. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  261. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  262. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  263. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  264. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  265. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  266. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  267. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md +231 -0
  268. package/src/bmm/workflows/2-plan-workflows/prd/templates/prd-template.md +10 -0
  269. package/src/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md +433 -0
  270. package/src/bmm/workflows/2-plan-workflows/prd/workflow.md +150 -0
  271. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
  272. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  273. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  274. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  275. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  276. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +135 -0
  277. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  278. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
  279. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  280. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
  281. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  282. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  283. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
  284. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  285. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
  286. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  287. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  288. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  289. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  290. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
  291. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
  292. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  293. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  294. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  295. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
  296. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  297. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
  298. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  299. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  300. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +51 -0
  301. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  302. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
  303. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +60 -0
  304. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  305. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
  306. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  307. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +61 -0
  308. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  309. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  310. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +27 -0
  311. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
  312. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +58 -0
  313. package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  314. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
  315. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  316. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +54 -0
  317. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
  318. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +36 -0
  319. package/src/bmm/workflows/bmad-quick-flow/quick-dev/data/project-levels.yaml +59 -0
  320. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +156 -0
  321. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
  322. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -0
  323. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
  324. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
  325. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +140 -0
  326. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
  327. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
  328. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -0
  329. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
  330. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +191 -0
  331. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  332. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  333. package/src/bmm/workflows/document-project/checklist.md +245 -0
  334. package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  335. package/src/bmm/workflows/document-project/instructions.md +221 -0
  336. package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  337. package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
  338. package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  339. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  340. package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  341. package/src/bmm/workflows/document-project/workflow.yaml +30 -0
  342. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  343. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  344. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  345. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  346. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
  347. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
  348. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
  349. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
  350. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
  351. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
  352. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
  353. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
  354. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
  355. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
  356. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
  357. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
  358. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
  359. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
  360. package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
  361. package/src/bmm/workflows/testarch/atdd/checklist.md +374 -0
  362. package/src/bmm/workflows/testarch/atdd/instructions.md +806 -0
  363. package/src/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
  364. package/src/bmm/workflows/testarch/automate/checklist.md +582 -0
  365. package/src/bmm/workflows/testarch/automate/instructions.md +1324 -0
  366. package/src/bmm/workflows/testarch/automate/workflow.yaml +54 -0
  367. package/src/bmm/workflows/testarch/ci/checklist.md +247 -0
  368. package/src/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
  369. package/src/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
  370. package/src/bmm/workflows/testarch/ci/instructions.md +536 -0
  371. package/src/bmm/workflows/testarch/ci/workflow.yaml +47 -0
  372. package/src/bmm/workflows/testarch/framework/checklist.md +320 -0
  373. package/src/bmm/workflows/testarch/framework/instructions.md +481 -0
  374. package/src/bmm/workflows/testarch/framework/workflow.yaml +49 -0
  375. package/src/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
  376. package/src/bmm/workflows/testarch/nfr-assess/instructions.md +726 -0
  377. package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +461 -0
  378. package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
  379. package/src/bmm/workflows/testarch/test-design/checklist.md +407 -0
  380. package/src/bmm/workflows/testarch/test-design/instructions.md +1158 -0
  381. package/src/bmm/workflows/testarch/test-design/test-design-architecture-template.md +213 -0
  382. package/src/bmm/workflows/testarch/test-design/test-design-qa-template.md +286 -0
  383. package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
  384. package/src/bmm/workflows/testarch/test-design/workflow.yaml +71 -0
  385. package/src/bmm/workflows/testarch/test-review/checklist.md +472 -0
  386. package/src/bmm/workflows/testarch/test-review/instructions.md +628 -0
  387. package/src/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
  388. package/src/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
  389. package/src/bmm/workflows/testarch/trace/checklist.md +642 -0
  390. package/src/bmm/workflows/testarch/trace/instructions.md +1030 -0
  391. package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
  392. package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
  393. package/src/core/_module-installer/installer.js +60 -0
  394. package/src/core/agents/bmad-master.agent.yaml +29 -0
  395. package/src/core/module-help.csv +9 -0
  396. package/src/core/module.yaml +25 -0
  397. package/src/core/resources/excalidraw/README.md +160 -0
  398. package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
  399. package/src/core/resources/excalidraw/library-loader.md +50 -0
  400. package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
  401. package/src/core/tasks/editorial-review-prose.xml +100 -0
  402. package/src/core/tasks/editorial-review-structure.xml +209 -0
  403. package/src/core/tasks/help.md +62 -0
  404. package/src/core/tasks/index-docs.xml +65 -0
  405. package/src/core/tasks/review-adversarial-general.xml +48 -0
  406. package/src/core/tasks/shard-doc.xml +109 -0
  407. package/src/core/tasks/workflow.xml +235 -0
  408. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  409. package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
  410. package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
  411. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  412. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  413. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  414. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  415. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  416. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  417. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  418. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  419. package/src/core/workflows/brainstorming/template.md +15 -0
  420. package/src/core/workflows/brainstorming/workflow.md +58 -0
  421. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  422. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  423. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
  424. package/src/core/workflows/party-mode/workflow.md +194 -0
  425. package/src/utility/agent-components/activation-rules.txt +6 -0
  426. package/src/utility/agent-components/activation-steps.txt +14 -0
  427. package/src/utility/agent-components/agent-command-header.md +1 -0
  428. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  429. package/src/utility/agent-components/handler-action.txt +4 -0
  430. package/src/utility/agent-components/handler-data.txt +5 -0
  431. package/src/utility/agent-components/handler-exec.txt +6 -0
  432. package/src/utility/agent-components/handler-multi.txt +14 -0
  433. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  434. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  435. package/src/utility/agent-components/handler-workflow.txt +10 -0
  436. package/src/utility/agent-components/menu-handlers.txt +6 -0
  437. package/test/README.md +295 -0
  438. package/test/adversarial-review-tests/README.md +56 -0
  439. package/test/adversarial-review-tests/sample-content.md +46 -0
  440. package/test/adversarial-review-tests/test-cases.yaml +103 -0
  441. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
  442. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
  443. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
  444. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
  445. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
  446. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
  447. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
  448. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
  449. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
  450. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
  451. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
  452. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
  453. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
  454. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
  455. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
  456. package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
  457. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
  458. package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
  459. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
  460. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
  461. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
  462. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
  463. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
  464. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
  465. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
  466. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
  467. package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
  468. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
  469. package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
  470. package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
  471. package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
  472. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
  473. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
  474. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
  475. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
  476. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
  477. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
  478. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
  479. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
  480. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
  481. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
  482. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
  483. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
  484. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
  485. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
  486. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
  487. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
  488. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
  489. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
  490. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
  491. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
  492. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
  493. package/test/test-agent-schema.js +387 -0
  494. package/test/test-cli-integration.sh +159 -0
  495. package/test/test-installation-components.js +214 -0
  496. package/test/unit-test-schema.js +133 -0
  497. package/tools/bmad-npx-wrapper.js +38 -0
  498. package/tools/build-docs.js +577 -0
  499. package/tools/cli/README.md +7 -0
  500. package/tools/cli/bmad-cli.js +58 -0
  501. package/tools/cli/commands/install.js +87 -0
  502. package/tools/cli/commands/status.js +65 -0
  503. package/tools/cli/external-official-modules.yaml +56 -0
  504. package/tools/cli/installers/install-messages.yaml +58 -0
  505. package/tools/cli/installers/lib/core/config-collector.js +1079 -0
  506. package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
  507. package/tools/cli/installers/lib/core/dependency-resolver.js +739 -0
  508. package/tools/cli/installers/lib/core/detector.js +223 -0
  509. package/tools/cli/installers/lib/core/ide-config-manager.js +156 -0
  510. package/tools/cli/installers/lib/core/installer.js +2826 -0
  511. package/tools/cli/installers/lib/core/manifest-generator.js +1054 -0
  512. package/tools/cli/installers/lib/core/manifest.js +1036 -0
  513. package/tools/cli/installers/lib/custom/handler.js +363 -0
  514. package/tools/cli/installers/lib/ide/STANDARDIZATION_PLAN.md +208 -0
  515. package/tools/cli/installers/lib/ide/_base-ide.js +655 -0
  516. package/tools/cli/installers/lib/ide/antigravity.js +474 -0
  517. package/tools/cli/installers/lib/ide/auggie.js +244 -0
  518. package/tools/cli/installers/lib/ide/claude-code.js +506 -0
  519. package/tools/cli/installers/lib/ide/cline.js +272 -0
  520. package/tools/cli/installers/lib/ide/codex.js +412 -0
  521. package/tools/cli/installers/lib/ide/crush.js +149 -0
  522. package/tools/cli/installers/lib/ide/cursor.js +160 -0
  523. package/tools/cli/installers/lib/ide/gemini.js +301 -0
  524. package/tools/cli/installers/lib/ide/github-copilot.js +383 -0
  525. package/tools/cli/installers/lib/ide/iflow.js +191 -0
  526. package/tools/cli/installers/lib/ide/kilo.js +250 -0
  527. package/tools/cli/installers/lib/ide/kiro-cli.js +326 -0
  528. package/tools/cli/installers/lib/ide/manager.js +244 -0
  529. package/tools/cli/installers/lib/ide/opencode.js +257 -0
  530. package/tools/cli/installers/lib/ide/qwen.js +372 -0
  531. package/tools/cli/installers/lib/ide/roo.js +273 -0
  532. package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
  533. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +165 -0
  534. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +158 -0
  535. package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
  536. package/tools/cli/installers/lib/ide/shared/path-utils.js +165 -0
  537. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +268 -0
  538. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +293 -0
  539. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
  540. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
  541. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
  542. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
  543. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  544. package/tools/cli/installers/lib/ide/trae.js +313 -0
  545. package/tools/cli/installers/lib/ide/windsurf.js +258 -0
  546. package/tools/cli/installers/lib/message-loader.js +85 -0
  547. package/tools/cli/installers/lib/modules/external-manager.js +135 -0
  548. package/tools/cli/installers/lib/modules/manager.js +1375 -0
  549. package/tools/cli/lib/activation-builder.js +163 -0
  550. package/tools/cli/lib/agent/compiler.js +522 -0
  551. package/tools/cli/lib/agent/installer.js +716 -0
  552. package/tools/cli/lib/agent/template-engine.js +152 -0
  553. package/tools/cli/lib/agent-analyzer.js +109 -0
  554. package/tools/cli/lib/agent-party-generator.js +194 -0
  555. package/tools/cli/lib/cli-utils.js +227 -0
  556. package/tools/cli/lib/config.js +213 -0
  557. package/tools/cli/lib/file-ops.js +204 -0
  558. package/tools/cli/lib/platform-codes.js +116 -0
  559. package/tools/cli/lib/project-root.js +77 -0
  560. package/tools/cli/lib/prompts.js +433 -0
  561. package/tools/cli/lib/ui.js +1716 -0
  562. package/tools/cli/lib/xml-handler.js +177 -0
  563. package/tools/cli/lib/xml-to-markdown.js +82 -0
  564. package/tools/cli/lib/yaml-format.js +245 -0
  565. package/tools/cli/lib/yaml-xml-builder.js +587 -0
  566. package/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
  567. package/tools/docs/index.md +2 -0
  568. package/tools/fix-doc-links.js +288 -0
  569. package/tools/flattener/aggregate.js +76 -0
  570. package/tools/flattener/binary.js +80 -0
  571. package/tools/flattener/discovery.js +71 -0
  572. package/tools/flattener/files.js +35 -0
  573. package/tools/flattener/ignoreRules.js +172 -0
  574. package/tools/flattener/main.js +483 -0
  575. package/tools/flattener/projectRoot.js +201 -0
  576. package/tools/flattener/prompts.js +44 -0
  577. package/tools/flattener/stats.helpers.js +368 -0
  578. package/tools/flattener/stats.js +75 -0
  579. package/tools/flattener/test-matrix.js +409 -0
  580. package/tools/flattener/xml.js +82 -0
  581. package/tools/format-workflow-md.js +263 -0
  582. package/tools/lib/xml-utils.js +13 -0
  583. package/tools/maintainer/review-pr-README.md +55 -0
  584. package/tools/maintainer/review-pr.md +242 -0
  585. package/tools/migrate-custom-module-paths.js +124 -0
  586. package/tools/platform-codes.yaml +157 -0
  587. package/tools/schema/agent.js +491 -0
  588. package/tools/validate-agent-schema.js +110 -0
  589. package/tools/validate-doc-links.js +363 -0
  590. package/tools/validate-svg-changes.sh +356 -0
  591. package/website/README.md +76 -0
  592. package/website/astro.config.mjs +228 -0
  593. package/website/public/favicon.ico +0 -0
  594. package/website/public/img/bmad-dark.png +0 -0
  595. package/website/public/img/bmad-light.png +0 -0
  596. package/website/public/img/logo.svg +4 -0
  597. package/website/public/robots.txt +37 -0
  598. package/website/src/components/Banner.astro +59 -0
  599. package/website/src/components/Header.astro +121 -0
  600. package/website/src/components/MobileMenuFooter.astro +53 -0
  601. package/website/src/content/config.ts +6 -0
  602. package/website/src/lib/site-url.js +25 -0
  603. package/website/src/rehype-markdown-links.js +102 -0
  604. package/website/src/styles/custom.css +485 -0
@@ -0,0 +1,363 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const chalk = require('chalk');
4
+ const yaml = require('yaml');
5
+ const { FileOps } = require('../../../lib/file-ops');
6
+ const { XmlHandler } = require('../../../lib/xml-handler');
7
+
8
+ /**
9
+ * Handler for custom content (custom.yaml)
10
+ * Installs custom agents and workflows without requiring a full module structure
11
+ */
12
+ class CustomHandler {
13
+ constructor() {
14
+ this.fileOps = new FileOps();
15
+ this.xmlHandler = new XmlHandler();
16
+ }
17
+
18
+ /**
19
+ * Find all custom.yaml files in the project
20
+ * @param {string} projectRoot - Project root directory
21
+ * @returns {Array} List of custom content paths
22
+ */
23
+ async findCustomContent(projectRoot) {
24
+ const customPaths = [];
25
+
26
+ // Helper function to recursively scan directories
27
+ async function scanDirectory(dir, excludePaths = []) {
28
+ try {
29
+ const entries = await fs.readdir(dir, { withFileTypes: true });
30
+
31
+ for (const entry of entries) {
32
+ const fullPath = path.join(dir, entry.name);
33
+
34
+ // Skip hidden directories and common exclusions
35
+ if (
36
+ entry.name.startsWith('.') ||
37
+ entry.name === 'node_modules' ||
38
+ entry.name === 'dist' ||
39
+ entry.name === 'build' ||
40
+ entry.name === '.git' ||
41
+ entry.name === 'bmad'
42
+ ) {
43
+ continue;
44
+ }
45
+
46
+ // Skip excluded paths
47
+ if (excludePaths.some((exclude) => fullPath.startsWith(exclude))) {
48
+ continue;
49
+ }
50
+
51
+ if (entry.isDirectory()) {
52
+ // Recursively scan subdirectories
53
+ await scanDirectory(fullPath, excludePaths);
54
+ } else if (entry.name === 'custom.yaml') {
55
+ // Found a custom.yaml file
56
+ customPaths.push(fullPath);
57
+ } else if (
58
+ entry.name === 'module.yaml' && // Check if this is a custom module (either in _module-installer or in root directory)
59
+ // Skip if it's in src/modules (those are standard modules)
60
+ !fullPath.includes(path.join('src', 'modules'))
61
+ ) {
62
+ customPaths.push(fullPath);
63
+ }
64
+ }
65
+ } catch {
66
+ // Ignore errors (e.g., permission denied)
67
+ }
68
+ }
69
+
70
+ // Scan the entire project, but exclude source directories
71
+ await scanDirectory(projectRoot, [path.join(projectRoot, 'src'), path.join(projectRoot, 'tools'), path.join(projectRoot, 'test')]);
72
+
73
+ return customPaths;
74
+ }
75
+
76
+ /**
77
+ * Get custom content info from a custom.yaml or module.yaml file
78
+ * @param {string} configPath - Path to config file
79
+ * @param {string} projectRoot - Project root directory for calculating relative paths
80
+ * @returns {Object|null} Custom content info
81
+ */
82
+ async getCustomInfo(configPath, projectRoot = null) {
83
+ try {
84
+ const configContent = await fs.readFile(configPath, 'utf8');
85
+
86
+ // Try to parse YAML with error handling
87
+ let config;
88
+ try {
89
+ config = yaml.parse(configContent);
90
+ } catch (parseError) {
91
+ console.warn(chalk.yellow(`Warning: YAML parse error in ${configPath}:`, parseError.message));
92
+ return null;
93
+ }
94
+
95
+ // Check if this is an module.yaml (module) or custom.yaml (custom content)
96
+ const isInstallConfig = configPath.endsWith('module.yaml');
97
+ const configDir = path.dirname(configPath);
98
+
99
+ // Use provided projectRoot or fall back to process.cwd()
100
+ const basePath = projectRoot || process.cwd();
101
+ const relativePath = path.relative(basePath, configDir);
102
+
103
+ return {
104
+ id: config.code || 'unknown-code',
105
+ name: config.name,
106
+ description: config.description || '',
107
+ path: configDir,
108
+ relativePath: relativePath,
109
+ defaultSelected: config.default_selected === true,
110
+ config: config,
111
+ isInstallConfig: isInstallConfig, // Track which type this is
112
+ };
113
+ } catch (error) {
114
+ console.warn(chalk.yellow(`Warning: Failed to read ${configPath}:`, error.message));
115
+ return null;
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Install custom content
121
+ * @param {string} customPath - Path to custom content directory
122
+ * @param {string} bmadDir - Target bmad directory
123
+ * @param {Object} config - Configuration from custom.yaml
124
+ * @param {Function} fileTrackingCallback - Optional callback to track installed files
125
+ * @returns {Object} Installation result
126
+ */
127
+ async install(customPath, bmadDir, config, fileTrackingCallback = null) {
128
+ const results = {
129
+ agentsInstalled: 0,
130
+ workflowsInstalled: 0,
131
+ filesCopied: 0,
132
+ preserved: 0,
133
+ errors: [],
134
+ };
135
+
136
+ try {
137
+ // Create custom directories in bmad
138
+ const bmadCustomDir = path.join(bmadDir, 'custom');
139
+ const bmadAgentsDir = path.join(bmadCustomDir, 'agents');
140
+ const bmadWorkflowsDir = path.join(bmadCustomDir, 'workflows');
141
+
142
+ await fs.ensureDir(bmadCustomDir);
143
+ await fs.ensureDir(bmadAgentsDir);
144
+ await fs.ensureDir(bmadWorkflowsDir);
145
+
146
+ // Process agents - compile and copy agents
147
+ const agentsDir = path.join(customPath, 'agents');
148
+ if (await fs.pathExists(agentsDir)) {
149
+ await this.compileAndCopyAgents(agentsDir, bmadAgentsDir, bmadDir, config, fileTrackingCallback, results);
150
+
151
+ // Count agent files
152
+ const agentFiles = await this.findFilesRecursively(agentsDir, ['.agent.yaml', '.md']);
153
+ results.agentsInstalled = agentFiles.length;
154
+ }
155
+
156
+ // Process workflows - copy entire workflows directory structure
157
+ const workflowsDir = path.join(customPath, 'workflows');
158
+ if (await fs.pathExists(workflowsDir)) {
159
+ await this.copyDirectory(workflowsDir, bmadWorkflowsDir, results, fileTrackingCallback, config);
160
+
161
+ // Count workflow files
162
+ const workflowFiles = await this.findFilesRecursively(workflowsDir, ['.md']);
163
+ results.workflowsInstalled = workflowFiles.length;
164
+ }
165
+
166
+ // Process any additional files at root
167
+ const entries = await fs.readdir(customPath, { withFileTypes: true });
168
+ for (const entry of entries) {
169
+ if (entry.isFile() && entry.name !== 'custom.yaml' && !entry.name.startsWith('.') && !entry.name.endsWith('.md')) {
170
+ // Skip .md files at root as they're likely docs
171
+ const sourcePath = path.join(customPath, entry.name);
172
+ const targetPath = path.join(bmadCustomDir, entry.name);
173
+
174
+ try {
175
+ // Check if file already exists
176
+ if (await fs.pathExists(targetPath)) {
177
+ // File already exists, preserve it
178
+ results.preserved = (results.preserved || 0) + 1;
179
+ } else {
180
+ await fs.copy(sourcePath, targetPath);
181
+ results.filesCopied++;
182
+
183
+ if (fileTrackingCallback) {
184
+ fileTrackingCallback(targetPath);
185
+ }
186
+ }
187
+ } catch (error) {
188
+ results.errors.push(`Failed to copy file ${entry.name}: ${error.message}`);
189
+ }
190
+ }
191
+ }
192
+ } catch (error) {
193
+ results.errors.push(`Installation failed: ${error.message}`);
194
+ }
195
+
196
+ return results;
197
+ }
198
+
199
+ /**
200
+ * Find all files with specific extensions recursively
201
+ * @param {string} dir - Directory to search
202
+ * @param {Array} extensions - File extensions to match
203
+ * @returns {Array} List of matching files
204
+ */
205
+ async findFilesRecursively(dir, extensions) {
206
+ const files = [];
207
+
208
+ async function search(currentDir) {
209
+ const entries = await fs.readdir(currentDir, { withFileTypes: true });
210
+
211
+ for (const entry of entries) {
212
+ const fullPath = path.join(currentDir, entry.name);
213
+
214
+ if (entry.isDirectory()) {
215
+ await search(fullPath);
216
+ } else if (extensions.some((ext) => entry.name.endsWith(ext))) {
217
+ files.push(fullPath);
218
+ }
219
+ }
220
+ }
221
+
222
+ await search(dir);
223
+ return files;
224
+ }
225
+
226
+ /**
227
+ * Recursively copy a directory
228
+ * @param {string} sourceDir - Source directory
229
+ * @param {string} targetDir - Target directory
230
+ * @param {Object} results - Results object to update
231
+ * @param {Function} fileTrackingCallback - Optional callback
232
+ * @param {Object} config - Configuration for placeholder replacement
233
+ */
234
+ async copyDirectory(sourceDir, targetDir, results, fileTrackingCallback, config) {
235
+ await fs.ensureDir(targetDir);
236
+ const entries = await fs.readdir(sourceDir, { withFileTypes: true });
237
+
238
+ for (const entry of entries) {
239
+ const sourcePath = path.join(sourceDir, entry.name);
240
+ const targetPath = path.join(targetDir, entry.name);
241
+
242
+ if (entry.isDirectory()) {
243
+ await this.copyDirectory(sourcePath, targetPath, results, fileTrackingCallback, config);
244
+ } else {
245
+ try {
246
+ // Check if file already exists
247
+ if (await fs.pathExists(targetPath)) {
248
+ // File already exists, preserve it
249
+ results.preserved = (results.preserved || 0) + 1;
250
+ } else {
251
+ // Copy with placeholder replacement for text files
252
+ const textExtensions = ['.md', '.yaml', '.yml', '.txt', '.json'];
253
+ if (textExtensions.some((ext) => entry.name.endsWith(ext))) {
254
+ // Read source content
255
+ let content = await fs.readFile(sourcePath, 'utf8');
256
+
257
+ // Replace placeholders
258
+ content = content.replaceAll('{user_name}', config.user_name || 'User');
259
+ content = content.replaceAll('{communication_language}', config.communication_language || 'English');
260
+ content = content.replaceAll('{output_folder}', config.output_folder || 'docs');
261
+
262
+ // Write to target
263
+ await fs.ensureDir(path.dirname(targetPath));
264
+ await fs.writeFile(targetPath, content, 'utf8');
265
+ } else {
266
+ // Copy binary files as-is
267
+ await fs.copy(sourcePath, targetPath);
268
+ }
269
+
270
+ results.filesCopied++;
271
+ if (fileTrackingCallback) {
272
+ fileTrackingCallback(targetPath);
273
+ }
274
+ }
275
+
276
+ if (entry.name.endsWith('.md')) {
277
+ results.workflowsInstalled++;
278
+ }
279
+ } catch (error) {
280
+ results.errors.push(`Failed to copy ${entry.name}: ${error.message}`);
281
+ }
282
+ }
283
+ }
284
+ }
285
+
286
+ /**
287
+ * Compile .agent.yaml files to .md format and handle sidecars
288
+ * @param {string} sourceAgentsPath - Source agents directory
289
+ * @param {string} targetAgentsPath - Target agents directory
290
+ * @param {string} bmadDir - BMAD installation directory
291
+ * @param {Object} config - Configuration for placeholder replacement
292
+ * @param {Function} fileTrackingCallback - Optional callback to track installed files
293
+ * @param {Object} results - Results object to update
294
+ */
295
+ async compileAndCopyAgents(sourceAgentsPath, targetAgentsPath, bmadDir, config, fileTrackingCallback, results) {
296
+ // Get all .agent.yaml files recursively
297
+ const agentFiles = await this.findFilesRecursively(sourceAgentsPath, ['.agent.yaml']);
298
+
299
+ for (const agentFile of agentFiles) {
300
+ const relativePath = path.relative(sourceAgentsPath, agentFile);
301
+ const targetDir = path.join(targetAgentsPath, path.dirname(relativePath));
302
+
303
+ await fs.ensureDir(targetDir);
304
+
305
+ const agentName = path.basename(agentFile, '.agent.yaml');
306
+ const targetMdPath = path.join(targetDir, `${agentName}.md`);
307
+ // Use the actual bmadDir if available (for when installing to temp dir)
308
+ const actualBmadDir = config._bmadDir || bmadDir;
309
+ const customizePath = path.join(actualBmadDir, '_config', 'agents', `custom-${agentName}.customize.yaml`);
310
+
311
+ // Read and compile the YAML
312
+ try {
313
+ const yamlContent = await fs.readFile(agentFile, 'utf8');
314
+ const { compileAgent } = require('../../../lib/agent/compiler');
315
+
316
+ // Create customize template if it doesn't exist
317
+ if (!(await fs.pathExists(customizePath))) {
318
+ const { getSourcePath } = require('../../../lib/project-root');
319
+ const genericTemplatePath = getSourcePath('utility', 'agent-components', 'agent.customize.template.yaml');
320
+ if (await fs.pathExists(genericTemplatePath)) {
321
+ let templateContent = await fs.readFile(genericTemplatePath, 'utf8');
322
+ await fs.writeFile(customizePath, templateContent, 'utf8');
323
+ // Only show customize creation in verbose mode
324
+ if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
325
+ console.log(chalk.dim(` Created customize: custom-${agentName}.customize.yaml`));
326
+ }
327
+ }
328
+ }
329
+
330
+ // Compile the agent
331
+ const { xml } = compileAgent(yamlContent, {}, agentName, relativePath, { config });
332
+
333
+ // Replace placeholders in the compiled content
334
+ let processedXml = xml;
335
+ processedXml = processedXml.replaceAll('{user_name}', config.user_name || 'User');
336
+ processedXml = processedXml.replaceAll('{communication_language}', config.communication_language || 'English');
337
+ processedXml = processedXml.replaceAll('{output_folder}', config.output_folder || 'docs');
338
+
339
+ // Write the compiled MD file
340
+ await fs.writeFile(targetMdPath, processedXml, 'utf8');
341
+
342
+ // Track the file
343
+ if (fileTrackingCallback) {
344
+ fileTrackingCallback(targetMdPath);
345
+ }
346
+
347
+ // Only show compilation details in verbose mode
348
+ if (process.env.BMAD_VERBOSE_INSTALL === 'true') {
349
+ console.log(
350
+ chalk.dim(
351
+ ` Compiled agent: ${agentName} -> ${path.relative(targetAgentsPath, targetMdPath)}${hasSidecar ? ' (with sidecar)' : ''}`,
352
+ ),
353
+ );
354
+ }
355
+ } catch (error) {
356
+ console.warn(chalk.yellow(` Failed to compile agent ${agentName}:`, error.message));
357
+ results.errors.push(`Failed to compile agent ${agentName}: ${error.message}`);
358
+ }
359
+ }
360
+ }
361
+ }
362
+
363
+ module.exports = { CustomHandler };
@@ -0,0 +1,208 @@
1
+ # IDE Installer Standardization Plan
2
+
3
+ ## Overview
4
+
5
+ Standardize IDE installers to use **flat file naming** with **underscores** (Windows-compatible) and centralize duplicated code in shared utilities.
6
+
7
+ **Key Rule: All IDEs use underscore format for Windows compatibility (colons don't work on Windows).**
8
+
9
+ ## Current State Analysis
10
+
11
+ ### File Structure Patterns
12
+
13
+ | IDE | Current Pattern | Path Format |
14
+ |-----|-----------------|-------------|
15
+ | **claude-code** | Hierarchical | `.claude/commands/bmad/{module}/agents/{name}.md` |
16
+ | **cursor** | Hierarchical | `.cursor/commands/bmad/{module}/agents/{name}.md` |
17
+ | **crush** | Hierarchical | `.crush/commands/bmad/{module}/agents/{name}.md` |
18
+ | **antigravity** | Flattened (underscores) | `.agent/workflows/bmad_module_agents_name.md` |
19
+ | **codex** | Flattened (underscores) | `~/.codex/prompts/bmad_module_agents_name.md` |
20
+ | **cline** | Flattened (underscores) | `.clinerules/workflows/bmad_module_type_name.md` |
21
+ | **roo** | Flattened (underscores) | `.roo/commands/bmad_module_agent_name.md` |
22
+ | **auggie** | Hybrid | `.augment/commands/bmad/agents/{module}-{name}.md` |
23
+ | **iflow** | Hybrid | `.iflow/commands/bmad/agents/{module}-{name}.md` |
24
+ | **trae** | Different (rules) | `.trae/rules/bmad-agent-{module}-{name}.md` |
25
+ | **github-copilot** | Different (agents) | `.github/agents/bmd-custom-{module}-{name}.agent.md` |
26
+
27
+ ### Shared Generators (in `/shared`)
28
+
29
+ 1. `agent-command-generator.js` - generates agent launchers
30
+ 2. `task-tool-command-generator.js` - generates task/tool commands
31
+ 3. `workflow-command-generator.js` - generates workflow commands
32
+
33
+ All currently create artifacts with **nested relative paths** like `{module}/agents/{name}.md`
34
+
35
+ ### Code Duplication Issues
36
+
37
+ 1. **Flattening logic** duplicated in multiple IDEs
38
+ 2. **Agent launcher content creation** duplicated
39
+ 3. **Path transformation** duplicated
40
+
41
+ ## Target Standardization
42
+
43
+ ### For All IDEs (underscore format - Windows-compatible)
44
+
45
+ **IDEs affected:** claude-code, cursor, crush, antigravity, codex, cline, roo
46
+
47
+ ```
48
+ Format: bmad_{module}_{type}_{name}.md
49
+
50
+ Examples:
51
+ - Agent: bmad_bmm_agents_pm.md
52
+ - Agent: bmad_core_agents_dev.md
53
+ - Workflow: bmad_bmm_workflows_correct-course.md
54
+ - Task: bmad_bmm_tasks_bmad-help.md
55
+ - Tool: bmad_core_tools_code-review.md
56
+ - Custom: bmad_custom_agents_fred-commit-poet.md
57
+ ```
58
+
59
+ **Note:** Type segments (agents, workflows, tasks, tools) are filtered out from names:
60
+ - `bmm/agents/pm.md` → `bmad_bmm_pm.md` (not `bmad_bmm_agents_pm.md`)
61
+
62
+ ### For Hybrid IDEs (keep as-is)
63
+
64
+ **IDEs affected:** auggie, iflow
65
+
66
+ These use `{module}-{name}.md` format within subdirectories - keep as-is.
67
+
68
+ ### Skip (drastically different)
69
+
70
+ **IDEs affected:** trae, github-copilot
71
+
72
+ ## Implementation Plan
73
+
74
+ ### Phase 1: Create Shared Utility
75
+
76
+ **File:** `shared/path-utils.js`
77
+
78
+ ```javascript
79
+ /**
80
+ * Convert hierarchical path to flat underscore-separated name (Windows-compatible)
81
+ * @param {string} module - Module name (e.g., 'bmm', 'core')
82
+ * @param {string} type - Artifact type ('agents', 'workflows', 'tasks', 'tools') - filtered out
83
+ * @param {string} name - Artifact name (e.g., 'pm', 'correct-course')
84
+ * @returns {string} Flat filename like 'bmad_bmm_pm.md'
85
+ */
86
+ function toUnderscoreName(module, type, name) {
87
+ return `bmad_${module}_${name}.md`;
88
+ }
89
+
90
+ /**
91
+ * Convert relative path to flat underscore-separated name (Windows-compatible)
92
+ * @param {string} relativePath - Path like 'bmm/agents/pm.md'
93
+ * @returns {string} Flat filename like 'bmad_bmm_pm.md'
94
+ */
95
+ function toUnderscorePath(relativePath) {
96
+ const withoutExt = relativePath.replace('.md', '');
97
+ const parts = withoutExt.split(/[\/\\]/);
98
+ // Filter out type segments (agents, workflows, tasks, tools)
99
+ const filtered = parts.filter((p) => !TYPE_SEGMENTS.includes(p));
100
+ return `bmad_${filtered.join('_')}.md`;
101
+ }
102
+
103
+ /**
104
+ * Create custom agent underscore name
105
+ * @param {string} agentName - Custom agent name
106
+ * @returns {string} Flat filename like 'bmad_custom_fred-commit-poet.md'
107
+ */
108
+ function customAgentUnderscoreName(agentName) {
109
+ return `bmad_custom_${agentName}.md`;
110
+ }
111
+
112
+ // Backward compatibility aliases
113
+ const toColonName = toUnderscoreName;
114
+ const toColonPath = toUnderscorePath;
115
+ const toDashPath = toUnderscorePath;
116
+ const customAgentColonName = customAgentUnderscoreName;
117
+ const customAgentDashName = customAgentUnderscoreName;
118
+
119
+ module.exports = {
120
+ toUnderscoreName,
121
+ toUnderscorePath,
122
+ customAgentUnderscoreName,
123
+ // Backward compatibility
124
+ toColonName,
125
+ toColonPath,
126
+ toDashPath,
127
+ customAgentColonName,
128
+ customAgentDashName,
129
+ };
130
+ ```
131
+
132
+ ### Phase 2: Update Shared Generators
133
+
134
+ **Files to modify:**
135
+ - `shared/agent-command-generator.js`
136
+ - `shared/task-tool-command-generator.js`
137
+ - `shared/workflow-command-generator.js`
138
+
139
+ **Changes:**
140
+ 1. Import path utilities
141
+ 2. Change `relativePath` to use flat format
142
+ 3. Add method `writeColonArtifacts()` for folder-based IDEs (uses underscore)
143
+ 4. Add method `writeDashArtifacts()` for flat IDEs (uses underscore)
144
+
145
+ ### Phase 3: Update All IDEs
146
+
147
+ **Files to modify:**
148
+ - `claude-code.js`
149
+ - `cursor.js`
150
+ - `crush.js`
151
+ - `antigravity.js`
152
+ - `codex.js`
153
+ - `cline.js`
154
+ - `roo.js`
155
+
156
+ **Changes:**
157
+ 1. Import utilities from path-utils
158
+ 2. Change from hierarchical to flat underscore naming
159
+ 3. Update cleanup to handle flat structure (`startsWith('bmad')`)
160
+
161
+ ### Phase 4: Update Base Class
162
+
163
+ **File:** `_base-ide.js`
164
+
165
+ **Changes:**
166
+ 1. Mark `flattenFilename()` as `@deprecated`
167
+ 2. Add comment pointing to new path-utils
168
+
169
+ ## Migration Checklist
170
+
171
+ ### New Files
172
+ - [x] Create `shared/path-utils.js`
173
+
174
+ ### All IDEs (convert to underscore format)
175
+ - [x] Update `shared/agent-command-generator.js` - update for underscore
176
+ - [x] Update `shared/task-tool-command-generator.js` - update for underscore
177
+ - [x] Update `shared/workflow-command-generator.js` - update for underscore
178
+ - [x] Update `claude-code.js` - convert to underscore format
179
+ - [x] Update `cursor.js` - convert to underscore format
180
+ - [x] Update `crush.js` - convert to underscore format
181
+ - [ ] Update `antigravity.js` - use underscore format
182
+ - [ ] Update `codex.js` - use underscore format
183
+ - [ ] Update `cline.js` - use underscore format
184
+ - [ ] Update `roo.js` - use underscore format
185
+
186
+ ### CSV Command Files
187
+ - [x] Update `src/core/module-help.csv` - change colons to underscores
188
+ - [x] Update `src/bmm/module-help.csv` - change colons to underscores
189
+
190
+ ### Base Class
191
+ - [ ] Update `_base-ide.js` - add deprecation notice
192
+
193
+ ### Testing
194
+ - [ ] Test claude-code installation
195
+ - [ ] Test cursor installation
196
+ - [ ] Test crush installation
197
+ - [ ] Test antigravity installation
198
+ - [ ] Test codex installation
199
+ - [ ] Test cline installation
200
+ - [ ] Test roo installation
201
+
202
+ ## Notes
203
+
204
+ 1. **Filter type segments**: agents, workflows, tasks, tools are filtered out from flat names
205
+ 2. **Underscore format**: Universal underscore format for Windows compatibility
206
+ 3. **Custom agents**: Follow the same pattern as regular agents
207
+ 4. **Backward compatibility**: Old function names kept as aliases
208
+ 5. **Cleanup**: Will remove old `bmad:` format files on next install