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,326 @@
1
+ const path = require('node:path');
2
+ const { BaseIdeSetup } = require('./_base-ide');
3
+ const chalk = require('chalk');
4
+ const fs = require('fs-extra');
5
+ const yaml = require('yaml');
6
+
7
+ /**
8
+ * Kiro CLI setup handler for BMad Method
9
+ */
10
+ class KiroCliSetup extends BaseIdeSetup {
11
+ constructor() {
12
+ super('kiro-cli', 'Kiro CLI', false);
13
+ this.configDir = '.kiro';
14
+ this.agentsDir = 'agents';
15
+ }
16
+
17
+ /**
18
+ * Cleanup old BMAD installation before reinstalling
19
+ * @param {string} projectDir - Project directory
20
+ */
21
+ async cleanup(projectDir) {
22
+ const bmadAgentsDir = path.join(projectDir, this.configDir, this.agentsDir);
23
+
24
+ if (await fs.pathExists(bmadAgentsDir)) {
25
+ // Remove existing BMad agents
26
+ const files = await fs.readdir(bmadAgentsDir);
27
+ for (const file of files) {
28
+ if (file.startsWith('bmad')) {
29
+ await fs.remove(path.join(bmadAgentsDir, file));
30
+ }
31
+ }
32
+ console.log(chalk.dim(` Cleaned old BMAD agents from ${this.name}`));
33
+ }
34
+ }
35
+
36
+ /**
37
+ * Setup Kiro CLI configuration with BMad agents
38
+ * @param {string} projectDir - Project directory
39
+ * @param {string} bmadDir - BMAD installation directory
40
+ * @param {Object} options - Setup options
41
+ */
42
+ async setup(projectDir, bmadDir, options = {}) {
43
+ console.log(chalk.cyan(`Setting up ${this.name}...`));
44
+
45
+ await this.cleanup(projectDir);
46
+
47
+ const kiroDir = path.join(projectDir, this.configDir);
48
+ const agentsDir = path.join(kiroDir, this.agentsDir);
49
+
50
+ await this.ensureDir(agentsDir);
51
+
52
+ // Create BMad agents from source YAML files
53
+ await this.createBmadAgentsFromSource(agentsDir, projectDir);
54
+
55
+ console.log(chalk.green(`✓ ${this.name} configured with BMad agents`));
56
+ }
57
+
58
+ /**
59
+ * Create BMad agent definitions from source YAML files
60
+ * @param {string} agentsDir - Agents directory
61
+ * @param {string} projectDir - Project directory
62
+ */
63
+ async createBmadAgentsFromSource(agentsDir, projectDir) {
64
+ const sourceDir = path.join(__dirname, '../../../../../src/modules');
65
+
66
+ // Find all agent YAML files
67
+ const agentFiles = await this.findAgentFiles(sourceDir);
68
+
69
+ for (const agentFile of agentFiles) {
70
+ try {
71
+ await this.processAgentFile(agentFile, agentsDir, projectDir);
72
+ } catch (error) {
73
+ console.warn(chalk.yellow(`⚠️ Failed to process ${agentFile}: ${error.message}`));
74
+ }
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Find all agent YAML files in modules and core
80
+ * @param {string} sourceDir - Source modules directory
81
+ * @returns {Array} Array of agent file paths
82
+ */
83
+ async findAgentFiles(sourceDir) {
84
+ const agentFiles = [];
85
+
86
+ // Check core agents
87
+ const coreAgentsDir = path.join(__dirname, '../../../../../src/core/agents');
88
+ if (await fs.pathExists(coreAgentsDir)) {
89
+ const files = await fs.readdir(coreAgentsDir);
90
+
91
+ for (const file of files) {
92
+ if (file.endsWith('.agent.yaml')) {
93
+ agentFiles.push(path.join(coreAgentsDir, file));
94
+ }
95
+ }
96
+ }
97
+
98
+ // Check module agents
99
+ if (!(await fs.pathExists(sourceDir))) {
100
+ return agentFiles;
101
+ }
102
+
103
+ const modules = await fs.readdir(sourceDir);
104
+
105
+ for (const module of modules) {
106
+ const moduleAgentsDir = path.join(sourceDir, module, 'agents');
107
+
108
+ if (await fs.pathExists(moduleAgentsDir)) {
109
+ const files = await fs.readdir(moduleAgentsDir);
110
+
111
+ for (const file of files) {
112
+ if (file.endsWith('.agent.yaml')) {
113
+ agentFiles.push(path.join(moduleAgentsDir, file));
114
+ }
115
+ }
116
+ }
117
+ }
118
+
119
+ return agentFiles;
120
+ }
121
+
122
+ /**
123
+ * Validate BMad Core compliance
124
+ * @param {Object} agentData - Agent YAML data
125
+ * @returns {boolean} True if compliant
126
+ */
127
+ validateBmadCompliance(agentData) {
128
+ const requiredFields = ['agent.metadata.id', 'agent.persona.role', 'agent.persona.principles'];
129
+
130
+ for (const field of requiredFields) {
131
+ const keys = field.split('.');
132
+ let current = agentData;
133
+
134
+ for (const key of keys) {
135
+ if (!current || !current[key]) {
136
+ return false;
137
+ }
138
+ current = current[key];
139
+ }
140
+ }
141
+
142
+ return true;
143
+ }
144
+
145
+ /**
146
+ * Process individual agent YAML file
147
+ * @param {string} agentFile - Path to agent YAML file
148
+ * @param {string} agentsDir - Target agents directory
149
+ * @param {string} projectDir - Project directory
150
+ */
151
+ async processAgentFile(agentFile, agentsDir, projectDir) {
152
+ const yamlContent = await fs.readFile(agentFile, 'utf8');
153
+ const agentData = yaml.parse(yamlContent);
154
+
155
+ if (!this.validateBmadCompliance(agentData)) {
156
+ return;
157
+ }
158
+
159
+ // Extract module from file path
160
+ const normalizedPath = path.normalize(agentFile);
161
+ const pathParts = normalizedPath.split(path.sep);
162
+ const basename = path.basename(agentFile, '.agent.yaml');
163
+
164
+ // Find the module name from path
165
+ let moduleName = 'unknown';
166
+ if (pathParts.includes('src')) {
167
+ const srcIndex = pathParts.indexOf('src');
168
+ if (srcIndex + 3 < pathParts.length) {
169
+ const folderAfterSrc = pathParts[srcIndex + 1];
170
+ if (folderAfterSrc === 'core') {
171
+ moduleName = 'core';
172
+ } else if (folderAfterSrc === 'bmm') {
173
+ moduleName = 'bmm';
174
+ }
175
+ }
176
+ }
177
+
178
+ // Extract the agent name from the ID path in YAML if available
179
+ let agentBaseName = basename;
180
+ if (agentData.agent && agentData.agent.metadata && agentData.agent.metadata.id) {
181
+ const idPath = agentData.agent.metadata.id;
182
+ agentBaseName = path.basename(idPath, '.md');
183
+ }
184
+
185
+ const agentName = `bmad-${moduleName}-${agentBaseName}`;
186
+ const sanitizedAgentName = this.sanitizeAgentName(agentName);
187
+
188
+ // Create JSON definition
189
+ await this.createAgentDefinitionFromYaml(agentsDir, sanitizedAgentName, agentData);
190
+
191
+ // Create prompt file
192
+ await this.createAgentPromptFromYaml(agentsDir, sanitizedAgentName, agentData, projectDir);
193
+ }
194
+
195
+ /**
196
+ * Sanitize agent name for file naming
197
+ * @param {string} name - Agent name
198
+ * @returns {string} Sanitized name
199
+ */
200
+ sanitizeAgentName(name) {
201
+ return name
202
+ .toLowerCase()
203
+ .replaceAll(/\s+/g, '-')
204
+ .replaceAll(/[^a-z0-9-]/g, '');
205
+ }
206
+
207
+ /**
208
+ * Create agent JSON definition from YAML data
209
+ * @param {string} agentsDir - Agents directory
210
+ * @param {string} agentName - Agent name (role-based)
211
+ * @param {Object} agentData - Agent YAML data
212
+ */
213
+ async createAgentDefinitionFromYaml(agentsDir, agentName, agentData) {
214
+ const personName = agentData.agent.metadata.name;
215
+ const role = agentData.agent.persona.role;
216
+
217
+ const agentConfig = {
218
+ name: agentName,
219
+ description: `${personName} - ${role}`,
220
+ prompt: `file://./${agentName}-prompt.md`,
221
+ tools: ['*'],
222
+ mcpServers: {},
223
+ useLegacyMcpJson: true,
224
+ resources: [],
225
+ };
226
+
227
+ const agentPath = path.join(agentsDir, `${agentName}.json`);
228
+ await fs.writeJson(agentPath, agentConfig, { spaces: 2 });
229
+ }
230
+
231
+ /**
232
+ * Create agent prompt from YAML data
233
+ * @param {string} agentsDir - Agents directory
234
+ * @param {string} agentName - Agent name (role-based)
235
+ * @param {Object} agentData - Agent YAML data
236
+ * @param {string} projectDir - Project directory
237
+ */
238
+ async createAgentPromptFromYaml(agentsDir, agentName, agentData, projectDir) {
239
+ const promptPath = path.join(agentsDir, `${agentName}-prompt.md`);
240
+
241
+ // Generate prompt from YAML data
242
+ const prompt = this.generatePromptFromYaml(agentData);
243
+ await fs.writeFile(promptPath, prompt);
244
+ }
245
+
246
+ /**
247
+ * Generate prompt content from YAML data
248
+ * @param {Object} agentData - Agent YAML data
249
+ * @returns {string} Generated prompt
250
+ */
251
+ generatePromptFromYaml(agentData) {
252
+ const agent = agentData.agent;
253
+ const name = agent.metadata.name;
254
+ const icon = agent.metadata.icon || '🤖';
255
+ const role = agent.persona.role;
256
+ const identity = agent.persona.identity;
257
+ const style = agent.persona.communication_style;
258
+ const principles = agent.persona.principles;
259
+
260
+ let prompt = `# ${name} ${icon}\n\n`;
261
+ prompt += `## Role\n${role}\n\n`;
262
+
263
+ if (identity) {
264
+ prompt += `## Identity\n${identity}\n\n`;
265
+ }
266
+
267
+ if (style) {
268
+ prompt += `## Communication Style\n${style}\n\n`;
269
+ }
270
+
271
+ if (principles) {
272
+ prompt += `## Principles\n`;
273
+ if (typeof principles === 'string') {
274
+ // Handle multi-line string principles
275
+ prompt += principles + '\n\n';
276
+ } else if (Array.isArray(principles)) {
277
+ // Handle array principles
278
+ for (const principle of principles) {
279
+ prompt += `- ${principle}\n`;
280
+ }
281
+ prompt += '\n';
282
+ }
283
+ }
284
+
285
+ // Add menu items if available
286
+ if (agent.menu && agent.menu.length > 0) {
287
+ prompt += `## Available Workflows\n`;
288
+ for (let i = 0; i < agent.menu.length; i++) {
289
+ const item = agent.menu[i];
290
+ prompt += `${i + 1}. **${item.trigger}**: ${item.description}\n`;
291
+ }
292
+ prompt += '\n';
293
+ }
294
+
295
+ prompt += `## Instructions\nYou are ${name}, part of the BMad Method. Follow your role and principles while assisting users with their development needs.\n`;
296
+
297
+ return prompt;
298
+ }
299
+
300
+ /**
301
+ * Check if Kiro CLI is available
302
+ * @returns {Promise<boolean>} True if available
303
+ */
304
+ async isAvailable() {
305
+ try {
306
+ const { execSync } = require('node:child_process');
307
+ execSync('kiro-cli --version', { stdio: 'ignore' });
308
+ return true;
309
+ } catch {
310
+ return false;
311
+ }
312
+ }
313
+
314
+ /**
315
+ * Get installation instructions
316
+ * @returns {string} Installation instructions
317
+ */
318
+ getInstallInstructions() {
319
+ return `Install Kiro CLI:
320
+ curl -fsSL https://github.com/aws/kiro-cli/releases/latest/download/install.sh | bash
321
+
322
+ Or visit: https://github.com/aws/kiro-cli`;
323
+ }
324
+ }
325
+
326
+ module.exports = { KiroCliSetup };
@@ -0,0 +1,271 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('node:path');
3
+ const chalk = require('chalk');
4
+
5
+ /**
6
+ * IDE Manager - handles IDE-specific setup
7
+ * Dynamically discovers and loads IDE handlers
8
+ *
9
+ * Loading strategy:
10
+ * 1. Custom installer files (codex.js, kilo.js, kiro-cli.js) - for platforms with unique installation logic
11
+ * 2. Config-driven handlers (from platform-codes.yaml) - for standard IDE installation patterns
12
+ */
13
+ class IdeManager {
14
+ constructor() {
15
+ this.handlers = new Map();
16
+ this._initialized = false;
17
+ this.bmadFolderName = 'bmad'; // Default, can be overridden
18
+ }
19
+
20
+ /**
21
+ * Set the bmad folder name for all IDE handlers
22
+ * @param {string} bmadFolderName - The bmad folder name
23
+ */
24
+ setBmadFolderName(bmadFolderName) {
25
+ this.bmadFolderName = bmadFolderName;
26
+ // Update all loaded handlers
27
+ for (const handler of this.handlers.values()) {
28
+ if (typeof handler.setBmadFolderName === 'function') {
29
+ handler.setBmadFolderName(bmadFolderName);
30
+ }
31
+ }
32
+ }
33
+
34
+ /**
35
+ * Ensure handlers are loaded (lazy loading)
36
+ */
37
+ async ensureInitialized() {
38
+ if (!this._initialized) {
39
+ await this.loadHandlers();
40
+ this._initialized = true;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Dynamically load all IDE handlers
46
+ * 1. Load custom installer files first (codex.js, kilo.js, kiro-cli.js)
47
+ * 2. Load config-driven handlers from platform-codes.yaml
48
+ */
49
+ async loadHandlers() {
50
+ // Load custom installer files
51
+ this.loadCustomInstallerFiles();
52
+
53
+ // Load config-driven handlers from platform-codes.yaml
54
+ await this.loadConfigDrivenHandlers();
55
+ }
56
+
57
+ /**
58
+ * Load custom installer files (unique installation logic)
59
+ * These files have special installation patterns that don't fit the config-driven model
60
+ */
61
+ loadCustomInstallerFiles() {
62
+ const ideDir = __dirname;
63
+ const customFiles = ['codex.js', 'kilo.js', 'kiro-cli.js'];
64
+
65
+ for (const file of customFiles) {
66
+ const filePath = path.join(ideDir, file);
67
+ if (!fs.existsSync(filePath)) continue;
68
+
69
+ try {
70
+ const HandlerModule = require(filePath);
71
+ const HandlerClass = HandlerModule.default || Object.values(HandlerModule)[0];
72
+
73
+ if (HandlerClass) {
74
+ const instance = new HandlerClass();
75
+ if (instance.name && typeof instance.name === 'string') {
76
+ this.handlers.set(instance.name, instance);
77
+ }
78
+ }
79
+ } catch (error) {
80
+ console.log(chalk.yellow(` Warning: Could not load ${file}: ${error.message}`));
81
+ }
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Load config-driven handlers from platform-codes.yaml
87
+ * This creates ConfigDrivenIdeSetup instances for platforms with installer config
88
+ */
89
+ async loadConfigDrivenHandlers() {
90
+ const { loadPlatformCodes } = require('./platform-codes');
91
+ const platformConfig = await loadPlatformCodes();
92
+
93
+ const { ConfigDrivenIdeSetup } = require('./_config-driven');
94
+
95
+ for (const [platformCode, platformInfo] of Object.entries(platformConfig.platforms)) {
96
+ // Skip if already loaded by custom installer
97
+ if (this.handlers.has(platformCode)) continue;
98
+
99
+ // Skip if no installer config (platform may not need installation)
100
+ if (!platformInfo.installer) continue;
101
+
102
+ const handler = new ConfigDrivenIdeSetup(platformCode, platformInfo);
103
+ handler.setBmadFolderName(this.bmadFolderName);
104
+ this.handlers.set(platformCode, handler);
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Get all available IDEs with their metadata
110
+ * @returns {Array} Array of IDE information objects
111
+ */
112
+ getAvailableIdes() {
113
+ const ides = [];
114
+
115
+ for (const [key, handler] of this.handlers) {
116
+ // Skip handlers without valid names
117
+ const name = handler.displayName || handler.name || key;
118
+
119
+ // Filter out invalid entries (undefined name, empty key, etc.)
120
+ if (!key || !name || typeof key !== 'string' || typeof name !== 'string') {
121
+ continue;
122
+ }
123
+
124
+ ides.push({
125
+ value: key,
126
+ name: name,
127
+ preferred: handler.preferred || false,
128
+ });
129
+ }
130
+
131
+ // Sort: preferred first, then alphabetical
132
+ ides.sort((a, b) => {
133
+ if (a.preferred && !b.preferred) return -1;
134
+ if (!a.preferred && b.preferred) return 1;
135
+ return a.name.localeCompare(b.name);
136
+ });
137
+
138
+ return ides;
139
+ }
140
+
141
+ /**
142
+ * Get preferred IDEs
143
+ * @returns {Array} Array of preferred IDE information
144
+ */
145
+ getPreferredIdes() {
146
+ return this.getAvailableIdes().filter((ide) => ide.preferred);
147
+ }
148
+
149
+ /**
150
+ * Get non-preferred IDEs
151
+ * @returns {Array} Array of non-preferred IDE information
152
+ */
153
+ getOtherIdes() {
154
+ return this.getAvailableIdes().filter((ide) => !ide.preferred);
155
+ }
156
+
157
+ /**
158
+ * Setup IDE configuration
159
+ * @param {string} ideName - Name of the IDE
160
+ * @param {string} projectDir - Project directory
161
+ * @param {string} bmadDir - BMAD installation directory
162
+ * @param {Object} options - Setup options
163
+ */
164
+ async setup(ideName, projectDir, bmadDir, options = {}) {
165
+ const handler = this.handlers.get(ideName.toLowerCase());
166
+
167
+ if (!handler) {
168
+ console.warn(chalk.yellow(`⚠️ IDE '${ideName}' is not yet supported`));
169
+ console.log(chalk.dim('Supported IDEs:', [...this.handlers.keys()].join(', ')));
170
+ return { success: false, reason: 'unsupported' };
171
+ }
172
+
173
+ try {
174
+ await handler.setup(projectDir, bmadDir, options);
175
+ return { success: true, ide: ideName };
176
+ } catch (error) {
177
+ console.error(chalk.red(`Failed to setup ${ideName}:`), error.message);
178
+ return { success: false, error: error.message };
179
+ }
180
+ }
181
+
182
+ /**
183
+ * Cleanup IDE configurations
184
+ * @param {string} projectDir - Project directory
185
+ */
186
+ async cleanup(projectDir) {
187
+ const results = [];
188
+
189
+ for (const [name, handler] of this.handlers) {
190
+ try {
191
+ await handler.cleanup(projectDir);
192
+ results.push({ ide: name, success: true });
193
+ } catch (error) {
194
+ results.push({ ide: name, success: false, error: error.message });
195
+ }
196
+ }
197
+
198
+ return results;
199
+ }
200
+
201
+ /**
202
+ * Get list of supported IDEs
203
+ * @returns {Array} List of supported IDE names
204
+ */
205
+ getSupportedIdes() {
206
+ return [...this.handlers.keys()];
207
+ }
208
+
209
+ /**
210
+ * Check if an IDE is supported
211
+ * @param {string} ideName - Name of the IDE
212
+ * @returns {boolean} True if IDE is supported
213
+ */
214
+ isSupported(ideName) {
215
+ return this.handlers.has(ideName.toLowerCase());
216
+ }
217
+
218
+ /**
219
+ * Detect installed IDEs
220
+ * @param {string} projectDir - Project directory
221
+ * @returns {Array} List of detected IDEs
222
+ */
223
+ async detectInstalledIdes(projectDir) {
224
+ const detected = [];
225
+
226
+ for (const [name, handler] of this.handlers) {
227
+ if (typeof handler.detect === 'function' && (await handler.detect(projectDir))) {
228
+ detected.push(name);
229
+ }
230
+ }
231
+
232
+ return detected;
233
+ }
234
+
235
+ /**
236
+ * Install custom agent launchers for specified IDEs
237
+ * @param {Array} ides - List of IDE names to install for
238
+ * @param {string} projectDir - Project directory
239
+ * @param {string} agentName - Agent name (e.g., "fred-commit-poet")
240
+ * @param {string} agentPath - Path to compiled agent (relative to project root)
241
+ * @param {Object} metadata - Agent metadata
242
+ * @returns {Object} Results for each IDE
243
+ */
244
+ async installCustomAgentLaunchers(ides, projectDir, agentName, agentPath, metadata) {
245
+ const results = {};
246
+
247
+ for (const ideName of ides) {
248
+ const handler = this.handlers.get(ideName.toLowerCase());
249
+
250
+ if (!handler) {
251
+ console.warn(chalk.yellow(`⚠️ IDE '${ideName}' is not yet supported for custom agent installation`));
252
+ continue;
253
+ }
254
+
255
+ try {
256
+ if (typeof handler.installCustomAgentLauncher === 'function') {
257
+ const result = await handler.installCustomAgentLauncher(projectDir, agentName, agentPath, metadata);
258
+ if (result) {
259
+ results[ideName] = result;
260
+ }
261
+ }
262
+ } catch (error) {
263
+ console.warn(chalk.yellow(`⚠️ Failed to install ${ideName} launcher: ${error.message}`));
264
+ }
265
+ }
266
+
267
+ return results;
268
+ }
269
+ }
270
+
271
+ module.exports = { IdeManager };
@@ -0,0 +1,100 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('node:path');
3
+ const yaml = require('yaml');
4
+
5
+ const PLATFORM_CODES_PATH = path.join(__dirname, 'platform-codes.yaml');
6
+
7
+ let _cachedPlatformCodes = null;
8
+
9
+ /**
10
+ * Load the platform codes configuration from YAML
11
+ * @returns {Object} Platform codes configuration
12
+ */
13
+ async function loadPlatformCodes() {
14
+ if (_cachedPlatformCodes) {
15
+ return _cachedPlatformCodes;
16
+ }
17
+
18
+ if (!(await fs.pathExists(PLATFORM_CODES_PATH))) {
19
+ throw new Error(`Platform codes configuration not found at: ${PLATFORM_CODES_PATH}`);
20
+ }
21
+
22
+ const content = await fs.readFile(PLATFORM_CODES_PATH, 'utf8');
23
+ _cachedPlatformCodes = yaml.parse(content);
24
+ return _cachedPlatformCodes;
25
+ }
26
+
27
+ /**
28
+ * Get platform information by code
29
+ * @param {string} platformCode - Platform code (e.g., 'claude-code', 'cursor')
30
+ * @returns {Object|null} Platform info or null if not found
31
+ */
32
+ function getPlatformInfo(platformCode) {
33
+ if (!_cachedPlatformCodes) {
34
+ throw new Error('Platform codes not loaded. Call loadPlatformCodes() first.');
35
+ }
36
+
37
+ return _cachedPlatformCodes.platforms[platformCode] || null;
38
+ }
39
+
40
+ /**
41
+ * Get all preferred platforms
42
+ * @returns {Promise<Array>} Array of preferred platform codes
43
+ */
44
+ async function getPreferredPlatforms() {
45
+ const config = await loadPlatformCodes();
46
+ return Object.entries(config.platforms)
47
+ .filter(([_, info]) => info.preferred)
48
+ .map(([code, _]) => code);
49
+ }
50
+
51
+ /**
52
+ * Get all platform codes by category
53
+ * @param {string} category - Category to filter by (ide, cli, tool, etc.)
54
+ * @returns {Promise<Array>} Array of platform codes in the category
55
+ */
56
+ async function getPlatformsByCategory(category) {
57
+ const config = await loadPlatformCodes();
58
+ return Object.entries(config.platforms)
59
+ .filter(([_, info]) => info.category === category)
60
+ .map(([code, _]) => code);
61
+ }
62
+
63
+ /**
64
+ * Get all platforms with installer config
65
+ * @returns {Promise<Array>} Array of platform codes that have installer config
66
+ */
67
+ async function getConfigDrivenPlatforms() {
68
+ const config = await loadPlatformCodes();
69
+ return Object.entries(config.platforms)
70
+ .filter(([_, info]) => info.installer)
71
+ .map(([code, _]) => code);
72
+ }
73
+
74
+ /**
75
+ * Get platforms that use custom installers (no installer config)
76
+ * @returns {Promise<Array>} Array of platform codes with custom installers
77
+ */
78
+ async function getCustomInstallerPlatforms() {
79
+ const config = await loadPlatformCodes();
80
+ return Object.entries(config.platforms)
81
+ .filter(([_, info]) => !info.installer)
82
+ .map(([code, _]) => code);
83
+ }
84
+
85
+ /**
86
+ * Clear the cached platform codes (useful for testing)
87
+ */
88
+ function clearCache() {
89
+ _cachedPlatformCodes = null;
90
+ }
91
+
92
+ module.exports = {
93
+ loadPlatformCodes,
94
+ getPlatformInfo,
95
+ getPreferredPlatforms,
96
+ getPlatformsByCategory,
97
+ getConfigDrivenPlatforms,
98
+ getCustomInstallerPlatforms,
99
+ clearCache,
100
+ };