bmad-elsabro 1.0.0

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 (572) hide show
  1. package/.auto-claude-security.json +209 -0
  2. package/.claude_settings.json +34 -0
  3. package/.coderabbit.yaml +40 -0
  4. package/.nvmrc +1 -0
  5. package/.prettierignore +9 -0
  6. package/AI_TEST_GENERATOR_VERIFICATION.md +260 -0
  7. package/BUDGET_ALERT_TESTING.md +325 -0
  8. package/CHANGELOG.md +1488 -0
  9. package/CNAME +1 -0
  10. package/CONTRIBUTING.md +167 -0
  11. package/CONTRIBUTORS.md +32 -0
  12. package/LEGACY_MIGRATION_TESTING.md +428 -0
  13. package/LICENSE +30 -0
  14. package/PARTY_MODE_VERIFICATION.md +274 -0
  15. package/PROJECT_DETECTOR_TESTING.md +288 -0
  16. package/README.md +236 -0
  17. package/SECURITY.md +85 -0
  18. package/TRADEMARK.md +55 -0
  19. package/WORKFLOW_ROUTER_IMPLEMENTATION.md +379 -0
  20. package/Wordmark.png +0 -0
  21. package/banner-bmad-method.png +0 -0
  22. package/build/icons/512x512.png +0 -0
  23. package/build-mac.sh +3 -0
  24. package/docs/404.md +9 -0
  25. package/docs/_STYLE_GUIDE.md +367 -0
  26. package/docs/developer/api-reference.md +945 -0
  27. package/docs/developer/architecture.md +563 -0
  28. package/docs/developer/contributing.md +831 -0
  29. package/docs/downloads.md +74 -0
  30. package/docs/explanation/advanced-elicitation.md +24 -0
  31. package/docs/explanation/adversarial-review.md +57 -0
  32. package/docs/explanation/brainstorming.md +31 -0
  33. package/docs/explanation/brownfield-faq.md +55 -0
  34. package/docs/explanation/party-mode.md +57 -0
  35. package/docs/explanation/preventing-agent-conflicts.md +110 -0
  36. package/docs/explanation/quick-flow.md +27 -0
  37. package/docs/explanation/why-solutioning-matters.md +75 -0
  38. package/docs/how-to/brownfield/index.md +84 -0
  39. package/docs/how-to/brownfield/quick-fix-in-brownfield.md +76 -0
  40. package/docs/how-to/customize-bmad.md +158 -0
  41. package/docs/how-to/get-answers-about-bmad.md +102 -0
  42. package/docs/how-to/install-bmad.md +82 -0
  43. package/docs/how-to/shard-large-documents.md +101 -0
  44. package/docs/how-to/upgrade-to-v6.md +131 -0
  45. package/docs/index.md +56 -0
  46. package/docs/reference/workflow-map.md +83 -0
  47. package/docs/tea/explanation/engagement-models.md +710 -0
  48. package/docs/tea/explanation/fixture-architecture.md +457 -0
  49. package/docs/tea/explanation/knowledge-base-system.md +554 -0
  50. package/docs/tea/explanation/network-first-patterns.md +853 -0
  51. package/docs/tea/explanation/risk-based-testing.md +586 -0
  52. package/docs/tea/explanation/tea-overview.md +410 -0
  53. package/docs/tea/explanation/test-quality-standards.md +907 -0
  54. package/docs/tea/explanation/testing-as-engineering.md +112 -0
  55. package/docs/tea/glossary/index.md +159 -0
  56. package/docs/tea/how-to/brownfield/use-tea-for-enterprise.md +525 -0
  57. package/docs/tea/how-to/brownfield/use-tea-with-existing-tests.md +577 -0
  58. package/docs/tea/how-to/customization/enable-tea-mcp-enhancements.md +424 -0
  59. package/docs/tea/how-to/customization/integrate-playwright-utils.md +813 -0
  60. package/docs/tea/how-to/workflows/run-atdd.md +436 -0
  61. package/docs/tea/how-to/workflows/run-automate.md +653 -0
  62. package/docs/tea/how-to/workflows/run-nfr-assess.md +679 -0
  63. package/docs/tea/how-to/workflows/run-test-design.md +135 -0
  64. package/docs/tea/how-to/workflows/run-test-review.md +605 -0
  65. package/docs/tea/how-to/workflows/run-trace.md +883 -0
  66. package/docs/tea/how-to/workflows/setup-ci.md +712 -0
  67. package/docs/tea/how-to/workflows/setup-test-framework.md +98 -0
  68. package/docs/tea/reference/commands.md +276 -0
  69. package/docs/tea/reference/configuration.md +678 -0
  70. package/docs/tea/reference/knowledge-base.md +340 -0
  71. package/docs/tea/tutorials/tea-lite-quickstart.md +444 -0
  72. package/docs/tutorials/getting-started.md +205 -0
  73. package/docs/user-guide/getting-started.md +348 -0
  74. package/docs/user-guide/token-economy.md +601 -0
  75. package/docs/user-guide/workflows.md +546 -0
  76. package/electron-builder.yml +75 -0
  77. package/eslint.config.mjs +152 -0
  78. package/package.json +162 -0
  79. package/prettier.config.mjs +32 -0
  80. package/public/monaco-workers/index.js +21 -0
  81. package/renderer/App.tsx +311 -0
  82. package/renderer/components/ChatPanel.tsx +285 -0
  83. package/renderer/components/CodeEditor.tsx +327 -0
  84. package/renderer/components/CodeEditor.types.ts +245 -0
  85. package/renderer/components/FlowSelector.tsx +534 -0
  86. package/renderer/components/MessageInput.tsx +252 -0
  87. package/renderer/components/MessageList.tsx +204 -0
  88. package/renderer/components/MigrationWizard.tsx +896 -0
  89. package/renderer/components/NotificationCenter.tsx +291 -0
  90. package/renderer/components/OnboardingWizard.tsx +112 -0
  91. package/renderer/components/PartyMode.tsx +555 -0
  92. package/renderer/components/Sidebar.module.css +258 -0
  93. package/renderer/components/Sidebar.tsx +157 -0
  94. package/renderer/components/TemplateSelector.tsx +553 -0
  95. package/renderer/components/Terminal.tsx +523 -0
  96. package/renderer/components/TestCenter.tsx +364 -0
  97. package/renderer/components/TokenAnalytics.tsx +607 -0
  98. package/renderer/components/TokenMonitor.tsx +331 -0
  99. package/renderer/components/TutorialOverlay.tsx +483 -0
  100. package/renderer/components/WorkflowEditor.tsx +470 -0
  101. package/renderer/components/onboarding/Step1Welcome.tsx +72 -0
  102. package/renderer/components/onboarding/Step2Setup.tsx +193 -0
  103. package/renderer/components/onboarding/Step3CreateProject.tsx +209 -0
  104. package/renderer/components/test-center/CoverageDashboard.tsx +588 -0
  105. package/renderer/components/test-center/ELI5Guide.tsx +521 -0
  106. package/renderer/components/test-center/TestList.tsx +381 -0
  107. package/renderer/components/test-center/TestRunner.tsx +431 -0
  108. package/renderer/components/test-center/TestStepWizard.tsx +1000 -0
  109. package/renderer/components/test-center/VisualTestBuilder.tsx +460 -0
  110. package/renderer/components/workflow/DependencyEdge.tsx +200 -0
  111. package/renderer/components/workflow/StepNode.tsx +234 -0
  112. package/renderer/components/workflow/StepPalette.tsx +412 -0
  113. package/renderer/context/ThemeContext.tsx +97 -0
  114. package/renderer/data/shortcuts.json +94 -0
  115. package/renderer/data/testing-guides.json +261 -0
  116. package/renderer/data/tutorials.json +546 -0
  117. package/renderer/hooks/useKeyboardShortcuts.ts +249 -0
  118. package/renderer/hooks/useNotifications.ts +267 -0
  119. package/renderer/hooks/useTheme.ts +149 -0
  120. package/renderer/hooks/useTokenTracking.ts +464 -0
  121. package/renderer/hooks/useWorkflowState.ts +309 -0
  122. package/renderer/index.html +16 -0
  123. package/renderer/index.tsx +17 -0
  124. package/renderer/lib/MONACO_OFFLINE_CONFIG.md +153 -0
  125. package/renderer/lib/chart-utils.ts +472 -0
  126. package/renderer/lib/file-system-provider.ts +295 -0
  127. package/renderer/lib/monaco-loader.ts +247 -0
  128. package/renderer/renderer/components/NOTIFICATION_SYSTEM.md +192 -0
  129. package/renderer/styles.css +55 -0
  130. package/renderer/types/css-modules.d.ts +21 -0
  131. package/renderer/types/electron.d.ts +316 -0
  132. package/src/bmm/_module-installer/installer.js +48 -0
  133. package/src/bmm/agents/analyst.agent.yaml +36 -0
  134. package/src/bmm/agents/architect.agent.yaml +28 -0
  135. package/src/bmm/agents/dev.agent.yaml +38 -0
  136. package/src/bmm/agents/parallel-orchestrator.agent.yaml +50 -0
  137. package/src/bmm/agents/pm.agent.yaml +46 -0
  138. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  139. package/src/bmm/agents/sm.agent.yaml +36 -0
  140. package/src/bmm/agents/tea.agent.yaml +63 -0
  141. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  142. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +45 -0
  143. package/src/bmm/agents/ux-designer.agent.yaml +26 -0
  144. package/src/bmm/agents/yolo-dev.agent.yaml +41 -0
  145. package/src/bmm/data/auto-testing-config.yaml +84 -0
  146. package/src/bmm/data/guided-mode-instructions.yaml +112 -0
  147. package/src/bmm/data/parallelization-config.yaml +136 -0
  148. package/src/bmm/data/project-context-template.md +26 -0
  149. package/src/bmm/data/speed-profiles.yaml +127 -0
  150. package/src/bmm/module-help.csv +32 -0
  151. package/src/bmm/module.yaml +60 -0
  152. package/src/bmm/teams/default-party.csv +21 -0
  153. package/src/bmm/teams/team-fullstack.yaml +12 -0
  154. package/src/bmm/testarch/knowledge/adr-quality-readiness-checklist.md +350 -0
  155. package/src/bmm/testarch/knowledge/api-request.md +442 -0
  156. package/src/bmm/testarch/knowledge/api-testing-patterns.md +843 -0
  157. package/src/bmm/testarch/knowledge/auth-session.md +552 -0
  158. package/src/bmm/testarch/knowledge/burn-in.md +273 -0
  159. package/src/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  160. package/src/bmm/testarch/knowledge/component-tdd.md +486 -0
  161. package/src/bmm/testarch/knowledge/contract-testing.md +957 -0
  162. package/src/bmm/testarch/knowledge/data-factories.md +500 -0
  163. package/src/bmm/testarch/knowledge/email-auth.md +721 -0
  164. package/src/bmm/testarch/knowledge/error-handling.md +725 -0
  165. package/src/bmm/testarch/knowledge/feature-flags.md +750 -0
  166. package/src/bmm/testarch/knowledge/file-utils.md +463 -0
  167. package/src/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  168. package/src/bmm/testarch/knowledge/fixtures-composition.md +382 -0
  169. package/src/bmm/testarch/knowledge/intercept-network-call.md +430 -0
  170. package/src/bmm/testarch/knowledge/log.md +429 -0
  171. package/src/bmm/testarch/knowledge/network-error-monitor.md +405 -0
  172. package/src/bmm/testarch/knowledge/network-first.md +486 -0
  173. package/src/bmm/testarch/knowledge/network-recorder.md +527 -0
  174. package/src/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  175. package/src/bmm/testarch/knowledge/overview.md +286 -0
  176. package/src/bmm/testarch/knowledge/playwright-config.md +730 -0
  177. package/src/bmm/testarch/knowledge/probability-impact.md +601 -0
  178. package/src/bmm/testarch/knowledge/recurse.md +421 -0
  179. package/src/bmm/testarch/knowledge/risk-governance.md +615 -0
  180. package/src/bmm/testarch/knowledge/selective-testing.md +732 -0
  181. package/src/bmm/testarch/knowledge/selector-resilience.md +527 -0
  182. package/src/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  183. package/src/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  184. package/src/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  185. package/src/bmm/testarch/knowledge/test-quality.md +664 -0
  186. package/src/bmm/testarch/knowledge/timing-debugging.md +372 -0
  187. package/src/bmm/testarch/knowledge/visual-debugging.md +524 -0
  188. package/src/bmm/testarch/tea-index.csv +35 -0
  189. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  190. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  191. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  192. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  193. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  194. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  195. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  196. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
  197. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +58 -0
  198. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  199. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  200. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  201. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  202. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  203. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  204. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  205. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  206. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +200 -0
  207. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  208. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  209. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  210. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  211. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  212. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  213. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  214. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  215. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  216. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +239 -0
  217. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  218. package/src/bmm/workflows/1-analysis/research/workflow.md +173 -0
  219. package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +13 -0
  220. package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
  221. package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
  222. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
  223. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +153 -0
  224. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
  225. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
  226. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
  227. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
  228. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
  229. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
  230. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
  231. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
  232. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
  233. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
  234. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
  235. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
  236. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  237. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
  238. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
  239. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
  240. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +218 -0
  241. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
  242. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
  243. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
  244. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  245. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
  246. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
  247. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  248. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  249. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
  250. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
  251. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  252. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
  253. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
  254. package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
  255. package/src/bmm/workflows/2-plan-workflows/create-prd/validation-report-prd-workflow.md +433 -0
  256. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow.md +150 -0
  257. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  258. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  259. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  260. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  261. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  262. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  263. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  264. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  265. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  266. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  267. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  268. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  269. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  270. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  271. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
  272. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  273. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +43 -0
  274. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +190 -0
  275. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +178 -0
  276. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +179 -0
  277. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +139 -0
  278. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +252 -0
  279. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +135 -0
  280. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  281. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +55 -0
  282. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  283. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +11 -0
  284. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  285. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  286. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
  287. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  288. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
  289. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  290. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  291. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  292. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  293. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
  294. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +50 -0
  295. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  296. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  297. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  298. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
  299. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  300. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +59 -0
  301. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  302. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  303. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +51 -0
  304. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  305. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
  306. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +60 -0
  307. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  308. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +345 -0
  309. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  310. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +61 -0
  311. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  312. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  313. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +32 -0
  314. package/src/bmm/workflows/4-implementation/fix-and-test/workflow.md +197 -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/brownfield-fast-track/steps/step-01-detect.md +55 -0
  324. package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/steps/step-02-confirm.md +48 -0
  325. package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/steps/step-03-implement.md +61 -0
  326. package/src/bmm/workflows/bmad-quick-flow/brownfield-fast-track/workflow.md +41 -0
  327. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +176 -0
  328. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +120 -0
  329. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +153 -0
  330. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +113 -0
  331. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +106 -0
  332. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +149 -0
  333. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +73 -0
  334. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +192 -0
  335. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +145 -0
  336. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +128 -0
  337. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +201 -0
  338. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  339. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +93 -0
  340. package/src/bmm/workflows/bmad-quick-flow/yolo-mode/steps/step-01-rapid-spec.md +54 -0
  341. package/src/bmm/workflows/bmad-quick-flow/yolo-mode/steps/step-02-ship-it.md +65 -0
  342. package/src/bmm/workflows/bmad-quick-flow/yolo-mode/workflow.md +54 -0
  343. package/src/bmm/workflows/document-project/checklist.md +245 -0
  344. package/src/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  345. package/src/bmm/workflows/document-project/instructions.md +221 -0
  346. package/src/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  347. package/src/bmm/workflows/document-project/templates/index-template.md +169 -0
  348. package/src/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  349. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  350. package/src/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  351. package/src/bmm/workflows/document-project/workflow.yaml +30 -0
  352. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  353. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  354. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  355. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  356. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-library.json +90 -0
  357. package/src/bmm/workflows/excalidraw-diagrams/_shared/excalidraw-templates.yaml +127 -0
  358. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/checklist.md +39 -0
  359. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/instructions.md +130 -0
  360. package/src/bmm/workflows/excalidraw-diagrams/create-dataflow/workflow.yaml +27 -0
  361. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/checklist.md +43 -0
  362. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/instructions.md +141 -0
  363. package/src/bmm/workflows/excalidraw-diagrams/create-diagram/workflow.yaml +27 -0
  364. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/checklist.md +49 -0
  365. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/instructions.md +241 -0
  366. package/src/bmm/workflows/excalidraw-diagrams/create-flowchart/workflow.yaml +27 -0
  367. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/checklist.md +38 -0
  368. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/instructions.md +133 -0
  369. package/src/bmm/workflows/excalidraw-diagrams/create-wireframe/workflow.yaml +27 -0
  370. package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-01-parse-target.md +49 -0
  371. package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-02-launch-streams.md +135 -0
  372. package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-03-sync-point.md +74 -0
  373. package/src/bmm/workflows/parallel-work/parallel-analysis/steps/step-04-merge-insights.md +179 -0
  374. package/src/bmm/workflows/parallel-work/parallel-analysis/workflow.md +55 -0
  375. package/src/bmm/workflows/parallel-work/parallel-generation/workflow.md +109 -0
  376. package/src/bmm/workflows/parallel-work/parallel-reviews/workflow.md +111 -0
  377. package/src/bmm/workflows/parallel-work/parallel-stories/workflow.md +112 -0
  378. package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-01-load-sprint.md +54 -0
  379. package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-02-plan-execution.md +63 -0
  380. package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-03-execute-stories.md +112 -0
  381. package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-04-code-review.md +148 -0
  382. package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-05-integration-testing.md +200 -0
  383. package/src/bmm/workflows/parallel-work/sprint-mode/steps/step-06-sprint-report.md +290 -0
  384. package/src/bmm/workflows/parallel-work/sprint-mode/workflow.md +58 -0
  385. package/src/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
  386. package/src/bmm/workflows/testarch/atdd/checklist.md +374 -0
  387. package/src/bmm/workflows/testarch/atdd/instructions.md +806 -0
  388. package/src/bmm/workflows/testarch/atdd/workflow.yaml +47 -0
  389. package/src/bmm/workflows/testarch/automate/checklist.md +582 -0
  390. package/src/bmm/workflows/testarch/automate/instructions.md +1324 -0
  391. package/src/bmm/workflows/testarch/automate/workflow.yaml +54 -0
  392. package/src/bmm/workflows/testarch/ci/checklist.md +247 -0
  393. package/src/bmm/workflows/testarch/ci/github-actions-template.yaml +198 -0
  394. package/src/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +149 -0
  395. package/src/bmm/workflows/testarch/ci/instructions.md +536 -0
  396. package/src/bmm/workflows/testarch/ci/workflow.yaml +47 -0
  397. package/src/bmm/workflows/testarch/framework/checklist.md +320 -0
  398. package/src/bmm/workflows/testarch/framework/instructions.md +481 -0
  399. package/src/bmm/workflows/testarch/framework/workflow.yaml +49 -0
  400. package/src/bmm/workflows/testarch/nfr-assess/checklist.md +407 -0
  401. package/src/bmm/workflows/testarch/nfr-assess/instructions.md +726 -0
  402. package/src/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +461 -0
  403. package/src/bmm/workflows/testarch/nfr-assess/workflow.yaml +49 -0
  404. package/src/bmm/workflows/testarch/test-design/checklist.md +407 -0
  405. package/src/bmm/workflows/testarch/test-design/instructions.md +1158 -0
  406. package/src/bmm/workflows/testarch/test-design/test-design-architecture-template.md +213 -0
  407. package/src/bmm/workflows/testarch/test-design/test-design-qa-template.md +286 -0
  408. package/src/bmm/workflows/testarch/test-design/test-design-template.md +294 -0
  409. package/src/bmm/workflows/testarch/test-design/workflow.yaml +71 -0
  410. package/src/bmm/workflows/testarch/test-review/checklist.md +472 -0
  411. package/src/bmm/workflows/testarch/test-review/instructions.md +628 -0
  412. package/src/bmm/workflows/testarch/test-review/test-review-template.md +390 -0
  413. package/src/bmm/workflows/testarch/test-review/workflow.yaml +48 -0
  414. package/src/bmm/workflows/testarch/trace/checklist.md +642 -0
  415. package/src/bmm/workflows/testarch/trace/instructions.md +1030 -0
  416. package/src/bmm/workflows/testarch/trace/trace-template.md +675 -0
  417. package/src/bmm/workflows/testarch/trace/workflow.yaml +57 -0
  418. package/src/core/_module-installer/installer.js +60 -0
  419. package/src/core/agents/bmad-master.agent.yaml +29 -0
  420. package/src/core/module-help.csv +9 -0
  421. package/src/core/module.yaml +25 -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 +100 -0
  427. package/src/core/tasks/editorial-review-structure.xml +209 -0
  428. package/src/core/tasks/help.md +62 -0
  429. package/src/core/tasks/index-docs.xml +65 -0
  430. package/src/core/tasks/review-adversarial-general.xml +48 -0
  431. package/src/core/tasks/shard-doc.xml +109 -0
  432. package/src/core/tasks/workflow.xml +235 -0
  433. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  434. package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
  435. package/src/core/workflows/brainstorming/brain-methods.csv +62 -0
  436. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  437. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  438. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  439. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  440. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  441. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  442. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  443. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  444. package/src/core/workflows/brainstorming/template.md +15 -0
  445. package/src/core/workflows/brainstorming/workflow.md +58 -0
  446. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  447. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  448. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +157 -0
  449. package/src/core/workflows/party-mode/workflow.md +194 -0
  450. package/src/utility/agent-components/activation-rules.txt +6 -0
  451. package/src/utility/agent-components/activation-steps.txt +14 -0
  452. package/src/utility/agent-components/agent-command-header.md +1 -0
  453. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  454. package/src/utility/agent-components/handler-action.txt +4 -0
  455. package/src/utility/agent-components/handler-data.txt +5 -0
  456. package/src/utility/agent-components/handler-exec.txt +6 -0
  457. package/src/utility/agent-components/handler-multi.txt +14 -0
  458. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  459. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  460. package/src/utility/agent-components/handler-workflow.txt +10 -0
  461. package/src/utility/agent-components/menu-handlers.txt +6 -0
  462. package/tools/bmad-npx-wrapper.js +69 -0
  463. package/tools/build-docs.js +577 -0
  464. package/tools/cli/README.md +7 -0
  465. package/tools/cli/bmad-cli.js +65 -0
  466. package/tools/cli/commands/diagnostics.js +303 -0
  467. package/tools/cli/commands/install.js +87 -0
  468. package/tools/cli/commands/module.js +210 -0
  469. package/tools/cli/commands/status.js +65 -0
  470. package/tools/cli/commands/uninstall.js +86 -0
  471. package/tools/cli/external-official-modules.yaml +54 -0
  472. package/tools/cli/installers/install-messages.yaml +59 -0
  473. package/tools/cli/installers/lib/core/config-collector.js +1079 -0
  474. package/tools/cli/installers/lib/core/custom-module-cache.js +259 -0
  475. package/tools/cli/installers/lib/core/dependency-resolver.js +739 -0
  476. package/tools/cli/installers/lib/core/detector.js +223 -0
  477. package/tools/cli/installers/lib/core/ide-config-manager.js +156 -0
  478. package/tools/cli/installers/lib/core/installer.js +2812 -0
  479. package/tools/cli/installers/lib/core/manifest-generator.js +1054 -0
  480. package/tools/cli/installers/lib/core/manifest.js +1036 -0
  481. package/tools/cli/installers/lib/custom/handler.js +363 -0
  482. package/tools/cli/installers/lib/ide/_base-ide.js +655 -0
  483. package/tools/cli/installers/lib/ide/_config-driven.js +450 -0
  484. package/tools/cli/installers/lib/ide/codex.js +440 -0
  485. package/tools/cli/installers/lib/ide/kilo.js +250 -0
  486. package/tools/cli/installers/lib/ide/kiro-cli.js +326 -0
  487. package/tools/cli/installers/lib/ide/manager.js +271 -0
  488. package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
  489. package/tools/cli/installers/lib/ide/platform-codes.yaml +227 -0
  490. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +181 -0
  491. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +163 -0
  492. package/tools/cli/installers/lib/ide/shared/module-injections.js +136 -0
  493. package/tools/cli/installers/lib/ide/shared/path-utils.js +292 -0
  494. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +270 -0
  495. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +319 -0
  496. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +14 -0
  497. package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
  498. package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
  499. package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
  500. package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
  501. package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
  502. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
  503. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
  504. package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
  505. package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
  506. package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
  507. package/tools/cli/installers/lib/ide/templates/split/opencode/body.md +10 -0
  508. package/tools/cli/installers/lib/ide/templates/split/opencode/header.md +4 -0
  509. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +13 -0
  510. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  511. package/tools/cli/installers/lib/message-loader.js +85 -0
  512. package/tools/cli/installers/lib/modules/external-manager.js +135 -0
  513. package/tools/cli/installers/lib/modules/manager.js +1375 -0
  514. package/tools/cli/lib/activation-builder.js +163 -0
  515. package/tools/cli/lib/agent/compiler.js +522 -0
  516. package/tools/cli/lib/agent/compiler.ts +572 -0
  517. package/tools/cli/lib/agent/installer.js +716 -0
  518. package/tools/cli/lib/agent/template-engine.js +152 -0
  519. package/tools/cli/lib/agent/types.ts +155 -0
  520. package/tools/cli/lib/agent-analyzer.js +109 -0
  521. package/tools/cli/lib/agent-party-generator.js +194 -0
  522. package/tools/cli/lib/cli-utils.js +227 -0
  523. package/tools/cli/lib/config.js +213 -0
  524. package/tools/cli/lib/config.ts +227 -0
  525. package/tools/cli/lib/file-ops.js +204 -0
  526. package/tools/cli/lib/file-ops.ts +215 -0
  527. package/tools/cli/lib/platform-codes.js +116 -0
  528. package/tools/cli/lib/project-root.js +77 -0
  529. package/tools/cli/lib/prompts.js +433 -0
  530. package/tools/cli/lib/prompts.ts +541 -0
  531. package/tools/cli/lib/types/config.types.ts +43 -0
  532. package/tools/cli/lib/types/xml-handler.types.ts +50 -0
  533. package/tools/cli/lib/ui.js +1660 -0
  534. package/tools/cli/lib/xml-handler.js +177 -0
  535. package/tools/cli/lib/xml-handler.ts +188 -0
  536. package/tools/cli/lib/xml-to-markdown.js +82 -0
  537. package/tools/cli/lib/yaml-format.js +245 -0
  538. package/tools/cli/lib/yaml-xml-builder.js +587 -0
  539. package/tools/docs/BUNDLE_DISTRIBUTION_SETUP.md +95 -0
  540. package/tools/docs/fix-refs.md +91 -0
  541. package/tools/docs/index.md +2 -0
  542. package/tools/fix-doc-links.js +288 -0
  543. package/tools/flattener/aggregate.js +76 -0
  544. package/tools/flattener/aggregate.ts +78 -0
  545. package/tools/flattener/binary.js +80 -0
  546. package/tools/flattener/discovery.js +71 -0
  547. package/tools/flattener/files.js +35 -0
  548. package/tools/flattener/files.ts +31 -0
  549. package/tools/flattener/ignoreRules.js +172 -0
  550. package/tools/flattener/main.js +483 -0
  551. package/tools/flattener/main.ts +262 -0
  552. package/tools/flattener/projectRoot.js +201 -0
  553. package/tools/flattener/prompts.js +44 -0
  554. package/tools/flattener/stats.helpers.js +368 -0
  555. package/tools/flattener/stats.js +75 -0
  556. package/tools/flattener/test-matrix.js +409 -0
  557. package/tools/flattener/types.ts +53 -0
  558. package/tools/flattener/xml.js +82 -0
  559. package/tools/format-workflow-md.js +263 -0
  560. package/tools/lib/xml-utils.js +13 -0
  561. package/tools/maintainer/review-pr-README.md +55 -0
  562. package/tools/maintainer/review-pr.md +242 -0
  563. package/tools/migrate-custom-module-paths.js +124 -0
  564. package/tools/platform-codes.yaml +157 -0
  565. package/tools/schema/agent.js +491 -0
  566. package/tools/schema/agent.ts +489 -0
  567. package/tools/schema/agent.types.ts +31 -0
  568. package/tools/update-bmad.sh +24 -0
  569. package/tools/validate-agent-schema.js +110 -0
  570. package/tools/validate-doc-links.js +371 -0
  571. package/tools/validate-svg-changes.sh +356 -0
  572. package/vite-plugin-monaco-editor.ts +108 -0
