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,272 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const chalk = require('chalk');
4
+ const { BaseIdeSetup } = require('./_base-ide');
5
+ const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
6
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
7
+ const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
8
+ const { getAgentsFromBmad, getTasksFromBmad } = require('./shared/bmad-artifacts');
9
+ const { toDashPath, customAgentDashName } = require('./shared/path-utils');
10
+
11
+ /**
12
+ * Cline IDE setup handler
13
+ * Installs BMAD artifacts to .clinerules/workflows with flattened naming
14
+ */
15
+ class ClineSetup extends BaseIdeSetup {
16
+ constructor() {
17
+ super('cline', 'Cline', false);
18
+ this.configDir = '.clinerules';
19
+ this.workflowsDir = 'workflows';
20
+ }
21
+
22
+ /**
23
+ * Setup Cline IDE configuration
24
+ * @param {string} projectDir - Project directory
25
+ * @param {string} bmadDir - BMAD installation directory
26
+ * @param {Object} options - Setup options
27
+ */
28
+ async setup(projectDir, bmadDir, options = {}) {
29
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
30
+
31
+ // Create .clinerules/workflows directory
32
+ const clineDir = path.join(projectDir, this.configDir);
33
+ const workflowsDir = path.join(clineDir, this.workflowsDir);
34
+
35
+ await this.ensureDir(workflowsDir);
36
+
37
+ // Clear old BMAD files
38
+ await this.clearOldBmadFiles(workflowsDir);
39
+
40
+ // Collect all artifacts
41
+ const { artifacts, counts } = await this.collectClineArtifacts(projectDir, bmadDir, options);
42
+
43
+ // Write flattened files
44
+ const written = await this.flattenAndWriteArtifacts(artifacts, workflowsDir);
45
+
46
+ console.log(chalk.green(`✓ ${this.name} configured:`));
47
+ console.log(chalk.dim(` - ${counts.agents} agents installed`));
48
+ console.log(chalk.dim(` - ${counts.tasks} tasks installed`));
49
+ console.log(chalk.dim(` - ${counts.workflows} workflow commands installed`));
50
+ if (counts.workflowLaunchers > 0) {
51
+ console.log(chalk.dim(` - ${counts.workflowLaunchers} workflow launchers installed`));
52
+ }
53
+ console.log(chalk.dim(` - ${written} files written to ${path.relative(projectDir, workflowsDir)}`));
54
+
55
+ // Usage instructions
56
+ console.log(chalk.yellow('\n ⚠️ How to Use Cline Workflows'));
57
+ console.log(chalk.cyan(' BMAD workflows are available as slash commands in Cline'));
58
+ console.log(chalk.dim(' Usage:'));
59
+ console.log(chalk.dim(' - Type / to see available commands'));
60
+ console.log(chalk.dim(' - All BMAD items start with "bmad_"'));
61
+ console.log(chalk.dim(' - Example: /bmad_bmm_pm'));
62
+
63
+ return {
64
+ success: true,
65
+ agents: counts.agents,
66
+ tasks: counts.tasks,
67
+ workflows: counts.workflows,
68
+ workflowLaunchers: counts.workflowLaunchers,
69
+ written,
70
+ };
71
+ }
72
+
73
+ /**
74
+ * Detect Cline installation by checking for .clinerules/workflows directory
75
+ */
76
+ async detect(projectDir) {
77
+ const workflowsDir = path.join(projectDir, this.configDir, this.workflowsDir);
78
+
79
+ if (!(await fs.pathExists(workflowsDir))) {
80
+ return false;
81
+ }
82
+
83
+ const entries = await fs.readdir(workflowsDir);
84
+ return entries.some((entry) => entry.startsWith('bmad'));
85
+ }
86
+
87
+ /**
88
+ * Collect all artifacts for Cline export
89
+ */
90
+ async collectClineArtifacts(projectDir, bmadDir, options = {}) {
91
+ const selectedModules = options.selectedModules || [];
92
+ const artifacts = [];
93
+
94
+ // Generate agent launchers
95
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
96
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, selectedModules);
97
+
98
+ // Process agent launchers with project-specific paths
99
+ for (const agentArtifact of agentArtifacts) {
100
+ const content = agentArtifact.content;
101
+
102
+ artifacts.push({
103
+ type: 'agent',
104
+ module: agentArtifact.module,
105
+ sourcePath: agentArtifact.sourcePath,
106
+ relativePath: agentArtifact.relativePath,
107
+ content,
108
+ });
109
+ }
110
+
111
+ // Get tasks
112
+ const tasks = await getTasksFromBmad(bmadDir, selectedModules);
113
+ for (const task of tasks) {
114
+ const content = await this.readAndProcessWithProject(
115
+ task.path,
116
+ {
117
+ module: task.module,
118
+ name: task.name,
119
+ },
120
+ projectDir,
121
+ );
122
+
123
+ artifacts.push({
124
+ type: 'task',
125
+ module: task.module,
126
+ sourcePath: task.path,
127
+ relativePath: path.join(task.module, 'tasks', `${task.name}.md`),
128
+ content,
129
+ });
130
+ }
131
+
132
+ // Get workflows
133
+ const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
134
+ const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
135
+ artifacts.push(...workflowArtifacts);
136
+
137
+ return {
138
+ artifacts,
139
+ counts: {
140
+ agents: agentArtifacts.length,
141
+ tasks: tasks.length,
142
+ workflows: workflowCounts.commands,
143
+ workflowLaunchers: workflowCounts.launchers,
144
+ },
145
+ };
146
+ }
147
+
148
+ /**
149
+ * Flatten file path to bmad_module_type_name.md format
150
+ * Uses shared toDashPath utility
151
+ */
152
+ flattenFilename(relativePath) {
153
+ return toDashPath(relativePath);
154
+ }
155
+
156
+ /**
157
+ * Write all artifacts with flattened names
158
+ */
159
+ async flattenAndWriteArtifacts(artifacts, destDir) {
160
+ let written = 0;
161
+
162
+ for (const artifact of artifacts) {
163
+ const flattenedName = this.flattenFilename(artifact.relativePath);
164
+ const targetPath = path.join(destDir, flattenedName);
165
+ await fs.writeFile(targetPath, artifact.content);
166
+ written++;
167
+ }
168
+
169
+ return written;
170
+ }
171
+
172
+ /**
173
+ * Clear old BMAD files from the workflows directory
174
+ */
175
+ async clearOldBmadFiles(destDir) {
176
+ if (!(await fs.pathExists(destDir))) {
177
+ return;
178
+ }
179
+
180
+ const entries = await fs.readdir(destDir);
181
+
182
+ for (const entry of entries) {
183
+ if (!entry.startsWith('bmad')) {
184
+ continue;
185
+ }
186
+
187
+ const entryPath = path.join(destDir, entry);
188
+ const stat = await fs.stat(entryPath);
189
+ if (stat.isFile()) {
190
+ await fs.remove(entryPath);
191
+ } else if (stat.isDirectory()) {
192
+ await fs.remove(entryPath);
193
+ }
194
+ }
195
+ }
196
+
197
+ /**
198
+ * Read and process file with project-specific paths
199
+ */
200
+ async readAndProcessWithProject(filePath, metadata, projectDir) {
201
+ const content = await fs.readFile(filePath, 'utf8');
202
+ return super.processContent(content, metadata, projectDir);
203
+ }
204
+
205
+ /**
206
+ * Cleanup Cline configuration
207
+ */
208
+ async cleanup(projectDir) {
209
+ const workflowsDir = path.join(projectDir, this.configDir, this.workflowsDir);
210
+ await this.clearOldBmadFiles(workflowsDir);
211
+ console.log(chalk.dim(`Removed ${this.name} BMAD configuration`));
212
+ }
213
+
214
+ /**
215
+ * Install a custom agent launcher for Cline
216
+ * @param {string} projectDir - Project directory
217
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
218
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
219
+ * @param {Object} metadata - Agent metadata
220
+ * @returns {Object} Installation result
221
+ */
222
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
223
+ const clineDir = path.join(projectDir, this.configDir);
224
+ const workflowsDir = path.join(clineDir, this.workflowsDir);
225
+
226
+ // Create .clinerules/workflows directory if it doesn't exist
227
+ await fs.ensureDir(workflowsDir);
228
+
229
+ // Create custom agent launcher workflow
230
+ const launcherContent = `name: ${agentName}
231
+ description: Custom BMAD agent: ${agentName}
232
+
233
+ # ${agentName} Custom Agent
234
+
235
+ **⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
236
+
237
+ This is a launcher for the custom BMAD agent "${agentName}".
238
+
239
+ ## Usage
240
+ 1. First run: \`${agentPath}\` to load the complete agent
241
+ 2. Then use this workflow as ${agentName}
242
+
243
+ The agent will follow the persona and instructions from the main agent file.
244
+
245
+ ---
246
+
247
+ *Generated by BMAD Method*`;
248
+
249
+ // Use underscore format: bmad_custom_fred-commit-poet.md
250
+ const fileName = customAgentDashName(agentName);
251
+ const launcherPath = path.join(workflowsDir, fileName);
252
+
253
+ // Write the launcher file
254
+ await fs.writeFile(launcherPath, launcherContent, 'utf8');
255
+
256
+ return {
257
+ ide: 'cline',
258
+ path: path.relative(projectDir, launcherPath),
259
+ command: fileName.replace('.md', ''),
260
+ type: 'custom-agent-launcher',
261
+ };
262
+ }
263
+
264
+ /**
265
+ * Utility: Ensure directory exists
266
+ */
267
+ async ensureDir(dirPath) {
268
+ await fs.ensureDir(dirPath);
269
+ }
270
+ }
271
+
272
+ module.exports = { ClineSetup };
@@ -0,0 +1,412 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const os = require('node:os');
4
+ const chalk = require('chalk');
5
+ const { BaseIdeSetup } = require('./_base-ide');
6
+ const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
7
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
8
+ const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
9
+ const { getTasksFromBmad } = require('./shared/bmad-artifacts');
10
+ const { toDashPath, customAgentDashName } = require('./shared/path-utils');
11
+ const prompts = require('../../../lib/prompts');
12
+
13
+ /**
14
+ * Codex setup handler (CLI mode)
15
+ */
16
+ class CodexSetup extends BaseIdeSetup {
17
+ constructor() {
18
+ super('codex', 'Codex', true); // preferred IDE
19
+ }
20
+
21
+ /**
22
+ * Collect configuration choices before installation
23
+ * @param {Object} options - Configuration options
24
+ * @returns {Object} Collected configuration
25
+ */
26
+ async collectConfiguration(options = {}) {
27
+ let confirmed = false;
28
+ let installLocation = 'global';
29
+
30
+ while (!confirmed) {
31
+ installLocation = await prompts.select({
32
+ message: 'Where would you like to install Codex CLI prompts?',
33
+ choices: [
34
+ {
35
+ name: 'Global - Simple for single project ' + '(~/.codex/prompts, but references THIS project only)',
36
+ value: 'global',
37
+ },
38
+ {
39
+ name: `Project-specific - Recommended for real work (requires CODEX_HOME=<project-dir>${path.sep}.codex)`,
40
+ value: 'project',
41
+ },
42
+ ],
43
+ default: 'global',
44
+ });
45
+
46
+ // Display detailed instructions for the chosen option
47
+ console.log('');
48
+ if (installLocation === 'project') {
49
+ console.log(this.getProjectSpecificInstructions());
50
+ } else {
51
+ console.log(this.getGlobalInstructions());
52
+ }
53
+
54
+ // Confirm the choice
55
+ confirmed = await prompts.confirm({
56
+ message: 'Proceed with this installation option?',
57
+ default: true,
58
+ });
59
+
60
+ if (!confirmed) {
61
+ console.log(chalk.yellow("\n Let's choose a different installation option.\n"));
62
+ }
63
+ }
64
+
65
+ return { installLocation };
66
+ }
67
+
68
+ /**
69
+ * Setup Codex configuration
70
+ * @param {string} projectDir - Project directory
71
+ * @param {string} bmadDir - BMAD installation directory
72
+ * @param {Object} options - Setup options
73
+ */
74
+ async setup(projectDir, bmadDir, options = {}) {
75
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
76
+
77
+ // Always use CLI mode
78
+ const mode = 'cli';
79
+
80
+ // Get installation location from pre-collected config or default to global
81
+ const installLocation = options.preCollectedConfig?.installLocation || 'global';
82
+
83
+ const { artifacts, counts } = await this.collectClaudeArtifacts(projectDir, bmadDir, options);
84
+
85
+ const destDir = this.getCodexPromptDir(projectDir, installLocation);
86
+ await fs.ensureDir(destDir);
87
+ await this.clearOldBmadFiles(destDir);
88
+
89
+ // Collect artifacts and write using underscore format
90
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
91
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
92
+ const agentCount = await agentGen.writeDashArtifacts(destDir, agentArtifacts);
93
+
94
+ const tasks = await getTasksFromBmad(bmadDir, options.selectedModules || []);
95
+ const taskArtifacts = [];
96
+ for (const task of tasks) {
97
+ const content = await this.readAndProcessWithProject(
98
+ task.path,
99
+ {
100
+ module: task.module,
101
+ name: task.name,
102
+ },
103
+ projectDir,
104
+ );
105
+ taskArtifacts.push({
106
+ type: 'task',
107
+ module: task.module,
108
+ sourcePath: task.path,
109
+ relativePath: path.join(task.module, 'tasks', `${task.name}.md`),
110
+ content,
111
+ });
112
+ }
113
+
114
+ const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
115
+ const { artifacts: workflowArtifacts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
116
+ const workflowCount = await workflowGenerator.writeDashArtifacts(destDir, workflowArtifacts);
117
+
118
+ // Also write tasks using underscore format
119
+ const ttGen = new TaskToolCommandGenerator();
120
+ const tasksWritten = await ttGen.writeDashArtifacts(destDir, taskArtifacts);
121
+
122
+ const written = agentCount + workflowCount + tasksWritten;
123
+
124
+ console.log(chalk.green(`✓ ${this.name} configured:`));
125
+ console.log(chalk.dim(` - Mode: CLI`));
126
+ console.log(chalk.dim(` - ${counts.agents} agents exported`));
127
+ console.log(chalk.dim(` - ${counts.tasks} tasks exported`));
128
+ console.log(chalk.dim(` - ${counts.workflows} workflow commands exported`));
129
+ if (counts.workflowLaunchers > 0) {
130
+ console.log(chalk.dim(` - ${counts.workflowLaunchers} workflow launchers exported`));
131
+ }
132
+ console.log(chalk.dim(` - ${written} Codex prompt files written`));
133
+ console.log(chalk.dim(` - Destination: ${destDir}`));
134
+
135
+ return {
136
+ success: true,
137
+ mode,
138
+ artifacts,
139
+ counts,
140
+ destination: destDir,
141
+ written,
142
+ installLocation,
143
+ };
144
+ }
145
+
146
+ /**
147
+ * Detect Codex installation by checking for BMAD prompt exports
148
+ */
149
+ async detect(projectDir) {
150
+ // Check both global and project-specific locations
151
+ const globalDir = this.getCodexPromptDir(null, 'global');
152
+ const projectDir_local = projectDir || process.cwd();
153
+ const projectSpecificDir = this.getCodexPromptDir(projectDir_local, 'project');
154
+
155
+ // Check global location
156
+ if (await fs.pathExists(globalDir)) {
157
+ const entries = await fs.readdir(globalDir);
158
+ if (entries.some((entry) => entry.startsWith('bmad'))) {
159
+ return true;
160
+ }
161
+ }
162
+
163
+ // Check project-specific location
164
+ if (await fs.pathExists(projectSpecificDir)) {
165
+ const entries = await fs.readdir(projectSpecificDir);
166
+ if (entries.some((entry) => entry.startsWith('bmad'))) {
167
+ return true;
168
+ }
169
+ }
170
+
171
+ return false;
172
+ }
173
+
174
+ /**
175
+ * Collect Claude-style artifacts for Codex export.
176
+ * Returns the normalized artifact list for further processing.
177
+ */
178
+ async collectClaudeArtifacts(projectDir, bmadDir, options = {}) {
179
+ const selectedModules = options.selectedModules || [];
180
+ const artifacts = [];
181
+
182
+ // Generate agent launchers
183
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
184
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, selectedModules);
185
+
186
+ for (const artifact of agentArtifacts) {
187
+ artifacts.push({
188
+ type: 'agent',
189
+ module: artifact.module,
190
+ sourcePath: artifact.sourcePath,
191
+ relativePath: artifact.relativePath,
192
+ content: artifact.content,
193
+ });
194
+ }
195
+
196
+ const tasks = await getTasksFromBmad(bmadDir, selectedModules);
197
+ for (const task of tasks) {
198
+ const content = await this.readAndProcessWithProject(
199
+ task.path,
200
+ {
201
+ module: task.module,
202
+ name: task.name,
203
+ },
204
+ projectDir,
205
+ );
206
+
207
+ artifacts.push({
208
+ type: 'task',
209
+ module: task.module,
210
+ sourcePath: task.path,
211
+ relativePath: path.join(task.module, 'tasks', `${task.name}.md`),
212
+ content,
213
+ });
214
+ }
215
+
216
+ const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
217
+ const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
218
+ artifacts.push(...workflowArtifacts);
219
+
220
+ return {
221
+ artifacts,
222
+ counts: {
223
+ agents: agentArtifacts.length,
224
+ tasks: tasks.length,
225
+ workflows: workflowCounts.commands,
226
+ workflowLaunchers: workflowCounts.launchers,
227
+ },
228
+ };
229
+ }
230
+
231
+ getCodexPromptDir(projectDir = null, location = 'global') {
232
+ if (location === 'project' && projectDir) {
233
+ return path.join(projectDir, '.codex', 'prompts');
234
+ }
235
+ return path.join(os.homedir(), '.codex', 'prompts');
236
+ }
237
+
238
+ async flattenAndWriteArtifacts(artifacts, destDir) {
239
+ let written = 0;
240
+
241
+ for (const artifact of artifacts) {
242
+ const flattenedName = this.flattenFilename(artifact.relativePath);
243
+ const targetPath = path.join(destDir, flattenedName);
244
+ await fs.writeFile(targetPath, artifact.content);
245
+ written++;
246
+ }
247
+
248
+ return written;
249
+ }
250
+
251
+ async clearOldBmadFiles(destDir) {
252
+ if (!(await fs.pathExists(destDir))) {
253
+ return;
254
+ }
255
+
256
+ const entries = await fs.readdir(destDir);
257
+
258
+ for (const entry of entries) {
259
+ if (!entry.startsWith('bmad')) {
260
+ continue;
261
+ }
262
+
263
+ const entryPath = path.join(destDir, entry);
264
+ const stat = await fs.stat(entryPath);
265
+ if (stat.isFile()) {
266
+ await fs.remove(entryPath);
267
+ } else if (stat.isDirectory()) {
268
+ await fs.remove(entryPath);
269
+ }
270
+ }
271
+ }
272
+
273
+ async readAndProcessWithProject(filePath, metadata, projectDir) {
274
+ const content = await fs.readFile(filePath, 'utf8');
275
+ return super.processContent(content, metadata, projectDir);
276
+ }
277
+
278
+ /**
279
+ * Get instructions for global installation
280
+ * @returns {string} Instructions text
281
+ */
282
+ getGlobalInstructions(destDir) {
283
+ const lines = [
284
+ '',
285
+ chalk.bold.cyan('═'.repeat(70)),
286
+ chalk.bold.yellow(' IMPORTANT: Codex Configuration'),
287
+ chalk.bold.cyan('═'.repeat(70)),
288
+ '',
289
+ chalk.white(' /prompts installed globally to your HOME DIRECTORY.'),
290
+ '',
291
+ chalk.yellow(' ⚠️ These prompts reference a specific _bmad path'),
292
+ chalk.dim(" To use with other projects, you'd need to copy the _bmad dir"),
293
+ '',
294
+ chalk.green(' ✓ You can now use /commands in Codex CLI'),
295
+ chalk.dim(' Example: /bmad_bmm_pm'),
296
+ chalk.dim(' Type / to see all available commands'),
297
+ '',
298
+ chalk.bold.cyan('═'.repeat(70)),
299
+ '',
300
+ ];
301
+ return lines.join('\n');
302
+ }
303
+
304
+ /**
305
+ * Get instructions for project-specific installation
306
+ * @param {string} projectDir - Optional project directory
307
+ * @param {string} destDir - Optional destination directory
308
+ * @returns {string} Instructions text
309
+ */
310
+ getProjectSpecificInstructions(projectDir = null, destDir = null) {
311
+ const isWindows = os.platform() === 'win32';
312
+
313
+ const commonLines = [
314
+ '',
315
+ chalk.bold.cyan('═'.repeat(70)),
316
+ chalk.bold.yellow(' Project-Specific Codex Configuration'),
317
+ chalk.bold.cyan('═'.repeat(70)),
318
+ '',
319
+ chalk.white(' Prompts will be installed to: ') + chalk.cyan(destDir || '<project>/.codex/prompts'),
320
+ '',
321
+ chalk.bold.yellow(' ⚠️ REQUIRED: You must set CODEX_HOME to use these prompts'),
322
+ '',
323
+ ];
324
+
325
+ const windowsLines = [
326
+ chalk.bold(' Create a codex.cmd file in your project root:'),
327
+ '',
328
+ chalk.green(' @echo off'),
329
+ chalk.green(' set CODEX_HOME=%~dp0.codex'),
330
+ chalk.green(' codex %*'),
331
+ '',
332
+ chalk.dim(String.raw` Then run: .\codex instead of codex`),
333
+ chalk.dim(' (The %~dp0 gets the directory of the .cmd file)'),
334
+ ];
335
+
336
+ const unixLines = [
337
+ chalk.bold(' Add this alias to your ~/.bashrc or ~/.zshrc:'),
338
+ '',
339
+ chalk.green(' alias codex=\'CODEX_HOME="$PWD/.codex" codex\''),
340
+ '',
341
+ chalk.dim(' After adding, run: source ~/.bashrc (or source ~/.zshrc)'),
342
+ chalk.dim(' (The $PWD uses your current working directory)'),
343
+ ];
344
+ const closingLines = [
345
+ '',
346
+ chalk.dim(' This tells Codex CLI to use prompts from this project instead of ~/.codex'),
347
+ '',
348
+ chalk.bold.cyan('═'.repeat(70)),
349
+ '',
350
+ ];
351
+
352
+ const lines = [...commonLines, ...(isWindows ? windowsLines : unixLines), ...closingLines];
353
+
354
+ return lines.join('\n');
355
+ }
356
+
357
+ /**
358
+ * Cleanup Codex configuration
359
+ */
360
+ async cleanup(projectDir = null) {
361
+ // Clean both global and project-specific locations
362
+ const globalDir = this.getCodexPromptDir(null, 'global');
363
+ await this.clearOldBmadFiles(globalDir);
364
+
365
+ if (projectDir) {
366
+ const projectSpecificDir = this.getCodexPromptDir(projectDir, 'project');
367
+ await this.clearOldBmadFiles(projectSpecificDir);
368
+ }
369
+ }
370
+
371
+ /**
372
+ * Install a custom agent launcher for Codex
373
+ * @param {string} projectDir - Project directory (not used, Codex installs to home)
374
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
375
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
376
+ * @param {Object} metadata - Agent metadata
377
+ * @returns {Object|null} Info about created command
378
+ */
379
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
380
+ const destDir = this.getCodexPromptDir(projectDir, 'project');
381
+ await fs.ensureDir(destDir);
382
+
383
+ const launcherContent = `---
384
+ name: '${agentName}'
385
+ description: '${agentName} agent'
386
+ ---
387
+
388
+ You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
389
+
390
+ <agent-activation CRITICAL="TRUE">
391
+ 1. LOAD the FULL agent file from @${agentPath}
392
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
393
+ 3. FOLLOW every step in the <activation> section precisely
394
+ 4. DISPLAY the welcome/greeting as instructed
395
+ 5. PRESENT the numbered menu
396
+ 6. WAIT for user input before proceeding
397
+ </agent-activation>
398
+ `;
399
+
400
+ // Use underscore format: bmad_custom_fred-commit-poet.md
401
+ const fileName = customAgentDashName(agentName);
402
+ const launcherPath = path.join(destDir, fileName);
403
+ await fs.writeFile(launcherPath, launcherContent, 'utf8');
404
+
405
+ return {
406
+ path: path.relative(projectDir, launcherPath),
407
+ command: `/${fileName.replace('.md', '')}`,
408
+ };
409
+ }
410
+ }
411
+
412
+ module.exports = { CodexSetup };