mdan-cli 2.5.1 → 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,699 @@
1
+ const path = require('node:path');
2
+ const { BaseIdeSetup } = require('./_base-ide');
3
+ const prompts = require('../../../lib/prompts');
4
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
5
+ const { BMAD_FOLDER_NAME, toDashPath } = require('./shared/path-utils');
6
+ const fs = require('fs-extra');
7
+ const csv = require('csv-parse/sync');
8
+ const yaml = require('yaml');
9
+
10
+ /**
11
+ * GitHub Copilot setup handler
12
+ * Creates agents in .github/agents/, prompts in .github/prompts/,
13
+ * copilot-instructions.md, and configures VS Code settings
14
+ */
15
+ class GitHubCopilotSetup extends BaseIdeSetup {
16
+ constructor() {
17
+ super('github-copilot', 'GitHub Copilot', false);
18
+ // Don't set configDir to '.github' — nearly every GitHub repo has that directory,
19
+ // which would cause the base detect() to false-positive. Use detectionPaths instead.
20
+ this.configDir = null;
21
+ this.githubDir = '.github';
22
+ this.agentsDir = 'agents';
23
+ this.promptsDir = 'prompts';
24
+ this.detectionPaths = ['.github/copilot-instructions.md', '.github/agents'];
25
+ }
26
+
27
+ /**
28
+ * Setup GitHub Copilot configuration
29
+ * @param {string} projectDir - Project directory
30
+ * @param {string} bmadDir - BMAD installation directory
31
+ * @param {Object} options - Setup options
32
+ */
33
+ async setup(projectDir, bmadDir, options = {}) {
34
+ if (!options.silent) await prompts.log.info(`Setting up ${this.name}...`);
35
+
36
+ // Create .github/agents and .github/prompts directories
37
+ const githubDir = path.join(projectDir, this.githubDir);
38
+ const agentsDir = path.join(githubDir, this.agentsDir);
39
+ const promptsDir = path.join(githubDir, this.promptsDir);
40
+ await this.ensureDir(agentsDir);
41
+ await this.ensureDir(promptsDir);
42
+
43
+ // Preserve any customised tool permissions from existing files before cleanup
44
+ this.existingToolPermissions = await this.collectExistingToolPermissions(projectDir);
45
+
46
+ // Clean up any existing BMAD files before reinstalling
47
+ await this.cleanup(projectDir);
48
+
49
+ // Load agent manifest for enriched descriptions
50
+ const agentManifest = await this.loadAgentManifest(bmadDir);
51
+
52
+ // Generate agent launchers
53
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
54
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
55
+
56
+ // Create agent .agent.md files
57
+ let agentCount = 0;
58
+ for (const artifact of agentArtifacts) {
59
+ const agentMeta = agentManifest.get(artifact.name);
60
+
61
+ // Compute fileName first so we can look up any existing tool permissions
62
+ const dashName = toDashPath(artifact.relativePath);
63
+ const fileName = dashName.replace(/\.md$/, '.agent.md');
64
+ const toolsStr = this.getToolsForFile(fileName);
65
+ const agentContent = this.createAgentContent(artifact, agentMeta, toolsStr);
66
+ const targetPath = path.join(agentsDir, fileName);
67
+ await this.writeFile(targetPath, agentContent);
68
+ agentCount++;
69
+ }
70
+
71
+ // Generate prompt files from bmad-help.csv
72
+ const promptCount = await this.generatePromptFiles(projectDir, bmadDir, agentArtifacts, agentManifest);
73
+
74
+ // Generate copilot-instructions.md
75
+ await this.generateCopilotInstructions(projectDir, bmadDir, agentManifest, options);
76
+
77
+ if (!options.silent) await prompts.log.success(`${this.name} configured: ${agentCount} agents, ${promptCount} prompts → .github/`);
78
+
79
+ return {
80
+ success: true,
81
+ results: {
82
+ agents: agentCount,
83
+ workflows: promptCount,
84
+ tasks: 0,
85
+ tools: 0,
86
+ },
87
+ };
88
+ }
89
+
90
+ /**
91
+ * Load agent manifest CSV into a Map keyed by agent name
92
+ * @param {string} bmadDir - BMAD installation directory
93
+ * @returns {Map} Agent metadata keyed by name
94
+ */
95
+ async loadAgentManifest(bmadDir) {
96
+ const manifestPath = path.join(bmadDir, '_config', 'agent-manifest.csv');
97
+ const agents = new Map();
98
+
99
+ if (!(await fs.pathExists(manifestPath))) {
100
+ return agents;
101
+ }
102
+
103
+ try {
104
+ const csvContent = await fs.readFile(manifestPath, 'utf8');
105
+ const records = csv.parse(csvContent, {
106
+ columns: true,
107
+ skip_empty_lines: true,
108
+ });
109
+
110
+ for (const record of records) {
111
+ agents.set(record.name, record);
112
+ }
113
+ } catch {
114
+ // Gracefully degrade if manifest is unreadable/malformed
115
+ }
116
+
117
+ return agents;
118
+ }
119
+
120
+ /**
121
+ * Load bmad-help.csv to drive prompt generation
122
+ * @param {string} bmadDir - BMAD installation directory
123
+ * @returns {Array|null} Parsed CSV rows
124
+ */
125
+ async loadBmadHelp(bmadDir) {
126
+ const helpPath = path.join(bmadDir, '_config', 'bmad-help.csv');
127
+
128
+ if (!(await fs.pathExists(helpPath))) {
129
+ return null;
130
+ }
131
+
132
+ try {
133
+ const csvContent = await fs.readFile(helpPath, 'utf8');
134
+ return csv.parse(csvContent, {
135
+ columns: true,
136
+ skip_empty_lines: true,
137
+ });
138
+ } catch {
139
+ // Gracefully degrade if help CSV is unreadable/malformed
140
+ return null;
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Create agent .agent.md content with enriched description
146
+ * @param {Object} artifact - Agent artifact from AgentCommandGenerator
147
+ * @param {Object|undefined} manifestEntry - Agent manifest entry with metadata
148
+ * @returns {string} Agent file content
149
+ */
150
+ createAgentContent(artifact, manifestEntry, toolsStr) {
151
+ // Build enriched description from manifest metadata
152
+ let description;
153
+ if (manifestEntry) {
154
+ const persona = manifestEntry.displayName || artifact.name;
155
+ const title = manifestEntry.title || this.formatTitle(artifact.name);
156
+ const capabilities = manifestEntry.capabilities || 'agent capabilities';
157
+ description = `${persona} — ${title}: ${capabilities}`;
158
+ } else {
159
+ description = `Activates the ${this.formatTitle(artifact.name)} agent persona.`;
160
+ }
161
+
162
+ // Build the agent file path for the activation block
163
+ const agentPath = artifact.agentPath || artifact.relativePath;
164
+ const agentFilePath = `{project-root}/${this.bmadFolderName}/${agentPath}`;
165
+
166
+ return `---
167
+ description: '${description.replaceAll("'", "''")}'
168
+ tools: ${toolsStr}
169
+ ---
170
+
171
+ You must fully embody this agent's persona and follow all activation instructions exactly as specified.
172
+
173
+ <agent-activation CRITICAL="TRUE">
174
+ 1. LOAD the FULL agent file from ${agentFilePath}
175
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
176
+ 3. FOLLOW every step in the <activation> section precisely
177
+ 4. DISPLAY the welcome/greeting as instructed
178
+ 5. PRESENT the numbered menu
179
+ 6. WAIT for user input before proceeding
180
+ </agent-activation>
181
+ `;
182
+ }
183
+
184
+ /**
185
+ * Generate .prompt.md files for workflows, tasks, tech-writer commands, and agent activators
186
+ * @param {string} projectDir - Project directory
187
+ * @param {string} bmadDir - BMAD installation directory
188
+ * @param {Array} agentArtifacts - Agent artifacts for activator generation
189
+ * @param {Map} agentManifest - Agent manifest data
190
+ * @returns {number} Count of prompts generated
191
+ */
192
+ async generatePromptFiles(projectDir, bmadDir, agentArtifacts, agentManifest) {
193
+ const promptsDir = path.join(projectDir, this.githubDir, this.promptsDir);
194
+ let promptCount = 0;
195
+
196
+ // Load bmad-help.csv to drive workflow/task prompt generation
197
+ const helpEntries = await this.loadBmadHelp(bmadDir);
198
+
199
+ if (helpEntries) {
200
+ for (const entry of helpEntries) {
201
+ const command = entry.command;
202
+ if (!command) continue; // Skip entries without a command (tech-writer commands have no command column)
203
+
204
+ const workflowFile = entry['workflow-file'];
205
+ if (!workflowFile) continue; // Skip entries with no workflow file path
206
+ const promptFileName = `${command}.prompt.md`;
207
+ const toolsStr = this.getToolsForFile(promptFileName);
208
+ const promptContent = this.createWorkflowPromptContent(entry, workflowFile, toolsStr);
209
+ const promptPath = path.join(promptsDir, promptFileName);
210
+ await this.writeFile(promptPath, promptContent);
211
+ promptCount++;
212
+ }
213
+
214
+ // Generate tech-writer command prompts (entries with no command column)
215
+ for (const entry of helpEntries) {
216
+ if (entry.command) continue; // Already handled above
217
+ const techWriterPrompt = this.createTechWriterPromptContent(entry);
218
+ if (techWriterPrompt) {
219
+ const promptFileName = `${techWriterPrompt.fileName}.prompt.md`;
220
+ const promptPath = path.join(promptsDir, promptFileName);
221
+ await this.writeFile(promptPath, techWriterPrompt.content);
222
+ promptCount++;
223
+ }
224
+ }
225
+ }
226
+
227
+ // Generate agent activator prompts (Pattern D)
228
+ for (const artifact of agentArtifacts) {
229
+ const agentMeta = agentManifest.get(artifact.name);
230
+ const fileName = `bmad-${artifact.name}.prompt.md`;
231
+ const toolsStr = this.getToolsForFile(fileName);
232
+ const promptContent = this.createAgentActivatorPromptContent(artifact, agentMeta, toolsStr);
233
+ const promptPath = path.join(promptsDir, fileName);
234
+ await this.writeFile(promptPath, promptContent);
235
+ promptCount++;
236
+ }
237
+
238
+ return promptCount;
239
+ }
240
+
241
+ /**
242
+ * Create prompt content for a workflow/task entry from bmad-help.csv
243
+ * Determines the pattern (A, B, or A for .xml tasks) based on file extension
244
+ * @param {Object} entry - bmad-help.csv row
245
+ * @param {string} workflowFile - Workflow file path
246
+ * @returns {string} Prompt file content
247
+ */
248
+ createWorkflowPromptContent(entry, workflowFile, toolsStr) {
249
+ const description = this.escapeYamlSingleQuote(this.createPromptDescription(entry.name));
250
+ // bmm/config.yaml is safe to hardcode here: these prompts are only generated when
251
+ // bmad-help.csv exists (bmm module data), so bmm is guaranteed to be installed.
252
+ const configLine = `1. Load {project-root}/${this.bmadFolderName}/bmm/config.yaml and store ALL fields as session variables`;
253
+
254
+ let body;
255
+ if (workflowFile.endsWith('.yaml')) {
256
+ // Pattern B: YAML-based workflows — use workflow engine
257
+ body = `${configLine}
258
+ 2. Load the workflow engine at {project-root}/${this.bmadFolderName}/core/tasks/workflow.xml
259
+ 3. Load and execute the workflow configuration at {project-root}/${workflowFile} using the engine from step 2`;
260
+ } else if (workflowFile.endsWith('.xml')) {
261
+ // Pattern A variant: XML tasks — load and execute directly
262
+ body = `${configLine}
263
+ 2. Load and execute the task at {project-root}/${workflowFile}`;
264
+ } else {
265
+ // Pattern A: MD workflows — load and follow directly
266
+ body = `${configLine}
267
+ 2. Load and follow the workflow at {project-root}/${workflowFile}`;
268
+ }
269
+
270
+ return `---
271
+ description: '${description}'
272
+ agent: 'agent'
273
+ tools: ${toolsStr}
274
+ ---
275
+
276
+ ${body}
277
+ `;
278
+ }
279
+
280
+ /**
281
+ * Create a short 2-5 word description for a prompt from the entry name
282
+ * @param {string} name - Entry name from bmad-help.csv
283
+ * @returns {string} Short description
284
+ */
285
+ createPromptDescription(name) {
286
+ const descriptionMap = {
287
+ 'Brainstorm Project': 'Brainstorm ideas',
288
+ 'Market Research': 'Market research',
289
+ 'Domain Research': 'Domain research',
290
+ 'Technical Research': 'Technical research',
291
+ 'Create Brief': 'Create product brief',
292
+ 'Create PRD': 'Create PRD',
293
+ 'Validate PRD': 'Validate PRD',
294
+ 'Edit PRD': 'Edit PRD',
295
+ 'Create UX': 'Create UX design',
296
+ 'Create Architecture': 'Create architecture',
297
+ 'Create Epics and Stories': 'Create epics and stories',
298
+ 'Check Implementation Readiness': 'Check implementation readiness',
299
+ 'Sprint Planning': 'Sprint planning',
300
+ 'Sprint Status': 'Sprint status',
301
+ 'Create Story': 'Create story',
302
+ 'Validate Story': 'Validate story',
303
+ 'Dev Story': 'Dev story',
304
+ 'QA Automation Test': 'QA automation',
305
+ 'Code Review': 'Code review',
306
+ Retrospective: 'Retrospective',
307
+ 'Document Project': 'Document project',
308
+ 'Generate Project Context': 'Generate project context',
309
+ 'Quick Spec': 'Quick spec',
310
+ 'Quick Dev': 'Quick dev',
311
+ 'Correct Course': 'Correct course',
312
+ Brainstorming: 'Brainstorm ideas',
313
+ 'Party Mode': 'Party mode',
314
+ 'bmad-help': 'BMAD help',
315
+ 'Index Docs': 'Index documents',
316
+ 'Shard Document': 'Shard document',
317
+ 'Editorial Review - Prose': 'Editorial review prose',
318
+ 'Editorial Review - Structure': 'Editorial review structure',
319
+ 'Adversarial Review (General)': 'Adversarial review',
320
+ };
321
+
322
+ return descriptionMap[name] || name;
323
+ }
324
+
325
+ /**
326
+ * Create prompt content for tech-writer agent-only commands (Pattern C)
327
+ * @param {Object} entry - bmad-help.csv row
328
+ * @returns {Object|null} { fileName, content } or null if not a tech-writer command
329
+ */
330
+ createTechWriterPromptContent(entry) {
331
+ if (entry['agent-name'] !== 'tech-writer') return null;
332
+
333
+ const techWriterCommands = {
334
+ 'Write Document': { code: 'WD', file: 'bmad-bmm-write-document', description: 'Write document' },
335
+ 'Update Standards': { code: 'US', file: 'bmad-bmm-update-standards', description: 'Update standards' },
336
+ 'Mermaid Generate': { code: 'MG', file: 'bmad-bmm-mermaid-generate', description: 'Mermaid generate' },
337
+ 'Validate Document': { code: 'VD', file: 'bmad-bmm-validate-document', description: 'Validate document' },
338
+ 'Explain Concept': { code: 'EC', file: 'bmad-bmm-explain-concept', description: 'Explain concept' },
339
+ };
340
+
341
+ const cmd = techWriterCommands[entry.name];
342
+ if (!cmd) return null;
343
+
344
+ const safeDescription = this.escapeYamlSingleQuote(cmd.description);
345
+ const toolsStr = this.getToolsForFile(`${cmd.file}.prompt.md`);
346
+
347
+ const content = `---
348
+ description: '${safeDescription}'
349
+ agent: 'agent'
350
+ tools: ${toolsStr}
351
+ ---
352
+
353
+ 1. Load {project-root}/${this.bmadFolderName}/bmm/config.yaml and store ALL fields as session variables
354
+ 2. Load the full agent file from {project-root}/${this.bmadFolderName}/bmm/agents/tech-writer/tech-writer.md and activate the Paige (Technical Writer) persona
355
+ 3. Execute the ${entry.name} menu command (${cmd.code})
356
+ `;
357
+
358
+ return { fileName: cmd.file, content };
359
+ }
360
+
361
+ /**
362
+ * Create agent activator prompt content (Pattern D)
363
+ * @param {Object} artifact - Agent artifact
364
+ * @param {Object|undefined} manifestEntry - Agent manifest entry
365
+ * @returns {string} Prompt file content
366
+ */
367
+ createAgentActivatorPromptContent(artifact, manifestEntry, toolsStr) {
368
+ let description;
369
+ if (manifestEntry) {
370
+ description = manifestEntry.title || this.formatTitle(artifact.name);
371
+ } else {
372
+ description = this.formatTitle(artifact.name);
373
+ }
374
+
375
+ const safeDescription = this.escapeYamlSingleQuote(description);
376
+ const agentPath = artifact.agentPath || artifact.relativePath;
377
+ const agentFilePath = `{project-root}/${this.bmadFolderName}/${agentPath}`;
378
+
379
+ // bmm/config.yaml is safe to hardcode: agent activators are only generated from
380
+ // bmm agent artifacts, so bmm is guaranteed to be installed.
381
+ return `---
382
+ description: '${safeDescription}'
383
+ agent: 'agent'
384
+ tools: ${toolsStr}
385
+ ---
386
+
387
+ 1. Load {project-root}/${this.bmadFolderName}/bmm/config.yaml and store ALL fields as session variables
388
+ 2. Load the full agent file from ${agentFilePath}
389
+ 3. Follow ALL activation instructions in the agent file
390
+ 4. Display the welcome/greeting as instructed
391
+ 5. Present the numbered menu
392
+ 6. Wait for user input before proceeding
393
+ `;
394
+ }
395
+
396
+ /**
397
+ * Generate copilot-instructions.md from module config
398
+ * @param {string} projectDir - Project directory
399
+ * @param {string} bmadDir - BMAD installation directory
400
+ * @param {Map} agentManifest - Agent manifest data
401
+ */
402
+ async generateCopilotInstructions(projectDir, bmadDir, agentManifest, options = {}) {
403
+ const configVars = await this.loadModuleConfig(bmadDir);
404
+
405
+ // Build the agents table from the manifest
406
+ let agentsTable = '| Agent | Persona | Title | Capabilities |\n|---|---|---|---|\n';
407
+ const agentOrder = [
408
+ 'bmad-master',
409
+ 'analyst',
410
+ 'architect',
411
+ 'dev',
412
+ 'pm',
413
+ 'qa',
414
+ 'quick-flow-solo-dev',
415
+ 'sm',
416
+ 'tech-writer',
417
+ 'ux-designer',
418
+ ];
419
+
420
+ for (const agentName of agentOrder) {
421
+ const meta = agentManifest.get(agentName);
422
+ if (meta) {
423
+ const capabilities = meta.capabilities || 'agent capabilities';
424
+ const cleanTitle = (meta.title || '').replaceAll('""', '"');
425
+ agentsTable += `| ${agentName} | ${meta.displayName} | ${cleanTitle} | ${capabilities} |\n`;
426
+ }
427
+ }
428
+
429
+ const bmad = this.bmadFolderName;
430
+ const bmadSection = `# BMAD Method — Project Instructions
431
+
432
+ ## Project Configuration
433
+
434
+ - **Project**: ${configVars.project_name || '{{project_name}}'}
435
+ - **User**: ${configVars.user_name || '{{user_name}}'}
436
+ - **Communication Language**: ${configVars.communication_language || '{{communication_language}}'}
437
+ - **Document Output Language**: ${configVars.document_output_language || '{{document_output_language}}'}
438
+ - **User Skill Level**: ${configVars.user_skill_level || '{{user_skill_level}}'}
439
+ - **Output Folder**: ${configVars.output_folder || '{{output_folder}}'}
440
+ - **Planning Artifacts**: ${configVars.planning_artifacts || '{{planning_artifacts}}'}
441
+ - **Implementation Artifacts**: ${configVars.implementation_artifacts || '{{implementation_artifacts}}'}
442
+ - **Project Knowledge**: ${configVars.project_knowledge || '{{project_knowledge}}'}
443
+
444
+ ## BMAD Runtime Structure
445
+
446
+ - **Agent definitions**: \`${bmad}/bmm/agents/\` (BMM module) and \`${bmad}/core/agents/\` (core)
447
+ - **Workflow definitions**: \`${bmad}/bmm/workflows/\` (organized by phase)
448
+ - **Core tasks**: \`${bmad}/core/tasks/\` (help, editorial review, indexing, sharding, adversarial review)
449
+ - **Core workflows**: \`${bmad}/core/workflows/\` (brainstorming, party-mode, advanced-elicitation)
450
+ - **Workflow engine**: \`${bmad}/core/tasks/workflow.xml\` (executes YAML-based workflows)
451
+ - **Module configuration**: \`${bmad}/bmm/config.yaml\`
452
+ - **Core configuration**: \`${bmad}/core/config.yaml\`
453
+ - **Agent manifest**: \`${bmad}/_config/agent-manifest.csv\`
454
+ - **Workflow manifest**: \`${bmad}/_config/workflow-manifest.csv\`
455
+ - **Help manifest**: \`${bmad}/_config/bmad-help.csv\`
456
+ - **Agent memory**: \`${bmad}/_memory/\`
457
+
458
+ ## Key Conventions
459
+
460
+ - Always load \`${bmad}/bmm/config.yaml\` before any agent activation or workflow execution
461
+ - Store all config fields as session variables: \`{user_name}\`, \`{communication_language}\`, \`{output_folder}\`, \`{planning_artifacts}\`, \`{implementation_artifacts}\`, \`{project_knowledge}\`
462
+ - MD-based workflows execute directly — load and follow the \`.md\` file
463
+ - YAML-based workflows require the workflow engine — load \`workflow.xml\` first, then pass the \`.yaml\` config
464
+ - Follow step-based workflow execution: load steps JIT, never multiple at once
465
+ - Save outputs after EACH step when using the workflow engine
466
+ - The \`{project-root}\` variable resolves to the workspace root at runtime
467
+
468
+ ## Available Agents
469
+
470
+ ${agentsTable}
471
+ ## Slash Commands
472
+
473
+ Type \`/bmad-\` in Copilot Chat to see all available BMAD workflows and agent activators. Agents are also available in the agents dropdown.`;
474
+
475
+ const instructionsPath = path.join(projectDir, this.githubDir, 'copilot-instructions.md');
476
+ const markerStart = '<!-- BMAD:START -->';
477
+ const markerEnd = '<!-- BMAD:END -->';
478
+ const markedContent = `${markerStart}\n${bmadSection}\n${markerEnd}`;
479
+
480
+ if (await fs.pathExists(instructionsPath)) {
481
+ const existing = await fs.readFile(instructionsPath, 'utf8');
482
+ const startIdx = existing.indexOf(markerStart);
483
+ const endIdx = existing.indexOf(markerEnd);
484
+
485
+ if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {
486
+ // Replace only the BMAD section between markers
487
+ const before = existing.slice(0, startIdx);
488
+ const after = existing.slice(endIdx + markerEnd.length);
489
+ const merged = `${before}${markedContent}${after}`;
490
+ await this.writeFile(instructionsPath, merged);
491
+ } else {
492
+ // Existing file without markers — back it up before overwriting
493
+ const backupPath = `${instructionsPath}.bak`;
494
+ await fs.copy(instructionsPath, backupPath);
495
+ if (!options.silent) await prompts.log.warn(` Backed up copilot-instructions.md → .bak`);
496
+ await this.writeFile(instructionsPath, `${markedContent}\n`);
497
+ }
498
+ } else {
499
+ // No existing file — create fresh with markers
500
+ await this.writeFile(instructionsPath, `${markedContent}\n`);
501
+ }
502
+ }
503
+
504
+ /**
505
+ * Load module config.yaml for template variables
506
+ * @param {string} bmadDir - BMAD installation directory
507
+ * @returns {Object} Config variables
508
+ */
509
+ async loadModuleConfig(bmadDir) {
510
+ const bmmConfigPath = path.join(bmadDir, 'bmm', 'config.yaml');
511
+ const coreConfigPath = path.join(bmadDir, 'core', 'config.yaml');
512
+
513
+ for (const configPath of [bmmConfigPath, coreConfigPath]) {
514
+ if (await fs.pathExists(configPath)) {
515
+ try {
516
+ const content = await fs.readFile(configPath, 'utf8');
517
+ return yaml.parse(content) || {};
518
+ } catch {
519
+ // Fall through to next config
520
+ }
521
+ }
522
+ }
523
+
524
+ return {};
525
+ }
526
+
527
+ /**
528
+ * Escape a string for use inside YAML single-quoted values.
529
+ * In YAML, the only escape inside single quotes is '' for a literal '.
530
+ * @param {string} value - Raw string
531
+ * @returns {string} Escaped string safe for YAML single-quoted context
532
+ */
533
+ escapeYamlSingleQuote(value) {
534
+ return (value || '').replaceAll("'", "''");
535
+ }
536
+
537
+ /**
538
+ * Scan existing agent and prompt files for customised tool permissions before cleanup.
539
+ * Returns a Map<filename, toolsArray> so permissions can be preserved across reinstalls.
540
+ * @param {string} projectDir - Project directory
541
+ * @returns {Map} Existing tool permissions keyed by filename
542
+ */
543
+ async collectExistingToolPermissions(projectDir) {
544
+ const permissions = new Map();
545
+ const dirs = [
546
+ [path.join(projectDir, this.githubDir, this.agentsDir), /^bmad.*\.agent\.md$/],
547
+ [path.join(projectDir, this.githubDir, this.promptsDir), /^bmad-.*\.prompt\.md$/],
548
+ ];
549
+
550
+ for (const [dir, pattern] of dirs) {
551
+ if (!(await fs.pathExists(dir))) continue;
552
+ const files = await fs.readdir(dir);
553
+
554
+ for (const file of files) {
555
+ if (!pattern.test(file)) continue;
556
+
557
+ try {
558
+ const content = await fs.readFile(path.join(dir, file), 'utf8');
559
+ const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
560
+ if (!fmMatch) continue;
561
+
562
+ const frontmatter = yaml.parse(fmMatch[1]);
563
+ if (frontmatter && Array.isArray(frontmatter.tools)) {
564
+ permissions.set(file, frontmatter.tools);
565
+ }
566
+ } catch {
567
+ // Skip unreadable files
568
+ }
569
+ }
570
+ }
571
+
572
+ return permissions;
573
+ }
574
+
575
+ /**
576
+ * Get the tools array string for a file, preserving any existing customisation.
577
+ * Falls back to the default tools if no prior customisation exists.
578
+ * @param {string} fileName - Target filename (e.g. 'bmad-agent-bmm-pm.agent.md')
579
+ * @returns {string} YAML inline array string
580
+ */
581
+ getToolsForFile(fileName) {
582
+ const defaultTools = ['read', 'edit', 'search', 'execute'];
583
+ const tools = (this.existingToolPermissions && this.existingToolPermissions.get(fileName)) || defaultTools;
584
+ return '[' + tools.map((t) => `'${t}'`).join(', ') + ']';
585
+ }
586
+
587
+ /**
588
+ * Format name as title
589
+ */
590
+ formatTitle(name) {
591
+ return name
592
+ .split('-')
593
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
594
+ .join(' ');
595
+ }
596
+
597
+ /**
598
+ * Cleanup GitHub Copilot configuration - surgically remove only BMAD files
599
+ */
600
+ async cleanup(projectDir, options = {}) {
601
+ // Clean up agents directory
602
+ const agentsDir = path.join(projectDir, this.githubDir, this.agentsDir);
603
+ if (await fs.pathExists(agentsDir)) {
604
+ const files = await fs.readdir(agentsDir);
605
+ let removed = 0;
606
+
607
+ for (const file of files) {
608
+ if (file.startsWith('bmad') && (file.endsWith('.agent.md') || file.endsWith('.md'))) {
609
+ await fs.remove(path.join(agentsDir, file));
610
+ removed++;
611
+ }
612
+ }
613
+
614
+ if (removed > 0 && !options.silent) {
615
+ await prompts.log.message(` Cleaned up ${removed} existing BMAD agents`);
616
+ }
617
+ }
618
+
619
+ // Clean up prompts directory
620
+ const promptsDir = path.join(projectDir, this.githubDir, this.promptsDir);
621
+ if (await fs.pathExists(promptsDir)) {
622
+ const files = await fs.readdir(promptsDir);
623
+ let removed = 0;
624
+
625
+ for (const file of files) {
626
+ if (file.startsWith('bmad-') && file.endsWith('.prompt.md')) {
627
+ await fs.remove(path.join(promptsDir, file));
628
+ removed++;
629
+ }
630
+ }
631
+
632
+ if (removed > 0 && !options.silent) {
633
+ await prompts.log.message(` Cleaned up ${removed} existing BMAD prompts`);
634
+ }
635
+ }
636
+
637
+ // During uninstall, also strip BMAD markers from copilot-instructions.md.
638
+ // During reinstall (default), this is skipped because generateCopilotInstructions()
639
+ // handles marker-based replacement in a single read-modify-write pass,
640
+ // which correctly preserves user content outside the markers.
641
+ if (options.isUninstall) {
642
+ await this.cleanupCopilotInstructions(projectDir, options);
643
+ }
644
+ }
645
+
646
+ /**
647
+ * Strip BMAD marker section from copilot-instructions.md
648
+ * If file becomes empty after stripping, delete it.
649
+ * If a .bak backup exists and the main file was deleted, restore the backup.
650
+ * @param {string} projectDir - Project directory
651
+ * @param {Object} [options] - Options (e.g. { silent: true })
652
+ */
653
+ async cleanupCopilotInstructions(projectDir, options = {}) {
654
+ const instructionsPath = path.join(projectDir, this.githubDir, 'copilot-instructions.md');
655
+ const backupPath = `${instructionsPath}.bak`;
656
+
657
+ if (!(await fs.pathExists(instructionsPath))) {
658
+ return;
659
+ }
660
+
661
+ const content = await fs.readFile(instructionsPath, 'utf8');
662
+ const markerStart = '<!-- BMAD:START -->';
663
+ const markerEnd = '<!-- BMAD:END -->';
664
+ const startIdx = content.indexOf(markerStart);
665
+ const endIdx = content.indexOf(markerEnd);
666
+
667
+ if (startIdx === -1 || endIdx === -1 || endIdx <= startIdx) {
668
+ return; // No valid markers found
669
+ }
670
+
671
+ // Strip the marker section (including markers)
672
+ const before = content.slice(0, startIdx);
673
+ const after = content.slice(endIdx + markerEnd.length);
674
+ const cleaned = before + after;
675
+
676
+ if (cleaned.trim().length === 0) {
677
+ // File is empty after stripping — delete it
678
+ await fs.remove(instructionsPath);
679
+
680
+ // If backup exists, restore it
681
+ if (await fs.pathExists(backupPath)) {
682
+ await fs.rename(backupPath, instructionsPath);
683
+ if (!options.silent) {
684
+ await prompts.log.message(' Restored copilot-instructions.md from backup');
685
+ }
686
+ }
687
+ } else {
688
+ // Write cleaned content back (preserve original whitespace)
689
+ await fs.writeFile(instructionsPath, cleaned, 'utf8');
690
+
691
+ // If backup exists, it's stale now — remove it
692
+ if (await fs.pathExists(backupPath)) {
693
+ await fs.remove(backupPath);
694
+ }
695
+ }
696
+ }
697
+ }
698
+
699
+ module.exports = { GitHubCopilotSetup };