bmad-fh 6.0.0-alpha.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. package/.coderabbit.yaml +40 -0
  2. package/.githooks/post-checkout +129 -0
  3. package/.githooks/pre-commit +63 -0
  4. package/.githooks/pre-push +135 -0
  5. package/.github/CODE_OF_CONDUCT.md +128 -0
  6. package/.github/FUNDING.yaml +15 -0
  7. package/.github/ISSUE_TEMPLATE/config.yaml +8 -0
  8. package/.github/ISSUE_TEMPLATE/feature_request.md +22 -0
  9. package/.github/ISSUE_TEMPLATE/issue.md +32 -0
  10. package/.github/scripts/discord-helpers.sh +34 -0
  11. package/.github/workflows/bundle-latest.yaml +330 -0
  12. package/.github/workflows/discord.yaml +90 -0
  13. package/.github/workflows/docs.yaml +63 -0
  14. package/.github/workflows/manual-release.yaml +190 -0
  15. package/.github/workflows/publish-multi-artifact.yaml +50 -0
  16. package/.github/workflows/quality.yaml +115 -0
  17. package/.husky/pre-commit +20 -0
  18. package/.markdownlint-cli2.yaml +41 -0
  19. package/.nvmrc +1 -0
  20. package/.prettierignore +9 -0
  21. package/.vscode/settings.json +97 -0
  22. package/CHANGELOG.md +1394 -0
  23. package/CNAME +1 -0
  24. package/CONTRIBUTING.md +306 -0
  25. package/CONTRIBUTORS.md +32 -0
  26. package/LICENSE +30 -0
  27. package/README.md +126 -0
  28. package/SECURITY.md +85 -0
  29. package/TRADEMARK.md +55 -0
  30. package/Wordmark.png +0 -0
  31. package/banner-bmad-method.png +0 -0
  32. package/docs/404.md +9 -0
  33. package/docs/_README_WORKFLOW_DIAGRAMS.md +40 -0
  34. package/docs/_STYLE_GUIDE.md +367 -0
  35. package/docs/_archive/customize-workflows.md +30 -0
  36. package/docs/_archive/getting-started-bmadv4.md +247 -0
  37. package/docs/_archive/vendor-workflows.md +52 -0
  38. package/docs/downloads.md +72 -0
  39. package/docs/explanation/agents/barry-quick-flow.md +328 -0
  40. package/docs/explanation/agents/index.md +19 -0
  41. package/docs/explanation/architecture/four-phases.md +107 -0
  42. package/docs/explanation/architecture/preventing-agent-conflicts.md +111 -0
  43. package/docs/explanation/architecture/why-solutioning-matters.md +75 -0
  44. package/docs/explanation/bmm/index.md +131 -0
  45. package/docs/explanation/core/index.md +18 -0
  46. package/docs/explanation/core-concepts/agent-roles.md +179 -0
  47. package/docs/explanation/core-concepts/index.md +35 -0
  48. package/docs/explanation/core-concepts/what-are-agents.md +97 -0
  49. package/docs/explanation/core-concepts/what-are-modules.md +85 -0
  50. package/docs/explanation/core-concepts/what-are-workflows.md +204 -0
  51. package/docs/explanation/faq/brownfield-faq.md +73 -0
  52. package/docs/explanation/faq/getting-started-faq.md +67 -0
  53. package/docs/explanation/faq/implementation-faq.md +52 -0
  54. package/docs/explanation/faq/index.md +16 -0
  55. package/docs/explanation/faq/levels-and-tracks-faq.md +52 -0
  56. package/docs/explanation/faq/planning-faq.md +41 -0
  57. package/docs/explanation/faq/tools-faq.md +277 -0
  58. package/docs/explanation/faq/workflows-faq.md +61 -0
  59. package/docs/explanation/features/advanced-elicitation.md +95 -0
  60. package/docs/explanation/features/brainstorming-techniques.md +92 -0
  61. package/docs/explanation/features/party-mode.md +95 -0
  62. package/docs/explanation/features/quick-flow.md +149 -0
  63. package/docs/explanation/features/tea-overview.md +410 -0
  64. package/docs/explanation/features/web-bundles.md +34 -0
  65. package/docs/explanation/philosophy/facilitation-over-generation.md +333 -0
  66. package/docs/explanation/philosophy/testing-as-engineering.md +112 -0
  67. package/docs/explanation/tea/engagement-models.md +710 -0
  68. package/docs/explanation/tea/fixture-architecture.md +457 -0
  69. package/docs/explanation/tea/knowledge-base-system.md +554 -0
  70. package/docs/explanation/tea/network-first-patterns.md +853 -0
  71. package/docs/explanation/tea/risk-based-testing.md +586 -0
  72. package/docs/explanation/tea/test-quality-standards.md +907 -0
  73. package/docs/how-to/brownfield/add-feature-to-existing.md +74 -0
  74. package/docs/how-to/brownfield/document-existing-project.md +66 -0
  75. package/docs/how-to/brownfield/index.md +84 -0
  76. package/docs/how-to/brownfield/quick-fix-in-brownfield.md +77 -0
  77. package/docs/how-to/brownfield/use-tea-for-enterprise.md +526 -0
  78. package/docs/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
  79. package/docs/how-to/customization/customize-agents.md +212 -0
  80. package/docs/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
  81. package/docs/how-to/customization/index.md +23 -0
  82. package/docs/how-to/customization/integrate-playwright-utils.md +813 -0
  83. package/docs/how-to/customization/shard-large-documents.md +101 -0
  84. package/docs/how-to/get-answers-about-bmad.md +102 -0
  85. package/docs/how-to/installation/index.md +12 -0
  86. package/docs/how-to/installation/install-bmad.md +111 -0
  87. package/docs/how-to/installation/install-custom-modules.md +118 -0
  88. package/docs/how-to/installation/upgrade-to-v6.md +131 -0
  89. package/docs/how-to/workflows/bmgd-quick-flow.md +156 -0
  90. package/docs/how-to/workflows/conduct-research.md +97 -0
  91. package/docs/how-to/workflows/create-architecture.md +119 -0
  92. package/docs/how-to/workflows/create-epics-and-stories.md +109 -0
  93. package/docs/how-to/workflows/create-prd.md +91 -0
  94. package/docs/how-to/workflows/create-product-brief.md +94 -0
  95. package/docs/how-to/workflows/create-story.md +102 -0
  96. package/docs/how-to/workflows/create-ux-design.md +100 -0
  97. package/docs/how-to/workflows/implement-story.md +97 -0
  98. package/docs/how-to/workflows/quick-spec.md +122 -0
  99. package/docs/how-to/workflows/run-atdd.md +436 -0
  100. package/docs/how-to/workflows/run-automate.md +653 -0
  101. package/docs/how-to/workflows/run-brainstorming-session.md +73 -0
  102. package/docs/how-to/workflows/run-code-review.md +89 -0
  103. package/docs/how-to/workflows/run-implementation-readiness.md +125 -0
  104. package/docs/how-to/workflows/run-nfr-assess.md +679 -0
  105. package/docs/how-to/workflows/run-sprint-planning.md +94 -0
  106. package/docs/how-to/workflows/run-test-design.md +98 -0
  107. package/docs/how-to/workflows/run-test-review.md +605 -0
  108. package/docs/how-to/workflows/run-trace.md +883 -0
  109. package/docs/how-to/workflows/setup-ci.md +712 -0
  110. package/docs/how-to/workflows/setup-party-mode.md +89 -0
  111. package/docs/how-to/workflows/setup-test-framework.md +98 -0
  112. package/docs/index.md +63 -0
  113. package/docs/migration-guide.md +365 -0
  114. package/docs/multi-scope-guide.md +379 -0
  115. package/docs/plans/multi-scope-parallel-artifacts-plan.md +695 -0
  116. package/docs/reference/agents/index.md +109 -0
  117. package/docs/reference/configuration/core-tasks.md +67 -0
  118. package/docs/reference/configuration/global-config.md +28 -0
  119. package/docs/reference/glossary/index.md +159 -0
  120. package/docs/reference/tea/commands.md +254 -0
  121. package/docs/reference/tea/configuration.md +678 -0
  122. package/docs/reference/tea/knowledge-base.md +340 -0
  123. package/docs/reference/workflows/core-workflows.md +32 -0
  124. package/docs/reference/workflows/document-project.md +73 -0
  125. package/docs/reference/workflows/index.md +12 -0
  126. package/docs/tutorials/getting-started/getting-started-bmadv6.md +246 -0
  127. package/docs/tutorials/getting-started/images/workflow-method-greenfield.excalidraw +5034 -0
  128. package/docs/tutorials/getting-started/images/workflow-method-greenfield.svg +4 -0
  129. package/docs/tutorials/getting-started/images/workflow-overview.jpg +0 -0
  130. package/docs/tutorials/getting-started/tea-lite-quickstart.md +444 -0
  131. package/docs/tutorials/getting-started/workflow-overview.jpg +0 -0
  132. package/eslint.config.mjs +152 -0
  133. package/package.json +117 -0
  134. package/prettier.config.mjs +32 -0
  135. package/src/bmm/_module-installer/installer.js +48 -0
  136. package/src/bmm/_module-installer/platform-specifics/claude-code.js +35 -0
  137. package/src/bmm/_module-installer/platform-specifics/windsurf.js +32 -0
  138. package/src/bmm/agents/analyst.agent.yaml +41 -0
  139. package/src/bmm/agents/architect.agent.yaml +33 -0
  140. package/src/bmm/agents/dev.agent.yaml +38 -0
  141. package/src/bmm/agents/pm.agent.yaml +51 -0
  142. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  143. package/src/bmm/agents/sm.agent.yaml +47 -0
  144. package/src/bmm/agents/tea.agent.yaml +68 -0
  145. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  146. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +49 -0
  147. package/src/bmm/agents/ux-designer.agent.yaml +30 -0
  148. package/src/bmm/data/README.md +29 -0
  149. package/src/bmm/data/project-context-template.md +40 -0
  150. package/src/bmm/module.yaml +64 -0
  151. package/src/bmm/sub-modules/claude-code/config.yaml +4 -0
  152. package/src/bmm/sub-modules/claude-code/injections.yaml +242 -0
  153. package/src/bmm/sub-modules/claude-code/readme.md +87 -0
  154. package/src/bmm/teams/default-party.csv +21 -0
  155. package/src/bmm/teams/team-fullstack.yaml +12 -0
  156. package/src/bmm/testarch/knowledge/api-request.md +442 -0
  157. package/src/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
  158. package/src/bmm/testarch/knowledge/auth-session.md +552 -0
  159. package/src/bmm/testarch/knowledge/burn-in.md +273 -0
  160. package/src/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  161. package/src/bmm/testarch/knowledge/component-tdd.md +486 -0
  162. package/src/bmm/testarch/knowledge/contract-testing.md +957 -0
  163. package/src/bmm/testarch/knowledge/data-factories.md +500 -0
  164. package/src/bmm/testarch/knowledge/email-auth.md +721 -0
  165. package/src/bmm/testarch/knowledge/error-handling.md +725 -0
  166. package/src/bmm/testarch/knowledge/feature-flags.md +750 -0
  167. package/src/bmm/testarch/knowledge/file-utils.md +463 -0
  168. package/src/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  169. package/src/bmm/testarch/knowledge/fixtures-composition.md +382 -0
  170. package/src/bmm/testarch/knowledge/intercept-network-call.md +430 -0
  171. package/src/bmm/testarch/knowledge/log.md +429 -0
  172. package/src/bmm/testarch/knowledge/network-error-monitor.md +405 -0
  173. package/src/bmm/testarch/knowledge/network-first.md +486 -0
  174. package/src/bmm/testarch/knowledge/network-recorder.md +527 -0
  175. package/src/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  176. package/src/bmm/testarch/knowledge/overview.md +286 -0
  177. package/src/bmm/testarch/knowledge/playwright-config.md +730 -0
  178. package/src/bmm/testarch/knowledge/probability-impact.md +601 -0
  179. package/src/bmm/testarch/knowledge/recurse.md +421 -0
  180. package/src/bmm/testarch/knowledge/risk-governance.md +615 -0
  181. package/src/bmm/testarch/knowledge/selective-testing.md +732 -0
  182. package/src/bmm/testarch/knowledge/selector-resilience.md +527 -0
  183. package/src/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  184. package/src/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  185. package/src/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  186. package/src/bmm/testarch/knowledge/test-quality.md +664 -0
  187. package/src/bmm/testarch/knowledge/timing-debugging.md +372 -0
  188. package/src/bmm/testarch/knowledge/visual-debugging.md +524 -0
  189. package/src/bmm/testarch/tea-index.csv +34 -0
  190. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  191. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  192. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  193. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  194. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  195. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  196. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  197. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +194 -0
  198. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
  199. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  200. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  201. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  202. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  203. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  204. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  205. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  206. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  207. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
  208. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  209. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  210. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  211. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  212. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  213. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  214. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  215. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  216. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  217. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
  218. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  219. package/src/bmm/workflows/1-analysis/research/workflow.md +173 -0
  220. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  221. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  222. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  223. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  224. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  225. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  226. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  227. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  228. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  229. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  230. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  231. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  232. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  233. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  234. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +228 -0
  235. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  236. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
  237. package/src/bmm/workflows/2-plan-workflows/prd/data/domain-complexity.csv +13 -0
  238. package/src/bmm/workflows/2-plan-workflows/prd/data/prd-purpose.md +197 -0
  239. package/src/bmm/workflows/2-plan-workflows/prd/data/project-types.csv +11 -0
  240. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01-init.md +191 -0
  241. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-01b-continue.md +153 -0
  242. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-02-discovery.md +224 -0
  243. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-03-success.md +226 -0
  244. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-04-journeys.md +213 -0
  245. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-05-domain.md +207 -0
  246. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-06-innovation.md +226 -0
  247. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-07-project-type.md +237 -0
  248. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-08-scoping.md +228 -0
  249. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-09-functional.md +231 -0
  250. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-10-nonfunctional.md +242 -0
  251. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-11-polish.md +217 -0
  252. package/src/bmm/workflows/2-plan-workflows/prd/steps-c/step-12-complete.md +180 -0
  253. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01-discovery.md +247 -0
  254. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  255. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-02-review.md +249 -0
  256. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-03-edit.md +253 -0
  257. package/src/bmm/workflows/2-plan-workflows/prd/steps-e/step-e-04-complete.md +168 -0
  258. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-01-discovery.md +218 -0
  259. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02-format-detection.md +191 -0
  260. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-02b-parity-check.md +209 -0
  261. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-03-density-validation.md +174 -0
  262. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  263. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-05-measurability-validation.md +228 -0
  264. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-06-traceability-validation.md +217 -0
  265. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  266. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  267. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-09-project-type-validation.md +263 -0
  268. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-10-smart-validation.md +209 -0
  269. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  270. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-12-completeness-validation.md +242 -0
  271. package/src/bmm/workflows/2-plan-workflows/prd/steps-v/step-v-13-report-complete.md +232 -0
  272. package/src/bmm/workflows/2-plan-workflows/prd/templates/prd-template.md +10 -0
  273. package/src/bmm/workflows/2-plan-workflows/prd/validation-report-prd-workflow.md +433 -0
  274. package/src/bmm/workflows/2-plan-workflows/prd/workflow.md +150 -0
  275. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
  276. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  277. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  278. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  279. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  280. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +133 -0
  281. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  282. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
  283. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  284. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
  285. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  286. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  287. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
  288. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  289. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
  290. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  291. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  292. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  293. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  294. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +352 -0
  295. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
  296. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  297. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  298. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  299. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +145 -0
  300. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  301. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
  302. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  303. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  304. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +51 -0
  305. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  306. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
  307. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +60 -0
  308. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  309. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
  310. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  311. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +61 -0
  312. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  313. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  314. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +27 -0
  315. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
  316. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +58 -0
  317. package/src/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  318. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +225 -0
  319. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  320. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +54 -0
  321. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +229 -0
  322. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +36 -0
  323. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +156 -0
  324. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
  325. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +113 -0
  326. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
  327. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
  328. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +140 -0
  329. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +52 -0
  330. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
  331. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -0
  332. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
  333. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +191 -0
  334. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  335. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  336. package/src/bmm/workflows/document-project/checklist.md +245 -0
  337. package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  338. package/src/bmm/workflows/document-project/instructions.md +221 -0
  339. package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  340. package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
  341. package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  342. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  343. package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  344. package/src/bmm/workflows/document-project/workflow.yaml +30 -0
  345. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  346. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  347. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  348. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  349. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
  350. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
  351. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
  352. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
  353. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
  354. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
  355. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
  356. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
  357. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
  358. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
  359. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
  360. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
  361. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
  362. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
  363. package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
  364. package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
  365. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
  366. package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
  367. package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
  368. package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +364 -0
  369. package/src/bmm/workflows/testarch/atdd/checklist.md +374 -0
  370. package/src/bmm/workflows/testarch/atdd/instructions.md +806 -0
  371. package/src/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
  372. package/src/bmm/workflows/testarch/automate/checklist.md +582 -0
  373. package/src/bmm/workflows/testarch/automate/instructions.md +1324 -0
  374. package/src/bmm/workflows/testarch/automate/workflow.yaml +54 -0
  375. package/src/bmm/workflows/testarch/ci/checklist.md +248 -0
  376. package/src/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
  377. package/src/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
  378. package/src/bmm/workflows/testarch/ci/instructions.md +536 -0
  379. package/src/bmm/workflows/testarch/ci/workflow.yaml +47 -0
  380. package/src/bmm/workflows/testarch/framework/checklist.md +321 -0
  381. package/src/bmm/workflows/testarch/framework/instructions.md +481 -0
  382. package/src/bmm/workflows/testarch/framework/workflow.yaml +49 -0
  383. package/src/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
  384. package/src/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
  385. package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +445 -0
  386. package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
  387. package/src/bmm/workflows/testarch/test-design/checklist.md +235 -0
  388. package/src/bmm/workflows/testarch/test-design/instructions.md +788 -0
  389. package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
  390. package/src/bmm/workflows/testarch/test-design/workflow.yaml +56 -0
  391. package/src/bmm/workflows/testarch/test-review/checklist.md +472 -0
  392. package/src/bmm/workflows/testarch/test-review/instructions.md +628 -0
  393. package/src/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
  394. package/src/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
  395. package/src/bmm/workflows/testarch/trace/checklist.md +655 -0
  396. package/src/bmm/workflows/testarch/trace/instructions.md +1047 -0
  397. package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
  398. package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
  399. package/src/bmm/workflows/workflow-status/init/instructions.md +346 -0
  400. package/src/bmm/workflows/workflow-status/init/workflow.yaml +30 -0
  401. package/src/bmm/workflows/workflow-status/instructions.md +397 -0
  402. package/src/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +103 -0
  403. package/src/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +100 -0
  404. package/src/bmm/workflows/workflow-status/paths/method-brownfield.yaml +103 -0
  405. package/src/bmm/workflows/workflow-status/paths/method-greenfield.yaml +100 -0
  406. package/src/bmm/workflows/workflow-status/project-levels.yaml +59 -0
  407. package/src/bmm/workflows/workflow-status/workflow-status-template.yaml +24 -0
  408. package/src/bmm/workflows/workflow-status/workflow.yaml +32 -0
  409. package/src/core/_module-installer/installer.js +60 -0
  410. package/src/core/agents/bmad-master.agent.yaml +30 -0
  411. package/src/core/lib/scope/artifact-resolver.js +298 -0
  412. package/src/core/lib/scope/event-logger.js +411 -0
  413. package/src/core/lib/scope/index.js +30 -0
  414. package/src/core/lib/scope/scope-context.js +307 -0
  415. package/src/core/lib/scope/scope-initializer.js +458 -0
  416. package/src/core/lib/scope/scope-manager.js +512 -0
  417. package/src/core/lib/scope/scope-migrator.js +442 -0
  418. package/src/core/lib/scope/scope-sync.js +489 -0
  419. package/src/core/lib/scope/scope-validator.js +299 -0
  420. package/src/core/lib/scope/state-lock.js +342 -0
  421. package/src/core/module.yaml +53 -0
  422. package/src/core/resources/excalidraw/README.md +160 -0
  423. package/src/core/resources/excalidraw/excalidraw-helpers.md +127 -0
  424. package/src/core/resources/excalidraw/library-loader.md +50 -0
  425. package/src/core/resources/excalidraw/validate-json-instructions.md +79 -0
  426. package/src/core/tasks/editorial-review-prose.xml +91 -0
  427. package/src/core/tasks/editorial-review-structure.xml +198 -0
  428. package/src/core/tasks/index-docs.xml +65 -0
  429. package/src/core/tasks/review-adversarial-general.xml +46 -0
  430. package/src/core/tasks/shard-doc.xml +109 -0
  431. package/src/core/tasks/workflow.xml +277 -0
  432. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  433. package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
  434. package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
  435. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  436. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  437. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  438. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  439. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  440. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  441. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  442. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  443. package/src/core/workflows/brainstorming/template.md +15 -0
  444. package/src/core/workflows/brainstorming/workflow.md +58 -0
  445. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  446. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  447. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
  448. package/src/core/workflows/party-mode/workflow.md +194 -0
  449. package/src/utility/agent-components/activation-rules.txt +6 -0
  450. package/src/utility/agent-components/activation-steps.txt +28 -0
  451. package/src/utility/agent-components/agent-command-header.md +1 -0
  452. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  453. package/src/utility/agent-components/handler-action.txt +4 -0
  454. package/src/utility/agent-components/handler-data.txt +5 -0
  455. package/src/utility/agent-components/handler-exec.txt +19 -0
  456. package/src/utility/agent-components/handler-multi.txt +14 -0
  457. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  458. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  459. package/src/utility/agent-components/handler-workflow.txt +10 -0
  460. package/src/utility/agent-components/menu-handlers.txt +6 -0
  461. package/test/README.md +295 -0
  462. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +27 -0
  463. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +30 -0
  464. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +22 -0
  465. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +20 -0
  466. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +25 -0
  467. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +24 -0
  468. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +25 -0
  469. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
  470. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
  471. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +31 -0
  472. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +25 -0
  473. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +25 -0
  474. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +25 -0
  475. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +25 -0
  476. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +26 -0
  477. package/test/fixtures/agent-schema/invalid/metadata/empty-name.agent.yaml +24 -0
  478. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +27 -0
  479. package/test/fixtures/agent-schema/invalid/metadata/missing-id.agent.yaml +23 -0
  480. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +24 -0
  481. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +27 -0
  482. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +27 -0
  483. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +24 -0
  484. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +29 -0
  485. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +31 -0
  486. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +28 -0
  487. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +28 -0
  488. package/test/fixtures/agent-schema/invalid/top-level/empty-file.agent.yaml +5 -0
  489. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +28 -0
  490. package/test/fixtures/agent-schema/invalid/top-level/missing-agent-key.agent.yaml +11 -0
  491. package/test/fixtures/agent-schema/invalid/yaml-errors/invalid-indentation.agent.yaml +19 -0
  492. package/test/fixtures/agent-schema/invalid/yaml-errors/malformed-yaml.agent.yaml +18 -0
  493. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +24 -0
  494. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +22 -0
  495. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +27 -0
  496. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +31 -0
  497. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +22 -0
  498. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +38 -0
  499. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +24 -0
  500. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
  501. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +34 -0
  502. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
  503. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +24 -0
  504. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +24 -0
  505. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +24 -0
  506. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
  507. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
  508. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +24 -0
  509. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +24 -0
  510. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +22 -0
  511. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +28 -0
  512. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +30 -0
  513. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +24 -0
  514. package/test/test-agent-schema.js +387 -0
  515. package/test/test-cli-integration.sh +159 -0
  516. package/test/test-installation-components.js +214 -0
  517. package/test/test-scope-e2e.js +450 -0
  518. package/test/test-scope-system.js +787 -0
  519. package/test/unit-test-schema.js +133 -0
  520. package/tools/bmad-npx-wrapper.js +38 -0
  521. package/tools/build-docs.js +577 -0
  522. package/tools/cli/README.md +7 -0
  523. package/tools/cli/bmad-cli.js +58 -0
  524. package/tools/cli/commands/install.js +87 -0
  525. package/tools/cli/commands/scope.js +474 -0
  526. package/tools/cli/external-official-modules.yaml +41 -0
  527. package/tools/cli/installers/install-messages.yaml +58 -0
  528. package/tools/cli/installers/lib/core/config-collector.js +1079 -0
  529. package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
  530. package/tools/cli/installers/lib/core/dependency-resolver.js +739 -0
  531. package/tools/cli/installers/lib/core/detector.js +223 -0
  532. package/tools/cli/installers/lib/core/ide-config-manager.js +156 -0
  533. package/tools/cli/installers/lib/core/installer.js +2585 -0
  534. package/tools/cli/installers/lib/core/manifest-generator.js +963 -0
  535. package/tools/cli/installers/lib/core/manifest.js +590 -0
  536. package/tools/cli/installers/lib/custom/handler.js +363 -0
  537. package/tools/cli/installers/lib/ide/_base-ide.js +654 -0
  538. package/tools/cli/installers/lib/ide/antigravity.js +486 -0
  539. package/tools/cli/installers/lib/ide/auggie.js +244 -0
  540. package/tools/cli/installers/lib/ide/claude-code.js +487 -0
  541. package/tools/cli/installers/lib/ide/cline.js +269 -0
  542. package/tools/cli/installers/lib/ide/codex.js +375 -0
  543. package/tools/cli/installers/lib/ide/crush.js +300 -0
  544. package/tools/cli/installers/lib/ide/cursor.js +169 -0
  545. package/tools/cli/installers/lib/ide/gemini.js +301 -0
  546. package/tools/cli/installers/lib/ide/github-copilot.js +383 -0
  547. package/tools/cli/installers/lib/ide/iflow.js +191 -0
  548. package/tools/cli/installers/lib/ide/kilo.js +250 -0
  549. package/tools/cli/installers/lib/ide/kiro-cli.js +326 -0
  550. package/tools/cli/installers/lib/ide/manager.js +244 -0
  551. package/tools/cli/installers/lib/ide/opencode.js +257 -0
  552. package/tools/cli/installers/lib/ide/qwen.js +372 -0
  553. package/tools/cli/installers/lib/ide/roo.js +270 -0
  554. package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
  555. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +96 -0
  556. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +158 -0
  557. package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
  558. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +119 -0
  559. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +242 -0
  560. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +29 -0
  561. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +14 -0
  562. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +12 -0
  563. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +30 -0
  564. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +45 -0
  565. package/tools/cli/installers/lib/ide/trae.js +313 -0
  566. package/tools/cli/installers/lib/ide/windsurf.js +258 -0
  567. package/tools/cli/installers/lib/message-loader.js +85 -0
  568. package/tools/cli/installers/lib/modules/external-manager.js +133 -0
  569. package/tools/cli/installers/lib/modules/manager.js +1362 -0
  570. package/tools/cli/lib/activation-builder.js +163 -0
  571. package/tools/cli/lib/agent/compiler.js +522 -0
  572. package/tools/cli/lib/agent/installer.js +716 -0
  573. package/tools/cli/lib/agent/template-engine.js +152 -0
  574. package/tools/cli/lib/agent-analyzer.js +109 -0
  575. package/tools/cli/lib/agent-party-generator.js +194 -0
  576. package/tools/cli/lib/cli-utils.js +227 -0
  577. package/tools/cli/lib/config.js +213 -0
  578. package/tools/cli/lib/file-ops.js +204 -0
  579. package/tools/cli/lib/platform-codes.js +116 -0
  580. package/tools/cli/lib/project-root.js +77 -0
  581. package/tools/cli/lib/prompts.js +433 -0
  582. package/tools/cli/lib/ui.js +1591 -0
  583. package/tools/cli/lib/xml-handler.js +177 -0
  584. package/tools/cli/lib/xml-to-markdown.js +82 -0
  585. package/tools/cli/lib/yaml-format.js +245 -0
  586. package/tools/cli/lib/yaml-xml-builder.js +587 -0
  587. package/tools/cli/scripts/migrate-workflows.js +281 -0
  588. package/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
  589. package/tools/docs/index.md +2 -0
  590. package/tools/fix-doc-links.js +288 -0
  591. package/tools/flattener/aggregate.js +76 -0
  592. package/tools/flattener/binary.js +80 -0
  593. package/tools/flattener/discovery.js +71 -0
  594. package/tools/flattener/files.js +35 -0
  595. package/tools/flattener/ignoreRules.js +172 -0
  596. package/tools/flattener/main.js +483 -0
  597. package/tools/flattener/projectRoot.js +201 -0
  598. package/tools/flattener/prompts.js +44 -0
  599. package/tools/flattener/stats.helpers.js +368 -0
  600. package/tools/flattener/stats.js +75 -0
  601. package/tools/flattener/test-matrix.js +409 -0
  602. package/tools/flattener/xml.js +82 -0
  603. package/tools/format-workflow-md.js +263 -0
  604. package/tools/lib/xml-utils.js +13 -0
  605. package/tools/maintainer/review-pr-README.md +55 -0
  606. package/tools/maintainer/review-pr.md +242 -0
  607. package/tools/migrate-custom-module-paths.js +124 -0
  608. package/tools/platform-codes.yaml +157 -0
  609. package/tools/schema/agent.js +493 -0
  610. package/tools/validate-agent-schema.js +110 -0
  611. package/tools/validate-doc-links.js +363 -0
  612. package/tools/validate-svg-changes.sh +356 -0
  613. package/website/README.md +76 -0
  614. package/website/astro.config.mjs +228 -0
  615. package/website/public/favicon.ico +0 -0
  616. package/website/public/img/bmad-dark.png +0 -0
  617. package/website/public/img/bmad-light.png +0 -0
  618. package/website/public/img/logo.svg +4 -0
  619. package/website/public/robots.txt +37 -0
  620. package/website/src/components/Banner.astro +59 -0
  621. package/website/src/components/Header.astro +121 -0
  622. package/website/src/components/MobileMenuFooter.astro +53 -0
  623. package/website/src/content/config.ts +6 -0
  624. package/website/src/lib/site-url.js +25 -0
  625. package/website/src/rehype-markdown-links.js +102 -0
  626. package/website/src/styles/custom.css +485 -0
