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,149 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const { BaseIdeSetup } = require('./_base-ide');
4
+ const chalk = require('chalk');
5
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
6
+ const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
7
+ const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
8
+ const { customAgentColonName } = require('./shared/path-utils');
9
+
10
+ /**
11
+ * Crush IDE setup handler
12
+ * Creates commands in .crush/commands/ directory structure using flat colon naming
13
+ */
14
+ class CrushSetup extends BaseIdeSetup {
15
+ constructor() {
16
+ super('crush', 'Crush');
17
+ this.configDir = '.crush';
18
+ this.commandsDir = 'commands';
19
+ }
20
+
21
+ /**
22
+ * Setup Crush IDE configuration
23
+ * @param {string} projectDir - Project directory
24
+ * @param {string} bmadDir - BMAD installation directory
25
+ * @param {Object} options - Setup options
26
+ */
27
+ async setup(projectDir, bmadDir, options = {}) {
28
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
29
+
30
+ // Clean up old BMAD installation first
31
+ await this.cleanup(projectDir);
32
+
33
+ // Create .crush/commands directory
34
+ const crushDir = path.join(projectDir, this.configDir);
35
+ const commandsDir = path.join(crushDir, this.commandsDir);
36
+ await this.ensureDir(commandsDir);
37
+
38
+ // Use underscore format: files written directly to commands dir (no bmad subfolder)
39
+ // Creates: .crush/commands/bmad_bmm_pm.md
40
+
41
+ // Generate agent launchers
42
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
43
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
44
+
45
+ // Write agent launcher files using flat underscore naming
46
+ // Creates files like: bmad_bmm_pm.md
47
+ const agentCount = await agentGen.writeColonArtifacts(commandsDir, agentArtifacts);
48
+
49
+ // Get ALL workflows using the new workflow command generator
50
+ const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
51
+ const { artifacts: workflowArtifacts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
52
+
53
+ // Write workflow-command artifacts using flat underscore naming
54
+ // Creates files like: bmad_bmm_correct-course.md
55
+ const workflowCount = await workflowGenerator.writeColonArtifacts(commandsDir, workflowArtifacts);
56
+
57
+ // Generate task and tool commands using flat underscore naming
58
+ const taskToolGen = new TaskToolCommandGenerator();
59
+ const taskToolResult = await taskToolGen.generateColonTaskToolCommands(projectDir, bmadDir, commandsDir);
60
+
61
+ console.log(chalk.green(`✓ ${this.name} configured:`));
62
+ console.log(chalk.dim(` - ${agentCount} agent commands created`));
63
+ console.log(chalk.dim(` - ${taskToolResult.tasks} task commands created`));
64
+ console.log(chalk.dim(` - ${taskToolResult.tools} tool commands created`));
65
+ console.log(chalk.dim(` - ${workflowCount} workflow commands created`));
66
+ console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
67
+ console.log(chalk.dim('\n Commands can be accessed via Crush command palette'));
68
+
69
+ return {
70
+ success: true,
71
+ agents: agentCount,
72
+ tasks: taskToolResult.tasks || 0,
73
+ tools: taskToolResult.tools || 0,
74
+ workflows: workflowCount,
75
+ };
76
+ }
77
+
78
+ /**
79
+ * Cleanup Crush configuration
80
+ */
81
+ async cleanup(projectDir) {
82
+ const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
83
+
84
+ // Remove any bmad* files from the commands directory (cleans up old bmad: and bmad- formats)
85
+ if (await fs.pathExists(commandsDir)) {
86
+ const entries = await fs.readdir(commandsDir);
87
+ for (const entry of entries) {
88
+ if (entry.startsWith('bmad')) {
89
+ await fs.remove(path.join(commandsDir, entry));
90
+ }
91
+ }
92
+ }
93
+ // Also remove legacy bmad folder if it exists
94
+ const bmadFolder = path.join(commandsDir, 'bmad');
95
+ if (await fs.pathExists(bmadFolder)) {
96
+ await fs.remove(bmadFolder);
97
+ console.log(chalk.dim(`Removed BMAD commands from Crush`));
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Install a custom agent launcher for Crush
103
+ * @param {string} projectDir - Project directory
104
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
105
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
106
+ * @param {Object} metadata - Agent metadata
107
+ * @returns {Object} Installation result
108
+ */
109
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
110
+ const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
111
+
112
+ // Create .crush/commands directory if it doesn't exist
113
+ await fs.ensureDir(commandsDir);
114
+
115
+ // Create custom agent launcher
116
+ const launcherContent = `# ${agentName} Custom Agent
117
+
118
+ **⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
119
+
120
+ This is a launcher for the custom BMAD agent "${agentName}".
121
+
122
+ ## Usage
123
+ 1. First run: \`${agentPath}\` to load the complete agent
124
+ 2. Then use this command to activate ${agentName}
125
+
126
+ The agent will follow the persona and instructions from the main agent file.
127
+
128
+ ---
129
+
130
+ *Generated by BMAD Method*`;
131
+
132
+ // Use underscore format: bmad_custom_fred-commit-poet.md
133
+ // Written directly to commands dir (no bmad subfolder)
134
+ const launcherName = customAgentColonName(agentName);
135
+ const launcherPath = path.join(commandsDir, launcherName);
136
+
137
+ // Write the launcher file
138
+ await fs.writeFile(launcherPath, launcherContent, 'utf8');
139
+
140
+ return {
141
+ ide: 'crush',
142
+ path: path.relative(projectDir, launcherPath),
143
+ command: launcherName.replace('.md', ''),
144
+ type: 'custom-agent-launcher',
145
+ };
146
+ }
147
+ }
148
+
149
+ module.exports = { CrushSetup };
@@ -0,0 +1,160 @@
1
+ const path = require('node:path');
2
+ const { BaseIdeSetup } = require('./_base-ide');
3
+ const chalk = require('chalk');
4
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
5
+ const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
6
+ const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
7
+ const { customAgentColonName } = require('./shared/path-utils');
8
+
9
+ /**
10
+ * Cursor IDE setup handler
11
+ */
12
+ class CursorSetup extends BaseIdeSetup {
13
+ constructor() {
14
+ super('cursor', 'Cursor', true); // preferred IDE
15
+ this.configDir = '.cursor';
16
+ this.rulesDir = 'rules';
17
+ this.commandsDir = 'commands';
18
+ }
19
+
20
+ /**
21
+ * Cleanup old BMAD installation before reinstalling
22
+ * @param {string} projectDir - Project directory
23
+ */
24
+ async cleanup(projectDir) {
25
+ const fs = require('fs-extra');
26
+ const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
27
+
28
+ // Remove any bmad* files from the commands directory (cleans up old bmad: and bmad- formats)
29
+ if (await fs.pathExists(commandsDir)) {
30
+ const entries = await fs.readdir(commandsDir);
31
+ for (const entry of entries) {
32
+ if (entry.startsWith('bmad')) {
33
+ await fs.remove(path.join(commandsDir, entry));
34
+ }
35
+ }
36
+ }
37
+ // Also remove legacy bmad folder if it exists
38
+ const bmadFolder = path.join(commandsDir, 'bmad');
39
+ if (await fs.pathExists(bmadFolder)) {
40
+ await fs.remove(bmadFolder);
41
+ console.log(chalk.dim(` Removed old BMAD commands from ${this.name}`));
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Setup Cursor IDE configuration
47
+ * @param {string} projectDir - Project directory
48
+ * @param {string} bmadDir - BMAD installation directory
49
+ * @param {Object} options - Setup options
50
+ */
51
+ async setup(projectDir, bmadDir, options = {}) {
52
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
53
+
54
+ // Clean up old BMAD installation first
55
+ await this.cleanup(projectDir);
56
+
57
+ // Create .cursor/commands directory structure
58
+ const cursorDir = path.join(projectDir, this.configDir);
59
+ const commandsDir = path.join(cursorDir, this.commandsDir);
60
+ await this.ensureDir(commandsDir);
61
+
62
+ // Use underscore format: files written directly to commands dir (no bmad subfolder)
63
+ // Creates: .cursor/commands/bmad_bmm_pm.md
64
+
65
+ // Generate agent launchers using AgentCommandGenerator
66
+ // This creates small launcher files that reference the actual agents in _bmad/
67
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
68
+ const { artifacts: agentArtifacts, counts: agentCounts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
69
+
70
+ // Write agent launcher files using flat underscore naming
71
+ // Creates files like: bmad_bmm_pm.md
72
+ const agentCount = await agentGen.writeColonArtifacts(commandsDir, agentArtifacts);
73
+
74
+ // Generate workflow commands from manifest (if it exists)
75
+ const workflowGen = new WorkflowCommandGenerator(this.bmadFolderName);
76
+ const { artifacts: workflowArtifacts } = await workflowGen.collectWorkflowArtifacts(bmadDir);
77
+
78
+ // Write workflow-command artifacts using flat underscore naming
79
+ // Creates files like: bmad_bmm_correct-course.md
80
+ const workflowCommandCount = await workflowGen.writeColonArtifacts(commandsDir, workflowArtifacts);
81
+
82
+ // Generate task and tool commands from manifests (if they exist)
83
+ const taskToolGen = new TaskToolCommandGenerator();
84
+ const taskToolResult = await taskToolGen.generateColonTaskToolCommands(projectDir, bmadDir, commandsDir);
85
+
86
+ console.log(chalk.green(`✓ ${this.name} configured:`));
87
+ console.log(chalk.dim(` - ${agentCount} agents installed`));
88
+ if (workflowCommandCount > 0) {
89
+ console.log(chalk.dim(` - ${workflowCommandCount} workflow commands generated`));
90
+ }
91
+ if (taskToolResult.generated > 0) {
92
+ console.log(
93
+ chalk.dim(
94
+ ` - ${taskToolResult.generated} task/tool commands generated (${taskToolResult.tasks} tasks, ${taskToolResult.tools} tools)`,
95
+ ),
96
+ );
97
+ }
98
+ console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
99
+
100
+ return {
101
+ success: true,
102
+ agents: agentCount,
103
+ tasks: taskToolResult.tasks || 0,
104
+ tools: taskToolResult.tools || 0,
105
+ workflows: workflowCommandCount,
106
+ };
107
+ }
108
+
109
+ /**
110
+ * Install a custom agent launcher for Cursor
111
+ * @param {string} projectDir - Project directory
112
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
113
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
114
+ * @param {Object} metadata - Agent metadata
115
+ * @returns {Object|null} Info about created command
116
+ */
117
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
118
+ const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
119
+
120
+ if (!(await this.exists(path.join(projectDir, this.configDir)))) {
121
+ return null; // IDE not configured for this project
122
+ }
123
+
124
+ await this.ensureDir(commandsDir);
125
+
126
+ const launcherContent = `You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
127
+
128
+ <agent-activation CRITICAL="TRUE">
129
+ 1. LOAD the FULL agent file from @${agentPath}
130
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
131
+ 3. FOLLOW every step in the <activation> section precisely
132
+ 4. DISPLAY the welcome/greeting as instructed
133
+ 5. PRESENT the numbered menu
134
+ 6. WAIT for user input before proceeding
135
+ </agent-activation>
136
+ `;
137
+
138
+ // Cursor uses YAML frontmatter matching Claude Code format
139
+ const commandContent = `---
140
+ name: '${agentName}'
141
+ description: '${agentName} agent'
142
+ ---
143
+
144
+ ${launcherContent}
145
+ `;
146
+
147
+ // Use underscore format: bmad_custom_fred-commit-poet.md
148
+ // Written directly to commands dir (no bmad subfolder)
149
+ const launcherName = customAgentColonName(agentName);
150
+ const launcherPath = path.join(commandsDir, launcherName);
151
+ await this.writeFile(launcherPath, commandContent);
152
+
153
+ return {
154
+ path: launcherPath,
155
+ command: `/${launcherName.replace('.md', '')}`,
156
+ };
157
+ }
158
+ }
159
+
160
+ module.exports = { CursorSetup };
@@ -0,0 +1,301 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const yaml = require('yaml');
4
+ const { BaseIdeSetup } = require('./_base-ide');
5
+ const chalk = require('chalk');
6
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
7
+ const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
8
+
9
+ /**
10
+ * Gemini CLI setup handler
11
+ * Creates TOML files in .gemini/commands/ structure
12
+ */
13
+ class GeminiSetup extends BaseIdeSetup {
14
+ constructor() {
15
+ super('gemini', 'Gemini CLI', false);
16
+ this.configDir = '.gemini';
17
+ this.commandsDir = 'commands';
18
+ this.agentTemplatePath = path.join(__dirname, 'templates', 'gemini-agent-command.toml');
19
+ this.taskTemplatePath = path.join(__dirname, 'templates', 'gemini-task-command.toml');
20
+ }
21
+
22
+ /**
23
+ * Load config values from bmad installation
24
+ * @param {string} bmadDir - BMAD installation directory
25
+ * @returns {Object} Config values
26
+ */
27
+ async loadConfigValues(bmadDir) {
28
+ const configValues = {
29
+ user_name: 'User', // Default fallback
30
+ };
31
+
32
+ // Try to load core config.yaml
33
+ const coreConfigPath = path.join(bmadDir, 'core', 'config.yaml');
34
+ if (await fs.pathExists(coreConfigPath)) {
35
+ try {
36
+ const configContent = await fs.readFile(coreConfigPath, 'utf8');
37
+ const config = yaml.parse(configContent);
38
+
39
+ if (config.user_name) {
40
+ configValues.user_name = config.user_name;
41
+ }
42
+ } catch (error) {
43
+ console.warn(chalk.yellow(` Warning: Could not load config values: ${error.message}`));
44
+ }
45
+ }
46
+
47
+ return configValues;
48
+ }
49
+
50
+ /**
51
+ * Setup Gemini CLI configuration
52
+ * @param {string} projectDir - Project directory
53
+ * @param {string} bmadDir - BMAD installation directory
54
+ * @param {Object} options - Setup options
55
+ */
56
+ async setup(projectDir, bmadDir, options = {}) {
57
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
58
+
59
+ // Create .gemini/commands directory (flat structure with bmad- prefix)
60
+ const geminiDir = path.join(projectDir, this.configDir);
61
+ const commandsDir = path.join(geminiDir, this.commandsDir);
62
+
63
+ await this.ensureDir(commandsDir);
64
+
65
+ // Clean up any existing BMAD files before reinstalling
66
+ await this.cleanup(projectDir);
67
+
68
+ // Generate agent launchers
69
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
70
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
71
+
72
+ // Get tasks and workflows (ALL workflows now generate commands)
73
+ const tasks = await this.getTasks(bmadDir);
74
+
75
+ // Get ALL workflows using the new workflow command generator
76
+ const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
77
+ const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
78
+
79
+ // Install agents as TOML files with bmad- prefix (flat structure)
80
+ let agentCount = 0;
81
+ for (const artifact of agentArtifacts) {
82
+ const tomlContent = await this.createAgentLauncherToml(artifact);
83
+
84
+ // Flat structure: bmad-agent-{module}-{name}.toml
85
+ const tomlPath = path.join(commandsDir, `bmad-agent-${artifact.module}-${artifact.name}.toml`);
86
+ await this.writeFile(tomlPath, tomlContent);
87
+ agentCount++;
88
+
89
+ console.log(chalk.green(` ✓ Added agent: /bmad_agents_${artifact.module}_${artifact.name}`));
90
+ }
91
+
92
+ // Install tasks as TOML files with bmad- prefix (flat structure)
93
+ let taskCount = 0;
94
+ for (const task of tasks) {
95
+ const content = await this.readFile(task.path);
96
+ const tomlContent = await this.createTaskToml(task, content);
97
+
98
+ // Flat structure: bmad-task-{module}-{name}.toml
99
+ const tomlPath = path.join(commandsDir, `bmad-task-${task.module}-${task.name}.toml`);
100
+ await this.writeFile(tomlPath, tomlContent);
101
+ taskCount++;
102
+
103
+ console.log(chalk.green(` ✓ Added task: /bmad_tasks_${task.module}_${task.name}`));
104
+ }
105
+
106
+ // Install workflows as TOML files with bmad- prefix (flat structure)
107
+ let workflowCount = 0;
108
+ for (const artifact of workflowArtifacts) {
109
+ if (artifact.type === 'workflow-command') {
110
+ // Create TOML wrapper around workflow command content
111
+ const tomlContent = await this.createWorkflowToml(artifact);
112
+
113
+ // Flat structure: bmad-workflow-{module}-{name}.toml
114
+ const workflowName = path.basename(artifact.relativePath, '.md');
115
+ const tomlPath = path.join(commandsDir, `bmad-workflow-${artifact.module}-${workflowName}.toml`);
116
+ await this.writeFile(tomlPath, tomlContent);
117
+ workflowCount++;
118
+
119
+ console.log(chalk.green(` ✓ Added workflow: /bmad_workflows_${artifact.module}_${workflowName}`));
120
+ }
121
+ }
122
+
123
+ console.log(chalk.green(`✓ ${this.name} configured:`));
124
+ console.log(chalk.dim(` - ${agentCount} agents configured`));
125
+ console.log(chalk.dim(` - ${taskCount} tasks configured`));
126
+ console.log(chalk.dim(` - ${workflowCount} workflows configured`));
127
+ console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
128
+ console.log(chalk.dim(` - Agent activation: /bmad_agents_{agent-name}`));
129
+ console.log(chalk.dim(` - Task activation: /bmad_tasks_{task-name}`));
130
+ console.log(chalk.dim(` - Workflow activation: /bmad_workflows_{workflow-name}`));
131
+
132
+ return {
133
+ success: true,
134
+ agents: agentCount,
135
+ tasks: taskCount,
136
+ workflows: workflowCount,
137
+ };
138
+ }
139
+
140
+ /**
141
+ * Create agent launcher TOML content from artifact
142
+ */
143
+ async createAgentLauncherToml(artifact) {
144
+ // Strip frontmatter from launcher content
145
+ const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
146
+ const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
147
+
148
+ // Extract title from launcher frontmatter
149
+ const titleMatch = artifact.content.match(/description:\s*"([^"]+)"/);
150
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(artifact.name);
151
+
152
+ // Create TOML wrapper around launcher content (without frontmatter)
153
+ const description = `BMAD ${artifact.module.toUpperCase()} Agent: ${title}`;
154
+
155
+ return `description = "${description}"
156
+ prompt = """
157
+ ${contentWithoutFrontmatter}
158
+ """
159
+ `;
160
+ }
161
+
162
+ /**
163
+ * Create agent TOML content using template
164
+ */
165
+ async createAgentToml(agent, content) {
166
+ // Extract metadata
167
+ const titleMatch = content.match(/title="([^"]+)"/);
168
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
169
+
170
+ // Load template
171
+ const template = await fs.readFile(this.agentTemplatePath, 'utf8');
172
+
173
+ // Replace template variables
174
+ // Note: {user_name} and other {config_values} are left as-is for runtime substitution by Gemini
175
+ const tomlContent = template
176
+ .replaceAll('{{title}}', title)
177
+ .replaceAll('{_bmad}', '_bmad')
178
+ .replaceAll('{_bmad}', this.bmadFolderName)
179
+ .replaceAll('{{module}}', agent.module)
180
+ .replaceAll('{{name}}', agent.name);
181
+
182
+ return tomlContent;
183
+ }
184
+
185
+ /**
186
+ * Create task TOML content using template
187
+ */
188
+ async createTaskToml(task, content) {
189
+ // Extract task name from XML if available
190
+ const nameMatch = content.match(/<name>([^<]+)<\/name>/);
191
+ const taskName = nameMatch ? nameMatch[1] : this.formatTitle(task.name);
192
+
193
+ // Load template
194
+ const template = await fs.readFile(this.taskTemplatePath, 'utf8');
195
+
196
+ // Replace template variables
197
+ const tomlContent = template
198
+ .replaceAll('{{taskName}}', taskName)
199
+ .replaceAll('{_bmad}', '_bmad')
200
+ .replaceAll('{_bmad}', this.bmadFolderName)
201
+ .replaceAll('{{module}}', task.module)
202
+ .replaceAll('{{filename}}', task.filename);
203
+
204
+ return tomlContent;
205
+ }
206
+
207
+ /**
208
+ * Create workflow TOML content from artifact
209
+ */
210
+ async createWorkflowToml(artifact) {
211
+ // Extract description from artifact content
212
+ const descriptionMatch = artifact.content.match(/description:\s*"([^"]+)"/);
213
+ const description = descriptionMatch
214
+ ? descriptionMatch[1]
215
+ : `BMAD ${artifact.module.toUpperCase()} Workflow: ${path.basename(artifact.relativePath, '.md')}`;
216
+
217
+ // Strip frontmatter from command content
218
+ const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
219
+ const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
220
+
221
+ return `description = "${description}"
222
+ prompt = """
223
+ ${contentWithoutFrontmatter}
224
+ """
225
+ `;
226
+ }
227
+
228
+ /**
229
+ * Cleanup Gemini configuration - surgically remove only BMAD files
230
+ */
231
+ async cleanup(projectDir) {
232
+ const fs = require('fs-extra');
233
+ const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
234
+
235
+ if (await fs.pathExists(commandsDir)) {
236
+ // Remove any bmad* files (cleans up old bmad- and bmad: formats)
237
+ const files = await fs.readdir(commandsDir);
238
+ let removed = 0;
239
+
240
+ for (const file of files) {
241
+ if (file.startsWith('bmad') && file.endsWith('.toml')) {
242
+ await fs.remove(path.join(commandsDir, file));
243
+ removed++;
244
+ }
245
+ }
246
+
247
+ if (removed > 0) {
248
+ console.log(chalk.dim(` Cleaned up ${removed} existing BMAD files`));
249
+ }
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Install a custom agent launcher for Gemini
255
+ * @param {string} projectDir - Project directory
256
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
257
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
258
+ * @param {Object} metadata - Agent metadata
259
+ * @returns {Object} Installation result
260
+ */
261
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
262
+ const geminiDir = path.join(projectDir, this.configDir);
263
+ const commandsDir = path.join(geminiDir, this.commandsDir);
264
+
265
+ // Create .gemini/commands directory if it doesn't exist
266
+ await fs.ensureDir(commandsDir);
267
+
268
+ // Create custom agent launcher in TOML format
269
+ const launcherContent = `description = "Custom BMAD Agent: ${agentName}"
270
+ prompt = """
271
+ **⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
272
+
273
+ This is a launcher for the custom BMAD agent "${agentName}".
274
+
275
+ ## Usage
276
+ 1. First run: \`${agentPath}\` to load the complete agent
277
+ 2. Then use this command to activate ${agentName}
278
+
279
+ The agent will follow the persona and instructions from the main agent file.
280
+
281
+ ---
282
+
283
+ *Generated by BMAD Method*
284
+ """`;
285
+
286
+ const fileName = `bmad-custom-${agentName.toLowerCase()}.toml`;
287
+ const launcherPath = path.join(commandsDir, fileName);
288
+
289
+ // Write the launcher file
290
+ await fs.writeFile(launcherPath, launcherContent, 'utf8');
291
+
292
+ return {
293
+ ide: 'gemini',
294
+ path: path.relative(projectDir, launcherPath),
295
+ command: agentName,
296
+ type: 'custom-agent-launcher',
297
+ };
298
+ }
299
+ }
300
+
301
+ module.exports = { GeminiSetup };