mdan-cli 2.5.0 → 2.5.2

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 (706) hide show
  1. package/.augment/code_review_guidelines.yaml +271 -0
  2. package/.claude/skills/bmad-os-audit-file-refs/SKILL.md +6 -0
  3. package/.claude/skills/bmad-os-audit-file-refs/prompts/instructions.md +59 -0
  4. package/.claude/skills/bmad-os-changelog-social/SKILL.md +177 -0
  5. package/.claude/skills/bmad-os-changelog-social/examples/discord-example.md +53 -0
  6. package/.claude/skills/bmad-os-changelog-social/examples/linkedin-example.md +49 -0
  7. package/.claude/skills/bmad-os-changelog-social/examples/twitter-example.md +55 -0
  8. package/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md +6 -0
  9. package/.claude/skills/bmad-os-diataxis-style-fix/prompts/instructions.md +229 -0
  10. package/.claude/skills/bmad-os-draft-changelog/SKILL.md +6 -0
  11. package/.claude/skills/bmad-os-draft-changelog/prompts/instructions.md +82 -0
  12. package/.claude/skills/bmad-os-gh-triage/SKILL.md +6 -0
  13. package/.claude/skills/bmad-os-gh-triage/prompts/agent-prompt.md +60 -0
  14. package/.claude/skills/bmad-os-gh-triage/prompts/instructions.md +74 -0
  15. package/.claude/skills/bmad-os-release-module/SKILL.md +6 -0
  16. package/.claude/skills/bmad-os-release-module/prompts/instructions.md +53 -0
  17. package/.claude/skills/bmad-os-review-pr/SKILL.md +6 -0
  18. package/.claude/skills/bmad-os-review-pr/prompts/instructions.md +231 -0
  19. package/.claude/skills/bmad-os-root-cause-analysis/SKILL.md +12 -0
  20. package/.claude/skills/bmad-os-root-cause-analysis/prompts/instructions.md +74 -0
  21. package/.coderabbit.yaml +85 -0
  22. package/.github/CODE_OF_CONDUCT.md +128 -0
  23. package/.github/FUNDING.yaml +15 -0
  24. package/.github/ISSUE_TEMPLATE/bug-report.yaml +124 -0
  25. package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
  26. package/.github/ISSUE_TEMPLATE/documentation.yaml +55 -0
  27. package/.github/ISSUE_TEMPLATE/feature-request.md +22 -0
  28. package/.github/ISSUE_TEMPLATE/issue.md +32 -0
  29. package/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  30. package/.github/scripts/discord-helpers.sh +34 -0
  31. package/.github/workflows/coderabbit-review.yaml +22 -0
  32. package/.github/workflows/discord.yaml +90 -0
  33. package/.github/workflows/docs.yaml +64 -0
  34. package/.github/workflows/quality.yaml +116 -0
  35. package/.husky/pre-commit +20 -0
  36. package/.markdownlint-cli2.yaml +41 -0
  37. package/.nvmrc +1 -0
  38. package/.prettierignore +12 -0
  39. package/.vscode/settings.json +96 -0
  40. package/AGENTS.md +227 -165
  41. package/AGENTS_LIST.md +946 -0
  42. package/ARCHITECTURE.md +590 -0
  43. package/CHANGELOG.md +1770 -0
  44. package/CNAME +1 -0
  45. package/CONTRIBUTING.md +512 -0
  46. package/CONTRIBUTORS.md +32 -0
  47. package/INSTALL.md +246 -0
  48. package/LICENSE +30 -0
  49. package/README.md +133 -194
  50. package/RELEASE_NOTES.md +246 -0
  51. package/SECURITY.md +85 -0
  52. package/TRADEMARK.md +55 -0
  53. package/USAGE.md +368 -0
  54. package/Wordmark.png +0 -0
  55. package/app/__init__.py +5 -0
  56. package/app/cis/agents/__init__.py +31 -0
  57. package/app/cis/agents/brainstorming-coach/__init__.py +3 -0
  58. package/app/cis/agents/brainstorming-coach/agent.py +162 -0
  59. package/app/cis/agents/brainstorming-coach/prompt.yaml +53 -0
  60. package/app/cis/agents/creative-problem-solver/__init__.py +3 -0
  61. package/app/cis/agents/creative-problem-solver/agent.py +233 -0
  62. package/app/cis/agents/creative-problem-solver/prompt.yaml +74 -0
  63. package/app/cis/agents/design-thinking-coach/__init__.py +3 -0
  64. package/app/cis/agents/design-thinking-coach/agent.py +241 -0
  65. package/app/cis/agents/design-thinking-coach/prompt.yaml +77 -0
  66. package/app/cis/agents/innovation-strategist/__init__.py +3 -0
  67. package/app/cis/agents/innovation-strategist/agent.py +271 -0
  68. package/app/cis/agents/innovation-strategist/prompt.yaml +70 -0
  69. package/app/cis/agents/presentation-master/__init__.py +3 -0
  70. package/app/cis/agents/presentation-master/agent.py +420 -0
  71. package/app/cis/agents/presentation-master/prompt.yaml +62 -0
  72. package/app/cis/agents/storyteller/__init__.py +3 -0
  73. package/app/cis/agents/storyteller/agent.py +303 -0
  74. package/app/cis/agents/storyteller/prompt.yaml +99 -0
  75. package/app/core/__init__.py +5 -0
  76. package/app/core/agents/__init__.py +5 -0
  77. package/app/core/agents/mdan-master/__init__.py +7 -0
  78. package/app/core/agents/mdan-master/agent.py +302 -0
  79. package/app/core/agents/mdan-master/prompt.yaml +105 -0
  80. package/app/mmb/agents/__init__.py +24 -0
  81. package/app/mmb/agents/agent-builder/__init__.py +5 -0
  82. package/app/mmb/agents/agent-builder/agent.py +261 -0
  83. package/app/mmb/agents/agent-builder/prompt.yaml +48 -0
  84. package/app/mmb/agents/module-builder/__init__.py +5 -0
  85. package/app/mmb/agents/module-builder/agent.py +299 -0
  86. package/app/mmb/agents/module-builder/prompt.yaml +50 -0
  87. package/app/mmb/agents/workflow-builder/__init__.py +5 -0
  88. package/app/mmb/agents/workflow-builder/agent.py +318 -0
  89. package/app/mmb/agents/workflow-builder/prompt.yaml +52 -0
  90. package/app/mmm/agents/__init__.py +48 -0
  91. package/app/mmm/agents/analyst/__init__.py +7 -0
  92. package/app/mmm/agents/analyst/agent.py +384 -0
  93. package/app/mmm/agents/analyst/prompt.yaml +62 -0
  94. package/app/mmm/agents/architect/__init__.py +7 -0
  95. package/app/mmm/agents/architect/agent.py +300 -0
  96. package/app/mmm/agents/architect/prompt.yaml +66 -0
  97. package/app/mmm/agents/dev/__init__.py +7 -0
  98. package/app/mmm/agents/dev/agent.py +285 -0
  99. package/app/mmm/agents/dev/prompt.yaml +62 -0
  100. package/app/mmm/agents/pm/__init__.py +7 -0
  101. package/app/mmm/agents/pm/agent.py +417 -0
  102. package/app/mmm/agents/pm/prompt.yaml +64 -0
  103. package/app/mmm/agents/qa/__init__.py +7 -0
  104. package/app/mmm/agents/qa/agent.py +267 -0
  105. package/app/mmm/agents/qa/prompt.yaml +67 -0
  106. package/app/mmm/agents/quick-flow-solo-dev/__init__.py +7 -0
  107. package/app/mmm/agents/quick-flow-solo-dev/agent.py +319 -0
  108. package/app/mmm/agents/quick-flow-solo-dev/prompt.yaml +60 -0
  109. package/app/mmm/agents/sm/__init__.py +7 -0
  110. package/app/mmm/agents/sm/agent.py +357 -0
  111. package/app/mmm/agents/sm/prompt.yaml +61 -0
  112. package/app/mmm/agents/tech-writer/__init__.py +7 -0
  113. package/app/mmm/agents/tech-writer/agent.py +420 -0
  114. package/app/mmm/agents/tech-writer/prompt.yaml +70 -0
  115. package/app/mmm/agents/ux-designer/__init__.py +14 -0
  116. package/app/mmm/agents/ux-designer/agent.py +412 -0
  117. package/app/mmm/agents/ux-designer/prompt.yaml +37 -0
  118. package/app/packs/__init__.py +32 -0
  119. package/app/packs/db-optimization/__init__.py +13 -0
  120. package/app/packs/db-optimization/agents/__init__.py +11 -0
  121. package/app/packs/db-optimization/agents/db-performance-analyst/__init__.py +5 -0
  122. package/app/packs/db-optimization/agents/db-performance-analyst/agent.py +559 -0
  123. package/app/packs/db-optimization/agents/db-performance-analyst/prompt.yaml +63 -0
  124. package/app/packs/db-optimization/agents/indexing-specialist/__init__.py +5 -0
  125. package/app/packs/db-optimization/agents/indexing-specialist/agent.py +713 -0
  126. package/app/packs/db-optimization/agents/indexing-specialist/prompt.yaml +92 -0
  127. package/app/packs/db-optimization/agents/query-optimizer/__init__.py +5 -0
  128. package/app/packs/db-optimization/agents/query-optimizer/agent.py +566 -0
  129. package/app/packs/db-optimization/agents/query-optimizer/prompt.yaml +74 -0
  130. package/app/packs/devops-azure/__init__.py +13 -0
  131. package/app/packs/devops-azure/agents/__init__.py +11 -0
  132. package/app/packs/devops-azure/agents/azure-specialist/__init__.py +5 -0
  133. package/app/packs/devops-azure/agents/azure-specialist/agent.py +584 -0
  134. package/app/packs/devops-azure/agents/azure-specialist/prompt.yaml +301 -0
  135. package/app/packs/devops-azure/agents/cicd-architect/__init__.py +5 -0
  136. package/app/packs/devops-azure/agents/cicd-architect/agent.py +665 -0
  137. package/app/packs/devops-azure/agents/cicd-architect/prompt.yaml +409 -0
  138. package/app/packs/devops-azure/agents/devops-engineer/__init__.py +5 -0
  139. package/app/packs/devops-azure/agents/devops-engineer/agent.py +545 -0
  140. package/app/packs/devops-azure/agents/devops-engineer/prompt.yaml +263 -0
  141. package/app/packs/fintech/__init__.py +13 -0
  142. package/app/packs/fintech/agents/__init__.py +11 -0
  143. package/app/packs/fintech/agents/compliance-officer/__init__.py +5 -0
  144. package/app/packs/fintech/agents/compliance-officer/agent.py +449 -0
  145. package/app/packs/fintech/agents/compliance-officer/prompt.yaml +135 -0
  146. package/app/packs/fintech/agents/financial-analyst/__init__.py +5 -0
  147. package/app/packs/fintech/agents/financial-analyst/agent.py +392 -0
  148. package/app/packs/fintech/agents/financial-analyst/prompt.yaml +143 -0
  149. package/app/packs/fintech/agents/risk-manager/__init__.py +5 -0
  150. package/app/packs/fintech/agents/risk-manager/agent.py +664 -0
  151. package/app/packs/fintech/agents/risk-manager/prompt.yaml +240 -0
  152. package/app/tea/agents/tea/__init__.py +9 -0
  153. package/app/tea/agents/tea/agent.py +689 -0
  154. package/app/tea/agents/tea/prompt.yaml +100 -0
  155. package/banner-bmad-method.png +0 -0
  156. package/docs/404.md +9 -0
  157. package/docs/_STYLE_GUIDE.md +370 -0
  158. package/docs/explanation/advanced-elicitation.md +49 -0
  159. package/docs/explanation/adversarial-review.md +59 -0
  160. package/docs/explanation/brainstorming.md +33 -0
  161. package/docs/explanation/established-projects-faq.md +50 -0
  162. package/docs/explanation/party-mode.md +59 -0
  163. package/docs/explanation/preventing-agent-conflicts.md +112 -0
  164. package/docs/explanation/project-context.md +157 -0
  165. package/docs/explanation/quick-flow.md +73 -0
  166. package/docs/explanation/why-solutioning-matters.md +77 -0
  167. package/docs/how-to/customize-bmad.md +172 -0
  168. package/docs/how-to/established-projects.md +117 -0
  169. package/docs/how-to/get-answers-about-bmad.md +134 -0
  170. package/docs/how-to/install-bmad.md +97 -0
  171. package/docs/how-to/non-interactive-installation.md +171 -0
  172. package/docs/how-to/project-context.md +136 -0
  173. package/docs/how-to/quick-fixes.md +123 -0
  174. package/docs/how-to/shard-large-documents.md +78 -0
  175. package/docs/how-to/upgrade-to-v6.md +97 -0
  176. package/docs/index.md +59 -0
  177. package/docs/reference/agents.md +28 -0
  178. package/docs/reference/commands.md +151 -0
  179. package/docs/reference/modules.md +76 -0
  180. package/docs/reference/testing.md +106 -0
  181. package/docs/reference/workflow-map.md +89 -0
  182. package/docs/roadmap.mdx +136 -0
  183. package/docs/tutorials/getting-started.md +286 -0
  184. package/eslint.config.mjs +141 -0
  185. package/package.json +106 -37
  186. package/prettier.config.mjs +32 -0
  187. package/prompts/cis/brainstorming-coach.yaml +53 -0
  188. package/prompts/cis/creative-problem-solver.yaml +74 -0
  189. package/prompts/cis/design-thinking-coach.yaml +77 -0
  190. package/prompts/cis/innovation-strategist.yaml +70 -0
  191. package/prompts/cis/presentation-master.yaml +62 -0
  192. package/prompts/cis/storyteller.yaml +99 -0
  193. package/prompts/core/mdan-master.yaml +105 -0
  194. package/prompts/mmb/agent-builder.yaml +48 -0
  195. package/prompts/mmb/module-builder.yaml +50 -0
  196. package/prompts/mmb/workflow-builder.yaml +52 -0
  197. package/prompts/mmm/analyst.yaml +62 -0
  198. package/prompts/mmm/architect.yaml +66 -0
  199. package/prompts/mmm/dev.yaml +62 -0
  200. package/prompts/mmm/pm.yaml +64 -0
  201. package/prompts/mmm/qa.yaml +67 -0
  202. package/prompts/mmm/quick-flow-solo-dev.yaml +60 -0
  203. package/prompts/mmm/sm.yaml +61 -0
  204. package/prompts/mmm/tech-writer.yaml +70 -0
  205. package/prompts/mmm/ux-designer.yaml +33 -0
  206. package/prompts/packs/db-optimization/db-performance-analyst.yaml +63 -0
  207. package/prompts/packs/db-optimization/indexing-specialist.yaml +92 -0
  208. package/prompts/packs/db-optimization/query-optimizer.yaml +74 -0
  209. package/prompts/packs/devops-azure/azure-specialist.yaml +301 -0
  210. package/prompts/packs/devops-azure/cicd-architect.yaml +409 -0
  211. package/prompts/packs/devops-azure/devops-engineer.yaml +263 -0
  212. package/prompts/packs/fintech/compliance-officer.yaml +135 -0
  213. package/prompts/packs/fintech/financial-analyst.yaml +143 -0
  214. package/prompts/packs/fintech/risk-manager.yaml +240 -0
  215. package/prompts/tea/tea.yaml +100 -0
  216. package/prompts.json +237 -0
  217. package/src/bmm/agents/analyst.agent.yaml +43 -0
  218. package/src/bmm/agents/architect.agent.yaml +29 -0
  219. package/src/bmm/agents/dev.agent.yaml +38 -0
  220. package/src/bmm/agents/pm.agent.yaml +44 -0
  221. package/src/bmm/agents/qa.agent.yaml +58 -0
  222. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  223. package/src/bmm/agents/sm.agent.yaml +37 -0
  224. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  225. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +46 -0
  226. package/src/bmm/agents/ux-designer.agent.yaml +27 -0
  227. package/src/bmm/data/project-context-template.md +26 -0
  228. package/src/bmm/module-help.csv +31 -0
  229. package/src/bmm/module.yaml +50 -0
  230. package/src/bmm/teams/default-party.csv +20 -0
  231. package/src/bmm/teams/team-fullstack.yaml +12 -0
  232. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  233. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  234. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  235. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  236. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  237. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  238. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  239. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
  240. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -0
  241. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  242. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  243. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  244. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  245. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  246. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +444 -0
  247. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  248. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  249. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  250. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  251. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  252. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +476 -0
  253. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  254. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  255. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  256. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  257. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  258. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -0
  259. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +487 -0
  260. package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
  261. package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
  262. package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
  263. package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
  264. package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
  265. package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
  266. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
  267. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +152 -0
  268. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
  269. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -0
  270. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -0
  271. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
  272. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
  273. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
  274. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
  275. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
  276. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
  277. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
  278. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
  279. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
  280. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
  281. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
  282. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  283. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
  284. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
  285. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
  286. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -0
  287. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
  288. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
  289. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
  290. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  291. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
  292. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
  293. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  294. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  295. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
  296. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
  297. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  298. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
  299. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
  300. package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
  301. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
  302. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
  303. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
  304. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  305. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  306. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  307. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  308. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  309. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  310. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  311. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  312. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  313. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  314. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  315. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  316. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  317. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  318. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
  319. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  320. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -0
  321. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -0
  322. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -0
  323. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -0
  324. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -0
  325. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -0
  326. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -0
  327. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  328. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
  329. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  330. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +13 -0
  331. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  332. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  333. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +173 -0
  334. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  335. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +329 -0
  336. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  337. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  338. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  339. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  340. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
  341. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -0
  342. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  343. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  344. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  345. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
  346. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  347. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  348. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  349. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  350. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -0
  351. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  352. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +207 -0
  353. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -0
  354. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  355. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +346 -0
  356. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  357. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -0
  358. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  359. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  360. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -0
  361. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -0
  362. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -0
  363. package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  364. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -0
  365. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  366. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -0
  367. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -0
  368. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -0
  369. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -0
  370. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -0
  371. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -0
  372. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -0
  373. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -0
  374. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -0
  375. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
  376. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
  377. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +143 -0
  378. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +126 -0
  379. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -0
  380. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  381. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  382. package/src/bmm/workflows/document-project/checklist.md +245 -0
  383. package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  384. package/src/bmm/workflows/document-project/instructions.md +130 -0
  385. package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  386. package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
  387. package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  388. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  389. package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  390. package/src/bmm/workflows/document-project/workflow.yaml +22 -0
  391. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  392. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  393. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  394. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  395. package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
  396. package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
  397. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
  398. package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
  399. package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
  400. package/src/bmm/workflows/qa-generate-e2e-tests/checklist.md +33 -0
  401. package/src/bmm/workflows/qa-generate-e2e-tests/instructions.md +110 -0
  402. package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -0
  403. package/src/core/agents/bmad-master.agent.yaml +30 -0
  404. package/src/core/module-help.csv +9 -0
  405. package/src/core/module.yaml +25 -0
  406. package/src/core/tasks/editorial-review-prose.xml +102 -0
  407. package/src/core/tasks/editorial-review-structure.xml +208 -0
  408. package/src/core/tasks/help.md +86 -0
  409. package/src/core/tasks/index-docs.xml +65 -0
  410. package/src/core/tasks/review-adversarial-general.xml +49 -0
  411. package/src/core/tasks/shard-doc.xml +108 -0
  412. package/src/core/tasks/workflow.xml +235 -0
  413. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  414. package/src/core/workflows/advanced-elicitation/workflow.xml +118 -0
  415. package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
  416. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  417. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  418. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  419. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  420. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  421. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  422. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  423. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  424. package/src/core/workflows/brainstorming/template.md +15 -0
  425. package/src/core/workflows/brainstorming/workflow.md +58 -0
  426. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  427. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  428. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -0
  429. package/src/core/workflows/party-mode/workflow.md +194 -0
  430. package/src/utility/agent-components/activation-rules.txt +6 -0
  431. package/src/utility/agent-components/activation-steps.txt +14 -0
  432. package/src/utility/agent-components/agent-command-header.md +1 -0
  433. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  434. package/src/utility/agent-components/handler-action.txt +4 -0
  435. package/src/utility/agent-components/handler-data.txt +5 -0
  436. package/src/utility/agent-components/handler-exec.txt +6 -0
  437. package/src/utility/agent-components/handler-multi.txt +14 -0
  438. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  439. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  440. package/src/utility/agent-components/handler-workflow.txt +10 -0
  441. package/src/utility/agent-components/menu-handlers.txt +6 -0
  442. package/test/README.md +295 -0
  443. package/test/adversarial-review-tests/README.md +56 -0
  444. package/test/adversarial-review-tests/sample-content.md +46 -0
  445. package/test/adversarial-review-tests/test-cases.yaml +103 -0
  446. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
  447. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
  448. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
  449. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
  450. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
  451. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
  452. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
  453. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
  454. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
  455. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
  456. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
  457. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
  458. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
  459. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
  460. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
  461. package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
  462. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
  463. package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
  464. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
  465. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
  466. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
  467. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
  468. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
  469. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
  470. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
  471. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
  472. package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
  473. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
  474. package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
  475. package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
  476. package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
  477. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
  478. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
  479. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
  480. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
  481. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
  482. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
  483. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
  484. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
  485. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
  486. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
  487. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
  488. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
  489. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
  490. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
  491. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
  492. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
  493. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
  494. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
  495. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
  496. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
  497. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
  498. package/test/fixtures/file-refs-csv/invalid/all-empty-workflow.csv +3 -0
  499. package/test/fixtures/file-refs-csv/invalid/empty-data.csv +1 -0
  500. package/test/fixtures/file-refs-csv/invalid/no-workflow-column.csv +3 -0
  501. package/test/fixtures/file-refs-csv/invalid/unresolvable-vars.csv +3 -0
  502. package/test/fixtures/file-refs-csv/valid/bmm-style.csv +3 -0
  503. package/test/fixtures/file-refs-csv/valid/core-style.csv +3 -0
  504. package/test/fixtures/file-refs-csv/valid/minimal.csv +2 -0
  505. package/test/test-agent-schema.js +387 -0
  506. package/test/test-cli-integration.sh +159 -0
  507. package/test/test-file-refs-csv.js +133 -0
  508. package/test/test-installation-components.js +212 -0
  509. package/test/test-rehype-plugins.mjs +1050 -0
  510. package/test/unit-test-schema.js +133 -0
  511. package/tests/run_all_tests.py +80 -0
  512. package/tests/scenarios/cis/brainstorming-coach.test.py +150 -0
  513. package/tests/scenarios/cis/creative-problem-solver.test.py +167 -0
  514. package/tests/scenarios/cis/design-thinking-coach.test.py +177 -0
  515. package/tests/scenarios/cis/innovation-strategist.test.py +191 -0
  516. package/tests/scenarios/cis/presentation-master.test.py +240 -0
  517. package/tests/scenarios/cis/storyteller.test.py +324 -0
  518. package/tests/scenarios/core/mdan-master.test.py +281 -0
  519. package/tests/scenarios/mmb/agent-builder.test.py +124 -0
  520. package/tests/scenarios/mmb/module-builder.test.py +124 -0
  521. package/tests/scenarios/mmb/workflow-builder.test.py +124 -0
  522. package/tests/scenarios/mmm/analyst.test.py +138 -0
  523. package/tests/scenarios/mmm/architect.test.py +138 -0
  524. package/tests/scenarios/mmm/dev.test.py +138 -0
  525. package/tests/scenarios/mmm/pm.test.py +138 -0
  526. package/tests/scenarios/mmm/qa.test.py +138 -0
  527. package/tests/scenarios/mmm/quick-flow-solo-dev.test.py +138 -0
  528. package/tests/scenarios/mmm/sm.test.py +138 -0
  529. package/tests/scenarios/mmm/tech-writer.test.py +138 -0
  530. package/tests/scenarios/mmm/ux-designer.test.py +294 -0
  531. package/tests/scenarios/packs/db-optimization/db-performance-analyst.test.py +108 -0
  532. package/tests/scenarios/packs/db-optimization/indexing-specialist.test.py +108 -0
  533. package/tests/scenarios/packs/db-optimization/query-optimizer.test.py +106 -0
  534. package/tests/scenarios/packs/devops-azure/azure-specialist.test.py +125 -0
  535. package/tests/scenarios/packs/devops-azure/cicd-architect.test.py +122 -0
  536. package/tests/scenarios/packs/devops-azure/devops-engineer.test.py +128 -0
  537. package/tests/scenarios/packs/fintech/compliance-officer.test.py +165 -0
  538. package/tests/scenarios/packs/fintech/financial-analyst.test.py +184 -0
  539. package/tests/scenarios/packs/fintech/risk-manager.test.py +171 -0
  540. package/tests/scenarios/tea/tea.test.py +346 -0
  541. package/tests/simple_cis_test.py +285 -0
  542. package/tests/simple_db_optimization_test.py +199 -0
  543. package/tests/simple_devops_test.py +193 -0
  544. package/tests/simple_fintech_test.py +205 -0
  545. package/tests/simple_mmb_test.py +103 -0
  546. package/tests/simple_mmm_test.py +159 -0
  547. package/tests/simple_tea_test.py +80 -0
  548. package/tests/simple_test.py +111 -0
  549. package/tests/simple_ux_designer_test.py +144 -0
  550. package/tests/validate_yaml.py +86 -0
  551. package/tools/bmad-npx-wrapper.js +38 -0
  552. package/tools/build-docs.mjs +463 -0
  553. package/tools/cli/README.md +60 -0
  554. package/tools/cli/bmad-cli.js +106 -0
  555. package/tools/cli/commands/install.js +87 -0
  556. package/tools/cli/commands/status.js +65 -0
  557. package/tools/cli/commands/uninstall.js +167 -0
  558. package/tools/cli/external-official-modules.yaml +53 -0
  559. package/tools/cli/installers/install-messages.yaml +39 -0
  560. package/tools/cli/installers/lib/core/config-collector.js +1285 -0
  561. package/tools/cli/installers/lib/core/custom-module-cache.js +260 -0
  562. package/tools/cli/installers/lib/core/dependency-resolver.js +743 -0
  563. package/tools/cli/installers/lib/core/detector.js +223 -0
  564. package/tools/cli/installers/lib/core/ide-config-manager.js +157 -0
  565. package/tools/cli/installers/lib/core/installer.js +3162 -0
  566. package/tools/cli/installers/lib/core/manifest-generator.js +1081 -0
  567. package/tools/cli/installers/lib/core/manifest.js +1038 -0
  568. package/tools/cli/installers/lib/custom/handler.js +358 -0
  569. package/tools/cli/installers/lib/ide/_base-ide.js +665 -0
  570. package/tools/cli/installers/lib/ide/_config-driven.js +634 -0
  571. package/tools/cli/installers/lib/ide/codex.js +440 -0
  572. package/tools/cli/installers/lib/ide/github-copilot.js +699 -0
  573. package/tools/cli/installers/lib/ide/kilo.js +269 -0
  574. package/tools/cli/installers/lib/ide/manager.js +342 -0
  575. package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
  576. package/tools/cli/installers/lib/ide/platform-codes.yaml +243 -0
  577. package/tools/cli/installers/lib/ide/rovodev.js +257 -0
  578. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +180 -0
  579. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +174 -0
  580. package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
  581. package/tools/cli/installers/lib/ide/shared/path-utils.js +299 -0
  582. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +366 -0
  583. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +318 -0
  584. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
  585. package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
  586. package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
  587. package/tools/cli/installers/lib/ide/templates/combined/default-task.md +10 -0
  588. package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +10 -0
  589. package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
  590. package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
  591. package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
  592. package/tools/cli/installers/lib/ide/templates/combined/gemini-task.toml +11 -0
  593. package/tools/cli/installers/lib/ide/templates/combined/gemini-tool.toml +11 -0
  594. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
  595. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
  596. package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +16 -0
  597. package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +9 -0
  598. package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +9 -0
  599. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +15 -0
  600. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +7 -0
  601. package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +15 -0
  602. package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +13 -0
  603. package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +13 -0
  604. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +16 -0
  605. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +16 -0
  606. package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
  607. package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
  608. package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
  609. package/tools/cli/installers/lib/ide/templates/split/.gitkeep +0 -0
  610. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
  611. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  612. package/tools/cli/installers/lib/message-loader.js +83 -0
  613. package/tools/cli/installers/lib/modules/external-manager.js +136 -0
  614. package/tools/cli/installers/lib/modules/manager.js +1498 -0
  615. package/tools/cli/lib/activation-builder.js +165 -0
  616. package/tools/cli/lib/agent/compiler.js +525 -0
  617. package/tools/cli/lib/agent/installer.js +680 -0
  618. package/tools/cli/lib/agent/template-engine.js +152 -0
  619. package/tools/cli/lib/agent-analyzer.js +109 -0
  620. package/tools/cli/lib/agent-party-generator.js +194 -0
  621. package/tools/cli/lib/cli-utils.js +182 -0
  622. package/tools/cli/lib/config.js +213 -0
  623. package/tools/cli/lib/file-ops.js +204 -0
  624. package/tools/cli/lib/platform-codes.js +116 -0
  625. package/tools/cli/lib/project-root.js +77 -0
  626. package/tools/cli/lib/prompts.js +809 -0
  627. package/tools/cli/lib/ui.js +1936 -0
  628. package/tools/cli/lib/xml-handler.js +177 -0
  629. package/tools/cli/lib/xml-to-markdown.js +82 -0
  630. package/tools/cli/lib/yaml-format.js +245 -0
  631. package/tools/cli/lib/yaml-xml-builder.js +587 -0
  632. package/tools/docs/_prompt-external-modules-page.md +59 -0
  633. package/tools/docs/fix-refs.md +91 -0
  634. package/tools/fix-doc-links.js +285 -0
  635. package/tools/format-workflow-md.js +263 -0
  636. package/tools/lib/xml-utils.js +13 -0
  637. package/tools/migrate-custom-module-paths.js +124 -0
  638. package/tools/platform-codes.yaml +157 -0
  639. package/tools/schema/agent.js +491 -0
  640. package/tools/validate-agent-schema.js +110 -0
  641. package/tools/validate-doc-links.js +407 -0
  642. package/tools/validate-file-refs.js +554 -0
  643. package/tools/validate-svg-changes.sh +356 -0
  644. package/website/README.md +75 -0
  645. package/website/astro.config.mjs +136 -0
  646. package/website/public/favicon.ico +0 -0
  647. package/website/public/img/bmad-dark.png +0 -0
  648. package/website/public/img/bmad-light.png +0 -0
  649. package/website/public/workflow-map-diagram.html +361 -0
  650. package/website/src/components/Banner.astro +62 -0
  651. package/website/src/components/Header.astro +96 -0
  652. package/website/src/components/MobileMenuFooter.astro +33 -0
  653. package/website/src/content/config.ts +6 -0
  654. package/website/src/lib/site-url.mjs +25 -0
  655. package/website/src/pages/404.astro +11 -0
  656. package/website/src/pages/robots.txt.ts +48 -0
  657. package/website/src/rehype-base-paths.js +112 -0
  658. package/website/src/rehype-markdown-links.js +119 -0
  659. package/website/src/styles/custom.css +805 -0
  660. package/.mcp.json +0 -46
  661. package/agents/AGENTS-REGISTRY.md +0 -215
  662. package/agents/architect.md +0 -160
  663. package/agents/dev.md +0 -166
  664. package/agents/devops.md +0 -230
  665. package/agents/doc.md +0 -189
  666. package/agents/learn.md +0 -377
  667. package/agents/product.md +0 -124
  668. package/agents/security.md +0 -168
  669. package/agents/test.md +0 -209
  670. package/agents/ux.md +0 -207
  671. package/cli/mdan.js +0 -628
  672. package/cli/mdan.py +0 -316
  673. package/cli/mdan.sh +0 -724
  674. package/cli/postinstall.js +0 -4
  675. package/core/orchestrator.md +0 -238
  676. package/core/universal-envelope.md +0 -160
  677. package/install.sh +0 -91
  678. package/integrations/all-integrations.md +0 -300
  679. package/integrations/claude.md +0 -46
  680. package/integrations/cursor.md +0 -74
  681. package/integrations/mcp.md +0 -153
  682. package/integrations/windsurf.md +0 -48
  683. package/memory/MDAN-STATE.template.json +0 -44
  684. package/memory/MEMORY-SYSTEM.md +0 -197
  685. package/phases/01-discover.md +0 -136
  686. package/phases/02-design.md +0 -147
  687. package/phases/03-build.md +0 -113
  688. package/phases/04-verify.md +0 -107
  689. package/phases/05-ship.md +0 -156
  690. package/skills/find-skills/skill.md +0 -133
  691. package/templates/ARCHITECTURE.md +0 -186
  692. package/templates/CHANGELOG.md +0 -41
  693. package/templates/MDAN-KNOWLEDGE.md +0 -73
  694. package/templates/PRD.md +0 -120
  695. package/templates/SECURITY-REVIEW.md +0 -99
  696. package/templates/TEST-PLAN.md +0 -97
  697. package/templates/prompts/README.md +0 -108
  698. package/templates/prompts/dev-agent.yaml +0 -85
  699. package/templates/prompts/orchestrator.yaml +0 -97
  700. package/templates/prompts.json +0 -81
  701. package/templates/tests/evaluations/README.md +0 -80
  702. package/templates/tests/evaluations/classification_eval.md +0 -136
  703. package/templates/tests/evaluations/rag_eval.md +0 -116
  704. package/templates/tests/scenarios/README.md +0 -62
  705. package/templates/tests/scenarios/basic_authentication.test.md +0 -82
  706. package/templates/tests/scenarios/user_registration.test.md +0 -107
