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,366 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const csv = require('csv-parse/sync');
4
+ const { toColonName, toColonPath, toDashPath, BMAD_FOLDER_NAME } = require('./path-utils');
5
+
6
+ /**
7
+ * Generates command files for standalone tasks and tools
8
+ */
9
+ class TaskToolCommandGenerator {
10
+ /**
11
+ * @param {string} bmadFolderName - Name of the BMAD folder for template rendering (default: '_bmad')
12
+ * Note: This parameter is accepted for API consistency with AgentCommandGenerator and
13
+ * WorkflowCommandGenerator, but is not used for path stripping. The manifest always stores
14
+ * filesystem paths with '_bmad/' prefix (the actual folder name), while bmadFolderName is
15
+ * used for template placeholder rendering ({{bmadFolderName}}).
16
+ */
17
+ constructor(bmadFolderName = BMAD_FOLDER_NAME) {
18
+ this.bmadFolderName = bmadFolderName;
19
+ }
20
+
21
+ /**
22
+ * Collect task and tool artifacts for IDE installation
23
+ * @param {string} bmadDir - BMAD installation directory
24
+ * @returns {Promise<Object>} Artifacts array with metadata
25
+ */
26
+ async collectTaskToolArtifacts(bmadDir) {
27
+ const tasks = await this.loadTaskManifest(bmadDir);
28
+ const tools = await this.loadToolManifest(bmadDir);
29
+
30
+ // All tasks/tools in manifest are standalone (internal=true items are filtered during manifest generation)
31
+ const artifacts = [];
32
+ const bmadPrefix = `${BMAD_FOLDER_NAME}/`;
33
+
34
+ // Collect task artifacts
35
+ for (const task of tasks || []) {
36
+ let taskPath = (task.path || '').replaceAll('\\', '/');
37
+ // Convert absolute paths to relative paths
38
+ if (path.isAbsolute(taskPath)) {
39
+ taskPath = path.relative(bmadDir, taskPath).replaceAll('\\', '/');
40
+ }
41
+ // Remove _bmad/ prefix if present to get relative path within bmad folder
42
+ if (taskPath.startsWith(bmadPrefix)) {
43
+ taskPath = taskPath.slice(bmadPrefix.length);
44
+ }
45
+
46
+ const taskExt = path.extname(taskPath) || '.md';
47
+ artifacts.push({
48
+ type: 'task',
49
+ name: task.name,
50
+ displayName: task.displayName || task.name,
51
+ description: task.description || `Execute ${task.displayName || task.name}`,
52
+ module: task.module,
53
+ // Use forward slashes for cross-platform consistency (not path.join which uses backslashes on Windows)
54
+ relativePath: `${task.module}/tasks/${task.name}${taskExt}`,
55
+ path: taskPath,
56
+ });
57
+ }
58
+
59
+ // Collect tool artifacts
60
+ for (const tool of tools || []) {
61
+ let toolPath = (tool.path || '').replaceAll('\\', '/');
62
+ // Convert absolute paths to relative paths
63
+ if (path.isAbsolute(toolPath)) {
64
+ toolPath = path.relative(bmadDir, toolPath).replaceAll('\\', '/');
65
+ }
66
+ // Remove _bmad/ prefix if present to get relative path within bmad folder
67
+ if (toolPath.startsWith(bmadPrefix)) {
68
+ toolPath = toolPath.slice(bmadPrefix.length);
69
+ }
70
+
71
+ const toolExt = path.extname(toolPath) || '.md';
72
+ artifacts.push({
73
+ type: 'tool',
74
+ name: tool.name,
75
+ displayName: tool.displayName || tool.name,
76
+ description: tool.description || `Execute ${tool.displayName || tool.name}`,
77
+ module: tool.module,
78
+ // Use forward slashes for cross-platform consistency (not path.join which uses backslashes on Windows)
79
+ relativePath: `${tool.module}/tools/${tool.name}${toolExt}`,
80
+ path: toolPath,
81
+ });
82
+ }
83
+
84
+ return {
85
+ artifacts,
86
+ counts: {
87
+ tasks: (tasks || []).length,
88
+ tools: (tools || []).length,
89
+ },
90
+ };
91
+ }
92
+
93
+ /**
94
+ * Generate task and tool commands from manifest CSVs
95
+ * @param {string} projectDir - Project directory
96
+ * @param {string} bmadDir - BMAD installation directory
97
+ * @param {string} baseCommandsDir - Optional base commands directory (defaults to .claude/commands/bmad)
98
+ */
99
+ async generateTaskToolCommands(projectDir, bmadDir, baseCommandsDir = null) {
100
+ const tasks = await this.loadTaskManifest(bmadDir);
101
+ const tools = await this.loadToolManifest(bmadDir);
102
+
103
+ // Base commands directory - use provided or default to Claude Code structure
104
+ const commandsDir = baseCommandsDir || path.join(projectDir, '.claude', 'commands', 'bmad');
105
+
106
+ let generatedCount = 0;
107
+
108
+ // Generate command files for tasks
109
+ for (const task of tasks || []) {
110
+ const moduleTasksDir = path.join(commandsDir, task.module, 'tasks');
111
+ await fs.ensureDir(moduleTasksDir);
112
+
113
+ const commandContent = this.generateCommandContent(task, 'task');
114
+ const commandPath = path.join(moduleTasksDir, `${task.name}.md`);
115
+
116
+ await fs.writeFile(commandPath, commandContent);
117
+ generatedCount++;
118
+ }
119
+
120
+ // Generate command files for tools
121
+ for (const tool of tools || []) {
122
+ const moduleToolsDir = path.join(commandsDir, tool.module, 'tools');
123
+ await fs.ensureDir(moduleToolsDir);
124
+
125
+ const commandContent = this.generateCommandContent(tool, 'tool');
126
+ const commandPath = path.join(moduleToolsDir, `${tool.name}.md`);
127
+
128
+ await fs.writeFile(commandPath, commandContent);
129
+ generatedCount++;
130
+ }
131
+
132
+ return {
133
+ generated: generatedCount,
134
+ tasks: (tasks || []).length,
135
+ tools: (tools || []).length,
136
+ };
137
+ }
138
+
139
+ /**
140
+ * Generate command content for a task or tool
141
+ */
142
+ generateCommandContent(item, type) {
143
+ const description = item.description || `Execute ${item.displayName || item.name}`;
144
+
145
+ // Convert path to use {project-root} placeholder
146
+ // Handle undefined/missing path by constructing from module and name
147
+ let itemPath = item.path;
148
+ if (!itemPath || typeof itemPath !== 'string') {
149
+ // Fallback: construct path from module and name if path is missing
150
+ const typePlural = type === 'task' ? 'tasks' : 'tools';
151
+ itemPath = `{project-root}/${this.bmadFolderName}/${item.module}/${typePlural}/${item.name}.md`;
152
+ } else {
153
+ // Normalize path separators to forward slashes
154
+ itemPath = itemPath.replaceAll('\\', '/');
155
+
156
+ // Extract relative path from absolute paths (Windows or Unix)
157
+ // Look for _bmad/ or bmad/ in the path and extract everything after it
158
+ // Match patterns like: /_bmad/core/tasks/... or /bmad/core/tasks/...
159
+ // Use [/\\] to handle both Unix forward slashes and Windows backslashes,
160
+ // and also paths without a leading separator (e.g., C:/_bmad/...)
161
+ const bmadMatch = itemPath.match(/[/\\]_bmad[/\\](.+)$/) || itemPath.match(/[/\\]bmad[/\\](.+)$/);
162
+ if (bmadMatch) {
163
+ // Found /_bmad/ or /bmad/ - use relative path after it
164
+ itemPath = `{project-root}/${this.bmadFolderName}/${bmadMatch[1]}`;
165
+ } else if (itemPath.startsWith(`${BMAD_FOLDER_NAME}/`)) {
166
+ // Relative path starting with _bmad/
167
+ itemPath = `{project-root}/${this.bmadFolderName}/${itemPath.slice(BMAD_FOLDER_NAME.length + 1)}`;
168
+ } else if (itemPath.startsWith('bmad/')) {
169
+ // Relative path starting with bmad/
170
+ itemPath = `{project-root}/${this.bmadFolderName}/${itemPath.slice(5)}`;
171
+ } else if (!itemPath.startsWith('{project-root}')) {
172
+ // For other relative paths, prefix with project root and bmad folder
173
+ itemPath = `{project-root}/${this.bmadFolderName}/${itemPath}`;
174
+ }
175
+ }
176
+
177
+ return `---
178
+ description: '${description.replaceAll("'", "''")}'
179
+ ---
180
+
181
+ # ${item.displayName || item.name}
182
+
183
+ Read the entire ${type} file at: ${itemPath}
184
+
185
+ Follow all instructions in the ${type} file exactly as written.
186
+ `;
187
+ }
188
+
189
+ /**
190
+ * Load task manifest CSV
191
+ */
192
+ async loadTaskManifest(bmadDir) {
193
+ const manifestPath = path.join(bmadDir, '_config', 'task-manifest.csv');
194
+
195
+ if (!(await fs.pathExists(manifestPath))) {
196
+ return null;
197
+ }
198
+
199
+ const csvContent = await fs.readFile(manifestPath, 'utf8');
200
+ return csv.parse(csvContent, {
201
+ columns: true,
202
+ skip_empty_lines: true,
203
+ });
204
+ }
205
+
206
+ /**
207
+ * Load tool manifest CSV
208
+ */
209
+ async loadToolManifest(bmadDir) {
210
+ const manifestPath = path.join(bmadDir, '_config', 'tool-manifest.csv');
211
+
212
+ if (!(await fs.pathExists(manifestPath))) {
213
+ return null;
214
+ }
215
+
216
+ const csvContent = await fs.readFile(manifestPath, 'utf8');
217
+ return csv.parse(csvContent, {
218
+ columns: true,
219
+ skip_empty_lines: true,
220
+ });
221
+ }
222
+
223
+ /**
224
+ * Generate task and tool commands using underscore format (Windows-compatible)
225
+ * Creates flat files like: bmad_bmm_help.md
226
+ *
227
+ * @param {string} projectDir - Project directory
228
+ * @param {string} bmadDir - BMAD installation directory
229
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
230
+ * @returns {Object} Generation results
231
+ */
232
+ async generateColonTaskToolCommands(projectDir, bmadDir, baseCommandsDir) {
233
+ const tasks = await this.loadTaskManifest(bmadDir);
234
+ const tools = await this.loadToolManifest(bmadDir);
235
+
236
+ let generatedCount = 0;
237
+
238
+ // Generate command files for tasks
239
+ for (const task of tasks || []) {
240
+ const commandContent = this.generateCommandContent(task, 'task');
241
+ // Use underscore format: bmad_bmm_name.md
242
+ const flatName = toColonName(task.module, 'tasks', task.name);
243
+ const commandPath = path.join(baseCommandsDir, flatName);
244
+ await fs.ensureDir(path.dirname(commandPath));
245
+ await fs.writeFile(commandPath, commandContent);
246
+ generatedCount++;
247
+ }
248
+
249
+ // Generate command files for tools
250
+ for (const tool of tools || []) {
251
+ const commandContent = this.generateCommandContent(tool, 'tool');
252
+ // Use underscore format: bmad_bmm_name.md
253
+ const flatName = toColonName(tool.module, 'tools', tool.name);
254
+ const commandPath = path.join(baseCommandsDir, flatName);
255
+ await fs.ensureDir(path.dirname(commandPath));
256
+ await fs.writeFile(commandPath, commandContent);
257
+ generatedCount++;
258
+ }
259
+
260
+ return {
261
+ generated: generatedCount,
262
+ tasks: (tasks || []).length,
263
+ tools: (tools || []).length,
264
+ };
265
+ }
266
+
267
+ /**
268
+ * Generate task and tool commands using underscore format (Windows-compatible)
269
+ * Creates flat files like: bmad_bmm_help.md
270
+ *
271
+ * @param {string} projectDir - Project directory
272
+ * @param {string} bmadDir - BMAD installation directory
273
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
274
+ * @returns {Object} Generation results
275
+ */
276
+ async generateDashTaskToolCommands(projectDir, bmadDir, baseCommandsDir) {
277
+ const tasks = await this.loadTaskManifest(bmadDir);
278
+ const tools = await this.loadToolManifest(bmadDir);
279
+
280
+ let generatedCount = 0;
281
+
282
+ // Generate command files for tasks
283
+ for (const task of tasks || []) {
284
+ const commandContent = this.generateCommandContent(task, 'task');
285
+ // Use dash format: bmad-bmm-name.md
286
+ const flatName = toDashPath(`${task.module}/tasks/${task.name}.md`);
287
+ const commandPath = path.join(baseCommandsDir, flatName);
288
+ await fs.ensureDir(path.dirname(commandPath));
289
+ await fs.writeFile(commandPath, commandContent);
290
+ generatedCount++;
291
+ }
292
+
293
+ // Generate command files for tools
294
+ for (const tool of tools || []) {
295
+ const commandContent = this.generateCommandContent(tool, 'tool');
296
+ // Use dash format: bmad-bmm-name.md
297
+ const flatName = toDashPath(`${tool.module}/tools/${tool.name}.md`);
298
+ const commandPath = path.join(baseCommandsDir, flatName);
299
+ await fs.ensureDir(path.dirname(commandPath));
300
+ await fs.writeFile(commandPath, commandContent);
301
+ generatedCount++;
302
+ }
303
+
304
+ return {
305
+ generated: generatedCount,
306
+ tasks: (tasks || []).length,
307
+ tools: (tools || []).length,
308
+ };
309
+ }
310
+
311
+ /**
312
+ * Write task/tool artifacts using underscore format (Windows-compatible)
313
+ * Creates flat files like: bmad_bmm_help.md
314
+ *
315
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
316
+ * @param {Array} artifacts - Task/tool artifacts with relativePath
317
+ * @returns {number} Count of commands written
318
+ */
319
+ async writeColonArtifacts(baseCommandsDir, artifacts) {
320
+ let writtenCount = 0;
321
+
322
+ for (const artifact of artifacts) {
323
+ if (artifact.type === 'task' || artifact.type === 'tool') {
324
+ const commandContent = this.generateCommandContent(artifact, artifact.type);
325
+ // Use underscore format: bmad_module_name.md
326
+ const flatName = toColonPath(artifact.relativePath);
327
+ const commandPath = path.join(baseCommandsDir, flatName);
328
+ await fs.ensureDir(path.dirname(commandPath));
329
+ await fs.writeFile(commandPath, commandContent);
330
+ writtenCount++;
331
+ }
332
+ }
333
+
334
+ return writtenCount;
335
+ }
336
+
337
+ /**
338
+ * Write task/tool artifacts using dash format (NEW STANDARD)
339
+ * Creates flat files like: bmad-bmm-help.md
340
+ *
341
+ * Note: Tasks/tools do NOT have bmad-agent- prefix - only agents do.
342
+ *
343
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
344
+ * @param {Array} artifacts - Task/tool artifacts with relativePath
345
+ * @returns {number} Count of commands written
346
+ */
347
+ async writeDashArtifacts(baseCommandsDir, artifacts) {
348
+ let writtenCount = 0;
349
+
350
+ for (const artifact of artifacts) {
351
+ if (artifact.type === 'task' || artifact.type === 'tool') {
352
+ const commandContent = this.generateCommandContent(artifact, artifact.type);
353
+ // Use dash format: bmad-module-name.md
354
+ const flatName = toDashPath(artifact.relativePath);
355
+ const commandPath = path.join(baseCommandsDir, flatName);
356
+ await fs.ensureDir(path.dirname(commandPath));
357
+ await fs.writeFile(commandPath, commandContent);
358
+ writtenCount++;
359
+ }
360
+ }
361
+
362
+ return writtenCount;
363
+ }
364
+ }
365
+
366
+ module.exports = { TaskToolCommandGenerator };
@@ -0,0 +1,318 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const csv = require('csv-parse/sync');
4
+ const prompts = require('../../../../lib/prompts');
5
+ const { toColonPath, toDashPath, customAgentColonName, customAgentDashName, BMAD_FOLDER_NAME } = require('./path-utils');
6
+
7
+ /**
8
+ * Generates command files for each workflow in the manifest
9
+ */
10
+ class WorkflowCommandGenerator {
11
+ constructor(bmadFolderName = BMAD_FOLDER_NAME) {
12
+ this.templatePath = path.join(__dirname, '../templates/workflow-command-template.md');
13
+ this.bmadFolderName = bmadFolderName;
14
+ }
15
+
16
+ /**
17
+ * Generate workflow commands from the manifest CSV
18
+ * @param {string} projectDir - Project directory
19
+ * @param {string} bmadDir - BMAD installation directory
20
+ */
21
+ async generateWorkflowCommands(projectDir, bmadDir) {
22
+ const workflows = await this.loadWorkflowManifest(bmadDir);
23
+
24
+ if (!workflows) {
25
+ await prompts.log.warn('Workflow manifest not found. Skipping command generation.');
26
+ return { generated: 0 };
27
+ }
28
+
29
+ // ALL workflows now generate commands - no standalone filtering
30
+ const allWorkflows = workflows;
31
+
32
+ // Base commands directory
33
+ const baseCommandsDir = path.join(projectDir, '.claude', 'commands', 'bmad');
34
+
35
+ let generatedCount = 0;
36
+
37
+ // Generate a command file for each workflow, organized by module
38
+ for (const workflow of allWorkflows) {
39
+ const moduleWorkflowsDir = path.join(baseCommandsDir, workflow.module, 'workflows');
40
+ await fs.ensureDir(moduleWorkflowsDir);
41
+
42
+ const commandContent = await this.generateCommandContent(workflow, bmadDir);
43
+ const commandPath = path.join(moduleWorkflowsDir, `${workflow.name}.md`);
44
+
45
+ await fs.writeFile(commandPath, commandContent);
46
+ generatedCount++;
47
+ }
48
+
49
+ // Also create a workflow launcher README in each module
50
+ const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
51
+ await this.createModuleWorkflowLaunchers(baseCommandsDir, groupedWorkflows);
52
+
53
+ return { generated: generatedCount };
54
+ }
55
+
56
+ async collectWorkflowArtifacts(bmadDir) {
57
+ const workflows = await this.loadWorkflowManifest(bmadDir);
58
+
59
+ if (!workflows) {
60
+ return { artifacts: [], counts: { commands: 0, launchers: 0 } };
61
+ }
62
+
63
+ // ALL workflows now generate commands - no standalone filtering
64
+ const allWorkflows = workflows;
65
+
66
+ const artifacts = [];
67
+
68
+ for (const workflow of allWorkflows) {
69
+ const commandContent = await this.generateCommandContent(workflow, bmadDir);
70
+ // Calculate the relative workflow path (e.g., bmm/workflows/4-implementation/sprint-planning/workflow.yaml)
71
+ let workflowRelPath = workflow.path || '';
72
+ // Normalize path separators for cross-platform compatibility
73
+ workflowRelPath = workflowRelPath.replaceAll('\\', '/');
74
+ // Remove _bmad/ prefix if present to get relative path from project root
75
+ // Handle both absolute paths (/path/to/_bmad/...) and relative paths (_bmad/...)
76
+ if (workflowRelPath.includes('_bmad/')) {
77
+ const parts = workflowRelPath.split(/_bmad\//);
78
+ if (parts.length > 1) {
79
+ workflowRelPath = parts.slice(1).join('/');
80
+ }
81
+ } else if (workflowRelPath.includes('/src/')) {
82
+ // Normalize source paths (e.g. .../src/bmm/...) to relative module path (e.g. bmm/...)
83
+ const match = workflowRelPath.match(/\/src\/([^/]+)\/(.+)/);
84
+ if (match) {
85
+ workflowRelPath = `${match[1]}/${match[2]}`;
86
+ }
87
+ }
88
+ // Determine if this is a YAML workflow (use normalized path which is guaranteed to be a string)
89
+ const isYamlWorkflow = workflowRelPath.endsWith('.yaml') || workflowRelPath.endsWith('.yml');
90
+ artifacts.push({
91
+ type: 'workflow-command',
92
+ isYamlWorkflow: isYamlWorkflow, // For template selection
93
+ name: workflow.name,
94
+ description: workflow.description || `${workflow.name} workflow`,
95
+ module: workflow.module,
96
+ relativePath: path.join(workflow.module, 'workflows', `${workflow.name}.md`),
97
+ workflowPath: workflowRelPath, // Relative path to actual workflow file
98
+ content: commandContent,
99
+ sourcePath: workflow.path,
100
+ });
101
+ }
102
+
103
+ const groupedWorkflows = this.groupWorkflowsByModule(allWorkflows);
104
+ for (const [module, launcherContent] of Object.entries(this.buildModuleWorkflowLaunchers(groupedWorkflows))) {
105
+ artifacts.push({
106
+ type: 'workflow-launcher',
107
+ module,
108
+ relativePath: path.join(module, 'workflows', 'README.md'),
109
+ content: launcherContent,
110
+ sourcePath: null,
111
+ });
112
+ }
113
+
114
+ return {
115
+ artifacts,
116
+ counts: {
117
+ commands: allWorkflows.length,
118
+ launchers: Object.keys(groupedWorkflows).length,
119
+ },
120
+ };
121
+ }
122
+
123
+ /**
124
+ * Generate command content for a workflow
125
+ */
126
+ async generateCommandContent(workflow, bmadDir) {
127
+ // Determine template based on workflow file type
128
+ const isMarkdownWorkflow = workflow.path.endsWith('workflow.md');
129
+ const templateName = isMarkdownWorkflow ? 'workflow-commander.md' : 'workflow-command-template.md';
130
+ const templatePath = path.join(path.dirname(this.templatePath), templateName);
131
+
132
+ // Load the appropriate template
133
+ const template = await fs.readFile(templatePath, 'utf8');
134
+
135
+ // Convert source path to installed path
136
+ // From: /Users/.../src/bmm/workflows/.../workflow.yaml
137
+ // To: {project-root}/_bmad/bmm/workflows/.../workflow.yaml
138
+ let workflowPath = workflow.path;
139
+
140
+ // Extract the relative path from source
141
+ if (workflowPath.includes('/src/bmm/')) {
142
+ // bmm is directly under src/
143
+ const match = workflowPath.match(/\/src\/bmm\/(.+)/);
144
+ if (match) {
145
+ workflowPath = `${this.bmadFolderName}/bmm/${match[1]}`;
146
+ }
147
+ } else if (workflowPath.includes('/src/core/')) {
148
+ const match = workflowPath.match(/\/src\/core\/(.+)/);
149
+ if (match) {
150
+ workflowPath = `${this.bmadFolderName}/core/${match[1]}`;
151
+ }
152
+ }
153
+
154
+ // Replace template variables
155
+ return template
156
+ .replaceAll('{{name}}', workflow.name)
157
+ .replaceAll('{{module}}', workflow.module)
158
+ .replaceAll('{{description}}', workflow.description)
159
+ .replaceAll('{{workflow_path}}', workflowPath)
160
+ .replaceAll('_bmad', this.bmadFolderName);
161
+ }
162
+
163
+ /**
164
+ * Create workflow launcher files for each module
165
+ */
166
+ async createModuleWorkflowLaunchers(baseCommandsDir, workflowsByModule) {
167
+ for (const [module, moduleWorkflows] of Object.entries(workflowsByModule)) {
168
+ const content = this.buildLauncherContent(module, moduleWorkflows);
169
+ const moduleWorkflowsDir = path.join(baseCommandsDir, module, 'workflows');
170
+ await fs.ensureDir(moduleWorkflowsDir);
171
+ const launcherPath = path.join(moduleWorkflowsDir, 'README.md');
172
+ await fs.writeFile(launcherPath, content);
173
+ }
174
+ }
175
+
176
+ groupWorkflowsByModule(workflows) {
177
+ const workflowsByModule = {};
178
+
179
+ for (const workflow of workflows) {
180
+ if (!workflowsByModule[workflow.module]) {
181
+ workflowsByModule[workflow.module] = [];
182
+ }
183
+
184
+ workflowsByModule[workflow.module].push({
185
+ ...workflow,
186
+ displayPath: this.transformWorkflowPath(workflow.path),
187
+ });
188
+ }
189
+
190
+ return workflowsByModule;
191
+ }
192
+
193
+ buildModuleWorkflowLaunchers(groupedWorkflows) {
194
+ const launchers = {};
195
+
196
+ for (const [module, moduleWorkflows] of Object.entries(groupedWorkflows)) {
197
+ launchers[module] = this.buildLauncherContent(module, moduleWorkflows);
198
+ }
199
+
200
+ return launchers;
201
+ }
202
+
203
+ buildLauncherContent(module, moduleWorkflows) {
204
+ let content = `# ${module.toUpperCase()} Workflows
205
+
206
+ ## Available Workflows in ${module}
207
+
208
+ `;
209
+
210
+ for (const workflow of moduleWorkflows) {
211
+ content += `**${workflow.name}**\n`;
212
+ content += `- Path: \`${workflow.displayPath}\`\n`;
213
+ content += `- ${workflow.description}\n\n`;
214
+ }
215
+
216
+ content += `
217
+ ## Execution
218
+
219
+ When running any workflow:
220
+ 1. LOAD {project-root}/${this.bmadFolderName}/core/tasks/workflow.xml
221
+ 2. Pass the workflow path as 'workflow-config' parameter
222
+ 3. Follow workflow.xml instructions EXACTLY
223
+ 4. Save outputs after EACH section
224
+
225
+ ## Modes
226
+ - Normal: Full interaction
227
+ - #yolo: Skip optional steps
228
+ `;
229
+
230
+ return content;
231
+ }
232
+
233
+ transformWorkflowPath(workflowPath) {
234
+ let transformed = workflowPath;
235
+
236
+ if (workflowPath.includes('/src/bmm/')) {
237
+ const match = workflowPath.match(/\/src\/bmm\/(.+)/);
238
+ if (match) {
239
+ transformed = `{project-root}/${this.bmadFolderName}/bmm/${match[1]}`;
240
+ }
241
+ } else if (workflowPath.includes('/src/core/')) {
242
+ const match = workflowPath.match(/\/src\/core\/(.+)/);
243
+ if (match) {
244
+ transformed = `{project-root}/${this.bmadFolderName}/core/${match[1]}`;
245
+ }
246
+ }
247
+
248
+ return transformed;
249
+ }
250
+
251
+ async loadWorkflowManifest(bmadDir) {
252
+ const manifestPath = path.join(bmadDir, '_config', 'workflow-manifest.csv');
253
+
254
+ if (!(await fs.pathExists(manifestPath))) {
255
+ return null;
256
+ }
257
+
258
+ const csvContent = await fs.readFile(manifestPath, 'utf8');
259
+ return csv.parse(csvContent, {
260
+ columns: true,
261
+ skip_empty_lines: true,
262
+ });
263
+ }
264
+
265
+ /**
266
+ * Write workflow command artifacts using underscore format (Windows-compatible)
267
+ * Creates flat files like: bmad_bmm_correct-course.md
268
+ *
269
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
270
+ * @param {Array} artifacts - Workflow artifacts
271
+ * @returns {number} Count of commands written
272
+ */
273
+ async writeColonArtifacts(baseCommandsDir, artifacts) {
274
+ let writtenCount = 0;
275
+
276
+ for (const artifact of artifacts) {
277
+ if (artifact.type === 'workflow-command') {
278
+ // Convert relativePath to underscore format: bmm/workflows/correct-course.md → bmad_bmm_correct-course.md
279
+ const flatName = toColonPath(artifact.relativePath);
280
+ const commandPath = path.join(baseCommandsDir, flatName);
281
+ await fs.ensureDir(path.dirname(commandPath));
282
+ await fs.writeFile(commandPath, artifact.content);
283
+ writtenCount++;
284
+ }
285
+ }
286
+
287
+ return writtenCount;
288
+ }
289
+
290
+ /**
291
+ * Write workflow command artifacts using dash format (NEW STANDARD)
292
+ * Creates flat files like: bmad-bmm-correct-course.md
293
+ *
294
+ * Note: Workflows do NOT have bmad-agent- prefix - only agents do.
295
+ *
296
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
297
+ * @param {Array} artifacts - Workflow artifacts
298
+ * @returns {number} Count of commands written
299
+ */
300
+ async writeDashArtifacts(baseCommandsDir, artifacts) {
301
+ let writtenCount = 0;
302
+
303
+ for (const artifact of artifacts) {
304
+ if (artifact.type === 'workflow-command') {
305
+ // Convert relativePath to dash format: bmm/workflows/correct-course.md → bmad-bmm-correct-course.md
306
+ const flatName = toDashPath(artifact.relativePath);
307
+ const commandPath = path.join(baseCommandsDir, flatName);
308
+ await fs.ensureDir(path.dirname(commandPath));
309
+ await fs.writeFile(commandPath, artifact.content);
310
+ writtenCount++;
311
+ }
312
+ }
313
+
314
+ return writtenCount;
315
+ }
316
+ }
317
+
318
+ module.exports = { WorkflowCommandGenerator };
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: '{{name}}'
3
+ description: '{{description}}'
4
+ ---
5
+
6
+ You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
7
+
8
+ <agent-activation CRITICAL="TRUE">
9
+ 1. LOAD the FULL agent file from @_bmad/{{module}}/agents/{{path}}
10
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
11
+ 3. Execute ALL activation steps exactly as written in the agent file
12
+ 4. Follow the agent's persona and menu system precisely
13
+ 5. Stay in character throughout the session
14
+ </agent-activation>