bmad-fh 6.0.0-alpha.052779ef

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 (626) hide show
  1. package/.coderabbit.yaml +40 -0
  2. package/.githooks/post-checkout +129 -0
  3. package/.githooks/pre-commit +63 -0
  4. package/.githooks/pre-push +135 -0
  5. package/.github/CODE_OF_CONDUCT.md +128 -0
  6. package/.github/FUNDING.yaml +15 -0
  7. package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
  8. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  9. package/.github/ISSUE_TEMPLATE/issue.md +32 -0
  10. package/.github/scripts/discord-helpers.sh +34 -0
  11. package/.github/workflows/bundle-latest.yaml +330 -0
  12. package/.github/workflows/discord.yaml +90 -0
  13. package/.github/workflows/docs.yaml +63 -0
  14. package/.github/workflows/manual-release.yaml +190 -0
  15. package/.github/workflows/publish-multi-artifact.yaml +54 -0
  16. package/.github/workflows/quality.yaml +115 -0
  17. package/.husky/pre-commit +20 -0
  18. package/.markdownlint-cli2.yaml +41 -0
  19. package/.nvmrc +1 -0
  20. package/.prettierignore +9 -0
  21. package/.vscode/settings.json +97 -0
  22. package/CHANGELOG.md +1394 -0
  23. package/CNAME +1 -0
  24. package/CONTRIBUTING.md +306 -0
  25. package/CONTRIBUTORS.md +32 -0
  26. package/LICENSE +30 -0
  27. package/README.md +126 -0
  28. package/SECURITY.md +85 -0
  29. package/TRADEMARK.md +55 -0
  30. package/Wordmark.png +0 -0
  31. package/banner-bmad-method.png +0 -0
  32. package/docs/404.md +9 -0
  33. package/docs/_README_WORKFLOW_DIAGRAMS.md +40 -0
  34. package/docs/_STYLE_GUIDE.md +367 -0
  35. package/docs/_archive/customize-workflows.md +30 -0
  36. package/docs/_archive/getting-started-bmadv4.md +247 -0
  37. package/docs/_archive/vendor-workflows.md +52 -0
  38. package/docs/downloads.md +72 -0
  39. package/docs/explanation/agents/barry-quick-flow.md +328 -0
  40. package/docs/explanation/agents/index.md +19 -0
  41. package/docs/explanation/architecture/four-phases.md +107 -0
  42. package/docs/explanation/architecture/preventing-agent-conflicts.md +111 -0
  43. package/docs/explanation/architecture/why-solutioning-matters.md +75 -0
  44. package/docs/explanation/bmm/index.md +131 -0
  45. package/docs/explanation/core/index.md +18 -0
  46. package/docs/explanation/core-concepts/agent-roles.md +179 -0
  47. package/docs/explanation/core-concepts/index.md +35 -0
  48. package/docs/explanation/core-concepts/what-are-agents.md +97 -0
  49. package/docs/explanation/core-concepts/what-are-modules.md +85 -0
  50. package/docs/explanation/core-concepts/what-are-workflows.md +204 -0
  51. package/docs/explanation/faq/brownfield-faq.md +73 -0
  52. package/docs/explanation/faq/getting-started-faq.md +67 -0
  53. package/docs/explanation/faq/implementation-faq.md +52 -0
  54. package/docs/explanation/faq/index.md +16 -0
  55. package/docs/explanation/faq/levels-and-tracks-faq.md +52 -0
  56. package/docs/explanation/faq/planning-faq.md +41 -0
  57. package/docs/explanation/faq/tools-faq.md +277 -0
  58. package/docs/explanation/faq/workflows-faq.md +61 -0
  59. package/docs/explanation/features/advanced-elicitation.md +95 -0
  60. package/docs/explanation/features/brainstorming-techniques.md +92 -0
  61. package/docs/explanation/features/party-mode.md +95 -0
  62. package/docs/explanation/features/quick-flow.md +149 -0
  63. package/docs/explanation/features/tea-overview.md +410 -0
  64. package/docs/explanation/features/web-bundles.md +34 -0
  65. package/docs/explanation/philosophy/facilitation-over-generation.md +333 -0
  66. package/docs/explanation/philosophy/testing-as-engineering.md +112 -0
  67. package/docs/explanation/tea/engagement-models.md +710 -0
  68. package/docs/explanation/tea/fixture-architecture.md +457 -0
  69. package/docs/explanation/tea/knowledge-base-system.md +554 -0
  70. package/docs/explanation/tea/network-first-patterns.md +853 -0
  71. package/docs/explanation/tea/risk-based-testing.md +586 -0
  72. package/docs/explanation/tea/test-quality-standards.md +907 -0
  73. package/docs/how-to/brownfield/add-feature-to-existing.md +74 -0
  74. package/docs/how-to/brownfield/document-existing-project.md +66 -0
  75. package/docs/how-to/brownfield/index.md +84 -0
  76. package/docs/how-to/brownfield/quick-fix-in-brownfield.md +77 -0
  77. package/docs/how-to/brownfield/use-tea-for-enterprise.md +526 -0
  78. package/docs/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
  79. package/docs/how-to/customization/customize-agents.md +212 -0
  80. package/docs/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
  81. package/docs/how-to/customization/index.md +23 -0
  82. package/docs/how-to/customization/integrate-playwright-utils.md +813 -0
  83. package/docs/how-to/customization/shard-large-documents.md +101 -0
  84. package/docs/how-to/get-answers-about-bmad.md +102 -0
  85. package/docs/how-to/installation/index.md +12 -0
  86. package/docs/how-to/installation/install-bmad.md +111 -0
  87. package/docs/how-to/installation/install-custom-modules.md +118 -0
  88. package/docs/how-to/installation/upgrade-to-v6.md +131 -0
  89. package/docs/how-to/workflows/bmgd-quick-flow.md +156 -0
  90. package/docs/how-to/workflows/conduct-research.md +97 -0
  91. package/docs/how-to/workflows/create-architecture.md +119 -0
  92. package/docs/how-to/workflows/create-epics-and-stories.md +109 -0
  93. package/docs/how-to/workflows/create-prd.md +91 -0
  94. package/docs/how-to/workflows/create-product-brief.md +94 -0
  95. package/docs/how-to/workflows/create-story.md +102 -0
  96. package/docs/how-to/workflows/create-ux-design.md +100 -0
  97. package/docs/how-to/workflows/implement-story.md +97 -0
  98. package/docs/how-to/workflows/quick-spec.md +122 -0
  99. package/docs/how-to/workflows/run-atdd.md +436 -0
  100. package/docs/how-to/workflows/run-automate.md +653 -0
  101. package/docs/how-to/workflows/run-brainstorming-session.md +73 -0
  102. package/docs/how-to/workflows/run-code-review.md +89 -0
  103. package/docs/how-to/workflows/run-implementation-readiness.md +125 -0
  104. package/docs/how-to/workflows/run-nfr-assess.md +679 -0
  105. package/docs/how-to/workflows/run-sprint-planning.md +94 -0
  106. package/docs/how-to/workflows/run-test-design.md +98 -0
  107. package/docs/how-to/workflows/run-test-review.md +605 -0
  108. package/docs/how-to/workflows/run-trace.md +883 -0
  109. package/docs/how-to/workflows/setup-ci.md +712 -0
  110. package/docs/how-to/workflows/setup-party-mode.md +89 -0
  111. package/docs/how-to/workflows/setup-test-framework.md +98 -0
  112. package/docs/index.md +63 -0
  113. package/docs/migration-guide.md +365 -0
  114. package/docs/multi-scope-guide.md +379 -0
  115. package/docs/plans/multi-scope-parallel-artifacts-plan.md +695 -0
  116. package/docs/reference/agents/index.md +109 -0
  117. package/docs/reference/configuration/core-tasks.md +67 -0
  118. package/docs/reference/configuration/global-config.md +28 -0
  119. package/docs/reference/glossary/index.md +159 -0
  120. package/docs/reference/tea/commands.md +254 -0
  121. package/docs/reference/tea/configuration.md +678 -0
  122. package/docs/reference/tea/knowledge-base.md +340 -0
  123. package/docs/reference/workflows/core-workflows.md +32 -0
  124. package/docs/reference/workflows/document-project.md +73 -0
  125. package/docs/reference/workflows/index.md +12 -0
  126. package/docs/tutorials/getting-started/getting-started-bmadv6.md +246 -0
  127. package/docs/tutorials/getting-started/images/workflow-method-greenfield.excalidraw +5034 -0
  128. package/docs/tutorials/getting-started/images/workflow-method-greenfield.svg +4 -0
  129. package/docs/tutorials/getting-started/images/workflow-overview.jpg +0 -0
  130. package/docs/tutorials/getting-started/tea-lite-quickstart.md +444 -0
  131. package/docs/tutorials/getting-started/workflow-overview.jpg +0 -0
  132. package/eslint.config.mjs +152 -0
  133. package/package.json +117 -0
  134. package/prettier.config.mjs +32 -0
  135. package/src/bmm/_module-installer/installer.js +48 -0
  136. package/src/bmm/_module-installer/platform-specifics/claude-code.js +35 -0
  137. package/src/bmm/_module-installer/platform-specifics/windsurf.js +32 -0
  138. package/src/bmm/agents/analyst.agent.yaml +41 -0
  139. package/src/bmm/agents/architect.agent.yaml +33 -0
  140. package/src/bmm/agents/dev.agent.yaml +38 -0
  141. package/src/bmm/agents/pm.agent.yaml +51 -0
  142. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  143. package/src/bmm/agents/sm.agent.yaml +47 -0
  144. package/src/bmm/agents/tea.agent.yaml +68 -0
  145. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  146. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +49 -0
  147. package/src/bmm/agents/ux-designer.agent.yaml +30 -0
  148. package/src/bmm/data/README.md +29 -0
  149. package/src/bmm/data/project-context-template.md +40 -0
  150. package/src/bmm/module.yaml +64 -0
  151. package/src/bmm/sub-modules/claude-code/config.yaml +4 -0
  152. package/src/bmm/sub-modules/claude-code/injections.yaml +242 -0
  153. package/src/bmm/sub-modules/claude-code/readme.md +87 -0
  154. package/src/bmm/teams/default-party.csv +21 -0
  155. package/src/bmm/teams/team-fullstack.yaml +12 -0
  156. package/src/bmm/testarch/knowledge/api-request.md +442 -0
  157. package/src/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
  158. package/src/bmm/testarch/knowledge/auth-session.md +552 -0
  159. package/src/bmm/testarch/knowledge/burn-in.md +273 -0
  160. package/src/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  161. package/src/bmm/testarch/knowledge/component-tdd.md +486 -0
  162. package/src/bmm/testarch/knowledge/contract-testing.md +957 -0
  163. package/src/bmm/testarch/knowledge/data-factories.md +500 -0
  164. package/src/bmm/testarch/knowledge/email-auth.md +721 -0
  165. package/src/bmm/testarch/knowledge/error-handling.md +725 -0
  166. package/src/bmm/testarch/knowledge/feature-flags.md +750 -0
  167. package/src/bmm/testarch/knowledge/file-utils.md +463 -0
  168. package/src/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  169. package/src/bmm/testarch/knowledge/fixtures-composition.md +382 -0
  170. package/src/bmm/testarch/knowledge/intercept-network-call.md +430 -0
  171. package/src/bmm/testarch/knowledge/log.md +429 -0
  172. package/src/bmm/testarch/knowledge/network-error-monitor.md +405 -0
  173. package/src/bmm/testarch/knowledge/network-first.md +486 -0
  174. package/src/bmm/testarch/knowledge/network-recorder.md +527 -0
  175. package/src/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  176. package/src/bmm/testarch/knowledge/overview.md +286 -0
  177. package/src/bmm/testarch/knowledge/playwright-config.md +730 -0
  178. package/src/bmm/testarch/knowledge/probability-impact.md +601 -0
  179. package/src/bmm/testarch/knowledge/recurse.md +421 -0
  180. package/src/bmm/testarch/knowledge/risk-governance.md +615 -0
  181. package/src/bmm/testarch/knowledge/selective-testing.md +732 -0
  182. package/src/bmm/testarch/knowledge/selector-resilience.md +527 -0
  183. package/src/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  184. package/src/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  185. package/src/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  186. package/src/bmm/testarch/knowledge/test-quality.md +664 -0
  187. package/src/bmm/testarch/knowledge/timing-debugging.md +372 -0
  188. package/src/bmm/testarch/knowledge/visual-debugging.md +524 -0
  189. package/src/bmm/testarch/tea-index.csv +34 -0
  190. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  191. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  192. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  193. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  194. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  195. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  196. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  197. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +194 -0
  198. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
  199. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  200. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  201. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  202. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  203. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  204. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  205. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  206. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  207. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
  208. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  209. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  210. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  211. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  212. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  213. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  214. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  215. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  216. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  217. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
  218. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  219. package/src/bmm/workflows/1-analysis/research/workflow.md +173 -0
  220. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  221. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  222. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  223. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  224. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  225. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  226. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  227. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  228. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  229. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  230. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  231. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  232. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  233. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  234. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +228 -0
  235. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  236. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
  237. package/src/bmm/workflows/2-plan-workflows/prd/data/domain-complexity.csv +13 -0
  238. package/src/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md +197 -0
  239. package/src/bmm/workflows/2-plan-workflows/prd/data/project-types.csv +11 -0
  240. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01-init.md +191 -0
  241. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01b-continue.md +153 -0
  242. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md +224 -0
  243. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-03-success.md +226 -0
  244. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md +213 -0
  245. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md +207 -0
  246. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-06-innovation.md +226 -0
  247. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-07-project-type.md +237 -0
  248. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-08-scoping.md +228 -0
  249. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-09-functional.md +231 -0
  250. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
  251. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md +217 -0
  252. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md +180 -0
  253. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  254. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  255. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md +249 -0
  256. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md +253 -0
  257. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md +168 -0
  258. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  259. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  260. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  261. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  262. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  263. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  264. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  265. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  266. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  267. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  268. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  269. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  270. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  271. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
  272. package/src/bmm/workflows/2-plan-workflows/prd/templates/prd-template.md +10 -0
  273. package/src/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md +433 -0
  274. package/src/bmm/workflows/2-plan-workflows/prd/workflow.md +150 -0
  275. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
  276. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  277. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  278. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  279. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  280. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +133 -0
  281. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  282. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
  283. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  284. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
  285. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  286. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  287. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
  288. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  289. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
  290. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  291. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  292. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  293. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  294. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +352 -0
  295. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
  296. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  297. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  298. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  299. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +145 -0
  300. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  301. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
  302. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  303. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  304. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +51 -0
  305. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  306. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
  307. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +60 -0
  308. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  309. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
  310. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  311. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +61 -0
  312. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  313. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  314. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +27 -0
  315. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
  316. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +58 -0
  317. package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  318. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
  319. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  320. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +54 -0
  321. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
  322. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +36 -0
  323. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +156 -0
  324. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
  325. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -0
  326. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
  327. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
  328. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +140 -0
  329. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +52 -0
  330. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
  331. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -0
  332. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
  333. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +191 -0
  334. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  335. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  336. package/src/bmm/workflows/document-project/checklist.md +245 -0
  337. package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  338. package/src/bmm/workflows/document-project/instructions.md +221 -0
  339. package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  340. package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
  341. package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  342. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  343. package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  344. package/src/bmm/workflows/document-project/workflow.yaml +30 -0
  345. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  346. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  347. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  348. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  349. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
  350. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
  351. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
  352. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
  353. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
  354. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
  355. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
  356. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
  357. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
  358. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
  359. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
  360. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
  361. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
  362. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
  363. package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
  364. package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
  365. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
  366. package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
  367. package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
  368. package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +364 -0
  369. package/src/bmm/workflows/testarch/atdd/checklist.md +374 -0
  370. package/src/bmm/workflows/testarch/atdd/instructions.md +806 -0
  371. package/src/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
  372. package/src/bmm/workflows/testarch/automate/checklist.md +582 -0
  373. package/src/bmm/workflows/testarch/automate/instructions.md +1324 -0
  374. package/src/bmm/workflows/testarch/automate/workflow.yaml +54 -0
  375. package/src/bmm/workflows/testarch/ci/checklist.md +248 -0
  376. package/src/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
  377. package/src/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
  378. package/src/bmm/workflows/testarch/ci/instructions.md +536 -0
  379. package/src/bmm/workflows/testarch/ci/workflow.yaml +47 -0
  380. package/src/bmm/workflows/testarch/framework/checklist.md +321 -0
  381. package/src/bmm/workflows/testarch/framework/instructions.md +481 -0
  382. package/src/bmm/workflows/testarch/framework/workflow.yaml +49 -0
  383. package/src/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
  384. package/src/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
  385. package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +445 -0
  386. package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
  387. package/src/bmm/workflows/testarch/test-design/checklist.md +235 -0
  388. package/src/bmm/workflows/testarch/test-design/instructions.md +788 -0
  389. package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
  390. package/src/bmm/workflows/testarch/test-design/workflow.yaml +56 -0
  391. package/src/bmm/workflows/testarch/test-review/checklist.md +472 -0
  392. package/src/bmm/workflows/testarch/test-review/instructions.md +628 -0
  393. package/src/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
  394. package/src/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
  395. package/src/bmm/workflows/testarch/trace/checklist.md +655 -0
  396. package/src/bmm/workflows/testarch/trace/instructions.md +1047 -0
  397. package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
  398. package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
  399. package/src/bmm/workflows/workflow-status/init/instructions.md +346 -0
  400. package/src/bmm/workflows/workflow-status/init/workflow.yaml +30 -0
  401. package/src/bmm/workflows/workflow-status/instructions.md +397 -0
  402. package/src/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +103 -0
  403. package/src/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +100 -0
  404. package/src/bmm/workflows/workflow-status/paths/method-brownfield.yaml +103 -0
  405. package/src/bmm/workflows/workflow-status/paths/method-greenfield.yaml +100 -0
  406. package/src/bmm/workflows/workflow-status/project-levels.yaml +59 -0
  407. package/src/bmm/workflows/workflow-status/workflow-status-template.yaml +24 -0
  408. package/src/bmm/workflows/workflow-status/workflow.yaml +32 -0
  409. package/src/core/_module-installer/installer.js +60 -0
  410. package/src/core/agents/bmad-master.agent.yaml +30 -0
  411. package/src/core/lib/scope/artifact-resolver.js +298 -0
  412. package/src/core/lib/scope/event-logger.js +400 -0
  413. package/src/core/lib/scope/index.js +30 -0
  414. package/src/core/lib/scope/scope-context.js +301 -0
  415. package/src/core/lib/scope/scope-initializer.js +456 -0
  416. package/src/core/lib/scope/scope-manager.js +512 -0
  417. package/src/core/lib/scope/scope-migrator.js +434 -0
  418. package/src/core/lib/scope/scope-sync.js +483 -0
  419. package/src/core/lib/scope/scope-validator.js +294 -0
  420. package/src/core/lib/scope/state-lock.js +336 -0
  421. package/src/core/module.yaml +53 -0
  422. package/src/core/resources/excalidraw/README.md +160 -0
  423. package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
  424. package/src/core/resources/excalidraw/library-loader.md +50 -0
  425. package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
  426. package/src/core/tasks/editorial-review-prose.xml +91 -0
  427. package/src/core/tasks/editorial-review-structure.xml +198 -0
  428. package/src/core/tasks/index-docs.xml +65 -0
  429. package/src/core/tasks/review-adversarial-general.xml +46 -0
  430. package/src/core/tasks/shard-doc.xml +109 -0
  431. package/src/core/tasks/workflow.xml +277 -0
  432. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  433. package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
  434. package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
  435. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  436. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  437. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  438. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  439. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  440. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  441. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  442. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  443. package/src/core/workflows/brainstorming/template.md +15 -0
  444. package/src/core/workflows/brainstorming/workflow.md +58 -0
  445. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  446. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  447. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
  448. package/src/core/workflows/party-mode/workflow.md +194 -0
  449. package/src/utility/agent-components/activation-rules.txt +6 -0
  450. package/src/utility/agent-components/activation-steps.txt +28 -0
  451. package/src/utility/agent-components/agent-command-header.md +1 -0
  452. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  453. package/src/utility/agent-components/handler-action.txt +4 -0
  454. package/src/utility/agent-components/handler-data.txt +5 -0
  455. package/src/utility/agent-components/handler-exec.txt +19 -0
  456. package/src/utility/agent-components/handler-multi.txt +14 -0
  457. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  458. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  459. package/src/utility/agent-components/handler-workflow.txt +10 -0
  460. package/src/utility/agent-components/menu-handlers.txt +6 -0
  461. package/test/README.md +295 -0
  462. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
  463. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
  464. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
  465. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
  466. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
  467. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
  468. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
  469. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
  470. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
  471. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
  472. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
  473. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
  474. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
  475. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
  476. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
  477. package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
  478. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
  479. package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
  480. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
  481. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
  482. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
  483. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
  484. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
  485. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
  486. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
  487. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
  488. package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
  489. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
  490. package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
  491. package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
  492. package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
  493. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
  494. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
  495. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
  496. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
  497. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
  498. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
  499. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
  500. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
  501. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
  502. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
  503. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
  504. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
  505. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
  506. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
  507. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
  508. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
  509. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
  510. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
  511. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
  512. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
  513. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
  514. package/test/test-agent-schema.js +387 -0
  515. package/test/test-cli-integration.sh +159 -0
  516. package/test/test-installation-components.js +214 -0
  517. package/test/test-scope-e2e.js +439 -0
  518. package/test/test-scope-system.js +781 -0
  519. package/test/unit-test-schema.js +133 -0
  520. package/tools/bmad-npx-wrapper.js +38 -0
  521. package/tools/build-docs.js +577 -0
  522. package/tools/cli/README.md +7 -0
  523. package/tools/cli/bmad-cli.js +58 -0
  524. package/tools/cli/commands/install.js +87 -0
  525. package/tools/cli/commands/scope.js +474 -0
  526. package/tools/cli/external-official-modules.yaml +41 -0
  527. package/tools/cli/installers/install-messages.yaml +58 -0
  528. package/tools/cli/installers/lib/core/config-collector.js +1079 -0
  529. package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
  530. package/tools/cli/installers/lib/core/dependency-resolver.js +739 -0
  531. package/tools/cli/installers/lib/core/detector.js +223 -0
  532. package/tools/cli/installers/lib/core/ide-config-manager.js +156 -0
  533. package/tools/cli/installers/lib/core/installer.js +2585 -0
  534. package/tools/cli/installers/lib/core/manifest-generator.js +963 -0
  535. package/tools/cli/installers/lib/core/manifest.js +590 -0
  536. package/tools/cli/installers/lib/custom/handler.js +363 -0
  537. package/tools/cli/installers/lib/ide/_base-ide.js +654 -0
  538. package/tools/cli/installers/lib/ide/antigravity.js +486 -0
  539. package/tools/cli/installers/lib/ide/auggie.js +244 -0
  540. package/tools/cli/installers/lib/ide/claude-code.js +487 -0
  541. package/tools/cli/installers/lib/ide/cline.js +269 -0
  542. package/tools/cli/installers/lib/ide/codex.js +375 -0
  543. package/tools/cli/installers/lib/ide/crush.js +300 -0
  544. package/tools/cli/installers/lib/ide/cursor.js +169 -0
  545. package/tools/cli/installers/lib/ide/gemini.js +301 -0
  546. package/tools/cli/installers/lib/ide/github-copilot.js +383 -0
  547. package/tools/cli/installers/lib/ide/iflow.js +191 -0
  548. package/tools/cli/installers/lib/ide/kilo.js +250 -0
  549. package/tools/cli/installers/lib/ide/kiro-cli.js +326 -0
  550. package/tools/cli/installers/lib/ide/manager.js +244 -0
  551. package/tools/cli/installers/lib/ide/opencode.js +257 -0
  552. package/tools/cli/installers/lib/ide/qwen.js +372 -0
  553. package/tools/cli/installers/lib/ide/roo.js +270 -0
  554. package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
  555. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +96 -0
  556. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +158 -0
  557. package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
  558. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +119 -0
  559. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +242 -0
  560. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +29 -0
  561. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
  562. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
  563. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +30 -0
  564. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +45 -0
  565. package/tools/cli/installers/lib/ide/trae.js +313 -0
  566. package/tools/cli/installers/lib/ide/windsurf.js +258 -0
  567. package/tools/cli/installers/lib/message-loader.js +85 -0
  568. package/tools/cli/installers/lib/modules/external-manager.js +133 -0
  569. package/tools/cli/installers/lib/modules/manager.js +1362 -0
  570. package/tools/cli/lib/activation-builder.js +163 -0
  571. package/tools/cli/lib/agent/compiler.js +522 -0
  572. package/tools/cli/lib/agent/installer.js +716 -0
  573. package/tools/cli/lib/agent/template-engine.js +152 -0
  574. package/tools/cli/lib/agent-analyzer.js +109 -0
  575. package/tools/cli/lib/agent-party-generator.js +194 -0
  576. package/tools/cli/lib/cli-utils.js +227 -0
  577. package/tools/cli/lib/config.js +213 -0
  578. package/tools/cli/lib/file-ops.js +204 -0
  579. package/tools/cli/lib/platform-codes.js +116 -0
  580. package/tools/cli/lib/project-root.js +77 -0
  581. package/tools/cli/lib/prompts.js +433 -0
  582. package/tools/cli/lib/ui.js +1591 -0
  583. package/tools/cli/lib/xml-handler.js +177 -0
  584. package/tools/cli/lib/xml-to-markdown.js +82 -0
  585. package/tools/cli/lib/yaml-format.js +245 -0
  586. package/tools/cli/lib/yaml-xml-builder.js +587 -0
  587. package/tools/cli/scripts/migrate-workflows.js +273 -0
  588. package/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
  589. package/tools/docs/index.md +2 -0
  590. package/tools/fix-doc-links.js +288 -0
  591. package/tools/flattener/aggregate.js +76 -0
  592. package/tools/flattener/binary.js +80 -0
  593. package/tools/flattener/discovery.js +71 -0
  594. package/tools/flattener/files.js +35 -0
  595. package/tools/flattener/ignoreRules.js +172 -0
  596. package/tools/flattener/main.js +483 -0
  597. package/tools/flattener/projectRoot.js +201 -0
  598. package/tools/flattener/prompts.js +44 -0
  599. package/tools/flattener/stats.helpers.js +368 -0
  600. package/tools/flattener/stats.js +75 -0
  601. package/tools/flattener/test-matrix.js +409 -0
  602. package/tools/flattener/xml.js +82 -0
  603. package/tools/format-workflow-md.js +263 -0
  604. package/tools/lib/xml-utils.js +13 -0
  605. package/tools/maintainer/review-pr-README.md +55 -0
  606. package/tools/maintainer/review-pr.md +242 -0
  607. package/tools/migrate-custom-module-paths.js +124 -0
  608. package/tools/platform-codes.yaml +157 -0
  609. package/tools/schema/agent.js +493 -0
  610. package/tools/validate-agent-schema.js +110 -0
  611. package/tools/validate-doc-links.js +363 -0
  612. package/tools/validate-svg-changes.sh +356 -0
  613. package/website/README.md +76 -0
  614. package/website/astro.config.mjs +228 -0
  615. package/website/public/favicon.ico +0 -0
  616. package/website/public/img/bmad-dark.png +0 -0
  617. package/website/public/img/bmad-light.png +0 -0
  618. package/website/public/img/logo.svg +4 -0
  619. package/website/public/robots.txt +37 -0
  620. package/website/src/components/Banner.astro +59 -0
  621. package/website/src/components/Header.astro +121 -0
  622. package/website/src/components/MobileMenuFooter.astro +53 -0
  623. package/website/src/content/config.ts +6 -0
  624. package/website/src/lib/site-url.js +25 -0
  625. package/website/src/rehype-markdown-links.js +102 -0
  626. package/website/src/styles/custom.css +485 -0