@@ -0,0 +1,743 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('node:path');
3
+ const glob = require('glob');
4
+ const yaml = require('yaml');
5
+ const prompts = require('../../../lib/prompts');
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
+ await prompts.log.info('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
+ await 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 (!moduleDir) {
94
+ continue;
95
+ }
96
+
97
+ if (!(await fs.pathExists(moduleDir))) {
98
+ await prompts.log.warn('Module directory not found: ' + moduleDir);
99
+ continue;
100
+ }
101
+
102
+ // Collect agents
103
+ const agentsDir = path.join(moduleDir, 'agents');
104
+ if (await fs.pathExists(agentsDir)) {
105
+ const agentFiles = await glob.glob('*.md', { cwd: agentsDir });
106
+ for (const file of agentFiles) {
107
+ const agentPath = path.join(agentsDir, file);
108
+
109
+ // Check for localskip attribute
110
+ const content = await fs.readFile(agentPath, 'utf8');
111
+ const hasLocalSkip = content.match(/<agent[^>]*\slocalskip="true"[^>]*>/);
112
+ if (hasLocalSkip) {
113
+ continue; // Skip agents marked for web-only
114
+ }
115
+
116
+ files.push({
117
+ path: agentPath,
118
+ type: 'agent',
119
+ module,
120
+ name: path.basename(file, '.md'),
121
+ });
122
+ }
123
+ }
124
+
125
+ // Collect tasks
126
+ const tasksDir = path.join(moduleDir, 'tasks');
127
+ if (await fs.pathExists(tasksDir)) {
128
+ const taskFiles = await glob.glob('*.md', { cwd: tasksDir });
129
+ for (const file of taskFiles) {
130
+ files.push({
131
+ path: path.join(tasksDir, file),
132
+ type: 'task',
133
+ module,
134
+ name: path.basename(file, '.md'),
135
+ });
136
+ }
137
+ }
138
+ }
139
+
140
+ return files;
141
+ }
142
+
143
+ /**
144
+ * Parse dependencies from file content
145
+ */
146
+ async parseDependencies(files) {
147
+ const allDeps = new Set();
148
+
149
+ for (const file of files) {
150
+ const content = await fs.readFile(file.path, 'utf8');
151
+
152
+ // Parse YAML frontmatter for explicit dependencies
153
+ const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
154
+ if (frontmatterMatch) {
155
+ try {
156
+ // Pre-process to handle backticks in YAML values
157
+ let yamlContent = frontmatterMatch[1];
158
+ // Quote values with backticks to make them valid YAML
159
+ yamlContent = yamlContent.replaceAll(/: `([^`]+)`/g, ': "$1"');
160
+
161
+ const frontmatter = yaml.parse(yamlContent);
162
+ if (frontmatter.dependencies) {
163
+ const deps = Array.isArray(frontmatter.dependencies) ? frontmatter.dependencies : [frontmatter.dependencies];
164
+
165
+ for (const dep of deps) {
166
+ allDeps.add({
167
+ from: file.path,
168
+ dependency: dep,
169
+ type: 'explicit',
170
+ });
171
+ }
172
+ }
173
+
174
+ // Check for template dependencies
175
+ if (frontmatter.template) {
176
+ const templates = Array.isArray(frontmatter.template) ? frontmatter.template : [frontmatter.template];
177
+ for (const template of templates) {
178
+ allDeps.add({
179
+ from: file.path,
180
+ dependency: template,
181
+ type: 'template',
182
+ });
183
+ }
184
+ }
185
+ } catch (error) {
186
+ await prompts.log.warn('Failed to parse frontmatter in ' + file.name + ': ' + error.message);
187
+ }
188
+ }
189
+
190
+ // Parse content for command references (cross-module dependencies)
191
+ const commandRefs = this.parseCommandReferences(content);
192
+ for (const ref of commandRefs) {
193
+ allDeps.add({
194
+ from: file.path,
195
+ dependency: ref,
196
+ type: 'command',
197
+ });
198
+ }
199
+
200
+ // Parse for file path references
201
+ const fileRefs = this.parseFileReferences(content);
202
+ for (const ref of fileRefs) {
203
+ // Determine type based on path format
204
+ // Paths starting with bmad/ are absolute references to the bmad installation
205
+ const depType = ref.startsWith('bmad/') ? 'bmad-path' : 'file';
206
+ allDeps.add({
207
+ from: file.path,
208
+ dependency: ref,
209
+ type: depType,
210
+ });
211
+ }
212
+ }
213
+
214
+ return allDeps;
215
+ }
216
+
217
+ /**
218
+ * Parse command references from content
219
+ */
220
+ parseCommandReferences(content) {
221
+ const refs = new Set();
222
+
223
+ // Match @task-{name} or @agent-{name} or @{module}-{type}-{name}
224
+ const commandPattern = /@(task-|agent-|bmad-)([a-z0-9-]+)/g;
225
+ let match;
226
+
227
+ while ((match = commandPattern.exec(content)) !== null) {
228
+ refs.add(match[0]);
229
+ }
230
+
231
+ // Match file paths like bmad/core/agents/analyst
232
+ const pathPattern = /bmad\/(core|bmm|cis)\/(agents|tasks)\/([a-z0-9-]+)/g;
233
+
234
+ while ((match = pathPattern.exec(content)) !== null) {
235
+ refs.add(match[0]);
236
+ }
237
+
238
+ return [...refs];
239
+ }
240
+
241
+ /**
242
+ * Parse file path references from content
243
+ */
244
+ parseFileReferences(content) {
245
+ const refs = new Set();
246
+
247
+ // Match relative paths like ../templates/file.yaml or ./data/file.md
248
+ const relativePattern = /['"](\.\.?\/[^'"]+\.(md|yaml|yml|xml|json|txt|csv))['"]/g;
249
+ let match;
250
+
251
+ while ((match = relativePattern.exec(content)) !== null) {
252
+ refs.add(match[1]);
253
+ }
254
+
255
+ // Parse exec attributes in command tags
256
+ const execPattern = /exec="([^"]+)"/g;
257
+ while ((match = execPattern.exec(content)) !== null) {
258
+ let execPath = match[1];
259
+ if (execPath && execPath !== '*') {
260
+ // Remove {project-root} prefix to get the actual path
261
+ // Usage is like {project-root}/bmad/core/tasks/foo.md
262
+ if (execPath.includes('{project-root}')) {
263
+ execPath = execPath.replace('{project-root}', '');
264
+ }
265
+ refs.add(execPath);
266
+ }
267
+ }
268
+
269
+ // Parse tmpl attributes in command tags
270
+ const tmplPattern = /tmpl="([^"]+)"/g;
271
+ while ((match = tmplPattern.exec(content)) !== null) {
272
+ let tmplPath = match[1];
273
+ if (tmplPath && tmplPath !== '*') {
274
+ // Remove {project-root} prefix to get the actual path
275
+ // Usage is like {project-root}/bmad/core/tasks/foo.md
276
+ if (tmplPath.includes('{project-root}')) {
277
+ tmplPath = tmplPath.replace('{project-root}', '');
278
+ }
279
+ refs.add(tmplPath);
280
+ }
281
+ }
282
+
283
+ return [...refs];
284
+ }
285
+
286
+ /**
287
+ * Resolve dependency paths to actual files
288
+ */
289
+ async resolveDependencyPaths(bmadDir, dependencies) {
290
+ const resolved = new Set();
291
+
292
+ for (const dep of dependencies) {
293
+ const resolvedPaths = await this.resolveSingleDependency(bmadDir, dep);
294
+ for (const path of resolvedPaths) {
295
+ resolved.add(path);
296
+ }
297
+ }
298
+
299
+ return resolved;
300
+ }
301
+
302
+ /**
303
+ * Resolve a single dependency to file paths
304
+ */
305
+ async resolveSingleDependency(bmadDir, dep) {
306
+ const paths = [];
307
+
308
+ switch (dep.type) {
309
+ case 'explicit':
310
+ case 'file': {
311
+ let depPath = dep.dependency;
312
+
313
+ // Handle {project-root} prefix if present
314
+ if (depPath.includes('{project-root}')) {
315
+ // Remove {project-root} and resolve as bmad path
316
+ depPath = depPath.replace('{project-root}', '');
317
+
318
+ if (depPath.startsWith('bmad/')) {
319
+ const bmadPath = depPath.replace(/^bmad\//, '');
320
+
321
+ // Handle glob patterns
322
+ if (depPath.includes('*')) {
323
+ // Extract the base path and pattern
324
+ const pathParts = bmadPath.split('/');
325
+ const module = pathParts[0];
326
+ const filePattern = pathParts.at(-1);
327
+ const middlePath = pathParts.slice(1, -1).join('/');
328
+
329
+ let basePath;
330
+ if (module === 'core') {
331
+ basePath = path.join(bmadDir, 'core', middlePath);
332
+ } else {
333
+ basePath = path.join(bmadDir, 'modules', module, middlePath);
334
+ }
335
+
336
+ if (await fs.pathExists(basePath)) {
337
+ const files = await glob.glob(filePattern, { cwd: basePath });
338
+ for (const file of files) {
339
+ paths.push(path.join(basePath, file));
340
+ }
341
+ }
342
+ } else {
343
+ // Direct path
344
+ if (bmadPath.startsWith('core/')) {
345
+ const corePath = path.join(bmadDir, bmadPath);
346
+ if (await fs.pathExists(corePath)) {
347
+ paths.push(corePath);
348
+ }
349
+ } else {
350
+ const parts = bmadPath.split('/');
351
+ const module = parts[0];
352
+ const rest = parts.slice(1).join('/');
353
+ const modulePath = path.join(bmadDir, 'modules', module, rest);
354
+
355
+ if (await fs.pathExists(modulePath)) {
356
+ paths.push(modulePath);
357
+ }
358
+ }
359
+ }
360
+ }
361
+ } else {
362
+ // Regular relative path handling
363
+ const sourceDir = path.dirname(dep.from);
364
+
365
+ // Handle glob patterns
366
+ if (depPath.includes('*')) {
367
+ const basePath = path.resolve(sourceDir, path.dirname(depPath));
368
+ const pattern = path.basename(depPath);
369
+
370
+ if (await fs.pathExists(basePath)) {
371
+ const files = await glob.glob(pattern, { cwd: basePath });
372
+ for (const file of files) {
373
+ paths.push(path.join(basePath, file));
374
+ }
375
+ }
376
+ } else {
377
+ // Direct file reference
378
+ const fullPath = path.resolve(sourceDir, depPath);
379
+ if (await fs.pathExists(fullPath)) {
380
+ paths.push(fullPath);
381
+ } else {
382
+ this.missingDependencies.add(`${depPath} (referenced by ${path.basename(dep.from)})`);
383
+ }
384
+ }
385
+ }
386
+
387
+ break;
388
+ }
389
+ case 'command': {
390
+ // Resolve command references to actual files
391
+ const commandPath = await this.resolveCommandToPath(bmadDir, dep.dependency);
392
+ if (commandPath) {
393
+ paths.push(commandPath);
394
+ }
395
+
396
+ break;
397
+ }
398
+ case 'bmad-path': {
399
+ // Resolve bmad/ paths (from {project-root}/bmad/... references)
400
+ // These are paths relative to the src directory structure
401
+ const bmadPath = dep.dependency.replace(/^bmad\//, '');
402
+
403
+ // Try to resolve as if it's in src structure
404
+ // bmad/core/tasks/foo.md -> src/core/tasks/foo.md
405
+ // bmad/bmm/tasks/bar.md -> src/bmm/tasks/bar.md (bmm is directly under src/)
406
+ // bmad/cis/agents/bar.md -> src/modules/cis/agents/bar.md
407
+
408
+ if (bmadPath.startsWith('core/')) {
409
+ const corePath = path.join(bmadDir, bmadPath);
410
+ if (await fs.pathExists(corePath)) {
411
+ paths.push(corePath);
412
+ } else {
413
+ // Not found, but don't report as missing since it might be installed later
414
+ }
415
+ } else {
416
+ // It's a module path like bmm/tasks/foo.md or cis/agents/bar.md
417
+ const parts = bmadPath.split('/');
418
+ const module = parts[0];
419
+ const rest = parts.slice(1).join('/');
420
+ let modulePath;
421
+ if (module === 'bmm') {
422
+ // bmm is directly under src/
423
+ modulePath = path.join(bmadDir, module, rest);
424
+ } else {
425
+ // Other modules are under modules/
426
+ modulePath = path.join(bmadDir, 'modules', module, rest);
427
+ }
428
+
429
+ if (await fs.pathExists(modulePath)) {
430
+ paths.push(modulePath);
431
+ } else {
432
+ // Not found, but don't report as missing since it might be installed later
433
+ }
434
+ }
435
+
436
+ break;
437
+ }
438
+ case 'template': {
439
+ // Resolve template references
440
+ let templateDep = dep.dependency;
441
+
442
+ // Handle {project-root} prefix if present
443
+ if (templateDep.includes('{project-root}')) {
444
+ // Remove {project-root} and treat as bmad-path
445
+ templateDep = templateDep.replace('{project-root}', '');
446
+
447
+ // Now resolve as a bmad path
448
+ if (templateDep.startsWith('bmad/')) {
449
+ const bmadPath = templateDep.replace(/^bmad\//, '');
450
+
451
+ if (bmadPath.startsWith('core/')) {
452
+ const corePath = path.join(bmadDir, bmadPath);
453
+ if (await fs.pathExists(corePath)) {
454
+ paths.push(corePath);
455
+ }
456
+ } else {
457
+ // Module path like cis/templates/brainstorm.md
458
+ const parts = bmadPath.split('/');
459
+ const module = parts[0];
460
+ const rest = parts.slice(1).join('/');
461
+ const modulePath = path.join(bmadDir, 'modules', module, rest);
462
+
463
+ if (await fs.pathExists(modulePath)) {
464
+ paths.push(modulePath);
465
+ }
466
+ }
467
+ }
468
+ } else {
469
+ // Regular relative template path
470
+ const sourceDir = path.dirname(dep.from);
471
+ const templatePath = path.resolve(sourceDir, templateDep);
472
+
473
+ if (await fs.pathExists(templatePath)) {
474
+ paths.push(templatePath);
475
+ } else {
476
+ this.missingDependencies.add(`Template: ${dep.dependency}`);
477
+ }
478
+ }
479
+
480
+ break;
481
+ }
482
+ // No default
483
+ }
484
+
485
+ return paths;
486
+ }
487
+
488
+ /**
489
+ * Resolve command reference to file path
490
+ */
491
+ async resolveCommandToPath(bmadDir, command) {
492
+ // Parse command format: @task-name or @agent-name or bmad/module/type/name
493
+
494
+ if (command.startsWith('@task-')) {
495
+ const taskName = command.slice(6);
496
+ // Search all modules for this task
497
+ for (const module of ['core', 'bmm', 'cis']) {
498
+ const taskPath =
499
+ module === 'core'
500
+ ? path.join(bmadDir, 'core', 'tasks', `${taskName}.md`)
501
+ : path.join(bmadDir, 'modules', module, 'tasks', `${taskName}.md`);
502
+ if (await fs.pathExists(taskPath)) {
503
+ return taskPath;
504
+ }
505
+ }
506
+ } else if (command.startsWith('@agent-')) {
507
+ const agentName = command.slice(7);
508
+ // Search all modules for this agent
509
+ for (const module of ['core', 'bmm', 'cis']) {
510
+ const agentPath =
511
+ module === 'core'
512
+ ? path.join(bmadDir, 'core', 'agents', `${agentName}.md`)
513
+ : path.join(bmadDir, 'modules', module, 'agents', `${agentName}.md`);
514
+ if (await fs.pathExists(agentPath)) {
515
+ return agentPath;
516
+ }
517
+ }
518
+ } else if (command.startsWith('bmad/')) {
519
+ // Direct path reference
520
+ const parts = command.split('/');
521
+ if (parts.length >= 4) {
522
+ const [, module, type, ...nameParts] = parts;
523
+ const name = nameParts.join('/'); // Handle nested paths
524
+
525
+ // Check if name already has extension
526
+ const fileName = name.endsWith('.md') ? name : `${name}.md`;
527
+
528
+ const filePath =
529
+ module === 'core' ? path.join(bmadDir, 'core', type, fileName) : path.join(bmadDir, 'modules', module, type, fileName);
530
+ if (await fs.pathExists(filePath)) {
531
+ return filePath;
532
+ }
533
+ }
534
+ }
535
+
536
+ // Don't report as missing if it's a self-reference within the module being installed
537
+ if (!command.includes('cis') || command.includes('brain')) {
538
+ // Only report missing if it's a true external dependency
539
+ // this.missingDependencies.add(`Command: ${command}`);
540
+ }
541
+ return null;
542
+ }
543
+
544
+ /**
545
+ * Resolve transitive dependencies (dependencies of dependencies)
546
+ */
547
+ async resolveTransitiveDependencies(bmadDir, directDeps) {
548
+ const transitive = new Set();
549
+ const processed = new Set();
550
+
551
+ // Process each direct dependency
552
+ for (const depPath of directDeps) {
553
+ if (processed.has(depPath)) continue;
554
+ processed.add(depPath);
555
+
556
+ // Only process markdown and YAML files for transitive deps
557
+ if ((depPath.endsWith('.md') || depPath.endsWith('.yaml') || depPath.endsWith('.yml')) && (await fs.pathExists(depPath))) {
558
+ const content = await fs.readFile(depPath, 'utf8');
559
+ const subDeps = await this.parseDependencies([
560
+ {
561
+ path: depPath,
562
+ type: 'dependency',
563
+ module: this.getModuleFromPath(bmadDir, depPath),
564
+ name: path.basename(depPath),
565
+ },
566
+ ]);
567
+
568
+ const resolvedSubDeps = await this.resolveDependencyPaths(bmadDir, subDeps);
569
+ for (const subDep of resolvedSubDeps) {
570
+ if (!directDeps.has(subDep)) {
571
+ transitive.add(subDep);
572
+ }
573
+ }
574
+ }
575
+ }
576
+
577
+ return transitive;
578
+ }
579
+
580
+ /**
581
+ * Get module name from file path
582
+ */
583
+ getModuleFromPath(bmadDir, filePath) {
584
+ const relative = path.relative(bmadDir, filePath);
585
+ const parts = relative.split(path.sep);
586
+
587
+ // Handle source directory structure (src/core, src/bmm, or src/modules/xxx)
588
+ if (parts[0] === 'src') {
589
+ if (parts[1] === 'core') {
590
+ return 'core';
591
+ } else if (parts[1] === 'bmm') {
592
+ return 'bmm';
593
+ } else if (parts[1] === 'modules' && parts.length > 2) {
594
+ return parts[2];
595
+ }
596
+ }
597
+
598
+ // Check if it's in modules directory (installed structure)
599
+ if (parts[0] === 'modules' && parts.length > 1) {
600
+ return parts[1];
601
+ }
602
+
603
+ // Otherwise return the first part (core, etc.)
604
+ // But don't return 'src' as a module name
605
+ if (parts[0] === 'src') {
606
+ return 'unknown';
607
+ }
608
+ return parts[0] || 'unknown';
609
+ }
610
+
611
+ /**
612
+ * Organize files by module
613
+ */
614
+ organizeByModule(bmadDir, files) {
615
+ const organized = {};
616
+
617
+ for (const file of files) {
618
+ const module = this.getModuleFromPath(bmadDir, file);
619
+ if (!organized[module]) {
620
+ organized[module] = {
621
+ agents: [],
622
+ tasks: [],
623
+ tools: [],
624
+ templates: [],
625
+ data: [],
626
+ other: [],
627
+ };
628
+ }
629
+
630
+ // Get relative path correctly based on module structure
631
+ let moduleBase;
632
+
633
+ // Check if file is in source directory structure
634
+ if (file.includes('/src/core/') || file.includes('/src/bmm/')) {
635
+ if (module === 'core') {
636
+ moduleBase = path.join(bmadDir, 'src', 'core');
637
+ } else if (module === 'bmm') {
638
+ moduleBase = path.join(bmadDir, 'src', 'bmm');
639
+ }
640
+ } else {
641
+ moduleBase = module === 'core' ? path.join(bmadDir, 'core') : path.join(bmadDir, 'modules', module);
642
+ }
643
+
644
+ const relative = path.relative(moduleBase, file);
645
+
646
+ if (relative.startsWith('agents/') || file.includes('/agents/')) {
647
+ organized[module].agents.push(file);
648
+ } else if (relative.startsWith('tasks/') || file.includes('/tasks/')) {
649
+ organized[module].tasks.push(file);
650
+ } else if (relative.startsWith('tools/') || file.includes('/tools/')) {
651
+ organized[module].tools.push(file);
652
+ } else if (relative.includes('data/')) {
653
+ organized[module].data.push(file);
654
+ } else {
655
+ organized[module].other.push(file);
656
+ }
657
+ }
658
+
659
+ return organized;
660
+ }
661
+
662
+ /**
663
+ * Report resolution results
664
+ */
665
+ async reportResults(organized, selectedModules) {
666
+ await prompts.log.success('Dependency resolution complete');
667
+
668
+ for (const [module, files] of Object.entries(organized)) {
669
+ const isSelected = selectedModules.includes(module) || module === 'core';
670
+ const totalFiles =
671
+ files.agents.length + files.tasks.length + files.tools.length + files.templates.length + files.data.length + files.other.length;
672
+
673
+ if (totalFiles > 0) {
674
+ await prompts.log.info(` ${module.toUpperCase()} module:`);
675
+ await prompts.log.message(` Status: ${isSelected ? 'Selected' : 'Dependencies only'}`);
676
+
677
+ if (files.agents.length > 0) {
678
+ await prompts.log.message(` Agents: ${files.agents.length}`);
679
+ }
680
+ if (files.tasks.length > 0) {
681
+ await prompts.log.message(` Tasks: ${files.tasks.length}`);
682
+ }
683
+ if (files.templates.length > 0) {
684
+ await prompts.log.message(` Templates: ${files.templates.length}`);
685
+ }
686
+ if (files.data.length > 0) {
687
+ await prompts.log.message(` Data files: ${files.data.length}`);
688
+ }
689
+ if (files.other.length > 0) {
690
+ await prompts.log.message(` Other files: ${files.other.length}`);
691
+ }
692
+ }
693
+ }
694
+
695
+ if (this.missingDependencies.size > 0) {
696
+ await prompts.log.warn('Missing dependencies:');
697
+ for (const missing of this.missingDependencies) {
698
+ await prompts.log.warn(` - ${missing}`);
699
+ }
700
+ }
701
+ }
702
+
703
+ /**
704
+ * Create a bundle for web deployment
705
+ * @param {Object} resolution - Resolution results from resolve()
706
+ * @returns {Object} Bundle data ready for web
707
+ */
708
+ async createWebBundle(resolution) {
709
+ const bundle = {
710
+ metadata: {
711
+ created: new Date().toISOString(),
712
+ modules: Object.keys(resolution.byModule),
713
+ totalFiles: resolution.allFiles.length,
714
+ },
715
+ agents: {},
716
+ tasks: {},
717
+ templates: {},
718
+ data: {},
719
+ };
720
+
721
+ // Bundle all files by type
722
+ for (const filePath of resolution.allFiles) {
723
+ if (!(await fs.pathExists(filePath))) continue;
724
+
725
+ const content = await fs.readFile(filePath, 'utf8');
726
+ const relative = path.relative(path.dirname(resolution.primaryFiles[0]?.path || '.'), filePath);
727
+
728
+ if (filePath.includes('/agents/')) {
729
+ bundle.agents[relative] = content;
730
+ } else if (filePath.includes('/tasks/')) {
731
+ bundle.tasks[relative] = content;
732
+ } else if (filePath.includes('template')) {
733
+ bundle.templates[relative] = content;
734
+ } else {
735
+ bundle.data[relative] = content;
736
+ }
737
+ }
738
+
739
+ return bundle;
740
+ }
741
+ }
742
+
743
+ module.exports = { DependencyResolver };