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,270 @@
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
+
6
+ /**
7
+ * Roo IDE setup handler
8
+ * Creates custom commands in .roo/commands directory
9
+ */
10
+ class RooSetup extends BaseIdeSetup {
11
+ constructor() {
12
+ super('roo', 'Roo Code');
13
+ this.configDir = '.roo';
14
+ this.commandsDir = 'commands';
15
+ }
16
+
17
+ /**
18
+ * Setup Roo IDE configuration
19
+ * @param {string} projectDir - Project directory
20
+ * @param {string} bmadDir - BMAD installation directory
21
+ * @param {Object} options - Setup options
22
+ */
23
+ async setup(projectDir, bmadDir, options = {}) {
24
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
25
+
26
+ // Create .roo/commands directory
27
+ const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
28
+ await this.ensureDir(rooCommandsDir);
29
+
30
+ // Generate agent launchers
31
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
32
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
33
+
34
+ let addedCount = 0;
35
+ let skippedCount = 0;
36
+
37
+ for (const artifact of agentArtifacts) {
38
+ const commandName = `bmad-${artifact.module}-agent-${artifact.name}`;
39
+ const commandPath = path.join(rooCommandsDir, `${commandName}.md`);
40
+
41
+ // Skip if already exists
42
+ if (await this.pathExists(commandPath)) {
43
+ console.log(chalk.dim(` Skipping ${commandName} - already exists`));
44
+ skippedCount++;
45
+ continue;
46
+ }
47
+
48
+ // artifact.sourcePath contains the full path to the agent file
49
+ if (!artifact.sourcePath) {
50
+ console.error(`Error: Missing sourcePath for artifact ${artifact.name} from module ${artifact.module}`);
51
+ console.error(`Artifact object:`, artifact);
52
+ throw new Error(`Missing sourcePath for agent: ${artifact.name}`);
53
+ }
54
+
55
+ const content = await this.readFile(artifact.sourcePath);
56
+
57
+ // Create command file that references the actual _bmad agent
58
+ await this.createCommandFile(
59
+ { module: artifact.module, name: artifact.name, path: artifact.sourcePath },
60
+ content,
61
+ commandPath,
62
+ projectDir,
63
+ );
64
+
65
+ addedCount++;
66
+ console.log(chalk.green(` ✓ Added command: ${commandName}`));
67
+ }
68
+
69
+ console.log(chalk.green(`✓ ${this.name} configured:`));
70
+ console.log(chalk.dim(` - ${addedCount} commands added`));
71
+ if (skippedCount > 0) {
72
+ console.log(chalk.dim(` - ${skippedCount} commands skipped (already exist)`));
73
+ }
74
+ console.log(chalk.dim(` - Commands directory: ${this.configDir}/${this.commandsDir}/bmad/`));
75
+ console.log(chalk.dim(` Commands will be available when you open this project in Roo Code`));
76
+
77
+ return {
78
+ success: true,
79
+ commands: addedCount,
80
+ skipped: skippedCount,
81
+ };
82
+ }
83
+
84
+ /**
85
+ * Create a unified command file for agents
86
+ * @param {string} commandPath - Path where to write the command file
87
+ * @param {Object} options - Command options
88
+ * @param {string} options.name - Display name for the command
89
+ * @param {string} options.description - Description for the command
90
+ * @param {string} options.agentPath - Path to the agent file (relative to project root)
91
+ * @param {string} [options.icon] - Icon emoji (defaults to 🤖)
92
+ * @param {string} [options.extraContent] - Additional content to include before activation
93
+ */
94
+ async createAgentCommandFile(commandPath, options) {
95
+ const { name, description, agentPath, icon = '🤖', extraContent = '' } = options;
96
+
97
+ // Build command content with YAML frontmatter
98
+ let commandContent = `---\n`;
99
+ commandContent += `name: '${icon} ${name}'\n`;
100
+ commandContent += `description: '${description}'\n`;
101
+ commandContent += `---\n\n`;
102
+
103
+ commandContent += `You must fully embody this agent's persona and follow all activation instructions exactly as specified. NEVER break character until given an exit command.\n\n`;
104
+
105
+ // Add any extra content (e.g., warnings for custom agents)
106
+ if (extraContent) {
107
+ commandContent += `${extraContent}\n\n`;
108
+ }
109
+
110
+ commandContent += `<agent-activation CRITICAL="TRUE">\n`;
111
+ commandContent += `1. LOAD the FULL agent file from @${agentPath}\n`;
112
+ commandContent += `2. READ its entire contents - this contains the complete agent persona, menu, and instructions\n`;
113
+ commandContent += `3. Execute ALL activation steps exactly as written in the agent file\n`;
114
+ commandContent += `4. Follow the agent's persona and menu system precisely\n`;
115
+ commandContent += `5. Stay in character throughout the session\n`;
116
+ commandContent += `</agent-activation>\n`;
117
+
118
+ // Write command file
119
+ await this.writeFile(commandPath, commandContent);
120
+ }
121
+
122
+ /**
123
+ * Create a command file for an agent
124
+ */
125
+ async createCommandFile(agent, content, commandPath, projectDir) {
126
+ // Extract metadata from agent content
127
+ const titleMatch = content.match(/title="([^"]+)"/);
128
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(agent.name);
129
+
130
+ const iconMatch = content.match(/icon="([^"]+)"/);
131
+ const icon = iconMatch ? iconMatch[1] : '🤖';
132
+
133
+ const whenToUseMatch = content.match(/whenToUse="([^"]+)"/);
134
+ const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
135
+
136
+ // Get relative path
137
+ const relativePath = path.relative(projectDir, agent.path).replaceAll('\\', '/');
138
+
139
+ // Use unified method
140
+ await this.createAgentCommandFile(commandPath, {
141
+ name: title,
142
+ description: whenToUse,
143
+ agentPath: relativePath,
144
+ icon: icon,
145
+ });
146
+ }
147
+
148
+ /**
149
+ * Format name as title
150
+ */
151
+ formatTitle(name) {
152
+ return name
153
+ .split('-')
154
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
155
+ .join(' ');
156
+ }
157
+
158
+ /**
159
+ * Cleanup Roo configuration
160
+ */
161
+ async cleanup(projectDir) {
162
+ const fs = require('fs-extra');
163
+ const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
164
+
165
+ if (await fs.pathExists(rooCommandsDir)) {
166
+ const files = await fs.readdir(rooCommandsDir);
167
+ let removedCount = 0;
168
+
169
+ for (const file of files) {
170
+ if (file.startsWith('bmad-') && file.endsWith('.md')) {
171
+ await fs.remove(path.join(rooCommandsDir, file));
172
+ removedCount++;
173
+ }
174
+ }
175
+
176
+ if (removedCount > 0) {
177
+ console.log(chalk.dim(`Removed ${removedCount} BMAD commands from .roo/commands/`));
178
+ }
179
+ }
180
+
181
+ // Also clean up old .roomodes file if it exists
182
+ const roomodesPath = path.join(projectDir, '.roomodes');
183
+ if (await fs.pathExists(roomodesPath)) {
184
+ const content = await fs.readFile(roomodesPath, 'utf8');
185
+
186
+ // Remove BMAD modes only
187
+ const lines = content.split('\n');
188
+ const filteredLines = [];
189
+ let skipMode = false;
190
+ let removedCount = 0;
191
+
192
+ for (const line of lines) {
193
+ if (/^\s*- slug: bmad-/.test(line)) {
194
+ skipMode = true;
195
+ removedCount++;
196
+ } else if (skipMode && /^\s*- slug: /.test(line)) {
197
+ skipMode = false;
198
+ }
199
+
200
+ if (!skipMode) {
201
+ filteredLines.push(line);
202
+ }
203
+ }
204
+
205
+ // Write back filtered content
206
+ await fs.writeFile(roomodesPath, filteredLines.join('\n'));
207
+ if (removedCount > 0) {
208
+ console.log(chalk.dim(`Removed ${removedCount} BMAD modes from legacy .roomodes file`));
209
+ }
210
+ }
211
+ }
212
+
213
+ /**
214
+ * Install a custom agent launcher for Roo
215
+ * @param {string} projectDir - Project directory
216
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
217
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
218
+ * @param {Object} metadata - Agent metadata (unused, kept for compatibility)
219
+ * @returns {Object} Installation result
220
+ */
221
+ async installCustomAgentLauncher(projectDir, agentName, agentPath, metadata) {
222
+ const rooCommandsDir = path.join(projectDir, this.configDir, this.commandsDir);
223
+ await this.ensureDir(rooCommandsDir);
224
+
225
+ const commandName = `bmad-custom-agent-${agentName.toLowerCase()}`;
226
+ const commandPath = path.join(rooCommandsDir, `${commandName}.md`);
227
+
228
+ // Check if command already exists
229
+ if (await this.pathExists(commandPath)) {
230
+ return {
231
+ ide: 'roo',
232
+ path: path.join(this.configDir, this.commandsDir, `${commandName}.md`),
233
+ command: commandName,
234
+ type: 'custom-agent-launcher',
235
+ alreadyExists: true,
236
+ };
237
+ }
238
+
239
+ // Read the custom agent file to extract metadata (same as regular agents)
240
+ const fullAgentPath = path.join(projectDir, agentPath);
241
+ const content = await this.readFile(fullAgentPath);
242
+
243
+ // Extract metadata from agent content
244
+ const titleMatch = content.match(/title="([^"]+)"/);
245
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(agentName);
246
+
247
+ const iconMatch = content.match(/icon="([^"]+)"/);
248
+ const icon = iconMatch ? iconMatch[1] : '🤖';
249
+
250
+ const whenToUseMatch = content.match(/whenToUse="([^"]+)"/);
251
+ const whenToUse = whenToUseMatch ? whenToUseMatch[1] : `Use for ${title} tasks`;
252
+
253
+ // Use unified method without extra content (clean)
254
+ await this.createAgentCommandFile(commandPath, {
255
+ name: title,
256
+ description: whenToUse,
257
+ agentPath: agentPath,
258
+ icon: icon,
259
+ });
260
+
261
+ return {
262
+ ide: 'roo',
263
+ path: path.join(this.configDir, this.commandsDir, `${commandName}.md`),
264
+ command: commandName,
265
+ type: 'custom-agent-launcher',
266
+ };
267
+ }
268
+ }
269
+
270
+ module.exports = { RooSetup };
@@ -0,0 +1,290 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const chalk = require('chalk');
4
+ const { BaseIdeSetup } = require('./_base-ide');
5
+ const { AgentCommandGenerator } = require('./shared/agent-command-generator');
6
+ const { WorkflowCommandGenerator } = require('./shared/workflow-command-generator');
7
+ const { TaskToolCommandGenerator } = require('./shared/task-tool-command-generator');
8
+
9
+ /**
10
+ * Rovo Dev IDE setup handler
11
+ *
12
+ * Installs BMAD agents as Rovo Dev subagents in .rovodev/subagents/
13
+ * Installs workflows and tasks/tools as reference guides in .rovodev/
14
+ * Rovo Dev automatically discovers agents and integrates with BMAD like other IDEs
15
+ */
16
+ class RovoDevSetup extends BaseIdeSetup {
17
+ constructor() {
18
+ super('rovo-dev', 'Atlassian Rovo Dev', false);
19
+ this.configDir = '.rovodev';
20
+ this.subagentsDir = 'subagents';
21
+ this.workflowsDir = 'workflows';
22
+ this.referencesDir = 'references';
23
+ }
24
+
25
+ /**
26
+ * Cleanup old BMAD installation before reinstalling
27
+ * @param {string} projectDir - Project directory
28
+ */
29
+ async cleanup(projectDir) {
30
+ const rovoDevDir = path.join(projectDir, this.configDir);
31
+
32
+ if (!(await fs.pathExists(rovoDevDir))) {
33
+ return;
34
+ }
35
+
36
+ // Clean BMAD agents from subagents directory
37
+ const subagentsDir = path.join(rovoDevDir, this.subagentsDir);
38
+ if (await fs.pathExists(subagentsDir)) {
39
+ const entries = await fs.readdir(subagentsDir);
40
+ const bmadFiles = entries.filter((file) => file.startsWith('bmad-') && file.endsWith('.md'));
41
+
42
+ for (const file of bmadFiles) {
43
+ await fs.remove(path.join(subagentsDir, file));
44
+ }
45
+ }
46
+
47
+ // Clean BMAD workflows from workflows directory
48
+ const workflowsDir = path.join(rovoDevDir, this.workflowsDir);
49
+ if (await fs.pathExists(workflowsDir)) {
50
+ const entries = await fs.readdir(workflowsDir);
51
+ const bmadFiles = entries.filter((file) => file.startsWith('bmad-') && file.endsWith('.md'));
52
+
53
+ for (const file of bmadFiles) {
54
+ await fs.remove(path.join(workflowsDir, file));
55
+ }
56
+ }
57
+
58
+ // Clean BMAD tasks/tools from references directory
59
+ const referencesDir = path.join(rovoDevDir, this.referencesDir);
60
+ if (await fs.pathExists(referencesDir)) {
61
+ const entries = await fs.readdir(referencesDir);
62
+ const bmadFiles = entries.filter((file) => file.startsWith('bmad-') && file.endsWith('.md'));
63
+
64
+ for (const file of bmadFiles) {
65
+ await fs.remove(path.join(referencesDir, file));
66
+ }
67
+ }
68
+ }
69
+
70
+ /**
71
+ * Setup Rovo Dev configuration
72
+ * @param {string} projectDir - Project directory
73
+ * @param {string} bmadDir - BMAD installation directory
74
+ * @param {Object} options - Setup options
75
+ */
76
+ async setup(projectDir, bmadDir, options = {}) {
77
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
78
+
79
+ // Clean up old BMAD installation first
80
+ await this.cleanup(projectDir);
81
+
82
+ // Create .rovodev directory structure
83
+ const rovoDevDir = path.join(projectDir, this.configDir);
84
+ const subagentsDir = path.join(rovoDevDir, this.subagentsDir);
85
+ const workflowsDir = path.join(rovoDevDir, this.workflowsDir);
86
+ const referencesDir = path.join(rovoDevDir, this.referencesDir);
87
+
88
+ await this.ensureDir(subagentsDir);
89
+ await this.ensureDir(workflowsDir);
90
+ await this.ensureDir(referencesDir);
91
+
92
+ // Generate and install agents
93
+ const agentGen = new AgentCommandGenerator(this.bmadFolderName);
94
+ const { artifacts: agentArtifacts } = await agentGen.collectAgentArtifacts(bmadDir, options.selectedModules || []);
95
+
96
+ let agentCount = 0;
97
+ for (const artifact of agentArtifacts) {
98
+ const subagentFilename = `bmad-${artifact.module}-${artifact.name}.md`;
99
+ const targetPath = path.join(subagentsDir, subagentFilename);
100
+ const subagentContent = this.convertToRovoDevSubagent(artifact.content, artifact.name, artifact.module);
101
+ await this.writeFile(targetPath, subagentContent);
102
+ agentCount++;
103
+ }
104
+
105
+ // Generate and install workflows
106
+ const workflowGen = new WorkflowCommandGenerator(this.bmadFolderName);
107
+ const { artifacts: workflowArtifacts, counts: workflowCounts } = await workflowGen.collectWorkflowArtifacts(bmadDir);
108
+
109
+ let workflowCount = 0;
110
+ for (const artifact of workflowArtifacts) {
111
+ if (artifact.type === 'workflow-command') {
112
+ const workflowFilename = path.basename(artifact.relativePath);
113
+ const targetPath = path.join(workflowsDir, workflowFilename);
114
+ await this.writeFile(targetPath, artifact.content);
115
+ workflowCount++;
116
+ }
117
+ }
118
+
119
+ // Generate and install tasks and tools
120
+ const taskToolGen = new TaskToolCommandGenerator();
121
+ const { tasks: taskCount, tools: toolCount } = await this.generateTaskToolReferences(bmadDir, referencesDir, taskToolGen);
122
+
123
+ // Summary output
124
+ console.log(chalk.green(`✓ ${this.name} configured:`));
125
+ console.log(chalk.dim(` - ${agentCount} agents installed to .rovodev/subagents/`));
126
+ if (workflowCount > 0) {
127
+ console.log(chalk.dim(` - ${workflowCount} workflows installed to .rovodev/workflows/`));
128
+ }
129
+ if (taskCount + toolCount > 0) {
130
+ console.log(
131
+ chalk.dim(` - ${taskCount + toolCount} tasks/tools installed to .rovodev/references/ (${taskCount} tasks, ${toolCount} tools)`),
132
+ );
133
+ }
134
+ console.log(chalk.yellow(`\n Note: Agents are automatically discovered by Rovo Dev`));
135
+ console.log(chalk.dim(` - Access agents by typing @ in Rovo Dev to see available options`));
136
+ console.log(chalk.dim(` - Workflows and references are available in .rovodev/ directory`));
137
+
138
+ return {
139
+ success: true,
140
+ agents: agentCount,
141
+ workflows: workflowCount,
142
+ tasks: taskCount,
143
+ tools: toolCount,
144
+ };
145
+ }
146
+
147
+ /**
148
+ * Generate task and tool reference guides
149
+ * @param {string} bmadDir - BMAD directory
150
+ * @param {string} referencesDir - References directory
151
+ * @param {TaskToolCommandGenerator} taskToolGen - Generator instance
152
+ */
153
+ async generateTaskToolReferences(bmadDir, referencesDir, taskToolGen) {
154
+ const tasks = await taskToolGen.loadTaskManifest(bmadDir);
155
+ const tools = await taskToolGen.loadToolManifest(bmadDir);
156
+
157
+ const standaloneTasks = tasks ? tasks.filter((t) => t.standalone === 'true' || t.standalone === true) : [];
158
+ const standaloneTools = tools ? tools.filter((t) => t.standalone === 'true' || t.standalone === true) : [];
159
+
160
+ let taskCount = 0;
161
+ for (const task of standaloneTasks) {
162
+ const commandContent = taskToolGen.generateCommandContent(task, 'task');
163
+ const targetPath = path.join(referencesDir, `bmad-task-${task.module}-${task.name}.md`);
164
+ await this.writeFile(targetPath, commandContent);
165
+ taskCount++;
166
+ }
167
+
168
+ let toolCount = 0;
169
+ for (const tool of standaloneTools) {
170
+ const commandContent = taskToolGen.generateCommandContent(tool, 'tool');
171
+ const targetPath = path.join(referencesDir, `bmad-tool-${tool.module}-${tool.name}.md`);
172
+ await this.writeFile(targetPath, commandContent);
173
+ toolCount++;
174
+ }
175
+
176
+ return { tasks: taskCount, tools: toolCount };
177
+ }
178
+
179
+ /**
180
+ * Convert BMAD agent launcher to Rovo Dev subagent format
181
+ *
182
+ * Rovo Dev subagents use Markdown files with YAML frontmatter containing:
183
+ * - name: Unique identifier for the subagent
184
+ * - description: One-line description of the subagent's purpose
185
+ * - tools: Array of tools the subagent can use (optional)
186
+ * - model: Specific model for this subagent (optional)
187
+ * - load_memory: Whether to load memory files (optional, defaults to true)
188
+ *
189
+ * @param {string} launcherContent - Original agent launcher content
190
+ * @param {string} agentName - Name of the agent
191
+ * @param {string} moduleName - Name of the module
192
+ * @returns {string} Rovo Dev subagent-formatted content
193
+ */
194
+ convertToRovoDevSubagent(launcherContent, agentName, moduleName) {
195
+ // Extract metadata from the launcher XML
196
+ const titleMatch = launcherContent.match(/title="([^"]+)"/);
197
+ const title = titleMatch ? titleMatch[1] : this.formatTitle(agentName);
198
+
199
+ const descriptionMatch = launcherContent.match(/description="([^"]+)"/);
200
+ const description = descriptionMatch ? descriptionMatch[1] : `BMAD agent: ${title}`;
201
+
202
+ const roleDefinitionMatch = launcherContent.match(/roleDefinition="([^"]+)"/);
203
+ const roleDefinition = roleDefinitionMatch ? roleDefinitionMatch[1] : `You are a specialized agent for ${title.toLowerCase()} tasks.`;
204
+
205
+ // Extract the main system prompt from the launcher (content after closing tags)
206
+ let systemPrompt = roleDefinition;
207
+
208
+ // Try to extract additional instructions from the launcher content
209
+ const instructionsMatch = launcherContent.match(/<instructions>([\s\S]*?)<\/instructions>/);
210
+ if (instructionsMatch) {
211
+ systemPrompt += '\n\n' + instructionsMatch[1].trim();
212
+ }
213
+
214
+ // Build YAML frontmatter for Rovo Dev subagent
215
+ const frontmatter = {
216
+ name: `bmad-${moduleName}-${agentName}`,
217
+ description: description,
218
+ // Note: tools and model can be added by users in their .rovodev/subagents/*.md files
219
+ // We don't enforce specific tools since BMAD agents are flexible
220
+ };
221
+
222
+ // Create YAML frontmatter string with proper quoting for special characters
223
+ let yamlContent = '---\n';
224
+ yamlContent += `name: ${frontmatter.name}\n`;
225
+ // Quote description to handle colons and other special characters in YAML
226
+ yamlContent += `description: "${frontmatter.description.replaceAll('"', String.raw`\"`)}"\n`;
227
+ yamlContent += '---\n';
228
+
229
+ // Combine frontmatter with system prompt
230
+ const subagentContent = yamlContent + systemPrompt;
231
+
232
+ return subagentContent;
233
+ }
234
+
235
+ /**
236
+ * Detect whether Rovo Dev is already configured in the project
237
+ * @param {string} projectDir - Project directory
238
+ * @returns {boolean}
239
+ */
240
+ async detect(projectDir) {
241
+ const rovoDevDir = path.join(projectDir, this.configDir);
242
+
243
+ if (!(await fs.pathExists(rovoDevDir))) {
244
+ return false;
245
+ }
246
+
247
+ // Check for BMAD agents in subagents directory
248
+ const subagentsDir = path.join(rovoDevDir, this.subagentsDir);
249
+ if (await fs.pathExists(subagentsDir)) {
250
+ try {
251
+ const entries = await fs.readdir(subagentsDir);
252
+ if (entries.some((entry) => entry.startsWith('bmad-') && entry.endsWith('.md'))) {
253
+ return true;
254
+ }
255
+ } catch {
256
+ // Continue checking other directories
257
+ }
258
+ }
259
+
260
+ // Check for BMAD workflows in workflows directory
261
+ const workflowsDir = path.join(rovoDevDir, this.workflowsDir);
262
+ if (await fs.pathExists(workflowsDir)) {
263
+ try {
264
+ const entries = await fs.readdir(workflowsDir);
265
+ if (entries.some((entry) => entry.startsWith('bmad-') && entry.endsWith('.md'))) {
266
+ return true;
267
+ }
268
+ } catch {
269
+ // Continue checking other directories
270
+ }
271
+ }
272
+
273
+ // Check for BMAD tasks/tools in references directory
274
+ const referencesDir = path.join(rovoDevDir, this.referencesDir);
275
+ if (await fs.pathExists(referencesDir)) {
276
+ try {
277
+ const entries = await fs.readdir(referencesDir);
278
+ if (entries.some((entry) => entry.startsWith('bmad-') && entry.endsWith('.md'))) {
279
+ return true;
280
+ }
281
+ } catch {
282
+ // Continue
283
+ }
284
+ }
285
+
286
+ return false;
287
+ }
288
+ }
289
+
290
+ module.exports = { RovoDevSetup };
@@ -0,0 +1,96 @@
1
+ const path = require('node:path');
2
+ const fs = require('fs-extra');
3
+ const chalk = require('chalk');
4
+
5
+ /**
6
+ * Generates launcher command files for each agent
7
+ * Similar to WorkflowCommandGenerator but for agents
8
+ */
9
+ class AgentCommandGenerator {
10
+ constructor(bmadFolderName = 'bmad') {
11
+ this.templatePath = path.join(__dirname, '../templates/agent-command-template.md');
12
+ this.bmadFolderName = bmadFolderName;
13
+ }
14
+
15
+ /**
16
+ * Collect agent artifacts for IDE installation
17
+ * @param {string} bmadDir - BMAD installation directory
18
+ * @param {Array} selectedModules - Modules to include
19
+ * @returns {Object} Artifacts array with metadata
20
+ */
21
+ async collectAgentArtifacts(bmadDir, selectedModules = []) {
22
+ const { getAgentsFromBmad } = require('./bmad-artifacts');
23
+
24
+ // Get agents from INSTALLED bmad/ directory
25
+ const agents = await getAgentsFromBmad(bmadDir, selectedModules);
26
+
27
+ const artifacts = [];
28
+
29
+ for (const agent of agents) {
30
+ const launcherContent = await this.generateLauncherContent(agent);
31
+ // Use relativePath if available (for nested agents), otherwise just name with .md
32
+ const agentPathInModule = agent.relativePath || `${agent.name}.md`;
33
+ artifacts.push({
34
+ type: 'agent-launcher',
35
+ module: agent.module,
36
+ name: agent.name,
37
+ relativePath: path.join(agent.module, 'agents', agentPathInModule),
38
+ content: launcherContent,
39
+ sourcePath: agent.path,
40
+ });
41
+ }
42
+
43
+ return {
44
+ artifacts,
45
+ counts: {
46
+ agents: agents.length,
47
+ },
48
+ };
49
+ }
50
+
51
+ /**
52
+ * Generate launcher content for an agent
53
+ * @param {Object} agent - Agent metadata
54
+ * @returns {string} Launcher file content
55
+ */
56
+ async generateLauncherContent(agent) {
57
+ // Load the template
58
+ const template = await fs.readFile(this.templatePath, 'utf8');
59
+
60
+ // Replace template variables
61
+ // Use relativePath if available (for nested agents), otherwise just name with .md
62
+ const agentPathInModule = agent.relativePath || `${agent.name}.md`;
63
+ return template
64
+ .replaceAll('{{name}}', agent.name)
65
+ .replaceAll('{{module}}', agent.module)
66
+ .replaceAll('{{path}}', agentPathInModule)
67
+ .replaceAll('{{description}}', agent.description || `${agent.name} agent`)
68
+ .replaceAll('_bmad', this.bmadFolderName)
69
+ .replaceAll('_bmad', '_bmad');
70
+ }
71
+
72
+ /**
73
+ * Write agent launcher artifacts to IDE commands directory
74
+ * @param {string} baseCommandsDir - Base commands directory for the IDE
75
+ * @param {Array} artifacts - Agent launcher artifacts
76
+ * @returns {number} Count of launchers written
77
+ */
78
+ async writeAgentLaunchers(baseCommandsDir, artifacts) {
79
+ let writtenCount = 0;
80
+
81
+ for (const artifact of artifacts) {
82
+ if (artifact.type === 'agent-launcher') {
83
+ const moduleAgentsDir = path.join(baseCommandsDir, artifact.module, 'agents');
84
+ await fs.ensureDir(moduleAgentsDir);
85
+
86
+ const launcherPath = path.join(moduleAgentsDir, `${artifact.name}.md`);
87
+ await fs.writeFile(launcherPath, artifact.content);
88
+ writtenCount++;
89
+ }
90
+ }
91
+
92
+ return writtenCount;
93
+ }
94
+ }
95
+
96
+ module.exports = { AgentCommandGenerator };