@@ -0,0 +1,301 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const yaml = require('yaml');
4
+ const { BaseIdeSetup } = require('./_base-ide');
5
+ const chalk = require('chalk');
6
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
7
+ const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
8
+
9
+ /**
10
+ * Gemini CLI setup handler
11
+ * Creates TOML files in .gemini/commands/ structure
12
+ */
13
+ class GeminiSetup extends BaseIdeSetup {
14
+ constructor() {
15
+ super('gemini', 'Gemini CLI', false);
16
+ this.configDir = '.gemini';
17
+ this.commandsDir = 'commands';
18
+ this.agentTemplatePath = path.join(__dirname, 'templates', 'gemini-agent-command.toml');
19
+ this.taskTemplatePath = path.join(__dirname, 'templates', 'gemini-task-command.toml');
20
+ }
21
+
22
+ /**
23
+ * Load config values from bmad installation
24
+ * @param {string} bmadDir - BMAD installation directory
25
+ * @returns {Object} Config values
26
+ */
27
+ async loadConfigValues(bmadDir) {
28
+ const configValues = {
29
+ user_name: 'User', // Default fallback
30
+ };
31
+
32
+ // Try to load core config.yaml
33
+ const coreConfigPath = path.join(bmadDir, 'core', 'config.yaml');
34
+ if (await fs.pathExists(coreConfigPath)) {
35
+ try {
36
+ const configContent = await fs.readFile(coreConfigPath, 'utf8');
37
+ const config = yaml.parse(configContent);
38
+
39
+ if (config.user_name) {
40
+ configValues.user_name = config.user_name;
41
+ }
42
+ } catch (error) {
43
+ console.warn(chalk.yellow(` Warning: Could not load config values: ${error.message}`));
44
+ }
45
+ }
46
+
47
+ return configValues;
48
+ }
49
+
50
+ /**
51
+ * Setup Gemini CLI configuration
52
+ * @param {string} projectDir - Project directory
53
+ * @param {string} bmadDir - BMAD installation directory
54
+ * @param {Object} options - Setup options
55
+ */
56
+ async setup(projectDir, bmadDir, options = {}) {
57
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
58
+
59
+ // Create .gemini/commands directory (flat structure with bmad- prefix)
60
+ const geminiDir = path.join(projectDir, this.configDir);
61
+ const commandsDir = path.join(geminiDir, this.commandsDir);
62
+
63
+ await this.ensureDir(commandsDir);
64
+
65
+ // Clean up any existing BMAD files before reinstalling
66
+ await this.cleanup(projectDir);
67
+
68
+ // Generate agent launchers
69
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
70
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
71
+
72
+ // Get tasks and workflows (ALL workflows now generate commands)
73
+ const tasks = await this.getTasks(bmadDir);
74
+
75
+ // Get ALL workflows using the new workflow command generator
76
+ const workflowGenerator = new WorkflowCommandGenerator(this.bmadFolderName);
77
+ const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGenerator.collectWorkflowArtifacts(bmadDir);
78
+
79
+ // Install agents as TOML files with bmad- prefix (flat structure)
80
+ let agentCount = 0;
81
+ for (const artifact of agentArtifacts) {
82
+ const tomlContent = await this.createAgentLauncherToml(artifact);
83
+
84
+ // Flat structure: bmad-agent-{module}-{name}.toml
85
+ const tomlPath = path.join(commandsDir, `bmad-agent-${artifact.module}-${artifact.name}.toml`);
86
+ await this.writeFile(tomlPath, tomlContent);
87
+ agentCount++;
88
+
89
+ console.log(chalk.green(` ✓ Added agent: /bmad:agents:${artifact.module}:${artifact.name}`));
90
+ }
91
+
92
+ // Install tasks as TOML files with bmad- prefix (flat structure)
93
+ let taskCount = 0;
94
+ for (const task of tasks) {
95
+ const content = await this.readFile(task.path);
96
+ const tomlContent = await this.createTaskToml(task, content);
97
+
98
+ // Flat structure: bmad-task-{module}-{name}.toml
99
+ const tomlPath = path.join(commandsDir, `bmad-task-${task.module}-${task.name}.toml`);
100
+ await this.writeFile(tomlPath, tomlContent);
101
+ taskCount++;
102
+
103
+ console.log(chalk.green(` ✓ Added task: /bmad:tasks:${task.module}:${task.name}`));
104
+ }
105
+
106
+ // Install workflows as TOML files with bmad- prefix (flat structure)
107
+ let workflowCount = 0;
108
+ for (const artifact of workflowArtifacts) {
109
+ if (artifact.type === 'workflow-command') {
110
+ // Create TOML wrapper around workflow command content
111
+ const tomlContent = await this.createWorkflowToml(artifact);
112
+
113
+ // Flat structure: bmad-workflow-{module}-{name}.toml
114
+ const workflowName = path.basename(artifact.relativePath, '.md');
115
+ const tomlPath = path.join(commandsDir, `bmad-workflow-${artifact.module}-${workflowName}.toml`);
116
+ await this.writeFile(tomlPath, tomlContent);
117
+ workflowCount++;
118
+
119
+ console.log(chalk.green(` ✓ Added workflow: /bmad:workflows:${artifact.module}:${workflowName}`));
120
+ }
121
+ }
122
+
123
+ console.log(chalk.green(`✓ ${this.name} configured:`));
124
+ console.log(chalk.dim(` - ${agentCount} agents configured`));
125
+ console.log(chalk.dim(` - ${taskCount} tasks configured`));
126
+ console.log(chalk.dim(` - ${workflowCount} workflows configured`));
127
+ console.log(chalk.dim(` - Commands directory: ${path.relative(projectDir, commandsDir)}`));
128
+ console.log(chalk.dim(` - Agent activation: /bmad:agents:{agent-name}`));
129
+ console.log(chalk.dim(` - Task activation: /bmad:tasks:{task-name}`));
130
+ console.log(chalk.dim(` - Workflow activation: /bmad:workflows:{workflow-name}`));
131
+
132
+ return {
133
+ success: true,
134
+ agents: agentCount,
135
+ tasks: taskCount,
136
+ workflows: workflowCount,
137
+ };
138
+ }
139
+
140
+ /**
141
+ * Create agent launcher TOML content from artifact
142
+ */
143
+ async createAgentLauncherToml(artifact) {
144
+ // Strip frontmatter from launcher content
145
+ const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
146
+ const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
147
+
148
+ // Extract title from launcher frontmatter
149
+ const titleMatch = artifact.content.match(/description:\s*"([^"]+)"/);
150
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(artifact.name);
151
+
152
+ // Create TOML wrapper around launcher content (without frontmatter)
153
+ const description = `BMAD ${artifact.module.toUpperCase()} Agent: ${title}`;
154
+
155
+ return `description = "${description}"
156
+ prompt = """
157
+ ${contentWithoutFrontmatter}
158
+ """
159
+ `;
160
+ }
161
+
162
+ /**
163
+ * Create agent TOML content using template
164
+ */
165
+ async createAgentToml(agent, content) {
166
+ // Extract metadata
167
+ const titleMatch = content.match(/title="([^"]+)"/);
168
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
169
+
170
+ // Load template
171
+ const template = await fs.readFile(this.agentTemplatePath, 'utf8');
172
+
173
+ // Replace template variables
174
+ // Note: {user_name} and other {config_values} are left as-is for runtime substitution by Gemini
175
+ const tomlContent = template
176
+ .replaceAll('{{title}}', title)
177
+ .replaceAll('{_bmad}', '_bmad')
178
+ .replaceAll('{_bmad}', this.bmadFolderName)
179
+ .replaceAll('{{module}}', agent.module)
180
+ .replaceAll('{{name}}', agent.name);
181
+
182
+ return tomlContent;
183
+ }
184
+
185
+ /**
186
+ * Create task TOML content using template
187
+ */
188
+ async createTaskToml(task, content) {
189
+ // Extract task name from XML if available
190
+ const nameMatch = content.match(/<name>([^<]+)<\/name>/);
191
+ const taskName = nameMatch ? nameMatch[1] : this.formatTitle(task.name);
192
+
193
+ // Load template
194
+ const template = await fs.readFile(this.taskTemplatePath, 'utf8');
195
+
196
+ // Replace template variables
197
+ const tomlContent = template
198
+ .replaceAll('{{taskName}}', taskName)
199
+ .replaceAll('{_bmad}', '_bmad')
200
+ .replaceAll('{_bmad}', this.bmadFolderName)
201
+ .replaceAll('{{module}}', task.module)
202
+ .replaceAll('{{filename}}', task.filename);
203
+
204
+ return tomlContent;
205
+ }
206
+
207
+ /**
208
+ * Create workflow TOML content from artifact
209
+ */
210
+ async createWorkflowToml(artifact) {
211
+ // Extract description from artifact content
212
+ const descriptionMatch = artifact.content.match(/description:\s*"([^"]+)"/);
213
+ const description = descriptionMatch
214
+ ? descriptionMatch[1]
215
+ : `BMAD ${artifact.module.toUpperCase()} Workflow: ${path.basename(artifact.relativePath, '.md')}`;
216
+
217
+ // Strip frontmatter from command content
218
+ const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
219
+ const contentWithoutFrontmatter = artifact.content.replace(frontmatterRegex, '').trim();
220
+
221
+ return `description = "${description}"
222
+ prompt = """
223
+ ${contentWithoutFrontmatter}
224
+ """
225
+ `;
226
+ }
227
+
228
+ /**
229
+ * Cleanup Gemini configuration - surgically remove only BMAD files
230
+ */
231
+ async cleanup(projectDir) {
232
+ const fs = require('fs-extra');
233
+ const commandsDir = path.join(projectDir, this.configDir, this.commandsDir);
234
+
235
+ if (await fs.pathExists(commandsDir)) {
236
+ // Only remove files that start with bmad- prefix
237
+ const files = await fs.readdir(commandsDir);
238
+ let removed = 0;
239
+
240
+ for (const file of files) {
241
+ if (file.startsWith('bmad-') && file.endsWith('.toml')) {
242
+ await fs.remove(path.join(commandsDir, file));
243
+ removed++;
244
+ }
245
+ }
246
+
247
+ if (removed > 0) {
248
+ console.log(chalk.dim(` Cleaned up ${removed} existing BMAD files`));
249
+ }
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Install a custom agent launcher for Gemini
255
+ * @param {string} projectDir - Project directory
256
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
257
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
258
+ * @param {Object} metadata - Agent metadata
259
+ * @returns {Object} Installation result
260
+ */
261
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
262
+ const geminiDir = path.join(projectDir, this.configDir);
263
+ const commandsDir = path.join(geminiDir, this.commandsDir);
264
+
265
+ // Create .gemini/commands directory if it doesn't exist
266
+ await fs.ensureDir(commandsDir);
267
+
268
+ // Create custom agent launcher in TOML format
269
+ const launcherContent = `description = "Custom BMAD Agent: ${agentName}"
270
+ prompt = """
271
+ **⚠️ IMPORTANT**: Run @${agentPath} first to load the complete agent!
272
+
273
+ This is a launcher for the custom BMAD agent "${agentName}".
274
+
275
+ ## Usage
276
+ 1. First run: \`${agentPath}\` to load the complete agent
277
+ 2. Then use this command to activate ${agentName}
278
+
279
+ The agent will follow the persona and instructions from the main agent file.
280
+
281
+ ---
282
+
283
+ *Generated by BMAD Method*
284
+ """`;
285
+
286
+ const fileName = `bmad-custom-${agentName.toLowerCase()}.toml`;
287
+ const launcherPath = path.join(commandsDir, fileName);
288
+
289
+ // Write the launcher file
290
+ await fs.writeFile(launcherPath, launcherContent, 'utf8');
291
+
292
+ return {
293
+ ide: 'gemini',
294
+ path: path.relative(projectDir, launcherPath),
295
+ command: agentName,
296
+ type: 'custom-agent-launcher',
297
+ };
298
+ }
299
+ }
300
+
301
+ module.exports = { GeminiSetup };
@@ -0,0 +1,383 @@
1
+ const path = require('node:path');
2
+ const { BaseIdeSetup } = require('./_base-ide');
3
+ const chalk = require('chalk');
4
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
5
+ const prompts = require('../../../lib/prompts');
6
+
7
+ /**
8
+ * GitHub Copilot setup handler
9
+ * Creates agents in .github/agents/ and configures VS Code settings
10
+ */
11
+ class GitHubCopilotSetup extends BaseIdeSetup {
12
+ constructor() {
13
+ super('github-copilot', 'GitHub Copilot', true); // preferred IDE
14
+ this.configDir = '.github';
15
+ this.agentsDir = 'agents';
16
+ this.vscodeDir = '.vscode';
17
+ }
18
+
19
+ /**
20
+ * Collect configuration choices before installation
21
+ * @param {Object} options - Configuration options
22
+ * @returns {Object} Collected configuration
23
+ */
24
+ async collectConfiguration(options = {}) {
25
+ const config = {};
26
+
27
+ console.log('\n' + chalk.blue(' 🔧 VS Code Settings Configuration'));
28
+ console.log(chalk.dim(' GitHub Copilot works best with specific settings\n'));
29
+
30
+ config.vsCodeConfig = await prompts.select({
31
+ message: 'How would you like to configure VS Code settings?',
32
+ choices: [
33
+ { name: 'Use recommended defaults (fastest)', value: 'defaults' },
34
+ { name: 'Configure each setting manually', value: 'manual' },
35
+ { name: 'Skip settings configuration', value: 'skip' },
36
+ ],
37
+ default: 'defaults',
38
+ });
39
+
40
+ if (config.vsCodeConfig === 'manual') {
41
+ config.manualSettings = await prompts.prompt([
42
+ {
43
+ type: 'input',
44
+ name: 'maxRequests',
45
+ message: 'Maximum requests per session (1-50)?',
46
+ default: '15',
47
+ validate: (input) => {
48
+ const num = parseInt(input, 10);
49
+ if (isNaN(num)) return 'Enter a valid number 1-50';
50
+ if (num < 1 || num > 50) return 'Enter a number between 1-50';
51
+ return true;
52
+ },
53
+ },
54
+ {
55
+ type: 'confirm',
56
+ name: 'runTasks',
57
+ message: 'Allow running workspace tasks?',
58
+ default: true,
59
+ },
60
+ {
61
+ type: 'confirm',
62
+ name: 'mcpDiscovery',
63
+ message: 'Enable MCP server discovery?',
64
+ default: true,
65
+ },
66
+ {
67
+ type: 'confirm',
68
+ name: 'autoFix',
69
+ message: 'Enable automatic error fixing?',
70
+ default: true,
71
+ },
72
+ {
73
+ type: 'confirm',
74
+ name: 'autoApprove',
75
+ message: 'Auto-approve tools (less secure)?',
76
+ default: false,
77
+ },
78
+ ]);
79
+ }
80
+
81
+ return config;
82
+ }
83
+
84
+ /**
85
+ * Setup GitHub Copilot configuration
86
+ * @param {string} projectDir - Project directory
87
+ * @param {string} bmadDir - BMAD installation directory
88
+ * @param {Object} options - Setup options
89
+ */
90
+ async setup(projectDir, bmadDir, options = {}) {
91
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
92
+
93
+ // Configure VS Code settings using pre-collected config if available
94
+ const config = options.preCollectedConfig || {};
95
+ await this.configureVsCodeSettings(projectDir, { ...options, ...config });
96
+
97
+ // Create .github/agents directory
98
+ const githubDir = path.join(projectDir, this.configDir);
99
+ const agentsDir = path.join(githubDir, this.agentsDir);
100
+ await this.ensureDir(agentsDir);
101
+
102
+ // Clean up any existing BMAD files before reinstalling
103
+ await this.cleanup(projectDir);
104
+
105
+ // Generate agent launchers
106
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
107
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
108
+
109
+ // Create agent files with bmd- prefix
110
+ let agentCount = 0;
111
+ for (const artifact of agentArtifacts) {
112
+ const content = artifact.content;
113
+ const agentContent = await this.createAgentContent({ module: artifact.module, name: artifact.name }, content);
114
+
115
+ // Use bmd- prefix: bmd-custom-{module}-{name}.agent.md
116
+ const targetPath = path.join(agentsDir, `bmd-custom-${artifact.module}-${artifact.name}.agent.md`);
117
+ await this.writeFile(targetPath, agentContent);
118
+ agentCount++;
119
+
120
+ console.log(chalk.green(` ✓ Created agent: bmd-custom-${artifact.module}-${artifact.name}`));
121
+ }
122
+
123
+ console.log(chalk.green(`✓ ${this.name} configured:`));
124
+ console.log(chalk.dim(` - ${agentCount} agents created`));
125
+ console.log(chalk.dim(` - Agents directory: ${path.relative(projectDir, agentsDir)}`));
126
+ console.log(chalk.dim(` - VS Code settings configured`));
127
+ console.log(chalk.dim('\n Agents available in VS Code Chat view'));
128
+
129
+ return {
130
+ success: true,
131
+ agents: agentCount,
132
+ settings: true,
133
+ };
134
+ }
135
+
136
+ /**
137
+ * Configure VS Code settings for GitHub Copilot
138
+ */
139
+ async configureVsCodeSettings(projectDir, options) {
140
+ const fs = require('fs-extra');
141
+ const vscodeDir = path.join(projectDir, this.vscodeDir);
142
+ const settingsPath = path.join(vscodeDir, 'settings.json');
143
+
144
+ await this.ensureDir(vscodeDir);
145
+
146
+ // Read existing settings
147
+ let existingSettings = {};
148
+ if (await fs.pathExists(settingsPath)) {
149
+ try {
150
+ const content = await fs.readFile(settingsPath, 'utf8');
151
+ existingSettings = JSON.parse(content);
152
+ console.log(chalk.yellow(' Found existing .vscode/settings.json'));
153
+ } catch {
154
+ console.warn(chalk.yellow(' Could not parse settings.json, creating new'));
155
+ }
156
+ }
157
+
158
+ // Use pre-collected configuration or skip if not available
159
+ let configChoice = options.vsCodeConfig;
160
+ if (!configChoice) {
161
+ // If no pre-collected config, skip configuration
162
+ console.log(chalk.yellow(' ⚠ No configuration collected, skipping VS Code settings'));
163
+ return;
164
+ }
165
+
166
+ if (configChoice === 'skip') {
167
+ console.log(chalk.yellow(' ⚠ Skipping VS Code settings'));
168
+ return;
169
+ }
170
+
171
+ let bmadSettings = {};
172
+
173
+ if (configChoice === 'defaults') {
174
+ bmadSettings = {
175
+ 'chat.agent.enabled': true,
176
+ 'chat.agent.maxRequests': 15,
177
+ 'github.copilot.chat.agent.runTasks': true,
178
+ 'chat.mcp.discovery.enabled': true,
179
+ 'github.copilot.chat.agent.autoFix': true,
180
+ 'chat.tools.autoApprove': false,
181
+ };
182
+ console.log(chalk.green(' ✓ Using recommended defaults'));
183
+ } else {
184
+ // Manual configuration - use pre-collected settings
185
+ const manual = options.manualSettings || {};
186
+
187
+ const maxRequests = parseInt(manual.maxRequests || '15', 10);
188
+ bmadSettings = {
189
+ 'chat.agent.enabled': true,
190
+ 'chat.agent.maxRequests': isNaN(maxRequests) ? 15 : maxRequests,
191
+ 'github.copilot.chat.agent.runTasks': manual.runTasks === undefined ? true : manual.runTasks,
192
+ 'chat.mcp.discovery.enabled': manual.mcpDiscovery === undefined ? true : manual.mcpDiscovery,
193
+ 'github.copilot.chat.agent.autoFix': manual.autoFix === undefined ? true : manual.autoFix,
194
+ 'chat.tools.autoApprove': manual.autoApprove || false,
195
+ };
196
+ }
197
+
198
+ // Merge settings (existing take precedence)
199
+ const mergedSettings = { ...bmadSettings, ...existingSettings };
200
+
201
+ // Write settings
202
+ await fs.writeFile(settingsPath, JSON.stringify(mergedSettings, null, 2));
203
+ console.log(chalk.green(' ✓ VS Code settings configured'));
204
+ }
205
+
206
+ /**
207
+ * Create agent content
208
+ */
209
+ async createAgentContent(agent, content) {
210
+ // Extract metadata from launcher frontmatter if present
211
+ const descMatch = content.match(/description:\s*"([^"]+)"/);
212
+ const title = descMatch ? descMatch[1] : this.formatTitle(agent.name);
213
+
214
+ const description = `Activates the ${title} agent persona.`;
215
+
216
+ // Strip any existing frontmatter from the content
217
+ const frontmatterRegex = /^---\s*\n[\s\S]*?\n---\s*\n/;
218
+ let cleanContent = content;
219
+ if (frontmatterRegex.test(content)) {
220
+ cleanContent = content.replace(frontmatterRegex, '').trim();
221
+ }
222
+
223
+ // Available GitHub Copilot tools (November 2025 - Official VS Code Documentation)
224
+ // Reference: https://code.visualstudio.com/docs/copilot/reference/copilot-vscode-features#_chat-tools
225
+ const tools = [
226
+ 'changes', // List of source control changes
227
+ 'edit', // Edit files in your workspace including: createFile, createDirectory, editNotebook, newJupyterNotebook and editFiles
228
+ 'fetch', // Fetch content from web page
229
+ 'githubRepo', // Perform code search in GitHub repo
230
+ 'problems', // Add workspace issues from Problems panel
231
+ 'runCommands', // Runs commands in the terminal including: getTerminalOutput, terminalSelection, terminalLastCommand and runInTerminal
232
+ 'runTasks', // Runs tasks and gets their output for your workspace
233
+ 'runTests', // Run unit tests in workspace
234
+ 'search', // Search and read files in your workspace, including:fileSearch, textSearch, listDirectory, readFile, codebase and searchResults
235
+ 'runSubagent', // Runs a task within an isolated subagent context. Enables efficient organization of tasks and context window management.
236
+ 'testFailure', // Get unit test failure information
237
+ 'todos', // Tool for managing and tracking todo items for task planning
238
+ 'usages', // Find references and navigate definitions
239
+ ];
240
+
241
+ let agentContent = `---
242
+ description: "${description.replaceAll('"', String.raw`\"`)}"
243
+ tools: ${JSON.stringify(tools)}
244
+ ---
245
+
246
+ # ${title} Agent
247
+
248
+ ${cleanContent}
249
+
250
+ `;
251
+
252
+ return agentContent;
253
+ }
254
+
255
+ /**
256
+ * Format name as title
257
+ */
258
+ formatTitle(name) {
259
+ return name
260
+ .split('-')
261
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
262
+ .join(' ');
263
+ }
264
+
265
+ /**
266
+ * Cleanup GitHub Copilot configuration - surgically remove only BMAD files
267
+ */
268
+ async cleanup(projectDir) {
269
+ const fs = require('fs-extra');
270
+
271
+ // Clean up old chatmodes directory
272
+ const chatmodesDir = path.join(projectDir, this.configDir, 'chatmodes');
273
+ if (await fs.pathExists(chatmodesDir)) {
274
+ const files = await fs.readdir(chatmodesDir);
275
+ let removed = 0;
276
+
277
+ for (const file of files) {
278
+ if (file.startsWith('bmad-') && file.endsWith('.chatmode.md')) {
279
+ await fs.remove(path.join(chatmodesDir, file));
280
+ removed++;
281
+ }
282
+ }
283
+
284
+ if (removed > 0) {
285
+ console.log(chalk.dim(` Cleaned up ${removed} old BMAD chat modes`));
286
+ }
287
+ }
288
+
289
+ // Clean up new agents directory
290
+ const agentsDir = path.join(projectDir, this.configDir, this.agentsDir);
291
+ if (await fs.pathExists(agentsDir)) {
292
+ const files = await fs.readdir(agentsDir);
293
+ let removed = 0;
294
+
295
+ for (const file of files) {
296
+ if (file.startsWith('bmd-') && file.endsWith('.agent.md')) {
297
+ await fs.remove(path.join(agentsDir, file));
298
+ removed++;
299
+ }
300
+ }
301
+
302
+ if (removed > 0) {
303
+ console.log(chalk.dim(` Cleaned up ${removed} existing BMAD agents`));
304
+ }
305
+ }
306
+ }
307
+
308
+ /**
309
+ * Install a custom agent launcher for GitHub Copilot
310
+ * @param {string} projectDir - Project directory
311
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
312
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
313
+ * @param {Object} metadata - Agent metadata
314
+ * @returns {Object|null} Info about created command
315
+ */
316
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
317
+ const agentsDir = path.join(projectDir, this.configDir, this.agentsDir);
318
+
319
+ if (!(await this.exists(path.join(projectDir, this.configDir)))) {
320
+ return null; // IDE not configured for this project
321
+ }
322
+
323
+ await this.ensureDir(agentsDir);
324
+
325
+ const launcherContent = `You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.
326
+
327
+ <agent-activation CRITICAL="TRUE">
328
+ 1. LOAD the FULL agent file from @${agentPath}
329
+ 2. READ its entire contents - this contains the complete agent persona, menu, and instructions
330
+ 3. FOLLOW every step in the <activation> section precisely
331
+ 4. DISPLAY the welcome/greeting as instructed
332
+ 5. PRESENT the numbered menu
333
+ 6. WAIT for user input before proceeding
334
+ </agent-activation>
335
+ `;
336
+
337
+ // GitHub Copilot needs specific tools in frontmatter
338
+ const copilotTools = [
339
+ 'changes',
340
+ 'codebase',
341
+ 'createDirectory',
342
+ 'createFile',
343
+ 'editFiles',
344
+ 'fetch',
345
+ 'fileSearch',
346
+ 'githubRepo',
347
+ 'listDirectory',
348
+ 'problems',
349
+ 'readFile',
350
+ 'runInTerminal',
351
+ 'runTask',
352
+ 'runTests',
353
+ 'runVscodeCommand',
354
+ 'search',
355
+ 'searchResults',
356
+ 'terminalLastCommand',
357
+ 'terminalSelection',
358
+ 'testFailure',
359
+ 'textSearch',
360
+ 'usages',
361
+ ];
362
+
363
+ const agentContent = `---
364
+ description: "Activates the ${metadata.title || agentName} agent persona."
365
+ tools: ${JSON.stringify(copilotTools)}
366
+ ---
367
+
368
+ # ${metadata.title || agentName} Agent
369
+
370
+ ${launcherContent}
371
+ `;
372
+
373
+ const agentFilePath = path.join(agentsDir, `bmd-custom-${agentName}.agent.md`);
374
+ await this.writeFile(agentFilePath, agentContent);
375
+
376
+ return {
377
+ path: agentFilePath,
378
+ command: `bmd-custom-${agentName}`,
379
+ };
380
+ }
381
+ }
382
+
383
+ module.exports = { GitHubCopilotSetup };