@@ -0,0 +1,303 @@
1
+ const chalk = require('chalk');
2
+ const path = require('node:path');
3
+ const os = require('node:os');
4
+ const { execSync } = require('node:child_process');
5
+ const { Installer } = require('../installers/lib/core/installer');
6
+ const { Manifest } = require('../installers/lib/core/manifest');
7
+ const { Detector } = require('../installers/lib/core/detector');
8
+
9
+ const installer = new Installer();
10
+ const manifest = new Manifest();
11
+ const detector = new Detector();
12
+
13
+ /**
14
+ * Execute a command and return output, or error message
15
+ * @param {string} command - Command to execute
16
+ * @returns {string} Command output or error message
17
+ */
18
+ function execCommand(command) {
19
+ try {
20
+ return execSync(command, { encoding: 'utf8', stdio: ['pipe', 'pipe', 'pipe'] }).trim();
21
+ } catch (error) {
22
+ return chalk.red('Not found or error');
23
+ }
24
+ }
25
+
26
+ /**
27
+ * Check for common issues in BMAD installation
28
+ * @param {string} bmadDir - BMAD directory path
29
+ * @param {Object} manifestData - Manifest data
30
+ * @returns {Array} Array of issue objects
31
+ */
32
+ async function checkForIssues(bmadDir, manifestData) {
33
+ const issues = [];
34
+ const fs = require('fs-extra');
35
+
36
+ // Check if manifest exists
37
+ if (!manifestData) {
38
+ issues.push({
39
+ severity: 'error',
40
+ message: 'No manifest.yaml found',
41
+ suggestion: 'Run "bmad install" to set up or repair installation',
42
+ });
43
+ return issues;
44
+ }
45
+
46
+ // Check if installation version matches current CLI version
47
+ const packageJson = require('../../../package.json');
48
+ const cliVersion = packageJson.version;
49
+ const installedVersion = manifestData.installation?.version;
50
+
51
+ if (installedVersion && installedVersion !== cliVersion) {
52
+ issues.push({
53
+ severity: 'warning',
54
+ message: `Version mismatch: CLI v${cliVersion} vs Installation v${installedVersion}`,
55
+ suggestion: 'Run "bmad install" and select "Quick Update" to sync versions',
56
+ });
57
+ }
58
+
59
+ // Check if modules have their directories
60
+ const modules = manifestData.modules || [];
61
+ for (const module of modules) {
62
+ if (module.source === 'external') {
63
+ const moduleDir = path.join(bmadDir, '_config', 'external', module.id);
64
+ if (!(await fs.pathExists(moduleDir))) {
65
+ issues.push({
66
+ severity: 'error',
67
+ message: `Module directory missing: ${module.id}`,
68
+ suggestion: `Reinstall module using "bmad module add ${module.id}"`,
69
+ });
70
+ }
71
+ }
72
+ }
73
+
74
+ // Check if _config directory is writable
75
+ const configDir = path.join(bmadDir, '_config');
76
+ if (await fs.pathExists(configDir)) {
77
+ try {
78
+ await fs.access(configDir, fs.constants.W_OK);
79
+ } catch {
80
+ issues.push({
81
+ severity: 'error',
82
+ message: 'Configuration directory is not writable',
83
+ suggestion: 'Check file permissions on _config directory',
84
+ });
85
+ }
86
+ }
87
+
88
+ // Check for legacy folder structures
89
+ const legacyCfgPath = path.join(bmadDir, '_cfg');
90
+ if (await fs.pathExists(legacyCfgPath)) {
91
+ issues.push({
92
+ severity: 'warning',
93
+ message: 'Legacy "_cfg" folder detected',
94
+ suggestion: 'Run "bmad install" to migrate to current structure',
95
+ });
96
+ }
97
+
98
+ return issues;
99
+ }
100
+
101
+ module.exports = {
102
+ command: 'diagnostics',
103
+ description: 'Display system diagnostics and troubleshooting information',
104
+ options: [
105
+ ['-v, --verbose', 'Show detailed diagnostic information'],
106
+ ['--json', 'Output diagnostics in JSON format'],
107
+ ],
108
+ action: async (options) => {
109
+ try {
110
+ const jsonOutput = options.json || false;
111
+ const verbose = options.verbose || false;
112
+
113
+ // Collect diagnostic data
114
+ const diagnosticData = {
115
+ timestamp: new Date().toISOString(),
116
+ system: {},
117
+ bmad: {},
118
+ issues: [],
119
+ };
120
+
121
+ // System Information
122
+ diagnosticData.system = {
123
+ platform: os.platform(),
124
+ arch: os.arch(),
125
+ release: os.release(),
126
+ nodeVersion: process.version,
127
+ npmVersion: execCommand('npm --version'),
128
+ homeDir: os.homedir(),
129
+ currentDir: process.cwd(),
130
+ };
131
+
132
+ // BMAD Installation
133
+ const projectDir = process.cwd();
134
+ const { bmadDir } = await installer.findBmadDir(projectDir);
135
+
136
+ const fs = require('fs-extra');
137
+ if (await fs.pathExists(bmadDir)) {
138
+ diagnosticData.bmad.installed = true;
139
+ diagnosticData.bmad.location = bmadDir;
140
+
141
+ // Read manifest
142
+ const manifestData = await manifest._readRaw(bmadDir);
143
+ if (manifestData) {
144
+ diagnosticData.bmad.version = manifestData.installation?.version || 'unknown';
145
+ diagnosticData.bmad.installDate = manifestData.installation?.installDate;
146
+ diagnosticData.bmad.lastUpdated = manifestData.installation?.lastUpdated;
147
+ diagnosticData.bmad.modules = (manifestData.modules || []).map((m) => ({
148
+ id: m.id,
149
+ name: m.name,
150
+ version: m.version,
151
+ source: m.source,
152
+ }));
153
+
154
+ // Detect configured IDEs
155
+ const existingInstall = await detector.detect(bmadDir);
156
+ diagnosticData.bmad.ides = existingInstall.ides || [];
157
+
158
+ // Check for issues
159
+ diagnosticData.issues = await checkForIssues(bmadDir, manifestData);
160
+ } else {
161
+ diagnosticData.bmad.installed = false;
162
+ diagnosticData.issues.push({
163
+ severity: 'error',
164
+ message: 'BMAD directory exists but manifest is missing or corrupted',
165
+ suggestion: 'Run "bmad install" to repair installation',
166
+ });
167
+ }
168
+ } else {
169
+ diagnosticData.bmad.installed = false;
170
+ diagnosticData.issues.push({
171
+ severity: 'info',
172
+ message: 'No BMAD installation found',
173
+ suggestion: 'Run "bmad install" to set up a new installation',
174
+ });
175
+ }
176
+
177
+ // Get CLI version
178
+ const packageJson = require('../../../package.json');
179
+ diagnosticData.bmad.cliVersion = packageJson.version;
180
+
181
+ // Output results
182
+ if (jsonOutput) {
183
+ console.log(JSON.stringify(diagnosticData, null, 2));
184
+ process.exit(0);
185
+ return;
186
+ }
187
+
188
+ // Human-readable output
189
+ console.log('');
190
+ console.log(chalk.cyan.bold('🔍 BMAD Diagnostics'));
191
+ console.log(chalk.gray('─'.repeat(80)));
192
+
193
+ // System Section
194
+ console.log(chalk.yellow('\n📊 System Information'));
195
+ console.log(` ${chalk.gray('Platform:'.padEnd(20))} ${diagnosticData.system.platform} (${diagnosticData.system.arch})`);
196
+ console.log(` ${chalk.gray('OS Release:'.padEnd(20))} ${diagnosticData.system.release}`);
197
+ console.log(` ${chalk.gray('Node.js:'.padEnd(20))} ${diagnosticData.system.nodeVersion}`);
198
+ console.log(` ${chalk.gray('npm:'.padEnd(20))} ${diagnosticData.system.npmVersion}`);
199
+ console.log(` ${chalk.gray('Current Directory:'.padEnd(20))} ${diagnosticData.system.currentDir}`);
200
+
201
+ if (verbose) {
202
+ console.log(` ${chalk.gray('Home Directory:'.padEnd(20))} ${diagnosticData.system.homeDir}`);
203
+ }
204
+
205
+ // BMAD Installation Section
206
+ console.log(chalk.yellow('\n🔧 BMAD Installation'));
207
+ console.log(` ${chalk.gray('CLI Version:'.padEnd(20))} ${diagnosticData.bmad.cliVersion}`);
208
+
209
+ if (diagnosticData.bmad.installed) {
210
+ console.log(` ${chalk.gray('Installed:'.padEnd(20))} ${chalk.green('Yes')}`);
211
+ console.log(` ${chalk.gray('Version:'.padEnd(20))} ${diagnosticData.bmad.version}`);
212
+ console.log(` ${chalk.gray('Location:'.padEnd(20))} ${diagnosticData.bmad.location}`);
213
+
214
+ if (diagnosticData.bmad.installDate) {
215
+ console.log(` ${chalk.gray('Install Date:'.padEnd(20))} ${new Date(diagnosticData.bmad.installDate).toLocaleDateString()}`);
216
+ }
217
+
218
+ if (diagnosticData.bmad.lastUpdated) {
219
+ console.log(` ${chalk.gray('Last Updated:'.padEnd(20))} ${new Date(diagnosticData.bmad.lastUpdated).toLocaleDateString()}`);
220
+ }
221
+
222
+ // Modules
223
+ if (diagnosticData.bmad.modules && diagnosticData.bmad.modules.length > 0) {
224
+ console.log(chalk.yellow('\n📦 Installed Modules'));
225
+ for (const module of diagnosticData.bmad.modules) {
226
+ const versionInfo = module.version ? chalk.gray(`v${module.version}`) : chalk.gray('unknown');
227
+ const sourceInfo = chalk.dim(`[${module.source}]`);
228
+ console.log(` ${chalk.cyan(module.name.padEnd(25))} ${versionInfo.padEnd(15)} ${sourceInfo}`);
229
+ }
230
+ }
231
+
232
+ // IDEs/Tools
233
+ if (diagnosticData.bmad.ides && diagnosticData.bmad.ides.length > 0) {
234
+ console.log(chalk.yellow('\n🛠️ Configured Tools'));
235
+ for (const ide of diagnosticData.bmad.ides) {
236
+ console.log(` ${chalk.cyan('•')} ${ide}`);
237
+ }
238
+ } else {
239
+ console.log(chalk.yellow('\n🛠️ Configured Tools'));
240
+ console.log(` ${chalk.gray('No tools configured')}`);
241
+ }
242
+ } else {
243
+ console.log(` ${chalk.gray('Installed:'.padEnd(20))} ${chalk.red('No')}`);
244
+ console.log(` ${chalk.gray('Location:'.padEnd(20))} ${chalk.gray('N/A')}`);
245
+ }
246
+
247
+ // Issues Section
248
+ if (diagnosticData.issues.length > 0) {
249
+ console.log(chalk.yellow('\n⚠️ Issues & Recommendations'));
250
+
251
+ const errors = diagnosticData.issues.filter((i) => i.severity === 'error');
252
+ const warnings = diagnosticData.issues.filter((i) => i.severity === 'warning');
253
+ const info = diagnosticData.issues.filter((i) => i.severity === 'info');
254
+
255
+ if (errors.length > 0) {
256
+ console.log(chalk.red.bold('\n Errors:'));
257
+ for (const issue of errors) {
258
+ console.log(` ${chalk.red('✗')} ${issue.message}`);
259
+ console.log(` ${chalk.dim('→')} ${issue.suggestion}`);
260
+ }
261
+ }
262
+
263
+ if (warnings.length > 0) {
264
+ console.log(chalk.yellow.bold('\n Warnings:'));
265
+ for (const issue of warnings) {
266
+ console.log(` ${chalk.yellow('⚠')} ${issue.message}`);
267
+ console.log(` ${chalk.dim('→')} ${issue.suggestion}`);
268
+ }
269
+ }
270
+
271
+ if (info.length > 0) {
272
+ console.log(chalk.cyan.bold('\n Info:'));
273
+ for (const issue of info) {
274
+ console.log(` ${chalk.cyan('ℹ')} ${issue.message}`);
275
+ console.log(` ${chalk.dim('→')} ${issue.suggestion}`);
276
+ }
277
+ }
278
+ } else {
279
+ console.log(chalk.green('\n✓ No issues detected'));
280
+ }
281
+
282
+ // Troubleshooting Tips
283
+ if (!options.json && verbose) {
284
+ console.log(chalk.yellow('\n💡 Troubleshooting Tips'));
285
+ console.log(chalk.dim(' • If commands fail, try running with sudo/admin privileges'));
286
+ console.log(chalk.dim(' • Check that Node.js version is >= 16.0.0'));
287
+ console.log(chalk.dim(' • Ensure npm packages are up to date with "npm install"'));
288
+ console.log(chalk.dim(' • For permission issues, check folder ownership and permissions'));
289
+ console.log(chalk.dim(' • Use "bmad install" to repair or update your installation'));
290
+ console.log(chalk.dim(' • Use "bmad status" to check module versions and updates'));
291
+ }
292
+
293
+ console.log('');
294
+ process.exit(0);
295
+ } catch (error) {
296
+ console.error(chalk.red('Diagnostics failed:'), error.message);
297
+ if (process.env.BMAD_DEBUG) {
298
+ console.error(chalk.dim(error.stack));
299
+ }
300
+ process.exit(1);
301
+ }
302
+ },
303
+ };
@@ -0,0 +1,87 @@
1
+ const chalk = require('chalk');
2
+ const path = require('node:path');
3
+ const { Installer } = require('../installers/lib/core/installer');
4
+ const { UI } = require('../lib/ui');
5
+
6
+ const installer = new Installer();
7
+ const ui = new UI();
8
+
9
+ module.exports = {
10
+ command: 'install',
11
+ description: 'Install BMAD Core agents and tools',
12
+ options: [['-d, --debug', 'Enable debug output for manifest generation']],
13
+ action: async (options) => {
14
+ try {
15
+ // Set debug flag as environment variable for all components
16
+ if (options.debug) {
17
+ process.env.BMAD_DEBUG_MANIFEST = 'true';
18
+ console.log(chalk.cyan('Debug mode enabled\n'));
19
+ }
20
+
21
+ const config = await ui.promptInstall();
22
+
23
+ // Handle cancel
24
+ if (config.actionType === 'cancel') {
25
+ console.log(chalk.yellow('Installation cancelled.'));
26
+ process.exit(0);
27
+ return;
28
+ }
29
+
30
+ // Handle quick update separately
31
+ if (config.actionType === 'quick-update') {
32
+ const result = await installer.quickUpdate(config);
33
+ console.log(chalk.green('\n✨ Quick update complete!'));
34
+ console.log(chalk.cyan(`Updated ${result.moduleCount} modules with preserved settings (${result.modules.join(', ')})`));
35
+
36
+ // Display version-specific end message
37
+ const { MessageLoader } = require('../installers/lib/message-loader');
38
+ const messageLoader = new MessageLoader();
39
+ messageLoader.displayEndMessage();
40
+
41
+ process.exit(0);
42
+ return;
43
+ }
44
+
45
+ // Handle compile agents separately
46
+ if (config.actionType === 'compile-agents') {
47
+ const result = await installer.compileAgents(config);
48
+ console.log(chalk.green('\n✨ Agent recompilation complete!'));
49
+ console.log(chalk.cyan(`Recompiled ${result.agentCount} agents with customizations applied`));
50
+ process.exit(0);
51
+ return;
52
+ }
53
+
54
+ // Regular install/update flow
55
+ const result = await installer.install(config);
56
+
57
+ // Check if installation was cancelled
58
+ if (result && result.cancelled) {
59
+ process.exit(0);
60
+ return;
61
+ }
62
+
63
+ // Check if installation succeeded
64
+ if (result && result.success) {
65
+ // Display version-specific end message from install-messages.yaml
66
+ const { MessageLoader } = require('../installers/lib/message-loader');
67
+ const messageLoader = new MessageLoader();
68
+ messageLoader.displayEndMessage();
69
+
70
+ process.exit(0);
71
+ }
72
+ } catch (error) {
73
+ // Check if error has a complete formatted message
74
+ if (error.fullMessage) {
75
+ console.error(error.fullMessage);
76
+ if (error.stack) {
77
+ console.error('\n' + chalk.dim(error.stack));
78
+ }
79
+ } else {
80
+ // Generic error handling for all other errors
81
+ console.error(chalk.red('Installation failed:'), error.message);
82
+ console.error(chalk.dim(error.stack));
83
+ }
84
+ process.exit(1);
85
+ }
86
+ },
87
+ };
@@ -0,0 +1,210 @@
1
+ const chalk = require('chalk');
2
+ const path = require('node:path');
3
+ const { Installer } = require('../installers/lib/core/installer');
4
+ const { Manifest } = require('../installers/lib/core/manifest');
5
+ const { UI } = require('../lib/ui');
6
+ const { confirm } = require('@clack/prompts');
7
+ const { Command } = require('commander');
8
+
9
+ const installer = new Installer();
10
+ const manifest = new Manifest();
11
+ const ui = new UI();
12
+
13
+ // Create the module command with subcommands
14
+ const moduleCommand = new Command('module');
15
+ moduleCommand.description('Manage BMAD modules');
16
+
17
+ // Add subcommand
18
+ const addCommand = moduleCommand
19
+ .command('add <module-name>')
20
+ .description('Add a module to the BMAD installation')
21
+ .option('-s, --source <url>', 'Git repository URL or npm package name')
22
+ .option('-v, --version <version>', 'Specific version to install (for npm packages)')
23
+ .option('-f, --force', 'Force installation even if module already exists')
24
+ .action(async (moduleName, options) => {
25
+ try {
26
+ // Find the bmad directory
27
+ const projectDir = process.cwd();
28
+ const { bmadDir } = await installer.findBmadDir(projectDir);
29
+
30
+ // Check if bmad directory exists
31
+ const fs = require('fs-extra');
32
+ if (!(await fs.pathExists(bmadDir))) {
33
+ console.log(chalk.red('No BMAD installation found in the current directory.'));
34
+ console.log(chalk.dim(`Expected location: ${bmadDir}`));
35
+ console.log(chalk.dim('\nRun "bmad install" to set up a new installation first.'));
36
+ process.exit(1);
37
+ return;
38
+ }
39
+
40
+ // Read current manifest
41
+ const manifestData = await manifest._readRaw(bmadDir);
42
+
43
+ if (!manifestData) {
44
+ console.log(chalk.red('No BMAD installation manifest found.'));
45
+ console.log(chalk.dim('\nRun "bmad install" to set up a new installation first.'));
46
+ process.exit(1);
47
+ return;
48
+ }
49
+
50
+ // Check if module already exists
51
+ const existingModule = manifestData.modules?.find((m) => m.name === moduleName);
52
+ if (existingModule && !options.force) {
53
+ console.log(chalk.yellow(`Module "${moduleName}" is already installed.`));
54
+ console.log(chalk.dim(`Use --force to reinstall or update the module.`));
55
+ console.log(chalk.dim(`Current version: ${existingModule.version || 'unknown'}`));
56
+ process.exit(0);
57
+ return;
58
+ }
59
+
60
+ // Prepare module configuration
61
+ const moduleConfig = {
62
+ name: moduleName,
63
+ source: options.source || moduleName,
64
+ version: options.version || 'latest',
65
+ };
66
+
67
+ console.log(chalk.cyan(`\nAdding module: ${moduleName}`));
68
+ if (options.source) {
69
+ console.log(chalk.dim(`Source: ${options.source}`));
70
+ }
71
+ if (options.version) {
72
+ console.log(chalk.dim(`Version: ${options.version}`));
73
+ }
74
+
75
+ // Add the module using installer
76
+ const result = await installer.addModule(bmadDir, moduleConfig);
77
+
78
+ if (result && result.success) {
79
+ console.log(chalk.green('\n✨ Module added successfully!'));
80
+ console.log(chalk.dim(`Module "${moduleName}" has been added to your BMAD installation.`));
81
+ process.exit(0);
82
+ } else {
83
+ console.log(chalk.yellow('\n⚠️ Module addition completed with warnings.'));
84
+ if (result && result.message) {
85
+ console.log(chalk.dim(result.message));
86
+ }
87
+ process.exit(0);
88
+ }
89
+ } catch (error) {
90
+ console.error(chalk.red('Failed to add module:'), error.message);
91
+ if (process.env.BMAD_DEBUG) {
92
+ console.error(chalk.dim(error.stack));
93
+ }
94
+ process.exit(1);
95
+ }
96
+ });
97
+
98
+ // Remove subcommand
99
+ const removeCommand = moduleCommand
100
+ .command('remove <module-name>')
101
+ .description('Remove a module from the BMAD installation')
102
+ .option('-y, --yes', 'Skip confirmation prompt')
103
+ .option('--keep-data', 'Remove module but keep its data and configuration files')
104
+ .action(async (moduleName, options) => {
105
+ try {
106
+ // Find the bmad directory
107
+ const projectDir = process.cwd();
108
+ const { bmadDir } = await installer.findBmadDir(projectDir);
109
+
110
+ // Check if bmad directory exists
111
+ const fs = require('fs-extra');
112
+ if (!(await fs.pathExists(bmadDir))) {
113
+ console.log(chalk.red('No BMAD installation found in the current directory.'));
114
+ console.log(chalk.dim(`Expected location: ${bmadDir}`));
115
+ console.log(chalk.dim('\nRun "bmad install" to set up a new installation first.'));
116
+ process.exit(1);
117
+ return;
118
+ }
119
+
120
+ // Read current manifest
121
+ const manifestData = await manifest._readRaw(bmadDir);
122
+
123
+ if (!manifestData) {
124
+ console.log(chalk.red('No BMAD installation manifest found.'));
125
+ console.log(chalk.dim('\nRun "bmad install" to set up a new installation first.'));
126
+ process.exit(1);
127
+ return;
128
+ }
129
+
130
+ // Check if module exists
131
+ const existingModule = manifestData.modules?.find((m) => m.name === moduleName);
132
+ if (!existingModule) {
133
+ console.log(chalk.yellow(`Module "${moduleName}" is not installed.`));
134
+ console.log(chalk.dim('\nAvailable modules:'));
135
+ if (manifestData.modules && manifestData.modules.length > 0) {
136
+ for (const mod of manifestData.modules) {
137
+ console.log(chalk.dim(` - ${mod.name} (${mod.version || 'unknown'})`));
138
+ }
139
+ } else {
140
+ console.log(chalk.dim(' (no modules installed)'));
141
+ }
142
+ process.exit(0);
143
+ return;
144
+ }
145
+
146
+ // Confirm removal unless --yes flag is provided
147
+ if (!options.yes) {
148
+ console.log(chalk.yellow(`\nYou are about to remove module: ${moduleName}`));
149
+ console.log(chalk.dim(`Version: ${existingModule.version || 'unknown'}`));
150
+ if (options.keepData) {
151
+ console.log(chalk.dim('Data and configuration will be preserved.'));
152
+ } else {
153
+ console.log(chalk.dim('All data and configuration will be removed.'));
154
+ }
155
+
156
+ const shouldContinue = await confirm({
157
+ message: 'Are you sure you want to continue?',
158
+ initialValue: false,
159
+ });
160
+
161
+ if (!shouldContinue || shouldContinue === 'cancel') {
162
+ console.log(chalk.yellow('\nModule removal cancelled.'));
163
+ process.exit(0);
164
+ return;
165
+ }
166
+ }
167
+
168
+ console.log(chalk.cyan(`\nRemoving module: ${moduleName}`));
169
+
170
+ // Remove the module using installer
171
+ const result = await installer.removeModule(bmadDir, moduleName, {
172
+ keepData: options.keepData,
173
+ });
174
+
175
+ if (result && result.success) {
176
+ console.log(chalk.green('\n✨ Module removed successfully!'));
177
+ console.log(chalk.dim(`Module "${moduleName}" has been removed from your BMAD installation.`));
178
+ if (options.keepData) {
179
+ console.log(chalk.dim('Data and configuration files have been preserved.'));
180
+ }
181
+ process.exit(0);
182
+ } else {
183
+ console.log(chalk.yellow('\n⚠️ Module removal completed with warnings.'));
184
+ if (result && result.message) {
185
+ console.log(chalk.dim(result.message));
186
+ }
187
+ process.exit(0);
188
+ }
189
+ } catch (error) {
190
+ console.error(chalk.red('Failed to remove module:'), error.message);
191
+ if (process.env.BMAD_DEBUG) {
192
+ console.error(chalk.dim(error.stack));
193
+ }
194
+ process.exit(1);
195
+ }
196
+ });
197
+
198
+ // Export the module command in the format expected by bmad-cli.js
199
+ // We need to export it in a way that the CLI loader can handle it specially
200
+ module.exports = {
201
+ command: 'module',
202
+ description: 'Manage BMAD modules',
203
+ options: [],
204
+ // Instead of a simple action, we export the full Command object
205
+ commandObject: moduleCommand,
206
+ action: () => {
207
+ // This will be called if someone runs just 'bmad module' without subcommand
208
+ moduleCommand.outputHelp();
209
+ },
210
+ };
@@ -0,0 +1,65 @@
1
+ const chalk = require('chalk');
2
+ const path = require('node:path');
3
+ const { Installer } = require('../installers/lib/core/installer');
4
+ const { Manifest } = require('../installers/lib/core/manifest');
5
+ const { UI } = require('../lib/ui');
6
+
7
+ const installer = new Installer();
8
+ const manifest = new Manifest();
9
+ const ui = new UI();
10
+
11
+ module.exports = {
12
+ command: 'status',
13
+ description: 'Display BMAD installation status and module versions',
14
+ options: [],
15
+ action: async (options) => {
16
+ try {
17
+ // Find the bmad directory
18
+ const projectDir = process.cwd();
19
+ const { bmadDir } = await installer.findBmadDir(projectDir);
20
+
21
+ // Check if bmad directory exists
22
+ const fs = require('fs-extra');
23
+ if (!(await fs.pathExists(bmadDir))) {
24
+ console.log(chalk.yellow('No BMAD installation found in the current directory.'));
25
+ console.log(chalk.dim(`Expected location: ${bmadDir}`));
26
+ console.log(chalk.dim('\nRun "bmad install" to set up a new installation.'));
27
+ process.exit(0);
28
+ return;
29
+ }
30
+
31
+ // Read manifest
32
+ const manifestData = await manifest._readRaw(bmadDir);
33
+
34
+ if (!manifestData) {
35
+ console.log(chalk.yellow('No BMAD installation manifest found.'));
36
+ console.log(chalk.dim('\nRun "bmad install" to set up a new installation.'));
37
+ process.exit(0);
38
+ return;
39
+ }
40
+
41
+ // Get installation info
42
+ const installation = manifestData.installation || {};
43
+ const modules = manifestData.modules || [];
44
+
45
+ // Check for available updates (only for external modules)
46
+ const availableUpdates = await manifest.checkForUpdates(bmadDir);
47
+
48
+ // Display status
49
+ ui.displayStatus({
50
+ installation,
51
+ modules,
52
+ availableUpdates,
53
+ bmadDir,
54
+ });
55
+
56
+ process.exit(0);
57
+ } catch (error) {
58
+ console.error(chalk.red('Status check failed:'), error.message);
59
+ if (process.env.BMAD_DEBUG) {
60
+ console.error(chalk.dim(error.stack));
61
+ }
62
+ process.exit(1);
63
+ }
64
+ },
65
+ };