@@ -0,0 +1,577 @@
1
+ /**
2
+ * BMAD Documentation Build Pipeline
3
+ *
4
+ * Consolidates docs from multiple sources, generates LLM-friendly files,
5
+ * creates downloadable bundles, and builds the Astro+Starlight site.
6
+ *
7
+ * Build outputs:
8
+ * build/artifacts/ - With llms.txt, llms-full.txt, ZIPs
9
+ * build/site/ - Final Astro output (deployable)
10
+ */
11
+
12
+ const { execSync } = require('node:child_process');
13
+ const fs = require('node:fs');
14
+ const path = require('node:path');
15
+ const archiver = require('archiver');
16
+
17
+ // =============================================================================
18
+ // Configuration
19
+ // =============================================================================
20
+
21
+ const PROJECT_ROOT = path.dirname(__dirname);
22
+ const BUILD_DIR = path.join(PROJECT_ROOT, 'build');
23
+
24
+ const SITE_URL = process.env.SITE_URL || 'https://bmad-code-org.github.io/BMAD-METHOD';
25
+ const REPO_URL = 'https://github.com/bmad-code-org/BMAD-METHOD';
26
+
27
+ // DO NOT CHANGE THESE VALUES!
28
+ // llms-full.txt is consumed by AI agents as context. Most LLMs have ~200k token limits.
29
+ // 600k chars ≈ 150k tokens (safe margin). Exceeding this breaks AI agent functionality.
30
+ const LLM_MAX_CHARS = 600_000;
31
+ const LLM_WARN_CHARS = 500_000;
32
+
33
+ const LLM_EXCLUDE_PATTERNS = [
34
+ 'changelog',
35
+ 'ide-info/',
36
+ 'v4-to-v6-upgrade',
37
+ 'downloads/',
38
+ 'faq',
39
+ 'reference/glossary/',
40
+ 'explanation/game-dev/',
41
+ // Note: Files/dirs starting with _ (like _STYLE_GUIDE.md, _archive/) are excluded in shouldExcludeFromLlm()
42
+ ];
43
+
44
+ // =============================================================================
45
+ // Main Entry Point
46
+ /**
47
+ * Orchestrates the full BMAD documentation build pipeline.
48
+ *
49
+ * Executes the high-level build steps in sequence: prints headers and paths, validates internal
50
+ * documentation links, cleans the build directory, generates artifacts from the `docs/` folder,
51
+ * builds the Astro site, and prints a final build summary.
52
+ */
53
+
54
+ async function main() {
55
+ console.log();
56
+ printBanner('BMAD Documentation Build Pipeline');
57
+ console.log();
58
+ console.log(`Project root: ${PROJECT_ROOT}`);
59
+ console.log(`Build directory: ${BUILD_DIR}`);
60
+ console.log();
61
+
62
+ // Check for broken internal links before building
63
+ checkDocLinks();
64
+
65
+ cleanBuildDirectory();
66
+
67
+ const docsDir = path.join(PROJECT_ROOT, 'docs');
68
+ const artifactsDir = await generateArtifacts(docsDir);
69
+ const siteDir = buildAstroSite();
70
+
71
+ printBuildSummary(docsDir, artifactsDir, siteDir);
72
+ }
73
+
74
+ main().catch((error) => {
75
+ console.error(error);
76
+ process.exit(1);
77
+ });
78
+
79
+ // =============================================================================
80
+ // Pipeline Stages
81
+ /**
82
+ * Generate LLM files and downloadable bundles for the documentation pipeline.
83
+ *
84
+ * Creates the build/artifacts directory, writes `llms.txt` and `llms-full.txt` (sourced from the provided docs directory),
85
+ * and produces download ZIP bundles.
86
+ *
87
+ * @param {string} docsDir - Path to the source docs directory containing Markdown files.
88
+ * @returns {string} Path to the created artifacts directory.
89
+ */
90
+
91
+ async function generateArtifacts(docsDir) {
92
+ printHeader('Generating LLM files and download bundles');
93
+
94
+ const outputDir = path.join(BUILD_DIR, 'artifacts');
95
+ fs.mkdirSync(outputDir, { recursive: true });
96
+
97
+ // Generate LLM files reading from docs/, output to artifacts/
98
+ generateLlmsTxt(outputDir);
99
+ generateLlmsFullTxt(docsDir, outputDir);
100
+ await generateDownloadBundles(outputDir);
101
+
102
+ console.log();
103
+ console.log(` \u001B[32m✓\u001B[0m Artifact generation complete`);
104
+
105
+ return outputDir;
106
+ }
107
+
108
+ /**
109
+ * Builds the Astro + Starlight site and copies generated artifacts into the site output directory.
110
+ *
111
+ * @returns {string} The filesystem path to the built site directory (e.g., build/site).
112
+ */
113
+ function buildAstroSite() {
114
+ printHeader('Building Astro + Starlight site');
115
+
116
+ const siteDir = path.join(BUILD_DIR, 'site');
117
+ const artifactsDir = path.join(BUILD_DIR, 'artifacts');
118
+
119
+ // Build Astro site (outputs to build/site via astro.config.mjs)
120
+ runAstroBuild();
121
+ copyArtifactsToSite(artifactsDir, siteDir);
122
+
123
+ // No longer needed: Inject AI agents banner into every HTML page
124
+ // injectAgentBanner(siteDir);
125
+
126
+ console.log();
127
+ console.log(` \u001B[32m✓\u001B[0m Astro build complete`);
128
+
129
+ return siteDir;
130
+ }
131
+
132
+ // =============================================================================
133
+ // LLM File Generation
134
+ /**
135
+ * Create a concise llms.txt summary file containing project metadata, core links, and quick navigation entries for LLM consumption.
136
+ *
137
+ * Writes the file to `${outputDir}/llms.txt`.
138
+ *
139
+ * @param {string} outputDir - Destination directory where `llms.txt` will be written.
140
+ */
141
+
142
+ function generateLlmsTxt(outputDir) {
143
+ console.log(' → Generating llms.txt...');
144
+
145
+ const content = [
146
+ '# BMAD Method Documentation',
147
+ '',
148
+ '> AI-driven agile development with specialized agents and workflows that scale from bug fixes to enterprise platforms.',
149
+ '',
150
+ `Documentation: ${SITE_URL}`,
151
+ `Repository: ${REPO_URL}`,
152
+ `Full docs: ${SITE_URL}/llms-full.txt`,
153
+ '',
154
+ '## Quick Start',
155
+ '',
156
+ `- **[Quick Start](${SITE_URL}/docs/modules/bmm/quick-start)** - Get started with BMAD Method`,
157
+ `- **[Installation](${SITE_URL}/docs/getting-started/installation)** - Installation guide`,
158
+ '',
159
+ '## Core Concepts',
160
+ '',
161
+ `- **[Scale Adaptive System](${SITE_URL}/docs/modules/bmm/scale-adaptive-system)** - Understand BMAD scaling`,
162
+ `- **[Quick Flow](${SITE_URL}/docs/modules/bmm/bmad-quick-flow)** - Fast development workflow`,
163
+ `- **[Party Mode](${SITE_URL}/docs/modules/bmm/party-mode)** - Multi-agent collaboration`,
164
+ '',
165
+ '## Modules',
166
+ '',
167
+ `- **[BMM - Method](${SITE_URL}/docs/modules/bmm/quick-start)** - Core methodology module`,
168
+ `- **[BMB - Builder](${SITE_URL}/docs/modules/bmb/)** - Agent and workflow builder`,
169
+ `- **[BMGD - Game Dev](${SITE_URL}/docs/modules/bmgd/quick-start)** - Game development module`,
170
+ '',
171
+ '---',
172
+ '',
173
+ '## Quick Links',
174
+ '',
175
+ `- [Full Documentation (llms-full.txt)](${SITE_URL}/llms-full.txt) - Complete docs for AI context`,
176
+ `- [Source Bundle](${SITE_URL}/downloads/bmad-sources.zip) - Complete source code`,
177
+ `- [Prompts Bundle](${SITE_URL}/downloads/bmad-prompts.zip) - Agent prompts and workflows`,
178
+ '',
179
+ ].join('\n');
180
+
181
+ const outputPath = path.join(outputDir, 'llms.txt');
182
+ fs.writeFileSync(outputPath, content, 'utf-8');
183
+ console.log(` Generated llms.txt (${content.length.toLocaleString()} chars)`);
184
+ }
185
+
186
+ /**
187
+ * Builds a consolidated llms-full.txt containing all Markdown files under docsDir wrapped in <document path="..."> tags for LLM consumption.
188
+ *
189
+ * Writes the generated file to outputDir/llms-full.txt. Files matching LLM_EXCLUDE_PATTERNS are skipped; read errors for individual files are logged. The combined content is validated against configured size thresholds (will exit on overflow and warn if near limit).
190
+ * @param {string} docsDir - Root directory containing source Markdown files; paths in the output are relative to this directory.
191
+ * @param {string} outputDir - Directory where llms-full.txt will be written.
192
+ */
193
+ function generateLlmsFullTxt(docsDir, outputDir) {
194
+ console.log(' → Generating llms-full.txt...');
195
+
196
+ const date = new Date().toISOString().split('T')[0];
197
+ const files = getAllMarkdownFiles(docsDir);
198
+
199
+ const output = [
200
+ '# BMAD Method Documentation (Full)',
201
+ '',
202
+ '> Complete documentation for AI consumption',
203
+ `> Generated: ${date}`,
204
+ `> Repository: ${REPO_URL}`,
205
+ '',
206
+ ];
207
+
208
+ let fileCount = 0;
209
+ let skippedCount = 0;
210
+
211
+ for (const mdPath of files) {
212
+ if (shouldExcludeFromLlm(mdPath)) {
213
+ skippedCount++;
214
+ continue;
215
+ }
216
+
217
+ const fullPath = path.join(docsDir, mdPath);
218
+ try {
219
+ const content = readMarkdownContent(fullPath);
220
+ output.push(`<document path="${mdPath}">`, content, '</document>', '');
221
+ fileCount++;
222
+ } catch (error) {
223
+ console.error(` Warning: Could not read ${mdPath}: ${error.message}`);
224
+ }
225
+ }
226
+
227
+ const result = output.join('\n');
228
+ validateLlmSize(result);
229
+
230
+ const outputPath = path.join(outputDir, 'llms-full.txt');
231
+ fs.writeFileSync(outputPath, result, 'utf-8');
232
+
233
+ const tokenEstimate = Math.floor(result.length / 4).toLocaleString();
234
+ console.log(
235
+ ` Processed ${fileCount} files (skipped ${skippedCount}), ${result.length.toLocaleString()} chars (~${tokenEstimate} tokens)`,
236
+ );
237
+ }
238
+
239
+ /**
240
+ * Collects all Markdown (.md) files under a directory and returns their paths relative to a base directory.
241
+ * @param {string} dir - Directory to search for Markdown files.
242
+ * @param {string} [baseDir=dir] - Base directory used to compute returned relative paths.
243
+ * @returns {string[]} An array of file paths (relative to `baseDir`) for every `.md` file found under `dir`.
244
+ */
245
+ function getAllMarkdownFiles(dir, baseDir = dir) {
246
+ const files = [];
247
+
248
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
249
+ const fullPath = path.join(dir, entry.name);
250
+
251
+ if (entry.isDirectory()) {
252
+ files.push(...getAllMarkdownFiles(fullPath, baseDir));
253
+ } else if (entry.name.endsWith('.md')) {
254
+ // Return relative path from baseDir
255
+ const relativePath = path.relative(baseDir, fullPath);
256
+ files.push(relativePath);
257
+ }
258
+ }
259
+
260
+ return files;
261
+ }
262
+
263
+ /**
264
+ * Determine whether a file path matches any configured LLM exclusion pattern.
265
+ * Also excludes any files or directories starting with underscore.
266
+ * @param {string} filePath - The file path to test.
267
+ * @returns {boolean} `true` if excluded, `false` otherwise.
268
+ */
269
+ function shouldExcludeFromLlm(filePath) {
270
+ // Exclude if ANY path component starts with underscore
271
+ // (e.g., _STYLE_GUIDE.md, _archive/file.md, dir/_STYLE_GUIDE.md)
272
+ const pathParts = filePath.split(path.sep);
273
+ if (pathParts.some((part) => part.startsWith('_'))) return true;
274
+
275
+ // Check configured patterns
276
+ return LLM_EXCLUDE_PATTERNS.some((pattern) => filePath.includes(pattern));
277
+ }
278
+
279
+ function readMarkdownContent(filePath) {
280
+ let content = fs.readFileSync(filePath, 'utf-8');
281
+
282
+ if (content.startsWith('---')) {
283
+ const end = content.indexOf('---', 3);
284
+ if (end !== -1) {
285
+ content = content.slice(end + 3).trim();
286
+ }
287
+ }
288
+
289
+ return content;
290
+ }
291
+
292
+ function validateLlmSize(content) {
293
+ const charCount = content.length;
294
+
295
+ if (charCount > LLM_MAX_CHARS) {
296
+ console.error(` ERROR: Exceeds ${LLM_MAX_CHARS.toLocaleString()} char limit`);
297
+ process.exit(1);
298
+ } else if (charCount > LLM_WARN_CHARS) {
299
+ console.warn(` \u001B[33mWARNING: Approaching ${LLM_WARN_CHARS.toLocaleString()} char limit\u001B[0m`);
300
+ }
301
+ }
302
+
303
+ // =============================================================================
304
+ // Download Bundle Generation
305
+ // =============================================================================
306
+
307
+ async function generateDownloadBundles(outputDir) {
308
+ console.log(' → Generating download bundles...');
309
+
310
+ const downloadsDir = path.join(outputDir, 'downloads');
311
+ fs.mkdirSync(downloadsDir, { recursive: true });
312
+
313
+ await generateSourcesBundle(downloadsDir);
314
+ await generatePromptsBundle(downloadsDir);
315
+ }
316
+
317
+ async function generateSourcesBundle(downloadsDir) {
318
+ const srcDir = path.join(PROJECT_ROOT, 'src');
319
+ if (!fs.existsSync(srcDir)) return;
320
+
321
+ const zipPath = path.join(downloadsDir, 'bmad-sources.zip');
322
+ await createZipArchive(srcDir, zipPath, ['__pycache__', '.pyc', '.DS_Store', 'node_modules']);
323
+
324
+ const size = (fs.statSync(zipPath).size / 1024 / 1024).toFixed(1);
325
+ console.log(` bmad-sources.zip (${size}M)`);
326
+ }
327
+
328
+ /**
329
+ * Create a zip archive of the project's prompts modules and place it in the downloads directory.
330
+ *
331
+ * Creates bmad-prompts.zip from src/modules, excluding common unwanted paths, writes it to the provided downloads directory, and logs the resulting file size. If the modules directory does not exist, the function returns without creating a bundle.
332
+ * @param {string} downloadsDir - Destination directory where bmad-prompts.zip will be written.
333
+ */
334
+ async function generatePromptsBundle(downloadsDir) {
335
+ const modulesDir = path.join(PROJECT_ROOT, 'src', 'modules');
336
+ if (!fs.existsSync(modulesDir)) return;
337
+
338
+ const zipPath = path.join(downloadsDir, 'bmad-prompts.zip');
339
+ await createZipArchive(modulesDir, zipPath, ['docs', '.DS_Store', '__pycache__', 'node_modules']);
340
+
341
+ const size = Math.floor(fs.statSync(zipPath).size / 1024);
342
+ console.log(` bmad-prompts.zip (${size}K)`);
343
+ }
344
+
345
+ // =============================================================================
346
+ // Astro Build
347
+ /**
348
+ * Builds the Astro site to build/site (configured in astro.config.mjs).
349
+ */
350
+ function runAstroBuild() {
351
+ console.log(' → Running astro build...');
352
+ execSync('npx astro build --root website', {
353
+ cwd: PROJECT_ROOT,
354
+ stdio: 'inherit',
355
+ env: {
356
+ ...process.env,
357
+ },
358
+ });
359
+ }
360
+
361
+ /**
362
+ * Copy generated artifact files into the built site directory.
363
+ *
364
+ * Copies llms.txt and llms-full.txt from the artifacts directory into the site directory.
365
+ * If a downloads subdirectory exists under artifacts, copies it into siteDir/downloads.
366
+ *
367
+ * @param {string} artifactsDir - Path to the build artifacts directory containing generated files.
368
+ * @param {string} siteDir - Path to the target site directory where artifacts should be placed.
369
+ */
370
+ function copyArtifactsToSite(artifactsDir, siteDir) {
371
+ console.log(' → Copying artifacts to site...');
372
+
373
+ fs.copyFileSync(path.join(artifactsDir, 'llms.txt'), path.join(siteDir, 'llms.txt'));
374
+ fs.copyFileSync(path.join(artifactsDir, 'llms-full.txt'), path.join(siteDir, 'llms-full.txt'));
375
+
376
+ const downloadsDir = path.join(artifactsDir, 'downloads');
377
+ if (fs.existsSync(downloadsDir)) {
378
+ copyDirectory(downloadsDir, path.join(siteDir, 'downloads'));
379
+ }
380
+ }
381
+
382
+ // =============================================================================
383
+ // Build Summary
384
+ /**
385
+ * Prints a concise end-of-build summary and displays a sample listing of the final site directory.
386
+ *
387
+ * @param {string} docsDir - Path to the source documentation directory used for the build.
388
+ * @param {string} artifactsDir - Path to the directory containing generated artifacts (e.g., llms.txt, downloads).
389
+ * @param {string} siteDir - Path to the final built site directory whose contents will be listed.
390
+ */
391
+
392
+ function printBuildSummary(docsDir, artifactsDir, siteDir) {
393
+ console.log();
394
+ printBanner('Build Complete!');
395
+ console.log();
396
+ console.log('Build artifacts:');
397
+ console.log(` Source docs: ${docsDir}`);
398
+ console.log(` Generated files: ${artifactsDir}`);
399
+ console.log(` Final site: ${siteDir}`);
400
+ console.log();
401
+ console.log(`Deployable output: ${siteDir}/`);
402
+ console.log();
403
+
404
+ listDirectoryContents(siteDir);
405
+ }
406
+
407
+ function listDirectoryContents(dir) {
408
+ const entries = fs.readdirSync(dir).slice(0, 15);
409
+
410
+ for (const entry of entries) {
411
+ const fullPath = path.join(dir, entry);
412
+ const stat = fs.statSync(fullPath);
413
+
414
+ if (stat.isFile()) {
415
+ const sizeStr = formatFileSize(stat.size);
416
+ console.log(` ${entry.padEnd(40)} ${sizeStr.padStart(8)}`);
417
+ } else {
418
+ console.log(` ${entry}/`);
419
+ }
420
+ }
421
+ }
422
+
423
+ /**
424
+ * Format a byte count into a compact human-readable string using B, K, or M units.
425
+ * @param {number} bytes - The number of bytes to format.
426
+ * @returns {string} The formatted size: bytes as `N B` (e.g. `512B`), kilobytes truncated to an integer with `K` (e.g. `2K`), or megabytes with one decimal and `M` (e.g. `1.2M`).
427
+ */
428
+ function formatFileSize(bytes) {
429
+ if (bytes > 1024 * 1024) {
430
+ return `${(bytes / 1024 / 1024).toFixed(1)}M`;
431
+ } else if (bytes > 1024) {
432
+ return `${Math.floor(bytes / 1024)}K`;
433
+ }
434
+ return `${bytes}B`;
435
+ }
436
+
437
+ // =============================================================================
438
+ // Post-build Injection
439
+ /**
440
+ * Recursively collects all files with the given extension under a directory.
441
+ *
442
+ * @param {string} dir - Root directory to search.
443
+ * @param {string} ext - File extension to match (include the leading dot, e.g. ".md").
444
+ * @returns {string[]} An array of file paths for files ending with `ext` found under `dir`.
445
+ */
446
+
447
+ function getAllFilesByExtension(dir, ext) {
448
+ const result = [];
449
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
450
+
451
+ for (const entry of entries) {
452
+ const fullPath = path.join(dir, entry.name);
453
+ if (entry.isDirectory()) {
454
+ result.push(...getAllFilesByExtension(fullPath, ext));
455
+ } else if (entry.name.endsWith(ext)) {
456
+ result.push(fullPath);
457
+ }
458
+ }
459
+
460
+ return result;
461
+ }
462
+
463
+ // =============================================================================
464
+ // File System Utilities
465
+ /**
466
+ * Remove any existing build output and recreate the build directory.
467
+ *
468
+ * Ensures the configured BUILD_DIR is empty by deleting it if present and then creating a fresh directory.
469
+ */
470
+
471
+ function cleanBuildDirectory() {
472
+ console.log('Cleaning previous build...');
473
+
474
+ if (fs.existsSync(BUILD_DIR)) {
475
+ fs.rmSync(BUILD_DIR, { recursive: true });
476
+ }
477
+ fs.mkdirSync(BUILD_DIR, { recursive: true });
478
+ }
479
+
480
+ /**
481
+ * Recursively copies all files and subdirectories from one directory to another, creating the destination if needed.
482
+ *
483
+ * @param {string} src - Path to the source directory to copy from.
484
+ * @param {string} dest - Path to the destination directory to copy to.
485
+ * @param {string[]} [exclude=[]] - List of file or directory names (not paths) to skip while copying.
486
+ * @returns {boolean} `true` if the source existed and copying proceeded, `false` if the source did not exist.
487
+ */
488
+ function copyDirectory(src, dest, exclude = []) {
489
+ if (!fs.existsSync(src)) return false;
490
+ fs.mkdirSync(dest, { recursive: true });
491
+
492
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
493
+ if (exclude.includes(entry.name)) continue;
494
+
495
+ const srcPath = path.join(src, entry.name);
496
+ const destPath = path.join(dest, entry.name);
497
+
498
+ if (entry.isDirectory()) {
499
+ copyDirectory(srcPath, destPath, exclude);
500
+ } else {
501
+ fs.copyFileSync(srcPath, destPath);
502
+ }
503
+ }
504
+ return true;
505
+ }
506
+
507
+ /**
508
+ * Create a ZIP archive of a directory, optionally excluding entries that match given substrings.
509
+ * @param {string} sourceDir - Path to the source directory to archive.
510
+ * @param {string} outputPath - Path to write the resulting ZIP file.
511
+ * @param {string[]} [exclude=[]] - Array of substrings; any entry whose path includes one of these substrings will be omitted.
512
+ * @returns {Promise<void>} Resolves when the archive has been fully written and closed, rejects on error.
513
+ */
514
+ function createZipArchive(sourceDir, outputPath, exclude = []) {
515
+ return new Promise((resolve, reject) => {
516
+ const output = fs.createWriteStream(outputPath);
517
+ const archive = archiver('zip', { zlib: { level: 9 } });
518
+
519
+ output.on('close', resolve);
520
+ archive.on('error', reject);
521
+
522
+ archive.pipe(output);
523
+
524
+ const baseName = path.basename(sourceDir);
525
+ archive.directory(sourceDir, baseName, (entry) => {
526
+ for (const pattern of exclude) {
527
+ if (entry.name.includes(pattern)) return false;
528
+ }
529
+ return entry;
530
+ });
531
+
532
+ archive.finalize();
533
+ });
534
+ }
535
+
536
+ // =============================================================================
537
+ // Console Output Formatting
538
+ // =============================================================================
539
+
540
+ function printHeader(title) {
541
+ console.log();
542
+ console.log('┌' + '─'.repeat(62) + '┐');
543
+ console.log(`│ ${title.padEnd(60)} │`);
544
+ console.log('└' + '─'.repeat(62) + '┘');
545
+ }
546
+
547
+ /**
548
+ * Prints a centered decorative ASCII banner to the console using the provided title.
549
+ * @param {string} title - Text to display centered inside the banner. */
550
+ function printBanner(title) {
551
+ console.log('╔' + '═'.repeat(62) + '╗');
552
+ console.log(`║${title.padStart(31 + title.length / 2).padEnd(62)}║`);
553
+ console.log('╚' + '═'.repeat(62) + '╝');
554
+ }
555
+
556
+ // =============================================================================
557
+ // Link Checking
558
+ /**
559
+ * Verify internal documentation links by running the link-checking script.
560
+ *
561
+ * Executes the Node script tools/check-doc-links.js from the project root and
562
+ * exits the process with code 1 if the check fails.
563
+ */
564
+
565
+ function checkDocLinks() {
566
+ printHeader('Checking documentation links');
567
+
568
+ try {
569
+ execSync('node tools/validate-doc-links.js', {
570
+ cwd: PROJECT_ROOT,
571
+ stdio: 'inherit',
572
+ });
573
+ } catch {
574
+ console.error('\n \u001B[31m✗\u001B[0m Link check failed - fix broken links before building\n');
575
+ process.exit(1);
576
+ }
577
+ }
@@ -0,0 +1,7 @@
1
+ # BMad CLI Tool
2
+
3
+ ## Installing external repo BMad official modules
4
+
5
+ For external official modules to be discoverable during install, ensure an entry for the external repo is added to external-official-modules.yaml.
6
+
7
+ For community modules - this will be handled in a different way. This file is only for registration of modules under the bmad-code-org.
@@ -0,0 +1,58 @@
1
+ const { program } = require('commander');
2
+ const path = require('node:path');
3
+ const fs = require('node:fs');
4
+
5
+ // Fix for stdin issues when running through npm on Windows
6
+ // Ensures keyboard interaction works properly with CLI prompts
7
+ if (process.stdin.isTTY) {
8
+ try {
9
+ process.stdin.resume();
10
+ process.stdin.setEncoding('utf8');
11
+
12
+ // On Windows, explicitly reference the stdin stream to ensure it's properly initialized
13
+ if (process.platform === 'win32') {
14
+ process.stdin.on('error', () => {
15
+ // Ignore stdin errors - they can occur when the terminal is closing
16
+ });
17
+ }
18
+ } catch {
19
+ // Silently ignore - some environments may not support these operations
20
+ }
21
+ }
22
+
23
+ // Load package.json from root for version info
24
+ const packageJson = require('../../package.json');
25
+
26
+ // Load all command modules
27
+ const commandsPath = path.join(__dirname, 'commands');
28
+ const commandFiles = fs.readdirSync(commandsPath).filter((file) => file.endsWith('.js'));
29
+
30
+ const commands = {};
31
+ for (const file of commandFiles) {
32
+ const command = require(path.join(commandsPath, file));
33
+ commands[command.command] = command;
34
+ }
35
+
36
+ // Set up main program
37
+ program.version(packageJson.version).description('BMAD Core CLI - Universal AI agent framework');
38
+
39
+ // Register all commands
40
+ for (const [name, cmd] of Object.entries(commands)) {
41
+ const command = program.command(name).description(cmd.description);
42
+
43
+ // Add options
44
+ for (const option of cmd.options || []) {
45
+ command.option(...option);
46
+ }
47
+
48
+ // Set action
49
+ command.action(cmd.action);
50
+ }
51
+
52
+ // Parse arguments
53
+ program.parse(process.argv);
54
+
55
+ // Show help if no command provided
56
+ if (process.argv.slice(2).length === 0) {
57
+ program.outputHelp();
58
+ }