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,227 @@
1
+ const chalk = require('chalk');
2
+ const boxen = require('boxen');
3
+ const wrapAnsi = require('wrap-ansi');
4
+ const figlet = require('figlet');
5
+ const path = require('node:path');
6
+ const os = require('node:os');
7
+
8
+ const CLIUtils = {
9
+ /**
10
+ * Get version from package.json
11
+ */
12
+ getVersion() {
13
+ try {
14
+ const packageJson = require(path.join(__dirname, '..', '..', '..', 'package.json'));
15
+ return packageJson.version || 'Unknown';
16
+ } catch {
17
+ return 'Unknown';
18
+ }
19
+ },
20
+
21
+ /**
22
+ * Display BMAD logo
23
+ * @param {boolean} clearScreen - Whether to clear the screen first (default: true for initial display only)
24
+ */
25
+ displayLogo(clearScreen = true) {
26
+ if (clearScreen) {
27
+ console.clear();
28
+ }
29
+
30
+ const version = this.getVersion();
31
+
32
+ // ASCII art logo
33
+ const logo = `
34
+ ██████╗ ███╗ ███╗ █████╗ ██████╗ ™
35
+ ██╔══██╗████╗ ████║██╔══██╗██╔══██╗
36
+ ██████╔╝██╔████╔██║███████║██║ ██║
37
+ ██╔══██╗██║╚██╔╝██║██╔══██║██║ ██║
38
+ ██████╔╝██║ ╚═╝ ██║██║ ██║██████╔╝
39
+ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝`;
40
+
41
+ console.log(chalk.cyan(logo));
42
+ console.log(chalk.dim(` Build More, Architect Dreams`) + chalk.cyan.bold(` v${version}`) + '\n');
43
+ },
44
+
45
+ /**
46
+ * Display section header
47
+ * @param {string} title - Section title
48
+ * @param {string} subtitle - Optional subtitle
49
+ */
50
+ displaySection(title, subtitle = null) {
51
+ console.log('\n' + chalk.cyan('═'.repeat(80)));
52
+ console.log(chalk.cyan.bold(` ${title}`));
53
+ if (subtitle) {
54
+ console.log(chalk.dim(` ${subtitle}`));
55
+ }
56
+ console.log(chalk.cyan('═'.repeat(80)) + '\n');
57
+ },
58
+
59
+ /**
60
+ * Display info box
61
+ * @param {string|Array} content - Content to display
62
+ * @param {Object} options - Box options
63
+ */
64
+ displayBox(content, options = {}) {
65
+ const defaultOptions = {
66
+ padding: 1,
67
+ margin: 1,
68
+ borderStyle: 'round',
69
+ borderColor: 'cyan',
70
+ ...options,
71
+ };
72
+
73
+ // Handle array content
74
+ let text = content;
75
+ if (Array.isArray(content)) {
76
+ text = content.join('\n\n');
77
+ }
78
+
79
+ // Wrap text to prevent overflow
80
+ const wrapped = wrapAnsi(text, 76, { hard: true, wordWrap: true });
81
+
82
+ console.log(boxen(wrapped, defaultOptions));
83
+ },
84
+
85
+ /**
86
+ * Display module configuration header
87
+ * @param {string} moduleName - Module name (fallback if no custom header)
88
+ * @param {string} header - Custom header from module.yaml
89
+ * @param {string} subheader - Custom subheader from module.yaml
90
+ */
91
+ displayModuleConfigHeader(moduleName, header = null, subheader = null) {
92
+ // Simple blue banner with custom header/subheader if provided
93
+ console.log('\n' + chalk.cyan('─'.repeat(80)));
94
+ console.log(chalk.cyan(header || `Configuring ${moduleName.toUpperCase()} Module`));
95
+ if (subheader) {
96
+ console.log(chalk.dim(`${subheader}`));
97
+ }
98
+ console.log(chalk.cyan('─'.repeat(80)) + '\n');
99
+ },
100
+
101
+ /**
102
+ * Display module with no custom configuration
103
+ * @param {string} moduleName - Module name (fallback if no custom header)
104
+ * @param {string} header - Custom header from module.yaml
105
+ * @param {string} subheader - Custom subheader from module.yaml
106
+ */
107
+ displayModuleNoConfig(moduleName, header = null, subheader = null) {
108
+ // Show full banner with header/subheader, just like modules with config
109
+ console.log('\n' + chalk.cyan('─'.repeat(80)));
110
+ console.log(chalk.cyan(header || `${moduleName.toUpperCase()} Module - No Custom Configuration`));
111
+ if (subheader) {
112
+ console.log(chalk.dim(`${subheader}`));
113
+ }
114
+ console.log(chalk.cyan('─'.repeat(80)) + '\n');
115
+ },
116
+
117
+ /**
118
+ * Display step indicator
119
+ * @param {number} current - Current step
120
+ * @param {number} total - Total steps
121
+ * @param {string} description - Step description
122
+ */
123
+ displayStep(current, total, description) {
124
+ const progress = `[${current}/${total}]`;
125
+ console.log('\n' + chalk.cyan(progress) + ' ' + chalk.bold(description));
126
+ console.log(chalk.dim('─'.repeat(80 - progress.length - 1)) + '\n');
127
+ },
128
+
129
+ /**
130
+ * Display completion message
131
+ * @param {string} message - Completion message
132
+ */
133
+ displayComplete(message) {
134
+ console.log(
135
+ '\n' +
136
+ boxen(chalk.green('✨ ' + message), {
137
+ padding: 1,
138
+ margin: 1,
139
+ borderStyle: 'round',
140
+ borderColor: 'green',
141
+ }),
142
+ );
143
+ },
144
+
145
+ /**
146
+ * Display error message
147
+ * @param {string} message - Error message
148
+ */
149
+ displayError(message) {
150
+ console.log(
151
+ '\n' +
152
+ boxen(chalk.red('✗ ' + message), {
153
+ padding: 1,
154
+ margin: 1,
155
+ borderStyle: 'round',
156
+ borderColor: 'red',
157
+ }),
158
+ );
159
+ },
160
+
161
+ /**
162
+ * Format list for display
163
+ * @param {Array} items - Items to display
164
+ * @param {string} prefix - Item prefix
165
+ */
166
+ formatList(items, prefix = '•') {
167
+ return items.map((item) => ` ${prefix} ${item}`).join('\n');
168
+ },
169
+
170
+ /**
171
+ * Clear previous lines
172
+ * @param {number} lines - Number of lines to clear
173
+ */
174
+ clearLines(lines) {
175
+ for (let i = 0; i < lines; i++) {
176
+ process.stdout.moveCursor(0, -1);
177
+ process.stdout.clearLine(1);
178
+ }
179
+ },
180
+
181
+ /**
182
+ * Display table
183
+ * @param {Array} data - Table data
184
+ * @param {Object} options - Table options
185
+ */
186
+ displayTable(data, options = {}) {
187
+ const Table = require('cli-table3');
188
+ const table = new Table({
189
+ style: {
190
+ head: ['cyan'],
191
+ border: ['dim'],
192
+ },
193
+ ...options,
194
+ });
195
+
196
+ for (const row of data) table.push(row);
197
+ console.log(table.toString());
198
+ },
199
+
200
+ /**
201
+ * Display module completion message
202
+ * @param {string} moduleName - Name of the completed module
203
+ * @param {boolean} clearScreen - Whether to clear the screen first (deprecated, always false now)
204
+ */
205
+ displayModuleComplete(moduleName, clearScreen = false) {
206
+ // No longer clear screen or show boxes - just a simple completion message
207
+ // This is deprecated but kept for backwards compatibility
208
+ },
209
+
210
+ /**
211
+ * Expand path with ~ expansion
212
+ * @param {string} inputPath - Path to expand
213
+ * @returns {string} Expanded path
214
+ */
215
+ expandPath(inputPath) {
216
+ if (!inputPath) return inputPath;
217
+
218
+ // Expand ~ to home directory
219
+ if (inputPath.startsWith('~')) {
220
+ return path.join(os.homedir(), inputPath.slice(1));
221
+ }
222
+
223
+ return inputPath;
224
+ },
225
+ };
226
+
227
+ module.exports = { CLIUtils };
@@ -0,0 +1,213 @@
1
+ const fs = require('fs-extra');
2
+ const yaml = require('yaml');
3
+ const path = require('node:path');
4
+ const packageJson = require('../../../package.json');
5
+
6
+ /**
7
+ * Configuration utility class
8
+ */
9
+ class Config {
10
+ /**
11
+ * Load a YAML configuration file
12
+ * @param {string} configPath - Path to config file
13
+ * @returns {Object} Parsed configuration
14
+ */
15
+ async loadYaml(configPath) {
16
+ if (!(await fs.pathExists(configPath))) {
17
+ throw new Error(`Configuration file not found: ${configPath}`);
18
+ }
19
+
20
+ const content = await fs.readFile(configPath, 'utf8');
21
+ return yaml.parse(content);
22
+ }
23
+
24
+ /**
25
+ * Save configuration to YAML file
26
+ * @param {string} configPath - Path to config file
27
+ * @param {Object} config - Configuration object
28
+ */
29
+ async saveYaml(configPath, config) {
30
+ const yamlContent = yaml.dump(config, {
31
+ indent: 2,
32
+ lineWidth: 120,
33
+ noRefs: true,
34
+ });
35
+
36
+ await fs.ensureDir(path.dirname(configPath));
37
+ // Ensure POSIX-compliant final newline
38
+ const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
39
+ await fs.writeFile(configPath, content, 'utf8');
40
+ }
41
+
42
+ /**
43
+ * Process configuration file (replace placeholders)
44
+ * @param {string} configPath - Path to config file
45
+ * @param {Object} replacements - Replacement values
46
+ */
47
+ async processConfig(configPath, replacements = {}) {
48
+ let content = await fs.readFile(configPath, 'utf8');
49
+
50
+ // Standard replacements
51
+ const standardReplacements = {
52
+ '{project-root}': replacements.root || '',
53
+ '{module}': replacements.module || '',
54
+ '{version}': replacements.version || packageJson.version,
55
+ '{date}': new Date().toISOString().split('T')[0],
56
+ };
57
+
58
+ // Apply all replacements
59
+ const allReplacements = { ...standardReplacements, ...replacements };
60
+
61
+ for (const [placeholder, value] of Object.entries(allReplacements)) {
62
+ if (typeof placeholder === 'string' && typeof value === 'string') {
63
+ const regex = new RegExp(placeholder.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`), 'g');
64
+ content = content.replace(regex, value);
65
+ }
66
+ }
67
+
68
+ await fs.writeFile(configPath, content, 'utf8');
69
+ }
70
+
71
+ /**
72
+ * Merge configurations
73
+ * @param {Object} base - Base configuration
74
+ * @param {Object} override - Override configuration
75
+ * @returns {Object} Merged configuration
76
+ */
77
+ mergeConfigs(base, override) {
78
+ return this.deepMerge(base, override);
79
+ }
80
+
81
+ /**
82
+ * Deep merge two objects
83
+ * @param {Object} target - Target object
84
+ * @param {Object} source - Source object
85
+ * @returns {Object} Merged object
86
+ */
87
+ deepMerge(target, source) {
88
+ const output = { ...target };
89
+
90
+ if (this.isObject(target) && this.isObject(source)) {
91
+ for (const key of Object.keys(source)) {
92
+ if (this.isObject(source[key])) {
93
+ if (key in target) {
94
+ output[key] = this.deepMerge(target[key], source[key]);
95
+ } else {
96
+ output[key] = source[key];
97
+ }
98
+ } else {
99
+ output[key] = source[key];
100
+ }
101
+ }
102
+ }
103
+
104
+ return output;
105
+ }
106
+
107
+ /**
108
+ * Check if value is an object
109
+ * @param {*} item - Item to check
110
+ * @returns {boolean} True if object
111
+ */
112
+ isObject(item) {
113
+ return item && typeof item === 'object' && !Array.isArray(item);
114
+ }
115
+
116
+ /**
117
+ * Validate configuration against schema
118
+ * @param {Object} config - Configuration to validate
119
+ * @param {Object} schema - Validation schema
120
+ * @returns {Object} Validation result
121
+ */
122
+ validateConfig(config, schema) {
123
+ const errors = [];
124
+ const warnings = [];
125
+
126
+ // Check required fields
127
+ if (schema.required) {
128
+ for (const field of schema.required) {
129
+ if (!(field in config)) {
130
+ errors.push(`Missing required field: ${field}`);
131
+ }
132
+ }
133
+ }
134
+
135
+ // Check field types
136
+ if (schema.properties) {
137
+ for (const [field, spec] of Object.entries(schema.properties)) {
138
+ if (field in config) {
139
+ const value = config[field];
140
+ const expectedType = spec.type;
141
+
142
+ if (expectedType === 'array' && !Array.isArray(value)) {
143
+ errors.push(`Field '${field}' should be an array`);
144
+ } else if (expectedType === 'object' && !this.isObject(value)) {
145
+ errors.push(`Field '${field}' should be an object`);
146
+ } else if (expectedType === 'string' && typeof value !== 'string') {
147
+ errors.push(`Field '${field}' should be a string`);
148
+ } else if (expectedType === 'number' && typeof value !== 'number') {
149
+ errors.push(`Field '${field}' should be a number`);
150
+ } else if (expectedType === 'boolean' && typeof value !== 'boolean') {
151
+ errors.push(`Field '${field}' should be a boolean`);
152
+ }
153
+
154
+ // Check enum values
155
+ if (spec.enum && !spec.enum.includes(value)) {
156
+ errors.push(`Field '${field}' must be one of: ${spec.enum.join(', ')}`);
157
+ }
158
+ }
159
+ }
160
+ }
161
+
162
+ return {
163
+ valid: errors.length === 0,
164
+ errors,
165
+ warnings,
166
+ };
167
+ }
168
+
169
+ /**
170
+ * Get configuration value with fallback
171
+ * @param {Object} config - Configuration object
172
+ * @param {string} path - Dot-notation path to value
173
+ * @param {*} defaultValue - Default value if not found
174
+ * @returns {*} Configuration value
175
+ */
176
+ getValue(config, path, defaultValue = null) {
177
+ const keys = path.split('.');
178
+ let current = config;
179
+
180
+ for (const key of keys) {
181
+ if (current && typeof current === 'object' && key in current) {
182
+ current = current[key];
183
+ } else {
184
+ return defaultValue;
185
+ }
186
+ }
187
+
188
+ return current;
189
+ }
190
+
191
+ /**
192
+ * Set configuration value
193
+ * @param {Object} config - Configuration object
194
+ * @param {string} path - Dot-notation path to value
195
+ * @param {*} value - Value to set
196
+ */
197
+ setValue(config, path, value) {
198
+ const keys = path.split('.');
199
+ const lastKey = keys.pop();
200
+ let current = config;
201
+
202
+ for (const key of keys) {
203
+ if (!(key in current) || typeof current[key] !== 'object') {
204
+ current[key] = {};
205
+ }
206
+ current = current[key];
207
+ }
208
+
209
+ current[lastKey] = value;
210
+ }
211
+ }
212
+
213
+ module.exports = { Config };
@@ -0,0 +1,227 @@
1
+ import * as fs from 'fs-extra';
2
+ import * as yaml from 'yaml';
3
+ import * as path from 'node:path';
4
+ import type {
5
+ ConfigReplacements,
6
+ ValidationSchema,
7
+ ValidationResult,
8
+ ConfigObject,
9
+ PropertySpec,
10
+ } from './types/config.types';
11
+
12
+ const packageJson = require('../../../package.json');
13
+
14
+ /**
15
+ * Configuration utility class
16
+ */
17
+ export class Config {
18
+ /**
19
+ * Load a YAML configuration file
20
+ * @param configPath - Path to config file
21
+ * @returns Parsed configuration
22
+ */
23
+ async loadYaml(configPath: string): Promise<ConfigObject> {
24
+ if (!(await fs.pathExists(configPath))) {
25
+ throw new Error(`Configuration file not found: ${configPath}`);
26
+ }
27
+
28
+ const content = await fs.readFile(configPath, 'utf8');
29
+ return yaml.parse(content) as ConfigObject;
30
+ }
31
+
32
+ /**
33
+ * Save configuration to YAML file
34
+ * @param configPath - Path to config file
35
+ * @param config - Configuration object
36
+ */
37
+ async saveYaml(configPath: string, config: ConfigObject): Promise<void> {
38
+ const yamlContent = yaml.dump(config, {
39
+ indent: 2,
40
+ lineWidth: 120,
41
+ noRefs: true,
42
+ });
43
+
44
+ await fs.ensureDir(path.dirname(configPath));
45
+ // Ensure POSIX-compliant final newline
46
+ const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
47
+ await fs.writeFile(configPath, content, 'utf8');
48
+ }
49
+
50
+ /**
51
+ * Process configuration file (replace placeholders)
52
+ * @param configPath - Path to config file
53
+ * @param replacements - Replacement values
54
+ */
55
+ async processConfig(configPath: string, replacements: ConfigReplacements = {}): Promise<void> {
56
+ let content = await fs.readFile(configPath, 'utf8');
57
+
58
+ // Standard replacements
59
+ const standardReplacements: ConfigReplacements = {
60
+ '{project-root}': replacements.root || '',
61
+ '{module}': replacements.module || '',
62
+ '{version}': replacements.version || packageJson.version,
63
+ '{date}': new Date().toISOString().split('T')[0],
64
+ };
65
+
66
+ // Apply all replacements
67
+ const allReplacements = { ...standardReplacements, ...replacements };
68
+
69
+ for (const [placeholder, value] of Object.entries(allReplacements)) {
70
+ if (typeof placeholder === 'string' && typeof value === 'string') {
71
+ const regex = new RegExp(placeholder.replace(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`), 'g');
72
+ content = content.replace(regex, value);
73
+ }
74
+ }
75
+
76
+ await fs.writeFile(configPath, content, 'utf8');
77
+ }
78
+
79
+ /**
80
+ * Merge configurations
81
+ * @param base - Base configuration
82
+ * @param override - Override configuration
83
+ * @returns Merged configuration
84
+ */
85
+ mergeConfigs(base: ConfigObject, override: ConfigObject): ConfigObject {
86
+ return this.deepMerge(base, override);
87
+ }
88
+
89
+ /**
90
+ * Deep merge two objects
91
+ * @param target - Target object
92
+ * @param source - Source object
93
+ * @returns Merged object
94
+ */
95
+ deepMerge(target: ConfigObject, source: ConfigObject): ConfigObject {
96
+ const output = { ...target };
97
+
98
+ if (this.isObject(target) && this.isObject(source)) {
99
+ for (const key of Object.keys(source)) {
100
+ if (this.isObject(source[key])) {
101
+ if (key in target) {
102
+ output[key] = this.deepMerge(
103
+ target[key] as ConfigObject,
104
+ source[key] as ConfigObject
105
+ );
106
+ } else {
107
+ output[key] = source[key];
108
+ }
109
+ } else {
110
+ output[key] = source[key];
111
+ }
112
+ }
113
+ }
114
+
115
+ return output;
116
+ }
117
+
118
+ /**
119
+ * Check if value is an object
120
+ * @param item - Item to check
121
+ * @returns True if object
122
+ */
123
+ isObject(item: unknown): item is ConfigObject {
124
+ return item !== null && typeof item === 'object' && !Array.isArray(item);
125
+ }
126
+
127
+ /**
128
+ * Validate configuration against schema
129
+ * @param config - Configuration to validate
130
+ * @param schema - Validation schema
131
+ * @returns Validation result
132
+ */
133
+ validateConfig(config: ConfigObject, schema: ValidationSchema): ValidationResult {
134
+ const errors: string[] = [];
135
+ const warnings: string[] = [];
136
+
137
+ // Check required fields
138
+ if (schema.required) {
139
+ for (const field of schema.required) {
140
+ if (!(field in config)) {
141
+ errors.push(`Missing required field: ${field}`);
142
+ }
143
+ }
144
+ }
145
+
146
+ // Check field types
147
+ if (schema.properties) {
148
+ for (const [field, spec] of Object.entries(schema.properties)) {
149
+ if (field in config) {
150
+ const value = config[field];
151
+ const expectedType = spec.type;
152
+
153
+ if (expectedType === 'array' && !Array.isArray(value)) {
154
+ errors.push(`Field '${field}' should be an array`);
155
+ } else if (expectedType === 'object' && !this.isObject(value)) {
156
+ errors.push(`Field '${field}' should be an object`);
157
+ } else if (expectedType === 'string' && typeof value !== 'string') {
158
+ errors.push(`Field '${field}' should be a string`);
159
+ } else if (expectedType === 'number' && typeof value !== 'number') {
160
+ errors.push(`Field '${field}' should be a number`);
161
+ } else if (expectedType === 'boolean' && typeof value !== 'boolean') {
162
+ errors.push(`Field '${field}' should be a boolean`);
163
+ }
164
+
165
+ // Check enum values
166
+ if (spec.enum && !spec.enum.includes(value)) {
167
+ errors.push(`Field '${field}' must be one of: ${spec.enum.join(', ')}`);
168
+ }
169
+ }
170
+ }
171
+ }
172
+
173
+ return {
174
+ valid: errors.length === 0,
175
+ errors,
176
+ warnings,
177
+ };
178
+ }
179
+
180
+ /**
181
+ * Get configuration value with fallback
182
+ * @param config - Configuration object
183
+ * @param path - Dot-notation path to value
184
+ * @param defaultValue - Default value if not found
185
+ * @returns Configuration value
186
+ */
187
+ getValue<T = unknown>(config: ConfigObject, path: string, defaultValue: T | null = null): T | null {
188
+ const keys = path.split('.');
189
+ let current: unknown = config;
190
+
191
+ for (const key of keys) {
192
+ if (current && typeof current === 'object' && key in current) {
193
+ current = (current as Record<string, unknown>)[key];
194
+ } else {
195
+ return defaultValue;
196
+ }
197
+ }
198
+
199
+ return current as T;
200
+ }
201
+
202
+ /**
203
+ * Set configuration value
204
+ * @param config - Configuration object
205
+ * @param path - Dot-notation path to value
206
+ * @param value - Value to set
207
+ */
208
+ setValue(config: ConfigObject, path: string, value: unknown): void {
209
+ const keys = path.split('.');
210
+ const lastKey = keys.pop();
211
+ if (!lastKey) return;
212
+
213
+ let current: Record<string, unknown> = config;
214
+
215
+ for (const key of keys) {
216
+ if (!(key in current) || typeof current[key] !== 'object') {
217
+ current[key] = {};
218
+ }
219
+ current = current[key] as Record<string, unknown>;
220
+ }
221
+
222
+ current[lastKey] = value;
223
+ }
224
+ }
225
+
226
+ // Export for backward compatibility
227
+ module.exports = { Config };