bmad-fh 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 (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 +50 -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 +411 -0
  413. package/src/core/lib/scope/index.js +30 -0
  414. package/src/core/lib/scope/scope-context.js +307 -0
  415. package/src/core/lib/scope/scope-initializer.js +458 -0
  416. package/src/core/lib/scope/scope-manager.js +512 -0
  417. package/src/core/lib/scope/scope-migrator.js +442 -0
  418. package/src/core/lib/scope/scope-sync.js +489 -0
  419. package/src/core/lib/scope/scope-validator.js +299 -0
  420. package/src/core/lib/scope/state-lock.js +342 -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 +450 -0
  518. package/test/test-scope-system.js +787 -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 +281 -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,739 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('node:path');
3
+ const glob = require('glob');
4
+ const chalk = require('chalk');
5
+ const yaml = require('yaml');
6
+
7
+ /**
8
+ * Dependency Resolver for BMAD modules
9
+ * Handles cross-module dependencies and ensures all required files are included
10
+ */
11
+ class DependencyResolver {
12
+ constructor() {
13
+ this.dependencies = new Map();
14
+ this.resolvedFiles = new Set();
15
+ this.missingDependencies = new Set();
16
+ }
17
+
18
+ /**
19
+ * Resolve all dependencies for selected modules
20
+ * @param {string} bmadDir - BMAD installation directory
21
+ * @param {Array} selectedModules - Modules explicitly selected by user
22
+ * @param {Object} options - Resolution options
23
+ * @returns {Object} Resolution results with all required files
24
+ */
25
+ async resolve(bmadDir, selectedModules = [], options = {}) {
26
+ if (options.verbose) {
27
+ console.log(chalk.cyan('Resolving module dependencies...'));
28
+ }
29
+
30
+ // Always include core as base
31
+ const modulesToProcess = new Set(['core', ...selectedModules]);
32
+
33
+ // First pass: collect all explicitly selected files
34
+ const primaryFiles = await this.collectPrimaryFiles(bmadDir, modulesToProcess, options);
35
+
36
+ // Second pass: parse and resolve dependencies
37
+ const allDependencies = await this.parseDependencies(primaryFiles);
38
+
39
+ // Third pass: resolve dependency paths and collect files
40
+ const resolvedDeps = await this.resolveDependencyPaths(bmadDir, allDependencies);
41
+
42
+ // Fourth pass: check for transitive dependencies
43
+ const transitiveDeps = await this.resolveTransitiveDependencies(bmadDir, resolvedDeps);
44
+
45
+ // Combine all files
46
+ const allFiles = new Set([...primaryFiles.map((f) => f.path), ...resolvedDeps, ...transitiveDeps]);
47
+
48
+ // Organize by module
49
+ const organizedFiles = this.organizeByModule(bmadDir, allFiles);
50
+
51
+ // Report results (only in verbose mode)
52
+ if (options.verbose) {
53
+ this.reportResults(organizedFiles, selectedModules);
54
+ }
55
+
56
+ return {
57
+ primaryFiles,
58
+ dependencies: resolvedDeps,
59
+ transitiveDependencies: transitiveDeps,
60
+ allFiles: [...allFiles],
61
+ byModule: organizedFiles,
62
+ missing: [...this.missingDependencies],
63
+ };
64
+ }
65
+
66
+ /**
67
+ * Collect primary files from selected modules
68
+ */
69
+ async collectPrimaryFiles(bmadDir, modules, options = {}) {
70
+ const files = [];
71
+ const { moduleManager } = options;
72
+
73
+ for (const module of modules) {
74
+ // Skip external modules - they're installed from cache, not from source
75
+ if (moduleManager && (await moduleManager.isExternalModule(module))) {
76
+ continue;
77
+ }
78
+
79
+ // Handle both source (src/) and installed (bmad/) directory structures
80
+ let moduleDir;
81
+
82
+ // Check if this is a source directory (has 'src' subdirectory)
83
+ const srcDir = path.join(bmadDir, 'src');
84
+ if (await fs.pathExists(srcDir)) {
85
+ // Source directory structure: src/core or src/bmm
86
+ if (module === 'core') {
87
+ moduleDir = path.join(srcDir, 'core');
88
+ } else if (module === 'bmm') {
89
+ moduleDir = path.join(srcDir, 'bmm');
90
+ }
91
+ }
92
+
93
+ if (!(await fs.pathExists(moduleDir))) {
94
+ console.warn(chalk.yellow(`Module directory not found: ${moduleDir}`));
95
+ continue;
96
+ }
97
+
98
+ // Collect agents
99
+ const agentsDir = path.join(moduleDir, 'agents');
100
+ if (await fs.pathExists(agentsDir)) {
101
+ const agentFiles = await glob.glob('*.md', { cwd: agentsDir });
102
+ for (const file of agentFiles) {
103
+ const agentPath = path.join(agentsDir, file);
104
+
105
+ // Check for localskip attribute
106
+ const content = await fs.readFile(agentPath, 'utf8');
107
+ const hasLocalSkip = content.match(/<agent[^>]*\slocalskip="true"[^>]*>/);
108
+ if (hasLocalSkip) {
109
+ continue; // Skip agents marked for web-only
110
+ }
111
+
112
+ files.push({
113
+ path: agentPath,
114
+ type: 'agent',
115
+ module,
116
+ name: path.basename(file, '.md'),
117
+ });
118
+ }
119
+ }
120
+
121
+ // Collect tasks
122
+ const tasksDir = path.join(moduleDir, 'tasks');
123
+ if (await fs.pathExists(tasksDir)) {
124
+ const taskFiles = await glob.glob('*.md', { cwd: tasksDir });
125
+ for (const file of taskFiles) {
126
+ files.push({
127
+ path: path.join(tasksDir, file),
128
+ type: 'task',
129
+ module,
130
+ name: path.basename(file, '.md'),
131
+ });
132
+ }
133
+ }
134
+ }
135
+
136
+ return files;
137
+ }
138
+
139
+ /**
140
+ * Parse dependencies from file content
141
+ */
142
+ async parseDependencies(files) {
143
+ const allDeps = new Set();
144
+
145
+ for (const file of files) {
146
+ const content = await fs.readFile(file.path, 'utf8');
147
+
148
+ // Parse YAML frontmatter for explicit dependencies
149
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
150
+ if (frontmatterMatch) {
151
+ try {
152
+ // Pre-process to handle backticks in YAML values
153
+ let yamlContent = frontmatterMatch[1];
154
+ // Quote values with backticks to make them valid YAML
155
+ yamlContent = yamlContent.replaceAll(/: `([^`]+)`/g, ': "$1"');
156
+
157
+ const frontmatter = yaml.parse(yamlContent);
158
+ if (frontmatter.dependencies) {
159
+ const deps = Array.isArray(frontmatter.dependencies) ? frontmatter.dependencies : [frontmatter.dependencies];
160
+
161
+ for (const dep of deps) {
162
+ allDeps.add({
163
+ from: file.path,
164
+ dependency: dep,
165
+ type: 'explicit',
166
+ });
167
+ }
168
+ }
169
+
170
+ // Check for template dependencies
171
+ if (frontmatter.template) {
172
+ const templates = Array.isArray(frontmatter.template) ? frontmatter.template : [frontmatter.template];
173
+ for (const template of templates) {
174
+ allDeps.add({
175
+ from: file.path,
176
+ dependency: template,
177
+ type: 'template',
178
+ });
179
+ }
180
+ }
181
+ } catch (error) {
182
+ console.warn(chalk.yellow(`Failed to parse frontmatter in ${file.name}: ${error.message}`));
183
+ }
184
+ }
185
+
186
+ // Parse content for command references (cross-module dependencies)
187
+ const commandRefs = this.parseCommandReferences(content);
188
+ for (const ref of commandRefs) {
189
+ allDeps.add({
190
+ from: file.path,
191
+ dependency: ref,
192
+ type: 'command',
193
+ });
194
+ }
195
+
196
+ // Parse for file path references
197
+ const fileRefs = this.parseFileReferences(content);
198
+ for (const ref of fileRefs) {
199
+ // Determine type based on path format
200
+ // Paths starting with bmad/ are absolute references to the bmad installation
201
+ const depType = ref.startsWith('bmad/') ? 'bmad-path' : 'file';
202
+ allDeps.add({
203
+ from: file.path,
204
+ dependency: ref,
205
+ type: depType,
206
+ });
207
+ }
208
+ }
209
+
210
+ return allDeps;
211
+ }
212
+
213
+ /**
214
+ * Parse command references from content
215
+ */
216
+ parseCommandReferences(content) {
217
+ const refs = new Set();
218
+
219
+ // Match @task-{name} or @agent-{name} or @{module}-{type}-{name}
220
+ const commandPattern = /@(task-|agent-|bmad-)([a-z0-9-]+)/g;
221
+ let match;
222
+
223
+ while ((match = commandPattern.exec(content)) !== null) {
224
+ refs.add(match[0]);
225
+ }
226
+
227
+ // Match file paths like bmad/core/agents/analyst
228
+ const pathPattern = /bmad\/(core|bmm|cis)\/(agents|tasks)\/([a-z0-9-]+)/g;
229
+
230
+ while ((match = pathPattern.exec(content)) !== null) {
231
+ refs.add(match[0]);
232
+ }
233
+
234
+ return [...refs];
235
+ }
236
+
237
+ /**
238
+ * Parse file path references from content
239
+ */
240
+ parseFileReferences(content) {
241
+ const refs = new Set();
242
+
243
+ // Match relative paths like ../templates/file.yaml or ./data/file.md
244
+ const relativePattern = /['"](\.\.?\/[^'"]+\.(md|yaml|yml|xml|json|txt|csv))['"]/g;
245
+ let match;
246
+
247
+ while ((match = relativePattern.exec(content)) !== null) {
248
+ refs.add(match[1]);
249
+ }
250
+
251
+ // Parse exec attributes in command tags
252
+ const execPattern = /exec="([^"]+)"/g;
253
+ while ((match = execPattern.exec(content)) !== null) {
254
+ let execPath = match[1];
255
+ if (execPath && execPath !== '*') {
256
+ // Remove {project-root} prefix to get the actual path
257
+ // Usage is like {project-root}/bmad/core/tasks/foo.md
258
+ if (execPath.includes('{project-root}')) {
259
+ execPath = execPath.replace('{project-root}', '');
260
+ }
261
+ refs.add(execPath);
262
+ }
263
+ }
264
+
265
+ // Parse tmpl attributes in command tags
266
+ const tmplPattern = /tmpl="([^"]+)"/g;
267
+ while ((match = tmplPattern.exec(content)) !== null) {
268
+ let tmplPath = match[1];
269
+ if (tmplPath && tmplPath !== '*') {
270
+ // Remove {project-root} prefix to get the actual path
271
+ // Usage is like {project-root}/bmad/core/tasks/foo.md
272
+ if (tmplPath.includes('{project-root}')) {
273
+ tmplPath = tmplPath.replace('{project-root}', '');
274
+ }
275
+ refs.add(tmplPath);
276
+ }
277
+ }
278
+
279
+ return [...refs];
280
+ }
281
+
282
+ /**
283
+ * Resolve dependency paths to actual files
284
+ */
285
+ async resolveDependencyPaths(bmadDir, dependencies) {
286
+ const resolved = new Set();
287
+
288
+ for (const dep of dependencies) {
289
+ const resolvedPaths = await this.resolveSingleDependency(bmadDir, dep);
290
+ for (const path of resolvedPaths) {
291
+ resolved.add(path);
292
+ }
293
+ }
294
+
295
+ return resolved;
296
+ }
297
+
298
+ /**
299
+ * Resolve a single dependency to file paths
300
+ */
301
+ async resolveSingleDependency(bmadDir, dep) {
302
+ const paths = [];
303
+
304
+ switch (dep.type) {
305
+ case 'explicit':
306
+ case 'file': {
307
+ let depPath = dep.dependency;
308
+
309
+ // Handle {project-root} prefix if present
310
+ if (depPath.includes('{project-root}')) {
311
+ // Remove {project-root} and resolve as bmad path
312
+ depPath = depPath.replace('{project-root}', '');
313
+
314
+ if (depPath.startsWith('bmad/')) {
315
+ const bmadPath = depPath.replace(/^bmad\//, '');
316
+
317
+ // Handle glob patterns
318
+ if (depPath.includes('*')) {
319
+ // Extract the base path and pattern
320
+ const pathParts = bmadPath.split('/');
321
+ const module = pathParts[0];
322
+ const filePattern = pathParts.at(-1);
323
+ const middlePath = pathParts.slice(1, -1).join('/');
324
+
325
+ let basePath;
326
+ if (module === 'core') {
327
+ basePath = path.join(bmadDir, 'core', middlePath);
328
+ } else {
329
+ basePath = path.join(bmadDir, 'modules', module, middlePath);
330
+ }
331
+
332
+ if (await fs.pathExists(basePath)) {
333
+ const files = await glob.glob(filePattern, { cwd: basePath });
334
+ for (const file of files) {
335
+ paths.push(path.join(basePath, file));
336
+ }
337
+ }
338
+ } else {
339
+ // Direct path
340
+ if (bmadPath.startsWith('core/')) {
341
+ const corePath = path.join(bmadDir, bmadPath);
342
+ if (await fs.pathExists(corePath)) {
343
+ paths.push(corePath);
344
+ }
345
+ } else {
346
+ const parts = bmadPath.split('/');
347
+ const module = parts[0];
348
+ const rest = parts.slice(1).join('/');
349
+ const modulePath = path.join(bmadDir, 'modules', module, rest);
350
+
351
+ if (await fs.pathExists(modulePath)) {
352
+ paths.push(modulePath);
353
+ }
354
+ }
355
+ }
356
+ }
357
+ } else {
358
+ // Regular relative path handling
359
+ const sourceDir = path.dirname(dep.from);
360
+
361
+ // Handle glob patterns
362
+ if (depPath.includes('*')) {
363
+ const basePath = path.resolve(sourceDir, path.dirname(depPath));
364
+ const pattern = path.basename(depPath);
365
+
366
+ if (await fs.pathExists(basePath)) {
367
+ const files = await glob.glob(pattern, { cwd: basePath });
368
+ for (const file of files) {
369
+ paths.push(path.join(basePath, file));
370
+ }
371
+ }
372
+ } else {
373
+ // Direct file reference
374
+ const fullPath = path.resolve(sourceDir, depPath);
375
+ if (await fs.pathExists(fullPath)) {
376
+ paths.push(fullPath);
377
+ } else {
378
+ this.missingDependencies.add(`${depPath} (referenced by ${path.basename(dep.from)})`);
379
+ }
380
+ }
381
+ }
382
+
383
+ break;
384
+ }
385
+ case 'command': {
386
+ // Resolve command references to actual files
387
+ const commandPath = await this.resolveCommandToPath(bmadDir, dep.dependency);
388
+ if (commandPath) {
389
+ paths.push(commandPath);
390
+ }
391
+
392
+ break;
393
+ }
394
+ case 'bmad-path': {
395
+ // Resolve bmad/ paths (from {project-root}/bmad/... references)
396
+ // These are paths relative to the src directory structure
397
+ const bmadPath = dep.dependency.replace(/^bmad\//, '');
398
+
399
+ // Try to resolve as if it's in src structure
400
+ // bmad/core/tasks/foo.md -> src/core/tasks/foo.md
401
+ // bmad/bmm/tasks/bar.md -> src/bmm/tasks/bar.md (bmm is directly under src/)
402
+ // bmad/cis/agents/bar.md -> src/modules/cis/agents/bar.md
403
+
404
+ if (bmadPath.startsWith('core/')) {
405
+ const corePath = path.join(bmadDir, bmadPath);
406
+ if (await fs.pathExists(corePath)) {
407
+ paths.push(corePath);
408
+ } else {
409
+ // Not found, but don't report as missing since it might be installed later
410
+ }
411
+ } else {
412
+ // It's a module path like bmm/tasks/foo.md or cis/agents/bar.md
413
+ const parts = bmadPath.split('/');
414
+ const module = parts[0];
415
+ const rest = parts.slice(1).join('/');
416
+ let modulePath;
417
+ if (module === 'bmm') {
418
+ // bmm is directly under src/
419
+ modulePath = path.join(bmadDir, module, rest);
420
+ } else {
421
+ // Other modules are under modules/
422
+ modulePath = path.join(bmadDir, 'modules', module, rest);
423
+ }
424
+
425
+ if (await fs.pathExists(modulePath)) {
426
+ paths.push(modulePath);
427
+ } else {
428
+ // Not found, but don't report as missing since it might be installed later
429
+ }
430
+ }
431
+
432
+ break;
433
+ }
434
+ case 'template': {
435
+ // Resolve template references
436
+ let templateDep = dep.dependency;
437
+
438
+ // Handle {project-root} prefix if present
439
+ if (templateDep.includes('{project-root}')) {
440
+ // Remove {project-root} and treat as bmad-path
441
+ templateDep = templateDep.replace('{project-root}', '');
442
+
443
+ // Now resolve as a bmad path
444
+ if (templateDep.startsWith('bmad/')) {
445
+ const bmadPath = templateDep.replace(/^bmad\//, '');
446
+
447
+ if (bmadPath.startsWith('core/')) {
448
+ const corePath = path.join(bmadDir, bmadPath);
449
+ if (await fs.pathExists(corePath)) {
450
+ paths.push(corePath);
451
+ }
452
+ } else {
453
+ // Module path like cis/templates/brainstorm.md
454
+ const parts = bmadPath.split('/');
455
+ const module = parts[0];
456
+ const rest = parts.slice(1).join('/');
457
+ const modulePath = path.join(bmadDir, 'modules', module, rest);
458
+
459
+ if (await fs.pathExists(modulePath)) {
460
+ paths.push(modulePath);
461
+ }
462
+ }
463
+ }
464
+ } else {
465
+ // Regular relative template path
466
+ const sourceDir = path.dirname(dep.from);
467
+ const templatePath = path.resolve(sourceDir, templateDep);
468
+
469
+ if (await fs.pathExists(templatePath)) {
470
+ paths.push(templatePath);
471
+ } else {
472
+ this.missingDependencies.add(`Template: ${dep.dependency}`);
473
+ }
474
+ }
475
+
476
+ break;
477
+ }
478
+ // No default
479
+ }
480
+
481
+ return paths;
482
+ }
483
+
484
+ /**
485
+ * Resolve command reference to file path
486
+ */
487
+ async resolveCommandToPath(bmadDir, command) {
488
+ // Parse command format: @task-name or @agent-name or bmad/module/type/name
489
+
490
+ if (command.startsWith('@task-')) {
491
+ const taskName = command.slice(6);
492
+ // Search all modules for this task
493
+ for (const module of ['core', 'bmm', 'cis']) {
494
+ const taskPath =
495
+ module === 'core'
496
+ ? path.join(bmadDir, 'core', 'tasks', `${taskName}.md`)
497
+ : path.join(bmadDir, 'modules', module, 'tasks', `${taskName}.md`);
498
+ if (await fs.pathExists(taskPath)) {
499
+ return taskPath;
500
+ }
501
+ }
502
+ } else if (command.startsWith('@agent-')) {
503
+ const agentName = command.slice(7);
504
+ // Search all modules for this agent
505
+ for (const module of ['core', 'bmm', 'cis']) {
506
+ const agentPath =
507
+ module === 'core'
508
+ ? path.join(bmadDir, 'core', 'agents', `${agentName}.md`)
509
+ : path.join(bmadDir, 'modules', module, 'agents', `${agentName}.md`);
510
+ if (await fs.pathExists(agentPath)) {
511
+ return agentPath;
512
+ }
513
+ }
514
+ } else if (command.startsWith('bmad/')) {
515
+ // Direct path reference
516
+ const parts = command.split('/');
517
+ if (parts.length >= 4) {
518
+ const [, module, type, ...nameParts] = parts;
519
+ const name = nameParts.join('/'); // Handle nested paths
520
+
521
+ // Check if name already has extension
522
+ const fileName = name.endsWith('.md') ? name : `${name}.md`;
523
+
524
+ const filePath =
525
+ module === 'core' ? path.join(bmadDir, 'core', type, fileName) : path.join(bmadDir, 'modules', module, type, fileName);
526
+ if (await fs.pathExists(filePath)) {
527
+ return filePath;
528
+ }
529
+ }
530
+ }
531
+
532
+ // Don't report as missing if it's a self-reference within the module being installed
533
+ if (!command.includes('cis') || command.includes('brain')) {
534
+ // Only report missing if it's a true external dependency
535
+ // this.missingDependencies.add(`Command: ${command}`);
536
+ }
537
+ return null;
538
+ }
539
+
540
+ /**
541
+ * Resolve transitive dependencies (dependencies of dependencies)
542
+ */
543
+ async resolveTransitiveDependencies(bmadDir, directDeps) {
544
+ const transitive = new Set();
545
+ const processed = new Set();
546
+
547
+ // Process each direct dependency
548
+ for (const depPath of directDeps) {
549
+ if (processed.has(depPath)) continue;
550
+ processed.add(depPath);
551
+
552
+ // Only process markdown and YAML files for transitive deps
553
+ if ((depPath.endsWith('.md') || depPath.endsWith('.yaml') || depPath.endsWith('.yml')) && (await fs.pathExists(depPath))) {
554
+ const content = await fs.readFile(depPath, 'utf8');
555
+ const subDeps = await this.parseDependencies([
556
+ {
557
+ path: depPath,
558
+ type: 'dependency',
559
+ module: this.getModuleFromPath(bmadDir, depPath),
560
+ name: path.basename(depPath),
561
+ },
562
+ ]);
563
+
564
+ const resolvedSubDeps = await this.resolveDependencyPaths(bmadDir, subDeps);
565
+ for (const subDep of resolvedSubDeps) {
566
+ if (!directDeps.has(subDep)) {
567
+ transitive.add(subDep);
568
+ }
569
+ }
570
+ }
571
+ }
572
+
573
+ return transitive;
574
+ }
575
+
576
+ /**
577
+ * Get module name from file path
578
+ */
579
+ getModuleFromPath(bmadDir, filePath) {
580
+ const relative = path.relative(bmadDir, filePath);
581
+ const parts = relative.split(path.sep);
582
+
583
+ // Handle source directory structure (src/core, src/bmm, or src/modules/xxx)
584
+ if (parts[0] === 'src') {
585
+ if (parts[1] === 'core') {
586
+ return 'core';
587
+ } else if (parts[1] === 'bmm') {
588
+ return 'bmm';
589
+ } else if (parts[1] === 'modules' && parts.length > 2) {
590
+ return parts[2];
591
+ }
592
+ }
593
+
594
+ // Check if it's in modules directory (installed structure)
595
+ if (parts[0] === 'modules' && parts.length > 1) {
596
+ return parts[1];
597
+ }
598
+
599
+ // Otherwise return the first part (core, etc.)
600
+ // But don't return 'src' as a module name
601
+ if (parts[0] === 'src') {
602
+ return 'unknown';
603
+ }
604
+ return parts[0] || 'unknown';
605
+ }
606
+
607
+ /**
608
+ * Organize files by module
609
+ */
610
+ organizeByModule(bmadDir, files) {
611
+ const organized = {};
612
+
613
+ for (const file of files) {
614
+ const module = this.getModuleFromPath(bmadDir, file);
615
+ if (!organized[module]) {
616
+ organized[module] = {
617
+ agents: [],
618
+ tasks: [],
619
+ tools: [],
620
+ templates: [],
621
+ data: [],
622
+ other: [],
623
+ };
624
+ }
625
+
626
+ // Get relative path correctly based on module structure
627
+ let moduleBase;
628
+
629
+ // Check if file is in source directory structure
630
+ if (file.includes('/src/core/') || file.includes('/src/bmm/')) {
631
+ if (module === 'core') {
632
+ moduleBase = path.join(bmadDir, 'src', 'core');
633
+ } else if (module === 'bmm') {
634
+ moduleBase = path.join(bmadDir, 'src', 'bmm');
635
+ }
636
+ } else {
637
+ moduleBase = module === 'core' ? path.join(bmadDir, 'core') : path.join(bmadDir, 'modules', module);
638
+ }
639
+
640
+ const relative = path.relative(moduleBase, file);
641
+
642
+ if (relative.startsWith('agents/') || file.includes('/agents/')) {
643
+ organized[module].agents.push(file);
644
+ } else if (relative.startsWith('tasks/') || file.includes('/tasks/')) {
645
+ organized[module].tasks.push(file);
646
+ } else if (relative.startsWith('tools/') || file.includes('/tools/')) {
647
+ organized[module].tools.push(file);
648
+ } else if (relative.includes('data/')) {
649
+ organized[module].data.push(file);
650
+ } else {
651
+ organized[module].other.push(file);
652
+ }
653
+ }
654
+
655
+ return organized;
656
+ }
657
+
658
+ /**
659
+ * Report resolution results
660
+ */
661
+ reportResults(organized, selectedModules) {
662
+ console.log(chalk.green('\n✓ Dependency resolution complete'));
663
+
664
+ for (const [module, files] of Object.entries(organized)) {
665
+ const isSelected = selectedModules.includes(module) || module === 'core';
666
+ const totalFiles =
667
+ files.agents.length + files.tasks.length + files.tools.length + files.templates.length + files.data.length + files.other.length;
668
+
669
+ if (totalFiles > 0) {
670
+ console.log(chalk.cyan(`\n ${module.toUpperCase()} module:`));
671
+ console.log(chalk.dim(` Status: ${isSelected ? 'Selected' : 'Dependencies only'}`));
672
+
673
+ if (files.agents.length > 0) {
674
+ console.log(chalk.dim(` Agents: ${files.agents.length}`));
675
+ }
676
+ if (files.tasks.length > 0) {
677
+ console.log(chalk.dim(` Tasks: ${files.tasks.length}`));
678
+ }
679
+ if (files.templates.length > 0) {
680
+ console.log(chalk.dim(` Templates: ${files.templates.length}`));
681
+ }
682
+ if (files.data.length > 0) {
683
+ console.log(chalk.dim(` Data files: ${files.data.length}`));
684
+ }
685
+ if (files.other.length > 0) {
686
+ console.log(chalk.dim(` Other files: ${files.other.length}`));
687
+ }
688
+ }
689
+ }
690
+
691
+ if (this.missingDependencies.size > 0) {
692
+ console.log(chalk.yellow('\n ⚠ Missing dependencies:'));
693
+ for (const missing of this.missingDependencies) {
694
+ console.log(chalk.yellow(` - ${missing}`));
695
+ }
696
+ }
697
+ }
698
+
699
+ /**
700
+ * Create a bundle for web deployment
701
+ * @param {Object} resolution - Resolution results from resolve()
702
+ * @returns {Object} Bundle data ready for web
703
+ */
704
+ async createWebBundle(resolution) {
705
+ const bundle = {
706
+ metadata: {
707
+ created: new Date().toISOString(),
708
+ modules: Object.keys(resolution.byModule),
709
+ totalFiles: resolution.allFiles.length,
710
+ },
711
+ agents: {},
712
+ tasks: {},
713
+ templates: {},
714
+ data: {},
715
+ };
716
+
717
+ // Bundle all files by type
718
+ for (const filePath of resolution.allFiles) {
719
+ if (!(await fs.pathExists(filePath))) continue;
720
+
721
+ const content = await fs.readFile(filePath, 'utf8');
722
+ const relative = path.relative(path.dirname(resolution.primaryFiles[0]?.path || '.'), filePath);
723
+
724
+ if (filePath.includes('/agents/')) {
725
+ bundle.agents[relative] = content;
726
+ } else if (filePath.includes('/tasks/')) {
727
+ bundle.tasks[relative] = content;
728
+ } else if (filePath.includes('template')) {
729
+ bundle.templates[relative] = content;
730
+ } else {
731
+ bundle.data[relative] = content;
732
+ }
733
+ }
734
+
735
+ return bundle;
736
+ }
737
+ }
738
+
739
+ module.exports = { DependencyResolver };